|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |
java.lang.Objectca.uhn.hl7v2.util.MessageIterator
public class MessageIterator
Iterates over all defined nodes (ie segments, groups) in a message,
regardless of whether they have been instantiated previously. This is a
tricky process, because the number of nodes is infinite, due to infinitely
repeating segments and groups. See 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.
Nested Class Summary | |
---|---|
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 Summary | |
---|---|
MessageIterator(Structure start,
java.lang.String direction,
boolean handleUnexpectedSegments)
Creates a new instance of MessageIterator |
Method Summary | |
---|---|
static boolean |
contains(Structure s,
java.lang.String name,
boolean firstDescendentsOnly,
boolean upToFirstRequired)
Determines whether the given structure matches the given name, or contains a child that does. |
java.lang.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,
java.lang.String name,
boolean firstDescendentsOnly,
boolean upToFirstRequired)
A match exists for the given name somewhere after the given position (in the normal serialization order). |
java.lang.Object |
next()
Returns the next node in the message. |
void |
remove()
Not supported |
void |
setDirection(java.lang.String direction)
|
Methods inherited from class java.lang.Object |
---|
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait |
Constructor Detail |
---|
public MessageIterator(Structure start, java.lang.String direction, boolean handleUnexpectedSegments)
Method Detail |
---|
public boolean hasNext()
hasNext
in interface java.util.Iterator
public static boolean matchExistsAfterPosition(MessageIterator.Position pos, java.lang.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, java.lang.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 java.lang.Object 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:
next
in interface java.util.Iterator
public void remove()
remove
in interface java.util.Iterator
public java.lang.String getDirection()
public void setDirection(java.lang.String direction)
public static MessageIterator.Index getIndex(Group parent, Structure child)
|
||||||||||
PREV CLASS NEXT CLASS | FRAMES NO FRAMES | |||||||||
SUMMARY: NESTED | FIELD | CONSTR | METHOD | DETAIL: FIELD | CONSTR | METHOD |