1 /** 2 * The contents of this file are subject to the Mozilla Public License Version 1.1 3 * (the "License"); you may not use this file except in compliance with the License. 4 * You may obtain a copy of the License at http://www.mozilla.org/MPL/ 5 * Software distributed under the License is distributed on an "AS IS" basis, 6 * WITHOUT WARRANTY OF ANY KIND, either express or implied. See the License for the 7 * specific language governing rights and limitations under the License. 8 * 9 * The Original Code is "IStructureDefinition.java" 10 * 11 * The Initial Developer of the Original Code is University Health Network. Copyright (C) 12 * 2001. All Rights Reserved. 13 * 14 * Contributor(s): 15 * 16 * Alternatively, the contents of this file may be used under the terms of the 17 * GNU General Public License (the �GPL�), in which case the provisions of the GPL are 18 * applicable instead of those above. If you wish to allow use of your version of this 19 * file only under the terms of the GPL and not to allow others to use your version 20 * of this file under the MPL, indicate your decision by deleting the provisions above 21 * and replace them with the notice and other provisions required by the GPL License. 22 * If you do not delete the provisions above, a recipient may use your version of 23 * this file under either the MPL or the GPL. 24 * 25 */ 26 27 28 package ca.uhn.hl7v2.parser; 29 30 import java.util.List; 31 import java.util.Set; 32 33 /** 34 * Contains information about the composition of a given type of {@link ca.uhn.hl7v2.model.Structure Structure}. 35 * At runtime, parsers will use accessors provided by various structure types (messages, groups, 36 * segments) to determine the structure of a messages. Structure definitions are used 37 * to cache that information between parse calls. 38 */ 39 public interface IStructureDefinition { 40 41 /** 42 * @return Returns this structure's first sibling (in other words, its 43 * parent's first child). Returns 44 * <code>null<code> if this is the first sibling, or if this has no parent 45 */ 46 IStructureDefinition getFirstSibling(); 47 48 /** 49 * @return Returns the next leaf (segment) after this one, within the same 50 * group, only if one exists and this structure is also a leaf. Otherwise returns <code>null</code>. 51 */ 52 IStructureDefinition getNextLeaf(); 53 54 /** 55 * @return The name of the segment, as it is known to it's parent. This 56 * will differ from {{@link #getName()}} in the case of multiple segments 57 * with the same name in a group, e.g. the two PID segments in ADT_A17, 58 * where the second one it known as PID2 to it's parent. 59 */ 60 String getNameAsItAppearsInParent(); 61 62 /** 63 * @return Returns the name of this structure 64 */ 65 String getName(); 66 67 /** 68 * @return Returns true if this structure is a segment 69 */ 70 boolean isSegment(); 71 72 /** 73 * @return Returns true if this is a repeatable structure 74 */ 75 boolean isRepeating(); 76 77 /** 78 * @return Returns all children of this structure definition 79 */ 80 List<StructureDefinition> getChildren(); 81 82 /** 83 * @return Returns the index of the position of this structure 84 * within it's parent's children 85 */ 86 int getPosition(); 87 88 /** 89 * @return Returns the parent structure of this structure, if one exists. 90 * Otherwise, returns null. 91 */ 92 IStructureDefinition getParent(); 93 94 /** 95 * @return Returns true if this structure is the final child of it's parent. 96 */ 97 boolean isFinalChildOfParent(); 98 99 /** 100 * @return Returns this structure's next sibling within it's parent, if any. 101 */ 102 IStructureDefinition getNextSibling(); 103 104 /** 105 * @return Does this structure have children (i.e. is it not a segment) 106 */ 107 boolean hasChildren(); 108 109 /** 110 * Should only be called on a leaf node (segment). Returns the names 111 * of all valid children which may follow this one, at any level in the 112 * hierarchy (including as later siblings of parent structures to 113 * this one) 114 * 115 * @return the names of all valid children which may follow this one 116 */ 117 Set<String> getNamesOfAllPossibleFollowingLeaves(); 118 119 /** 120 * @return structure definition of first child of null if there is no child 121 */ 122 IStructureDefinition getFirstChild(); 123 124 /** 125 * Returns the names of any possible children that could be the first 126 * required child of this group. 127 * 128 * For instance, for the group below "ORC" and "OBR" would both be 129 * returned, as they are both potential first children of this group. 130 * 131 * Note that the name returned by {@link #getName() this.getName()} 132 * is also returned. 133 * 134 * <code> 135 * ORDER_OBSERVATION 136 * { 137 * [ ORC ] 138 * OBR 139 * [ { NTE } ] 140 * [ CTD ] 141 * OBSERVATION 142 * { 143 * [ OBX ] 144 * [ { NTE } ] 145 * } 146 * OBSERVATION 147 * [ { FT1 } ] 148 * [ { CTI } ] 149 * } 150 * ORDER_OBSERVATION 151 * </code> 152 * 153 * 154 * @return the names of any possible children that could be the first 155 * required child of this group 156 */ 157 Set<String> getAllPossibleFirstChildren(); 158 159 /** 160 * @return Returns the names of all children of this structure, including first elements within child groups 161 */ 162 Set<String> getAllChildNames(); 163 164 /** 165 * @return true if this element a choice element 166 * 167 * @see ca.uhn.hl7v2.model.Group#isChoiceElement(String) 168 */ 169 boolean isChoiceElement(); 170 171 /** 172 * @return true if this a required structure within it's parent 173 */ 174 boolean isRequired(); 175 176 }