001package ca.uhn.hl7v2.conf.spec.message;
002
003import ca.uhn.hl7v2.conf.ProfileException;
004
005/**
006 * A specification for a segment group in a conformance profile.  
007 * @author Bryan Tripp
008 */
009public class SegGroup extends AbstractSegmentContainer implements ProfileStructure {
010    
011    private String predicate;
012    private String name;
013    private String longName;
014    private String usage;
015    private short min;
016    private short max;
017    
018    /** Utility field used by bound properties. */
019    private java.beans.PropertyChangeSupport propertyChangeSupport =  new java.beans.PropertyChangeSupport(this);
020    
021    /** Utility field used by constrained properties. */
022    private java.beans.VetoableChangeSupport vetoableChangeSupport =  new java.beans.VetoableChangeSupport(this);
023    
024    /** Creates a new instance of SegGroup */
025    public SegGroup() {
026    }
027    
028    /** Adds a PropertyChangeListener to the listener list.
029     * @param l The listener to add.
030     */
031    public void addPropertyChangeListener(java.beans.PropertyChangeListener l) {
032        propertyChangeSupport.addPropertyChangeListener(l);
033    }
034    
035    /** Removes a PropertyChangeListener from the listener list.
036     * @param l The listener to remove.
037     */
038    public void removePropertyChangeListener(java.beans.PropertyChangeListener l) {
039        propertyChangeSupport.removePropertyChangeListener(l);
040    }
041    
042    /** Adds a VetoableChangeListener to the listener list.
043     * @param l The listener to add.
044     */
045    public void addVetoableChangeListener(java.beans.VetoableChangeListener l) {
046        vetoableChangeSupport.addVetoableChangeListener(l);
047    }
048    
049    /** Removes a VetoableChangeListener from the listener list.
050     * @param l The listener to remove.
051     */
052    public void removeVetoableChangeListener(java.beans.VetoableChangeListener l) {
053        vetoableChangeSupport.removeVetoableChangeListener(l);
054    }
055    
056    /** Getter for property predicate.
057     * @return Value of property predicate.
058     */
059    public String getPredicate() {
060        return this.predicate;
061    }
062    
063    /** Setter for property predicate.
064     * @param predicate New value of property predicate.
065     *
066     * @throws ProfileException
067     */
068    public void setPredicate(String predicate) throws ProfileException {
069        String oldPredicate = this.predicate;
070        try {
071            vetoableChangeSupport.fireVetoableChange("predicate", oldPredicate, predicate);
072        } catch (Exception e) {
073            throw new ProfileException(null, e);
074        }
075        this.predicate = predicate;
076        propertyChangeSupport.firePropertyChange("predicate", oldPredicate, predicate);
077    }
078    
079    /** Getter for property name.
080     * @return Value of property name.
081     */
082    public String getName() {
083        return this.name;
084    }
085    
086    /** Setter for property name.
087     * @param name New value of property name.
088     *
089     * @throws ProfileException
090     */
091    public void setName(String name) throws ProfileException {
092        String oldName = this.name;
093        try {
094            vetoableChangeSupport.fireVetoableChange("name", oldName, name);
095        } catch (Exception e) {
096            throw new ProfileException(null, e);
097        }            
098        this.name = name;
099        propertyChangeSupport.firePropertyChange("name", oldName, name);
100    }
101    
102    /** Getter for property longName.
103     * @return Value of property longName.
104     */
105    public String getLongName() {
106        return this.longName;
107    }
108    
109    /** Setter for property longName.
110     * @param longName New value of property longName.
111     *
112     * @throws ProfileException
113     */
114    public void setLongName(String longName) throws ProfileException {
115        String oldLongName = this.longName;
116        try {
117            vetoableChangeSupport.fireVetoableChange("longName", oldLongName, longName);            
118        } catch (Exception e) {
119            throw new ProfileException(null, e);
120        }
121        this.longName = longName;
122        propertyChangeSupport.firePropertyChange("longName", oldLongName, longName);
123    }
124    
125    /** Getter for property usage.
126     * @return Value of property usage.
127     */
128    public String getUsage() {
129        return this.usage;
130    }
131    
132    /** Setter for property usage.
133     * @param usage New value of property usage.
134     *
135     * @throws ProfileException
136     */
137    public void setUsage(String usage) throws ProfileException {
138        String oldUsage = this.usage;
139        try {
140            vetoableChangeSupport.fireVetoableChange("usage", oldUsage, usage);
141        } catch (Exception e) {
142            throw new ProfileException(null, e);
143        }
144        this.usage = usage;
145        propertyChangeSupport.firePropertyChange("usage", oldUsage, usage);
146    }
147    
148    /** Getter for property min.
149     * @return Value of property min.
150     */
151    public short getMin() {
152        return this.min;
153    }
154    
155    /** Setter for property min.
156     * @param min New value of property min.
157     *
158     * @throws ProfileException
159     */
160    public void setMin(short min) throws ProfileException {
161        short oldMin = this.min;
162        try {
163            vetoableChangeSupport.fireVetoableChange("min", new Short(oldMin), new Short(min));
164        } catch (Exception e) {
165            throw new ProfileException(null, e);
166        }
167        this.min = min;
168        propertyChangeSupport.firePropertyChange("min", new Short(oldMin), new Short(min));
169    }
170    
171    /** Getter for property max.
172     * @return Value of property max.
173     */
174    public short getMax() {
175        return this.max;
176    }
177    
178    /** Setter for property max.
179     * @param max New value of property max.
180     *
181     * @throws ProfileException
182     */
183    public void setMax(short max) throws ProfileException {
184        short oldMax = this.max;
185        try {
186            vetoableChangeSupport.fireVetoableChange("max", new Short(oldMax), new Short(max));
187        } catch (Exception e) {
188            throw new ProfileException(null, e);
189        }
190        this.max = max;
191        propertyChangeSupport.firePropertyChange("max", new Short(oldMax), new Short(max));
192    }
193    
194}