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