use of org.hl7.fhir.definitions.model.BindingSpecification in project kindling by HL7.
the class TerminologyNotesGenerator method gen.
private void gen(String prefix, Map<BindingSpecification, List<CDUsage>> txusages2) throws Exception {
List<BindingSpecification> cds = new ArrayList<BindingSpecification>();
cds.addAll(txusages.keySet());
if (cds.size() == 0)
return;
Collections.sort(cds, new MyCompare());
if (noHeader)
write("<p>\r\n<b>Terminology Bindings</b>\r\n</p>\r\n");
else
write("<h3>\r\nTerminology Bindings\r\n</h3>\r\n");
// 1. new form
write("<table class=\"grid\">\r\n");
write(" <tr><th>Path</th><th>Definition</th><th>Type</th><th>Reference</th></tr>\r\n");
for (BindingSpecification cd : cds) {
String path;
List<CDUsage> list = txusages.get(cd);
for (int i = 2; i < list.size(); i++) {
if (!matchesTypes(list.get(i).element.typeCodeNoParams(), list.get(1).element.typeCodeNoParams()))
throw new Exception("Mixed types on one concept domain in one type - not yet supported by the build process for binding " + cd.getName() + " (" + list.get(i).element.typeCode() + " vs " + list.get(1).element.typeCode() + ")");
}
String name = cd.getValueSet() != null ? cd.getValueSet().present() : cd.getName();
write(" <tr><td valign=\"top\" title=\"" + name + "\">");
boolean first = true;
for (int i = 1; i < list.size(); i++) {
if (!first)
write("<br/>");
first = false;
write(list.get(i).path);
}
write(" </td>");
write("<td valign=\"top\">" + Utilities.escapeXml(cd.getDefinition()) + "</td>");
if (cd.getBinding() == BindingMethod.Unbound)
write("<td>Unknown</td><td valign=\"top\">No details provided yet</td>");
else {
if (cd.hasMax()) {
ValueSet vs = cd.getMaxValueSet();
if (vs == null) {
write("<td><a href=\"" + prefix + "terminologies.html#" + cd.getStrength().toCode() + "\">" + cd.getStrength().getDisplay() + "</a>, but limited to <a href=\"" + cd.getMaxReference() + "\">" + cd.getMaxReference() + "</a></td>");
} else {
String pp = vs.hasUserData("external.url") ? vs.getUserString("external.url") : vs.getUserString("path");
write("<td><a href=\"" + prefix + "terminologies.html#" + cd.getStrength().toCode() + "\">" + cd.getStrength().getDisplay() + "</a>, but limited to <a href=\"" + prefix + pp.replace(File.separatorChar, '/') + "\">" + vs.getName() + "</a></td>");
}
} else
write("<td><a href=\"" + prefix + "terminologies.html#" + cd.getStrength().toCode() + "\">" + cd.getStrength().getDisplay() + "</a></td>");
write("<td valign=\"top\">");
if (cd.getBinding() == BindingSpecification.BindingMethod.Special) {
if (name.equals("MessageEvent"))
write("<a href=\"" + prefix + "valueset-message-events.html\">Message Events</a>");
else if (name.equals("ResourceType"))
write("<a href=\"" + prefix + "valueset-resource-types.html\">Resource Types</a>");
else if (name.equals("DataType"))
write("<a href=\"" + prefix + "valueset-data-types.html\">Data Types</a>");
else if (name.equals("FHIRDefinedType"))
write("<a href=\"" + prefix + "valueset-defined-types.html\">Defined Types</a>");
else if (name.equals("FHIRAllTypes"))
write("<a href=\"" + prefix + "valueset-all-types.html\">All Types</a>");
else
throw new Exception("Unknown special type " + name);
} else if (cd.getValueSet() != null) {
ValueSet vs = cd.getValueSet();
String pp = vs.hasUserData("external.url") ? vs.getUserString("external.url") : vs.getUserString("path");
if (pp == null)
throw new Exception("unknown path on " + cd.getReference());
write("<a href=\"" + prefix + pp.replace(File.separatorChar, '/') + "\">" + vs.getName() + "</a><!-- b -->");
} else if (cd.getBinding() == BindingSpecification.BindingMethod.ValueSet) {
if (Utilities.noString(cd.getReference()))
write("??");
else if (cd.getReference().startsWith("valueset-"))
write("<a href=\"" + prefix + cd.getReference() + ".html\">http://hl7.org/fhir/ValueSet/" + cd.getReference().substring(9) + "</a><!-- a -->");
else if (cd.getReference().startsWith("http://hl7.org/fhir")) {
if (cd.getReference().startsWith("http://terminology.hl7.org/ValueSet/v3-")) {
ValueSet vs = page.getValueSets().get(cd.getReference());
String pp = vs.hasUserData("external.url") ? vs.getUserString("external.url") : vs.getUserString("path");
if (pp == null)
throw new Exception("unknown path on " + cd.getReference());
write("<a href=\"" + prefix + pp.replace(File.separatorChar, '/') + "\">" + cd.getReference() + "</a><!-- b -->");
} else if (cd.getReference().startsWith("http://terminology.hl7.org/ValueSet/v2-")) {
ValueSet vs = page.getValueSets().get(cd.getReference());
String pp = vs.hasUserData("external.url") ? vs.getUserString("external.url") : vs.getUserString("path");
write("<a href=\"" + prefix + pp.replace(File.separatorChar, '/') + "\">" + cd.getReference() + "</a><!-- c -->");
} else if (cd.getReference().startsWith("http://hl7.org/fhir/ValueSet/")) {
String ref = getBindingLink(cd);
write("<a href=\"" + prefix + ref + "\">" + cd.getReference() + "</a><!-- d -->");
// BindingSpecification bs1 = page.getDefinitions().getBindingByURL(cd.getReference());
// if (bs1 != null)
// write("<a href=\""+cd.getReference().substring(23)+".html\">"+cd.getReference()+"</a><!-- d -->");
// else
// write("<a href=\"valueset-"+cd.getReference().substring(23)+".html\">"+cd.getReference()+"</a><!-- d -->");
} else
throw new Exception("Internal reference " + cd.getReference() + " not handled yet");
} else if (cd.getReference().startsWith("http:"))
write("<a href=\"" + cd.getReference() + "\">" + cd.getReference() + "</a><!-- e -->");
else
write("<a href=\"" + prefix + "valueset-" + cd.getReference() + ".html\">http://hl7.org/fhir/" + cd.getReference() + "</a><!-- e -->");
} else if (cd.getBinding() == BindingSpecification.BindingMethod.CodeList) {
write("<a href=\"" + prefix + "valueset-" + cd.getReference().substring(1) + ".html\">http://hl7.org/fhir/" + cd.getReference().substring(1) + "</a><!-- f -->");
}
write("</td>");
}
write(" </tr>\r\n");
}
write("</table>\r\n<p> </p>\r\n");
}
use of org.hl7.fhir.definitions.model.BindingSpecification in project kindling by HL7.
the class XSDBaseGenerator method genResource.
private void genResource(String name, ResourceDefn res) throws Exception {
enums.clear();
enumDefs.clear();
boolean isBase = Utilities.noString(res.getRoot().typeCode());
write(" <xs:complexType name=\"" + name + "\">\r\n");
write(" <xs:annotation>\r\n");
write(" <xs:documentation xml:lang=\"en\">" + Utilities.escapeXml(res.getDefinition()) + "</xs:documentation>\r\n");
write(" </xs:annotation>\r\n");
if (!isBase) {
write(" <xs:complexContent>\r\n");
write(" <xs:extension base=\"" + res.getRoot().typeCode() + "\">\r\n");
}
if (!res.isInterface()) {
write(" <xs:sequence>\r\n");
for (ElementDefn e : res.getRoot().getElements()) {
generateElement(res.getRoot(), e, null, null);
}
write(" </xs:sequence>\r\n");
}
if (!isBase) {
write(" </xs:extension>\r\n");
write(" </xs:complexContent>\r\n");
}
write(" </xs:complexType>\r\n");
genRegex();
while (!structures.isEmpty()) {
String s = structures.keySet().iterator().next();
generateType(res.getRoot(), s, structures.get(s));
structures.remove(s);
}
for (BindingSpecification en : enums) {
generateEnum(en);
}
genRegex();
}
use of org.hl7.fhir.definitions.model.BindingSpecification in project kindling by HL7.
the class XSDBaseGenerator method generate.
public void generate(String version, String genDate, boolean outer) throws Exception {
if (outer) {
write("<?xml version=\"1.0\" encoding=\"UTF-8\"?>\r\n");
write("<!-- \r\n");
write(Config.FULL_LICENSE_CODE);
write("\r\n");
write(" Generated on " + genDate + " for FHIR v" + version + " \r\n");
write("\r\n");
write(" Note: the schemas & schematrons do not contain all of the rules about what makes resources\r\n");
write(" valid. Implementers will still need to be familiar with the content of the specification and with\r\n");
write(" any profiles that apply to the resources in order to make a conformant implementation.\r\n");
write("\r\n");
write("-->\r\n");
write("<xs:schema xmlns:xs=\"http://www.w3.org/2001/XMLSchema\" xmlns=\"http://hl7.org/fhir\" xmlns:xhtml=\"http://www.w3.org/1999/xhtml\" " + "targetNamespace=\"http://hl7.org/fhir\" elementFormDefault=\"qualified\" version=\"1.0\">\r\n");
}
write(" <xs:import namespace=\"http://www.w3.org/XML/1998/namespace\" schemaLocation=\"xml.xsd\"/>\r\n");
write(" <xs:import namespace=\"http://www.w3.org/1999/xhtml\" schemaLocation=\"fhir-xhtml.xsd\"/>\r\n");
if (outer)
write(" <xs:include schemaLocation=\"fhir-all.xsd\"/>\r\n");
// genElementRoot();
write("\r\n");
genPrimitives();
write("\r\n");
genResourceReference();
genResourceContainer();
for (ElementDefn e : definitions.getInfrastructure().values()) genInfrastructure(e);
for (ElementDefn e : definitions.getTypes().values()) genType(e);
for (String n : definitions.getBaseResources().keySet()) {
ResourceDefn r = definitions.getBaseResources().get(n);
if (r.isAbstract()) {
genResource(n, r);
}
}
// todo: what to do about this?
for (BindingSpecification b : definitions.getCommonBindings().values()) if (((b.getUseContexts().size() > 1 || b.isShared()) && isEnum(b)))
generateEnum(b);
if (outer) {
write("</xs:schema>\r\n");
writer.flush();
}
}
use of org.hl7.fhir.definitions.model.BindingSpecification in project kindling by HL7.
the class XSDBaseGenerator method genInfrastructure.
private void genInfrastructure(ElementDefn elem) throws Exception {
enums.clear();
enumDefs.clear();
String name = elem.getName();
write(" <xs:complexType name=\"" + name + "\">\r\n");
write(" <xs:annotation>\r\n");
write(" <xs:documentation xml:lang=\"en\">" + Utilities.escapeXml(elem.getDefinition()) + "</xs:documentation>\r\n");
write(" <xs:documentation xml:lang=\"en\">If the element is present, it must have a value for at least one of the defined elements, an @id referenced from the Narrative, or extensions</xs:documentation>\r\n");
write(" </xs:annotation>\r\n");
if (!elem.getName().equals("Base")) {
write(" <xs:complexContent>\r\n");
write(" <xs:extension base=\"" + getParentType(elem) + "\">\r\n");
}
write(" <xs:sequence>\r\n");
for (ElementDefn e : elem.getElements()) {
if (!e.isXmlAttribute()) {
if (e.getName().equals("[type]"))
generateAny(elem, e, null, null);
else
generateElement(elem, e, null, null);
}
}
write(" </xs:sequence>\r\n");
for (ElementDefn e : elem.getElements()) {
if (e.isXmlAttribute()) {
generateAttribute(elem, e, null);
}
}
if (!elem.getName().equals("Base")) {
write(" </xs:extension>\r\n");
write(" </xs:complexContent>\r\n");
}
write(" </xs:complexType>\r\n");
while (!structures.isEmpty()) {
String s = structures.keySet().iterator().next();
generateType(elem, s, structures.get(s));
structures.remove(s);
}
for (BindingSpecification en : enums) {
generateEnum(en);
}
}
use of org.hl7.fhir.definitions.model.BindingSpecification in project kindling by HL7.
the class ProfileGenerator method generateBinding.
private ElementDefinitionBindingComponent generateBinding(BindingSpecification src) throws Exception {
if (src == null)
return null;
ElementDefinitionBindingComponent dst = new ElementDefinitionBindingComponent();
dst.setDescription(src.getDescription());
if (!Utilities.noString(src.getDefinition())) {
dst.addExtension().setUrl(BuildExtensions.EXT_DEFINITION).setValue(new StringType(src.getDefinition()));
}
if (src.getBinding() != BindingMethod.Unbound) {
dst.setStrength(src.getStrength());
dst.setValueSet(buildValueSetReference(src));
if (src.hasMax()) {
dst.addExtension().setUrl("http://hl7.org/fhir/StructureDefinition/elementdefinition-maxValueSet").setValue(new CanonicalType(src.getMaxReference() != null ? src.getMaxReference() : src.getMaxValueSet().getUrl()));
}
} else {
dst.setStrength(BindingStrength.EXAMPLE);
}
dst.addExtension().setUrl("http://hl7.org/fhir/StructureDefinition/elementdefinition-bindingName").setValue(new StringType(src.getName()));
if (src.isShared())
dst.addExtension().setUrl("http://hl7.org/fhir/StructureDefinition/elementdefinition-isCommonBinding").setValue(new BooleanType(true));
return dst;
}
Aggregations