package org.hl7.fhir.instance.model;
import java.util.ArrayList;
import java.util.List;
/**
* A child element or property defined by the FHIR specification
* This class is defined as a helper class when iterating the
* children of an element in a generic fashion
*
* At present, iteration is only based on the specification, but
* this may be changed to allow profile based expression at a
* later date
*
* note: there's no point in creating one of these classes outside this package
*/
public class Property {
/**
* The name of the property as found in the FHIR specification
*/
private String name;
/**
* The type of the property as specified in the FHIR specification (e.g. type|type|Reference(Name|Name)
*/
private String typeCode;
/**
* The formal definition of the element given in the FHIR specification
*/
private String definition;
/**
* The minimum allowed cardinality - 0 or 1 when based on the specification
*/
private int minCardinality;
/**
* The maximum allowed cardinality - 1 or MAX_INT when based on the specification
*/
private int maxCardinality;
/**
* The actual elements that exist on this instance
*/
private List<Base> values = new ArrayList<Base>();
/**
* For run time, if/once a property is hooked up to it's definition
*/
private StructureDefinition structure;
/**
* Internal constructor
*/
public Property(String name, String typeCode, String definition, int minCardinality, int maxCardinality, Base value) {
super();
this.name = name;
this.typeCode = typeCode;
this.definition = definition;
this.minCardinality = minCardinality;
this.maxCardinality = maxCardinality;
this.values.add(value);
}
/**
* Internal constructor
*/
public Property(String name, String typeCode, String definition, int minCardinality, int maxCardinality, List<? extends Base> values) {
super();
this.name = name;
this.typeCode = typeCode;
this.definition = definition;
this.minCardinality = minCardinality;
this.maxCardinality = maxCardinality;
if (values != null)
this.values.addAll(values);
}
/**
* @return The name of this property in the FHIR Specification
*/
public String getName() {
return name;
}
/**
* @return The stated type in the FHIR specification
*/
public String getTypeCode() {
return typeCode;
}
/**
* @return The definition of this element in the FHIR spec
*/
public String getDefinition() {
return definition;
}
/**
* @return the minimum cardinality for this element
*/
public int getMinCardinality() {
return minCardinality;
}
/**
* @return the maximum cardinality for this element
*/
public int getMaxCardinality() {
return maxCardinality;
}
/**
* @return the actual values - will only be 1 unless maximum cardinality == MAX_INT
*/
public List<Base> getValues() {
return values;
}
public boolean hasValues() {
for (Base e : getValues())
if (e != null)
return true;
return false;
}
public StructureDefinition getStructure() {
return structure;
}
public void setStructure(StructureDefinition structure) {
this.structure = structure;
}
}