Package ca.uhn.hl7v2.parser
Class MessageIterator
java.lang.Object
ca.uhn.hl7v2.parser.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.- Author:
- Bryan Tripp
-
Nested Class Summary
Nested ClassesModifier and TypeClassDescriptionstatic classA structure position within a message. -
Constructor Summary
ConstructorsConstructorDescriptionMessageIterator(Message start, IStructureDefinition startDefinition, String direction, boolean handleUnexpectedSegments) Creates a new instance of MessageIterator -
Method Summary
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, waitMethods inherited from interface java.util.Iterator
forEachRemaining
-
Constructor Details
-
MessageIterator
public MessageIterator(Message start, IStructureDefinition startDefinition, String direction, boolean handleUnexpectedSegments) Creates a new instance of MessageIterator
-
-
Method Details
-
hasNext
Returns true if another object exists in the iteration sequence. -
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:
- If at a group, next means first child.
- If at a non-repeating segment, next means next "position"
- If at a repeating segment: if segment name matches direction then next means next rep, otherwise next means next "position".
- If at a segment within a group (not at the end of the group), next "position" means next sibling
- If at the end of a group: If name of group or any of its "first decendents" matches direction, then next position means next rep of group. Otherwise if direction matches name of next sibling of the group, or any of its first descendents, next position means next sibling of the group. Otherwise, next means a new segment added to the group (with a name that matches "direction").
- "First descendents" means first child, or first child of the first child, or first child of the first child of the first child, etc.
-
remove
Not supported -
getDirection
-
setDirection
-
getNextIndexWithinParent
Must be called afternext()
-