ca.uhn.hl7v2.model.ExtraComponents Maven / Gradle / Ivy
package ca.uhn.hl7v2.model;
import java.io.Serializable;
import java.util.ArrayList;
/**
* A set of "extra" components (sub-components) that are not a standard part
* of a field (component) but have been added at runtime. The purpose is to allow
* processing of locally-defined extensions to datatypes without the need for a
* custom message definition.
* Extra components are not treated uniformly with standard components (e.g.
* they are not accessible through methods like Primitive.getValue() and
* Composite.getComponent()). To do so would blur the distinction between
* primitive and composite types (i.e. leaf and non-leaf nodes), which seems
* nice and polymorphic for a moment but actually isn't helpful.
* Furthermore, the auto-generated classes do not define accessors to extra
* components, because they are meant to encourage and enforce use of the standard
* message structure -- stepping outside the standard structure must be
* deliberate.
* Note that a uniformity of access to standard and extra components is provided
* by Terser.
* @author Bryan Tripp
*/
public class ExtraComponents implements Serializable {
private static final long serialVersionUID = -2614683870975956395L;
private ArrayList comps;
private Message message;
/** Creates a new instance of ExtraComponents */
public ExtraComponents(Message message) {
this.comps = new ArrayList();
this.message = message;
}
/** Returns the number of existing extra components */
public int numComponents() {
return comps.size();
}
/** Returns the number of existing reps of a given extra component */
/*public int numReps(int comp) {
return ((ArrayList) this.comps.get(comp)).size();
}*/
/**
* Returns the component at the given location, creating it
* and all preceeding components if necessary.
* @param comp the extra component number starting at 0 (i.e. 0 is the first
* extra component)
*/
public Varies getComponent(int comp) {
ensureComponentAndPredecessorsExist(comp);
return (Varies) this.comps.get(comp);
}
/**
* Checks that the component at the given location exists, and that
* all preceding components exist, creating any missing ones.
*/
private void ensureComponentAndPredecessorsExist(int comp) {
for (int i = this.comps.size(); i <= comp; i++) {
this.comps.add(new Varies(message));
}
/*ArrayList reps = (ArrayList) this.comps.get(comp);
for (int j = reps.size(); j <= rep; j++) {
addRep(comp, j);
}*/
}
/**
* Clears all extra components
*/
void clear() {
comps.clear();
}
/**
* {@inheritDoc}
*/
@Override
public String toString() {
return "ExtraComponents" + comps;
}
/*private void addComp(int comp) {
}*/
/*private void addRep(int comp, int rep) {
ArrayList l = (ArrayList) this.comps.get(comp);
l.add(rep, new Varies());
}*/
}