001package ca.uhn.hl7v2.model;
002
003import java.util.ArrayList;
004import java.util.List;
005
006/**
007 * An unspecified Composite datatype that has an undefined number of components, each 
008 * of which is a Varies.  
009 * This is used to store Varies data, when the data type is unknown.  It is also 
010 * used to store unrecognized message constituents.  
011 * @author Bryan Tripp
012 */
013@SuppressWarnings("serial")
014public class GenericComposite extends AbstractComposite {
015    
016    private List<Type> components;
017    private Message message;
018    
019    /** Creates a new instance of GenericComposite */
020    public GenericComposite(Message message) {
021        super(message);
022        this.message = message;
023        components = new ArrayList<Type>(20);
024    }
025    
026    /** 
027     * Returns the single component of this composite at the specified position (starting at 0) - 
028     * Creates it (and any nonexistent components before it) if necessary.  
029     */
030    public Type getComponent(int number) throws DataTypeException {
031        for (int i = components.size(); i <= number; i++) {
032            components.add(new Varies(message));
033        }
034        return components.get(number);
035    }    
036    
037    /** 
038     * Returns an array containing the components of this field.
039     */
040    public Type[] getComponents() {
041        return components.toArray(new Type[components.size()]);
042    }    
043    
044    /** Returns the name of the type (used in XML encoding and profile checking)  */
045    public String getName() {
046        return "UNKNOWN";
047    }
048
049
050}