use of org.hl7.fhir.utilities.npm.PackageInfo in project kindling by HL7.
the class BindingsParser method loadValueSet.
private ValueSet loadValueSet(String ref, String committee) throws Exception {
String folder = new File(filename).getParent();
String srcName;
IParser p;
if (new File(Utilities.path(folder, ref + ".xml")).exists()) {
p = new XmlParser();
srcName = Utilities.path(folder, ref + ".xml");
} else if (new File(Utilities.path(folder, ref + ".json")).exists()) {
p = new JsonParser();
srcName = Utilities.path(folder, ref + ".json");
} else
throw new Exception("Unable to find source for " + ref + " in " + filename + " (" + Utilities.path(folder, ref + ".xml/json)"));
FileInputStream input = new FileInputStream(srcName);
try {
ValueSet result = ValueSetUtilities.makeShareable((ValueSet) p.parse(input));
result.setId(ref.substring(9));
if (!result.hasExperimental())
result.setExperimental(false);
// if (!result.hasUrl())
result.setUrl("http://hl7.org/fhir/ValueSet/" + ref.substring(9));
if (!result.hasVersion() || result.getUrl().startsWith("http://hl7.org/fhir"))
result.setVersion(version);
if (!Utilities.noString(committee)) {
if (!result.hasExtension(ToolingExtensions.EXT_WORKGROUP)) {
result.addExtension().setUrl(ToolingExtensions.EXT_WORKGROUP).setValue(new CodeType(committee));
} else {
String ec = ToolingExtensions.readStringExtension(result, ToolingExtensions.EXT_WORKGROUP);
if (!ec.equals(committee))
System.out.println("ValueSet " + result.getUrl() + " WG mismatch 1: is " + ec + ", want to set to " + committee);
}
}
result.setUserData("filename", "valueset-" + ref.substring(9));
result.setUserData("path", "valueset-" + ref.substring(9) + ".html");
new CodeSystemConvertor(codeSystems).convert(p, result, srcName, packageInfo);
return result;
} finally {
IOUtils.closeQuietly(input);
}
}
use of org.hl7.fhir.utilities.npm.PackageInfo in project kindling by HL7.
the class OldSpreadsheetParser method readBindings.
// Adds bindings to global definition.bindings. Returns list of
// newly found bindings in the sheet.
private void readBindings(Sheet sheet) throws Exception {
for (int row = 0; row < sheet.rows.size(); row++) {
String bindingName = sheet.getColumn(row, "Binding Name");
}
ValueSetGenerator vsGen = new ValueSetGenerator(definitions, version.toCode(), genDate, context.translator(), packageInfo);
for (int row = 0; row < sheet.rows.size(); row++) {
String bindingName = sheet.getColumn(row, "Binding Name");
// Ignore bindings whose name start with "!"
if (Utilities.noString(bindingName) || bindingName.startsWith("!"))
continue;
// if (Character.isLowerCase(bindingName.charAt(0)))
// throw new Exception("binding name "+bindingName+" is illegal - must start with a capital letter");
BindingSpecification cd = new BindingSpecification(usageContext, bindingName, false);
if (definitions != null)
definitions.getAllBindings().add(cd);
cd.setDefinition(Utilities.appendPeriod(sheet.getColumn(row, "Definition")));
cd.setBindingMethod(BindingsParser.readBinding(sheet.getColumn(row, "Binding"), cd.getName() + " in " + folder));
String ref = sheet.getColumn(row, "Reference");
if (!cd.getBinding().equals(BindingMethod.Unbound) && Utilities.noString(ref))
throw new Exception("binding " + cd.getName() + " is missing a reference");
if (cd.getBinding() == BindingMethod.CodeList) {
if (ref.startsWith("#valueset-"))
throw new Exception("don't start code list references with #valueset-");
cd.setValueSet(ValueSetUtilities.makeShareable(new ValueSet()));
valuesets.add(cd.getValueSet());
cd.getValueSet().setVersion(version.toCode());
cd.getValueSet().setId(igSuffix(ig) + ref.substring(1));
cd.getValueSet().setUrl("http://hl7.org/fhir/ValueSet/" + igSuffix(ig) + ref.substring(1));
cd.getValueSet().setUserData("filename", "valueset-" + cd.getValueSet().getId());
if (!cd.getValueSet().hasExtension(ToolingExtensions.EXT_WORKGROUP)) {
cd.getValueSet().addExtension().setUrl(ToolingExtensions.EXT_WORKGROUP).setValue(new CodeType(committee.getCode()));
} else {
String ec = ToolingExtensions.readStringExtension(cd.getValueSet(), ToolingExtensions.EXT_WORKGROUP);
if (!ec.equals(committee))
System.out.println("ValueSet " + cd.getValueSet().getUrl() + " WG mismatch 3: is " + ec + ", want to set to " + committee.getCode());
}
if (ig != null) {
cd.getValueSet().setUserDataINN(ToolResourceUtilities.NAME_RES_IG, ig);
cd.getValueSet().setUserData("path", "valueset-" + cd.getValueSet().getId() + ".html");
} else
cd.getValueSet().setUserData("path", "valueset-" + cd.getValueSet().getId() + ".html");
if (!cd.getValueSet().getUserData("path").equals(cd.getValueSet().getUserData("filename") + ".html"))
throw new Exception("Mis-identified value set");
if (!ref.startsWith("#"))
throw new Exception("Error parsing binding " + cd.getName() + ": code list reference '" + ref + "' must started with '#'");
Sheet cs = xls.getSheets().get(ref.substring(1));
if (cs == null)
throw new Exception("Error parsing binding " + cd.getName() + ": code list reference '" + ref + "' not resolved");
vsGen.updateHeader(cd, cd.getValueSet());
new CodeListToValueSetParser(cs, ref.substring(1), cd.getValueSet(), version.toCode(), codeSystems, maps, packageInfo).execute(sheet.getColumn(row, "v2"), checkV3Mapping(sheet.getColumn(row, "v3")), getIsUtg(bindingName));
} else if (cd.getBinding() == BindingMethod.ValueSet) {
if (ref.startsWith("http:"))
// will sort this out later
cd.setReference(sheet.getColumn(row, "Reference"));
else
cd.setValueSet(loadValueSet(ref));
} else if (cd.getBinding() == BindingMethod.Special) {
if ("#operation-outcome".equals(sheet.getColumn(row, "Reference")))
new ValueSetGenerator(definitions, version.toCode(), genDate, context.translator(), packageInfo).loadOperationOutcomeValueSet(cd);
else
throw new Exception("Special bindings are only allowed in bindings.xml");
}
// do this anyway in the short term
cd.setReference(sheet.getColumn(row, "Reference"));
if (cd.getValueSet() != null) {
ValueSet vs = cd.getValueSet();
ValueSetUtilities.makeShareable(vs);
vs.setUserData("filename", "valueset-" + vs.getId());
if (!vs.hasExtension(ToolingExtensions.EXT_WORKGROUP)) {
vs.addExtension().setUrl(ToolingExtensions.EXT_WORKGROUP).setValue(new CodeType(committee.getCode()));
} else {
String ec = ToolingExtensions.readStringExtension(vs, ToolingExtensions.EXT_WORKGROUP);
if (!ec.equals(committee.getCode()))
System.out.println("ValueSet " + vs.getUrl() + " WG mismatch 4: is " + ec + ", want to set to " + committee.getCode());
}
if (ig != null) {
vs.setUserDataINN(ToolResourceUtilities.NAME_RES_IG, ig);
vs.setUserData("path", ig.getCode() + "/valueset-" + vs.getId() + ".html");
} else
vs.setUserData("path", "valueset-" + vs.getId() + ".html");
if (!ValueSetUtilities.hasOID(vs))
ValueSetUtilities.setOID(vs, "urn:oid:" + BindingSpecification.DEFAULT_OID_VS + registry.idForUri(vs.getUrl()));
if (vs.getUserData("cs") != null) {
if (!CodeSystemUtilities.hasOID((CodeSystem) vs.getUserData("cs")))
CodeSystemUtilities.setOID((CodeSystem) vs.getUserData("cs"), "urn:oid:" + BindingSpecification.DEFAULT_OID_CS + registry.idForUri(((CodeSystem) vs.getUserData("cs")).getUrl()));
}
if (definitions != null)
definitions.getBoundValueSets().put(vs.getUrl(), vs);
else
ig.getValueSets().add(vs);
} else if (cd.getReference() != null && cd.getReference().startsWith("http:")) {
if (definitions != null)
definitions.getUnresolvedBindings().add(cd);
else
ig.getUnresolvedBindings().add(cd);
}
cd.setDescription(sheet.getColumn(row, "Description"));
if (!Utilities.noString(sheet.getColumn(row, "Example")))
throw new Exception("The 'Example' column is no longer supported");
if (!Utilities.noString(sheet.getColumn(row, "Extensible")))
throw new Exception("The 'Extensible' column is no longer supported");
cd.setStrength(BindingsParser.readBindingStrength(sheet.getColumn(row, "Conformance")));
if (cd.getBinding() == BindingMethod.Unbound) {
cd.setStrength(BindingStrength.EXAMPLE);
}
cd.setSource(name);
cd.setUri(sheet.getColumn(row, "Uri"));
String oid = sheet.getColumn(row, "Oid");
if (!Utilities.noString(oid))
// no cs oid in this case
cd.setVsOid(oid);
cd.setStatus(PublicationStatus.fromCode(sheet.getColumn(row, "Status")));
cd.setWebSite(sheet.getColumn(row, "Website"));
cd.setEmail(sheet.getColumn(row, "Email"));
cd.setCopyright(sheet.getColumn(row, "Copyright"));
cd.setV2Map(sheet.getColumn(row, "v2"));
cd.setV3Map(checkV3Mapping(sheet.getColumn(row, "v3")));
String max = sheet.getColumn(row, "Max");
if (!Utilities.noString(max))
if (max.startsWith("http:")) {
// will sort this out later
cd.setMaxReference(max);
} else
cd.setMaxValueSet(loadValueSet(max));
bindings.put(cd.getName(), cd);
if (cd.getValueSet() != null) {
ValueSet vs = cd.getValueSet();
vsGen.updateHeader(cd, cd.getValueSet());
}
}
}
use of org.hl7.fhir.utilities.npm.PackageInfo in project kindling by HL7.
the class CodeListToValueSetParser method generateConceptMapV2.
private void generateConceptMapV2(String v2map, ValueSet vs, CodeSystem cs) throws Exception {
ConceptMap cm = new ConceptMap();
cm.setId("cm-" + vs.getId() + "-v2");
cm.setVersion(version);
cm.setUserData("path", cm.getId() + ".html");
cm.setUserData("generate", true);
cm.setUrl("http://hl7.org/fhir/ConceptMap/" + cm.getId());
cm.setName("v2." + vs.getName());
cm.setTitle("v2 map for " + vs.present());
cm.setPublisher("HL7 (FHIR Project)");
for (ContactDetail cc : vs.getContact()) {
ContactDetail cd = cm.addContact();
cd.setName(cc.getName());
for (ContactPoint ccs : cc.getTelecom()) cd.addTelecom(ccs.copy());
}
cm.setCopyright(vs.getCopyright());
// until we publish DSTU, then .review
cm.setStatus(vs.getStatus());
cm.setDate(vs.getDate());
cm.setSource(Factory.newCanonical(vs.getUrl()));
cm.setTarget(Factory.newCanonical(v2map));
if (cs != null)
processV2ConceptDefs(cm, cs.getUrl(), cs.getConcept());
for (ConceptSetComponent cc : vs.getCompose().getInclude()) for (ConceptReferenceComponent c : cc.getConcept()) {
processV2Map(cm, cc.getSystem(), c.getCode(), c.getUserString("v2"));
}
maps.see(cm, packageInfo);
}
use of org.hl7.fhir.utilities.npm.PackageInfo in project kindling by HL7.
the class CodeSystemConvertor method convert.
public void convert(IParser p, ValueSet vs, String name, PackageVersion packageInfo) throws Exception {
String nname = name.replace("valueset-", "codesystem-");
if (nname.equals(name))
nname = Utilities.changeFileExt(name, "-cs.xml");
if (new File(nname).exists()) {
FileInputStream input = new FileInputStream(nname);
CodeSystem cs = CodeSystemUtilities.makeShareable((CodeSystem) p.parse(input));
if (!cs.hasTitle())
cs.setTitle(Utilities.capitalize(Utilities.unCamelCase(cs.getName())));
populate(cs, vs);
// if (codeSystems.containsKey(cs.getUrl()))
// throw new Exception("Duplicate Code System: "+cs.getUrl());
codeSystems.see(cs, packageInfo);
}
}
use of org.hl7.fhir.utilities.npm.PackageInfo in project org.hl7.fhir.core by hapifhir.
the class BaseWorkerContext method registerResourceFromPackage.
public void registerResourceFromPackage(CanonicalResourceProxy r, PackageVersion packageInfo) throws FHIRException {
synchronized (lock) {
if (r.getId() != null) {
Map<String, ResourceProxy> map = allResourcesById.get(r.getType());
if (map == null) {
map = new HashMap<String, ResourceProxy>();
allResourcesById.put(r.getType(), map);
}
if ((packageInfo == null || !packageInfo.isExamplesPackage()) || !map.containsKey(r.getId())) {
map.put(r.getId(), new ResourceProxy(r));
}
}
String url = r.getUrl();
if (!allowLoadingDuplicates && hasResource(r.getType(), url)) {
// spcial workaround for known problems with existing packages
if (Utilities.existsInList(url, "http://hl7.org/fhir/SearchParameter/example")) {
return;
}
throw new DefinitionException(formatMessage(I18nConstants.DUPLICATE_RESOURCE_, url));
}
switch(r.getType()) {
case "StructureDefinition":
if ("1.4.0".equals(version)) {
StructureDefinition sd = (StructureDefinition) r.getResource();
fixOldSD(sd);
}
structures.register(r, packageInfo);
break;
case "ValueSet":
valueSets.register(r, packageInfo);
break;
case "CodeSystem":
codeSystems.register(r, packageInfo);
break;
case "ImplementationGuide":
guides.register(r, packageInfo);
break;
case "CapabilityStatement":
capstmts.register(r, packageInfo);
break;
case "Measure":
measures.register(r, packageInfo);
break;
case "Library":
libraries.register(r, packageInfo);
break;
case "SearchParameter":
searchParameters.register(r, packageInfo);
break;
case "PlanDefinition":
plans.register(r, packageInfo);
break;
case "OperationDefinition":
operations.register(r, packageInfo);
break;
case "Questionnaire":
questionnaires.register(r, packageInfo);
break;
case "ConceptMap":
maps.register(r, packageInfo);
break;
case "StructureMap":
transforms.register(r, packageInfo);
break;
case "NamingSystem":
systems.register(r, packageInfo);
break;
}
}
}
Aggregations