001package ca.uhn.hl7v2.conf.spec.message; 002 003import java.util.ArrayList; 004import java.util.List; 005 006import ca.uhn.hl7v2.conf.ProfileException; 007 008/** 009 * A specification for a message segment in a conformance profile. 010 * @author Bryan Tripp 011 */ 012public class Seg implements ProfileStructure { 013 014 015 /** Utility field used by bound properties. */ 016 private java.beans.PropertyChangeSupport propertyChangeSupport = new java.beans.PropertyChangeSupport(this); 017 018 /** Utility field used by constrained properties. */ 019 private java.beans.VetoableChangeSupport vetoableChangeSupport = new java.beans.VetoableChangeSupport(this); 020 021 private String impNote; 022 private String description; 023 private String reference; 024 private String predicate; 025 private final List<Field> fields = new ArrayList<Field>(); 026 private String name; 027 private String longName; 028 private String usage; 029 private short min; 030 private short max; 031 032 /** Creates a new instance of Segment */ 033 public Seg() { 034 } 035 036 /** Adds a PropertyChangeListener to the listener list. 037 * @param l The listener to add. 038 */ 039 public void addPropertyChangeListener(java.beans.PropertyChangeListener l) { 040 propertyChangeSupport.addPropertyChangeListener(l); 041 } 042 043 /** Removes a PropertyChangeListener from the listener list. 044 * @param l The listener to remove. 045 */ 046 public void removePropertyChangeListener(java.beans.PropertyChangeListener l) { 047 propertyChangeSupport.removePropertyChangeListener(l); 048 } 049 050 /** Adds a VetoableChangeListener to the listener list. 051 * @param l The listener to add. 052 */ 053 public void addVetoableChangeListener(java.beans.VetoableChangeListener l) { 054 vetoableChangeSupport.addVetoableChangeListener(l); 055 } 056 057 /** Removes a VetoableChangeListener from the listener list. 058 * @param l The listener to remove. 059 */ 060 public void removeVetoableChangeListener(java.beans.VetoableChangeListener l) { 061 vetoableChangeSupport.removeVetoableChangeListener(l); 062 } 063 064 /** Getter for property impNote. 065 * @return Value of property impNote. 066 */ 067 public String getImpNote() { 068 return this.impNote; 069 } 070 071 /** Setter for property impNote. 072 * @param impNote New value of property impNote. 073 * 074 * @throws ProfileException 075 */ 076 public void setImpNote(String impNote) throws ProfileException { 077 String oldImpNote = this.impNote; 078 try { 079 vetoableChangeSupport.fireVetoableChange("impNote", oldImpNote, impNote); 080 } catch (Exception e) { 081 throw new ProfileException(null, e); 082 } 083 this.impNote = impNote; 084 propertyChangeSupport.firePropertyChange("impNote", oldImpNote, impNote); 085 } 086 087 /** Getter for property description. 088 * @return Value of property description. 089 */ 090 public String getDescription() { 091 return this.description; 092 } 093 094 /** Setter for property description. 095 * @param description New value of property description. 096 * 097 * @throws ProfileException 098 */ 099 public void setDescription(String description) throws ProfileException { 100 String oldDescription = this.description; 101 try { 102 vetoableChangeSupport.fireVetoableChange("description", oldDescription, description); 103 } catch (Exception e) { 104 throw new ProfileException(null, e); 105 } 106 this.description = description; 107 propertyChangeSupport.firePropertyChange("description", oldDescription, description); 108 } 109 110 /** Getter for property reference. 111 * @return Value of property reference. 112 */ 113 public String getReference() { 114 return this.reference; 115 } 116 117 /** Setter for property reference. 118 * @param reference New value of property reference. 119 * 120 * @throws ProfileException 121 */ 122 public void setReference(String reference) throws ProfileException { 123 String oldReference = this.reference; 124 try { 125 vetoableChangeSupport.fireVetoableChange("reference", oldReference, reference); 126 } catch (Exception e) { 127 throw new ProfileException(null, e); 128 } 129 this.reference = reference; 130 propertyChangeSupport.firePropertyChange("reference", oldReference, reference); 131 } 132 133 /** Getter for property predicate. 134 * @return Value of property predicate. 135 */ 136 public String getPredicate() { 137 return this.predicate; 138 } 139 140 /** Setter for property predicate. 141 * @param predicate New value of property predicate. 142 * 143 * @throws ProfileException 144 */ 145 public void setPredicate(String predicate) throws ProfileException { 146 String oldPredicate = this.predicate; 147 try { 148 vetoableChangeSupport.fireVetoableChange("predicate", oldPredicate, predicate); 149 } catch (Exception e) { 150 throw new ProfileException(null, e); 151 } 152 this.predicate = predicate; 153 propertyChangeSupport.firePropertyChange("predicate", oldPredicate, predicate); 154 } 155 156 /** Indexed getter for property field (index starts at 1 following HL7 convention). 157 * @param index Index of the property (starts at 1 following HL7 convention). 158 * @return Value of the property at <CODE>index</CODE>. 159 */ 160 public Field getField(int index) { 161 return this.fields.get(index - 1); 162 } 163 164 /** Indexed setter for property field (index starts at 1 following HL7 convention). 165 * @param index Index of the property (starts at 1 following HL7 convention). 166 * @param field New value of the property at <CODE>index</CODE>. 167 * 168 * @throws ProfileException 169 */ 170 public void setField(int index, Field field) throws ProfileException { 171 index--; 172 while (fields.size() <= index) { 173 fields.add(null); 174 } 175 Field oldField = this.fields.get(index); 176 this.fields.set(index,field); 177 try { 178 vetoableChangeSupport.fireVetoableChange("fields", null, null ); 179 } 180 catch(java.beans.PropertyVetoException vetoException ) { 181 this.fields.set(index, oldField); 182 throw new ProfileException(null, vetoException); 183 } 184 propertyChangeSupport.firePropertyChange("fields", null, null ); 185 } 186 187 /** Getter for property name. 188 * @return Value of property name. 189 */ 190 public String getName() { 191 return this.name; 192 } 193 194 /** Setter for property name. 195 * @param name New value of property name. 196 * 197 * @throws ProfileException 198 */ 199 public void setName(String name) throws ProfileException { 200 String oldName = this.name; 201 try { 202 vetoableChangeSupport.fireVetoableChange("name", oldName, name); 203 } catch (Exception e) { 204 throw new ProfileException(null, e); 205 } 206 this.name = name; 207 propertyChangeSupport.firePropertyChange("name", oldName, name); 208 } 209 210 /** Getter for property longName. 211 * @return Value of property longName. 212 */ 213 public String getLongName() { 214 return this.longName; 215 } 216 217 /** Setter for property longName. 218 * @param longName New value of property longName. 219 * 220 * @throws ProfileException 221 */ 222 public void setLongName(String longName) throws ProfileException { 223 String oldLongName = this.longName; 224 try { 225 vetoableChangeSupport.fireVetoableChange("longName", oldLongName, longName); 226 } catch (Exception e) { 227 throw new ProfileException(null, e); 228 } 229 this.longName = longName; 230 propertyChangeSupport.firePropertyChange("longName", oldLongName, longName); 231 } 232 233 /** Getter for property usage. 234 * @return Value of property usage. 235 */ 236 public String getUsage() { 237 return this.usage; 238 } 239 240 /** Setter for property usage. 241 * @param usage New value of property usage. 242 * 243 * @throws ProfileException 244 */ 245 public void setUsage(String usage) throws ProfileException { 246 String oldUsage = this.usage; 247 try { 248 vetoableChangeSupport.fireVetoableChange("usage", oldUsage, usage); 249 } catch (Exception e) { 250 throw new ProfileException(null, e); 251 } 252 this.usage = usage; 253 propertyChangeSupport.firePropertyChange("usage", oldUsage, usage); 254 } 255 256 /** Getter for property min. 257 * @return Value of property min. 258 */ 259 public short getMin() { 260 return this.min; 261 } 262 263 /** Setter for property min. 264 * @param min New value of property min. 265 * 266 * @throws ProfileException 267 */ 268 public void setMin(short min) throws ProfileException { 269 short oldMin = this.min; 270 try { 271 vetoableChangeSupport.fireVetoableChange("min", oldMin, min); 272 } catch (Exception e) { 273 throw new ProfileException(null, e); 274 } 275 this.min = min; 276 propertyChangeSupport.firePropertyChange("min", oldMin, min); 277 } 278 279 /** Getter for property max. 280 * @return Value of property max. 281 */ 282 public short getMax() { 283 return this.max; 284 } 285 286 /** Setter for property max. 287 * @param max New value of property max. 288 * 289 * @throws ProfileException 290 */ 291 public void setMax(short max) throws ProfileException { 292 short oldMax = this.max; 293 try { 294 vetoableChangeSupport.fireVetoableChange("max", new Short(oldMax), new Short(max)); 295 } catch (Exception e) { 296 throw new ProfileException(null, e); 297 } 298 this.max = max; 299 propertyChangeSupport.firePropertyChange("max", new Short(oldMax), new Short(max)); 300 } 301 302 303 /** Returns the number of fields in the segment */ 304 public int getFields() { 305 return this.fields.size(); 306 } 307 308 /** Returns the number of fields in the segment */ 309 public List<Field> getFieldsAsList() { 310 return (this.fields); 311 } 312 313 /** Returns the number of fields in the segment */ 314 public List<Field> getChildrenAsList() { 315 return (this.fields); 316 } 317 318}