use of org.hl7.fhir.exceptions.DefinitionException in project kindling by HL7.
the class CDAGenerator method buildInfrastructureRoot.
private void buildInfrastructureRoot() throws DefinitionException {
StructureDefinition sd = new StructureDefinition();
sd.setId("InfrastructureRoot");
sd.setUrl("http://hl7.org/fhir/cda/StructureDefinition/InfrastructureRoot");
library.put(sd.getUrl(), sd);
sd.setName("Base Type for all classes in the CDA structure");
sd.setTitle("InfrastructureRoot");
sd.setStatus(PublicationStatus.ACTIVE);
sd.setExperimental(false);
sd.setPublisher("HL7");
sd.setDescription("Defines the base elements and attributes on all CDA elements (other than data types)");
sd.setKind(StructureDefinitionKind.LOGICAL);
sd.setType(sd.getUrl());
sd.setAbstract(true);
sd.addExtension().setUrl("http://hl7.org/fhir/StructureDefinition/elementdefinition-namespace").setValue(new UriType("urn:hl7-org:v3"));
sd.setBaseDefinition("http://hl7.org/fhir/cda/StructureDefinition/ANY");
sd.setDerivation(TypeDerivationRule.SPECIALIZATION);
ElementDefinition edb = new ElementDefinition();
edb.setPath(sd.getId());
seePath(edb);
edb.setMin(1);
edb.setMax("*");
edb.addType().setCode("Element");
sd.getDifferential().getElement().add(edb);
ElementDefinition ed = new ElementDefinition();
ed.setPath("InfrastructureRoot.realmCode");
seePath(ed);
ed.setMin(0);
ed.setMax("*");
ed.setDefinition("When valued in an instance, this attribute signals the imposition of realm-specific constraints. The value of this attribute identifies the realm in question");
ed.addType().setCode("http://hl7.org/fhir/cda/StructureDefinition/CS");
sd.getDifferential().getElement().add(ed);
ed = new ElementDefinition();
ed.setPath("InfrastructureRoot.typeId");
seePath(ed);
ed.setMin(0);
ed.setMax("1");
ed.setDefinition("When valued in an instance, this attribute signals the imposition of constraints defined in an HL7-specified message type. This might be a common type (also known as CMET in the messaging communication environment), or content included within a wrapper. The value of this attribute provides a unique identifier for the type in question.");
ed.addType().setCode("http://hl7.org/fhir/cda/StructureDefinition/II");
sd.getDifferential().getElement().add(ed);
ed = new ElementDefinition();
ed.setPath("InfrastructureRoot.templateId");
seePath(ed);
ed.setMin(0);
ed.setMax("*");
ed.setDefinition("When valued in an instance, this attribute signals the imposition of a set of template-defined constraints. The value of this attribute provides a unique identifier for the templates in question");
ed.addType().setCode("http://hl7.org/fhir/cda/StructureDefinition/II");
sd.getDifferential().getElement().add(ed);
new ProfileUtilities(null, null, null).setIds(sd, true);
structures.add(sd);
}
use of org.hl7.fhir.exceptions.DefinitionException in project kindling by HL7.
the class CDAGenerator method processDataType.
private void processDataType(Element dt, String n, String p) throws FileNotFoundException, IOException, FHIRFormatError, DefinitionException {
if (!Utilities.existsInList(n, "TYPE", "BN", "BIN", "CO", "UID", "OID", "UUID", "RUID", "URL", "ADXP", "ENXP", "PN", "TN", "ON", "RTO", "CAL", "CLCY", "SET", "LIST", "GLIST", "SLIST", "BAG", "HXIT", "HIST", "UVP", "NPPD", "PPD")) {
if (n.equals("GTS"))
n = "SXCM_TS";
System.out.print(" " + n);
StructureDefinition sd = new StructureDefinition();
sd.setId(fix(n));
sd.setUrl("http://hl7.org/fhir/cda/StructureDefinition/" + fix(n));
library.put(sd.getUrl(), sd);
sd.setName("V3 Data type " + n + " (" + dt.getAttribute("title") + ")");
sd.setTitle(sd.getName());
sd.setStatus(PublicationStatus.ACTIVE);
sd.setExperimental(false);
sd.setPublisher("HL7");
sd.setDescription(getDefinition(dt));
sd.setType(sd.getUrl());
sd.setKind(StructureDefinitionKind.LOGICAL);
sd.setAbstract("true".equals(dt.getAttribute("isAbstract")));
sd.addExtension().setUrl("http://hl7.org/fhir/StructureDefinition/elementdefinition-namespace").setValue(new UriType("urn:hl7-org:v3"));
Element derived = XMLUtil.getNamedChild(dt, "mif:derivedFrom");
if (Utilities.existsInList(n, "ST", "ED", "TEL", "AD", "EN", "IVL_PQ", "IVL_INT", "TS")) {
sd.setBaseDefinition("http://hl7.org/fhir/cda/StructureDefinition/ANY");
} else if (Utilities.existsInList(n, "SXCM_TS")) {
sd.setBaseDefinition("http://hl7.org/fhir/cda/StructureDefinition/TS");
} else if (n.equals("PIVL_TS") || n.equals("EIVL_TS") || n.equals("IVL_TS")) {
sd.setBaseDefinition("http://hl7.org/fhir/cda/StructureDefinition/SXCM_TS");
} else if (derived != null) {
sd.setBaseDefinition("http://hl7.org/fhir/cda/StructureDefinition/" + XMLUtil.getNamedChildAttribute(derived, "mif:targetDatatype", "name"));
} else
sd.setBaseDefinition("http://hl7.org/fhir/StructureDefinition/Element");
sd.setDerivation(TypeDerivationRule.SPECIALIZATION);
ElementDefinition edb = new ElementDefinition();
edb.setPath(sd.getId());
seePath(edb);
edb.setMin(1);
edb.setMax("*");
edb.addType().setCode("Element");
sd.getDifferential().getElement().add(edb);
if (n.equals("ED"))
addEDElements(sd.getDifferential().getElement());
if (n.equals("SC"))
copyAttributes(sd, getDefinition("CV"), "code", "codeSystem", "codeSystemVersion", "displayName");
if (primitiveTypes.containsKey(n))
addValueAttribute(sd.getDifferential().getElement(), n, primitiveTypes.get(n));
if (n.equals("TS"))
edb.addExtension("http://hl7.org/fhir/StructureDefinition/elementdefinition-timeformat", new CodeType("YYYYMMDDHHMMSS.UUUU[+|-ZZzz]"));
if (n.equals("TEL"))
addValueAttribute(sd.getDifferential().getElement(), n, "uri");
if (n.equals("SXCM_TS")) {
addOperatorAttribute(sd.getDifferential().getElement(), "SXCM_TS");
sd.setAbstract(true);
}
if (n.equals("AD")) {
addParts(sd.getDifferential().getElement(), n, "delimiter", "country", "state", "county", "city", "postalCode", "streetAddressLine", "houseNumber", "houseNumberNumeric", "direction", "streetName", "streetNameBase", "streetNameType", "additionalLocator", "unitID", "unitType", "careOf", "censusTract", "deliveryAddressLine", "deliveryInstallationType", "deliveryInstallationArea", "deliveryInstallationQualifier", "deliveryMode", "deliveryModeIdentifier", "buildingNumberSuffix", "postBox", "precinct");
addTextItem(sd.getDifferential().getElement(), n);
}
if (n.equals("EN")) {
addParts(sd.getDifferential().getElement(), n, "delimiter", "family", "given", "prefix", "suffix");
addTextItem(sd.getDifferential().getElement(), n);
}
List<Element> props = new ArrayList<Element>();
XMLUtil.getNamedChildren(dt, "mif:property", props);
for (Element prop : props) {
processProperty(sd.getDifferential().getElement(), n, prop, p);
}
if (n.equals("TS") || n.equals("PQ"))
addInclusiveAttribute(sd.getDifferential().getElement(), n);
if (n.equals("CE") || n.equals("CV") || n.equals("CD"))
addCDExtensions(sd.getDifferential().getElement(), n);
new ProfileUtilities(null, null, null).setIds(sd, true);
structures.add(sd);
}
}
use of org.hl7.fhir.exceptions.DefinitionException in project kindling by HL7.
the class CDAGenerator method processDataTypes.
private void processDataTypes(String filename) throws FileNotFoundException, ParserConfigurationException, SAXException, IOException, FHIRFormatError, DefinitionException {
System.out.println("Process Data Types");
Document dtMif = XMLUtil.parseFileToDom(filename);
List<Element> dts = new ArrayList<Element>();
XMLUtil.getNamedChildren(dtMif.getDocumentElement(), "mif:datatype", dts);
for (Element dt : dts) {
String n = dt.getAttribute("name");
types.put(n, dt);
if (n.equals("IVL")) {
processDataType(dt, n + "_TS", "TS");
processDataType(dt, n + "_PQ", "PQ");
processDataType(dt, n + "_INT", "INT");
} else if (n.equals("PIVL")) {
processDataType(dt, n + "_TS", null);
} else if (n.equals("EIVL")) {
processDataType(dt, n + "_TS", null);
} else if (n.equals("RTO")) {
processDataType(dt, n + "_PQ_PQ", "PQ");
} else if (!"Binding".equals(dt.getAttribute("datatypeKind")))
processDataType(dt, n, null);
}
buildSXPR();
buildInfrastructureRoot();
for (StructureDefinition sd : structures) {
// if (!sd.getAbstract())
generateSnapShot(sd);
}
System.out.println(" ... done");
}
use of org.hl7.fhir.exceptions.DefinitionException in project org.hl7.fhir.core by hapifhir.
the class DefinitionNavigator method loadTypedChildren.
private void loadTypedChildren(TypeRefComponent type) throws DefinitionException {
typeOfChildren = null;
StructureDefinition sd = context.fetchResource(StructureDefinition.class, type.hasProfile() ? type.getProfile().get(0).getValue() : type.getCode());
if (sd != null) {
DefinitionNavigator dn = new DefinitionNavigator(context, sd, 0, path, names, sd.getConstrainedType());
typeChildren = dn.children();
} else
throw new DefinitionException("Unable to find definition for " + type.getCode() + (type.hasProfile() ? "(" + type.getProfile() + ")" : ""));
typeOfChildren = type;
}
use of org.hl7.fhir.exceptions.DefinitionException in project org.hl7.fhir.core by hapifhir.
the class FHIRPathEngine method getChildTypesByName.
private void getChildTypesByName(String type, String name, TypeDetails result) throws PathEngineException, DefinitionException {
if (Utilities.noString(type))
throw new PathEngineException("No type provided in BuildToolPathEvaluator.getChildTypesByName");
if (type.equals("xhtml"))
return;
String url = null;
if (type.contains(".")) {
url = "http://hl7.org/fhir/StructureDefinition/" + type.substring(0, type.indexOf("."));
} else {
url = "http://hl7.org/fhir/StructureDefinition/" + type;
}
String tail = "";
StructureDefinition sd = worker.fetchResource(StructureDefinition.class, url);
if (sd == null)
// this really is an error, because we can only get to here if the internal infrastrucgture is wrong
throw new DefinitionException("Unknown type " + type);
List<StructureDefinition> sdl = new ArrayList<StructureDefinition>();
ElementDefinitionMatch m = null;
if (type.contains("."))
m = getElementDefinition(sd, type, false);
if (m != null && hasDataType(m.definition)) {
if (m.fixedType != null) {
StructureDefinition dt = worker.fetchTypeDefinition(m.fixedType);
if (dt == null)
throw new DefinitionException("unknown data type " + m.fixedType);
sdl.add(dt);
} else
for (TypeRefComponent t : m.definition.getType()) {
StructureDefinition dt = worker.fetchTypeDefinition(t.getCode());
if (dt == null)
throw new DefinitionException("unknown data type " + t.getCode());
sdl.add(dt);
}
} else {
sdl.add(sd);
if (type.contains("."))
tail = type.substring(type.indexOf("."));
}
for (StructureDefinition sdi : sdl) {
String path = sdi.getSnapshot().getElement().get(0).getPath() + tail + ".";
if (name.equals("**")) {
assert (result.getCollectionStatus() == CollectionStatus.UNORDERED);
for (ElementDefinition ed : sdi.getSnapshot().getElement()) {
if (ed.getPath().startsWith(path))
for (TypeRefComponent t : ed.getType()) {
if (t.hasCode() && t.getCodeElement().hasValue()) {
String tn = null;
if (t.getCode().equals("Element") || t.getCode().equals("BackboneElement"))
tn = ed.getPath();
else
tn = t.getCode();
if (t.getCode().equals("Resource")) {
for (String rn : worker.getResourceNames()) {
if (!result.hasType(worker, rn)) {
result.addType(rn);
getChildTypesByName(rn, "**", result);
}
}
} else if (!result.hasType(worker, tn)) {
result.addType(tn);
getChildTypesByName(tn, "**", result);
}
}
}
}
} else if (name.equals("*")) {
assert (result.getCollectionStatus() == CollectionStatus.UNORDERED);
for (ElementDefinition ed : sdi.getSnapshot().getElement()) {
if (ed.getPath().startsWith(path) && !ed.getPath().substring(path.length()).contains("."))
for (TypeRefComponent t : ed.getType()) {
if (t.getCode().equals("Element") || t.getCode().equals("BackboneElement"))
result.addType(ed.getPath());
else if (t.getCode().equals("Resource"))
result.addTypes(worker.getResourceNames());
else
result.addType(t.getCode());
}
}
} else {
path = sdi.getSnapshot().getElement().get(0).getPath() + tail + "." + name;
ElementDefinitionMatch ed = getElementDefinition(sdi, path, false);
if (ed != null) {
if (!Utilities.noString(ed.getFixedType()))
result.addType(ed.getFixedType());
else
for (TypeRefComponent t : ed.getDefinition().getType()) {
if (Utilities.noString(t.getCode()))
// throw new PathEngineException("Illegal reference to primitive value attribute @ "+path);
break;
if (t.getCode().equals("Element") || t.getCode().equals("BackboneElement"))
result.addType(path);
else if (t.getCode().equals("Resource"))
result.addTypes(worker.getResourceNames());
else
result.addType(t.getCode());
}
}
}
}
}
Aggregations