public class MessageIterator extends Object implements Iterator<Structure>
next()
for details on
how this is handled.
This implementation assumes that the first segment in each group is present (as per
HL7 rules). Specifically, when looking for a segment location, an empty group that has
a spot for the segment will be overlooked if there is anything else before that spot.
This may result in surprising (but sensible) behaviour if a message is missing the
first segment in a group.Modifier and Type | Class and Description |
---|---|
static class |
MessageIterator.Index
An index of a child structure within a group, consisting of the name and rep of
of the child.
|
static class |
MessageIterator.Position
A structure position within a message.
|
Constructor and Description |
---|
MessageIterator(Structure start,
String direction,
boolean handleUnexpectedSegments)
Creates a new instance of MessageIterator
|
Modifier and Type | Method and Description |
---|---|
static boolean |
contains(Structure s,
String name,
boolean firstDescendentsOnly,
boolean upToFirstRequired)
Determines whether the given structure matches the given name, or contains
a child that does.
|
String |
getDirection() |
static MessageIterator.Index |
getIndex(Group parent,
Structure child)
Returns the index of the given structure as a child of the
given parent.
|
boolean |
hasNext()
Returns true if another object exists in the iteration sequence.
|
static boolean |
isLast(MessageIterator.Position p)
Tests whether the name of the given Index matches
the name of the last child of the given group.
|
static boolean |
matchExistsAfterPosition(MessageIterator.Position pos,
String name,
boolean firstDescendentsOnly,
boolean upToFirstRequired)
A match exists for the given name somewhere after the given position (in the
normal serialization order).
|
Structure |
next()
Returns the next node in the message.
|
void |
remove()
Not supported
|
void |
setDirection(String direction) |
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
forEachRemaining
public MessageIterator(Structure start, String direction, boolean handleUnexpectedSegments)
public boolean hasNext()
public static boolean matchExistsAfterPosition(MessageIterator.Position pos, String name, boolean firstDescendentsOnly, boolean upToFirstRequired) throws HL7Exception
pos
- the message position after which to look (note that this specifies
the message instance)name
- the name of the structure to look forfirstDescendentsOnly
- only searches the first children of a groupupToFirstRequired
- only searches the children of a group up to the first
required child (normally the first one). This is used when we are parsing
a message in order and looking for a place to parse a particular segment --
if the message is correct then it can't go after a required position of a
different name.HL7Exception
public static boolean contains(Structure s, String name, boolean firstDescendentsOnly, boolean upToFirstRequired)
s
- the structure to checkname
- the name to look forfirstDescendentsOnly
- only checks first descendents (i.e. first
child, first child of first child, etc.) In theory the first child
of a group should always be present, and we don't use this method with
subsequent children because finding the next position within a group is
straightforward.upToFirstRequired
- only checks first descendents and of their siblings
up to the first required one. This may be needed because in practice
some first children of groups are not required.public static boolean isLast(MessageIterator.Position p)
public Structure next()
Returns the next node in the message. Sometimes the next node is ambiguous. For example at the end of a repeating group, the next node may be the first segment in the next repetition of the group, or the next sibling, or an undeclared segment locally added to the group's end. Cases like this are disambiguated using getDirection(), which returns the name of the structure that we are "iterating towards". Usually we are "iterating towards" a segment of a certain name because we have a segment string that we would like to parse into that node. Here are the rules:
public String getDirection()
public void setDirection(String direction)
public static MessageIterator.Index getIndex(Group parent, Structure child)
Copyright © 2001–2017 University Health Network. All rights reserved.