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 }