001 package ca.uhn.hl7v2.conf.spec.message; 002 003 import ca.uhn.hl7v2.conf.ProfileException; 004 005 /** 006 * The specification for a particular field component in a message profile. 007 * @author Bryan Tripp 008 */ 009 public class Component extends AbstractComponent { 010 011 private SubComponent[] components; 012 013 /** Creates a new instance of Component */ 014 public Component() { 015 components = new SubComponent[0]; 016 } 017 018 /** Indexed getter for property components (index starts at 1 following HL7 convention). 019 * @param index Index of the property (starts at 1 following HL7 convention). 020 * @return Value of the property at <CODE>index</CODE>. 021 */ 022 public SubComponent getSubComponent(int index) { 023 return this.components[index - 1]; 024 } 025 026 /** Indexed setter for property components (index starts at 1 following HL7 convention). 027 * @param index Index of the property (starts at 1 following HL7 convention). 028 * @param component New value of the property at <CODE>index</CODE>. 029 * 030 * @throws ProfileException 031 */ 032 public void setSubComponent(int index, SubComponent component) throws ProfileException { 033 index--; 034 extendChildList(index); 035 SubComponent oldComponent = this.components[index]; 036 this.components[index] = component; 037 try { 038 vetoableChangeSupport.fireVetoableChange("components", null, null ); 039 } 040 catch(java.beans.PropertyVetoException vetoException ) { 041 this.components[index] = oldComponent; 042 throw new ProfileException(null, vetoException); 043 } 044 propertyChangeSupport.firePropertyChange("components", null, null ); 045 } 046 047 /** Makes child list long enough to accommodate setter. */ 048 private void extendChildList(int index) { 049 if (index >= this.components.length) { 050 SubComponent[] newCopy = new SubComponent[index + 1]; 051 System.arraycopy(this.components, 0, newCopy, 0, this.components.length); 052 this.components = newCopy; 053 } 054 } 055 056 /** Returns the number of subcomponents in this component */ 057 public int getSubComponents() { 058 return this.components.length; 059 } 060 061 }