Merge pull request #1517 from hapifhir/2023-12-gg-package-version-loading-fix

fix problem with version dependencies when loading npm packages direc…
This commit is contained in:
Grahame Grieve 2023-12-13 19:49:47 +13:00 committed by GitHub
commit 031c5690d8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 53 additions and 8 deletions

View File

@ -64,6 +64,7 @@ import org.hl7.fhir.r5.model.IntegerType;
import org.hl7.fhir.r5.model.Meta; import org.hl7.fhir.r5.model.Meta;
import org.hl7.fhir.r5.model.StringType; import org.hl7.fhir.r5.model.StringType;
import org.hl7.fhir.r5.model.UriType; import org.hl7.fhir.r5.model.UriType;
import org.hl7.fhir.r5.utils.CanonicalResourceUtilities;
import org.hl7.fhir.r5.utils.ToolingExtensions; import org.hl7.fhir.r5.utils.ToolingExtensions;
import org.hl7.fhir.utilities.CommaSeparatedStringBuilder; import org.hl7.fhir.utilities.CommaSeparatedStringBuilder;
import org.hl7.fhir.utilities.MarkDownProcessor; import org.hl7.fhir.utilities.MarkDownProcessor;
@ -504,7 +505,7 @@ public class CodeSystemUtilities extends TerminologyUtilities {
if (wg != null) { if (wg != null) {
if (!ToolingExtensions.hasExtension(cs, ToolingExtensions.EXT_WORKGROUP) || if (!ToolingExtensions.hasExtension(cs, ToolingExtensions.EXT_WORKGROUP) ||
(Utilities.existsInList(ToolingExtensions.readStringExtension(cs, ToolingExtensions.EXT_WORKGROUP), "fhir", "vocab") && !Utilities.existsInList(wg, "fhir", "vocab"))) { (Utilities.existsInList(ToolingExtensions.readStringExtension(cs, ToolingExtensions.EXT_WORKGROUP), "fhir", "vocab") && !Utilities.existsInList(wg, "fhir", "vocab"))) {
ToolingExtensions.setCodeExtension(cs, ToolingExtensions.EXT_WORKGROUP, wg); CanonicalResourceUtilities.setHl7WG(cs, wg);
} }
} }
if (status != null) { if (status != null) {

View File

@ -64,6 +64,7 @@ import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionContainsComponent;
import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionPropertyComponent; import org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionPropertyComponent;
import org.hl7.fhir.r5.terminologies.CodeSystemUtilities.ConceptDefinitionComponentSorter; import org.hl7.fhir.r5.terminologies.CodeSystemUtilities.ConceptDefinitionComponentSorter;
import org.hl7.fhir.r5.terminologies.CodeSystemUtilities.ConceptStatus; import org.hl7.fhir.r5.terminologies.CodeSystemUtilities.ConceptStatus;
import org.hl7.fhir.r5.utils.CanonicalResourceUtilities;
import org.hl7.fhir.r5.utils.ToolingExtensions; import org.hl7.fhir.r5.utils.ToolingExtensions;
import org.hl7.fhir.utilities.StandardsStatus; import org.hl7.fhir.utilities.StandardsStatus;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
@ -139,7 +140,7 @@ public class ValueSetUtilities extends TerminologyUtilities {
if (wg != null) { if (wg != null) {
if (!ToolingExtensions.hasExtension(vs, ToolingExtensions.EXT_WORKGROUP) || if (!ToolingExtensions.hasExtension(vs, ToolingExtensions.EXT_WORKGROUP) ||
(!Utilities.existsInList(ToolingExtensions.readStringExtension(vs, ToolingExtensions.EXT_WORKGROUP), "fhir", "vocab") && Utilities.existsInList(wg, "fhir", "vocab"))) { (!Utilities.existsInList(ToolingExtensions.readStringExtension(vs, ToolingExtensions.EXT_WORKGROUP), "fhir", "vocab") && Utilities.existsInList(wg, "fhir", "vocab"))) {
ToolingExtensions.setCodeExtension(vs, ToolingExtensions.EXT_WORKGROUP, wg); CanonicalResourceUtilities.setHl7WG(vs, wg);
} }
} }
if (status != null) { if (status != null) {

View File

@ -6,6 +6,8 @@ import org.hl7.fhir.r5.elementmodel.Element;
import org.hl7.fhir.r5.model.CanonicalResource; import org.hl7.fhir.r5.model.CanonicalResource;
import org.hl7.fhir.r5.model.CompartmentDefinition; import org.hl7.fhir.r5.model.CompartmentDefinition;
import org.hl7.fhir.r5.model.Constants; import org.hl7.fhir.r5.model.Constants;
import org.hl7.fhir.r5.model.ContactDetail;
import org.hl7.fhir.r5.model.ContactPoint;
import org.hl7.fhir.r5.model.ContactPoint.ContactPointSystem; import org.hl7.fhir.r5.model.ContactPoint.ContactPointSystem;
import org.hl7.fhir.utilities.HL7WorkGroups; import org.hl7.fhir.utilities.HL7WorkGroups;
import org.hl7.fhir.utilities.VersionUtilities; import org.hl7.fhir.utilities.VersionUtilities;
@ -14,17 +16,33 @@ import org.hl7.fhir.utilities.xml.XMLUtil;
public class CanonicalResourceUtilities { public class CanonicalResourceUtilities {
public static void setHl7WG(CanonicalResource cr, String wgc) { public static void setHl7WG(CanonicalResource cr, String wgc) {
if ("http://hl7.org/fhir/days-of-week".equals(cr.getUrl())) {
System.out.println("!");
}
var wg = HL7WorkGroups.find(wgc); var wg = HL7WorkGroups.find(wgc);
if (wg == null) { if (wg == null) {
throw new Error("Unknown WG "+wgc); throw new Error("Unknown WG "+wgc);
} }
ToolingExtensions.setCodeExtension(cr, ToolingExtensions.EXT_WORKGROUP, wg.getCode()); ToolingExtensions.setCodeExtension(cr, ToolingExtensions.EXT_WORKGROUP, wg.getCode());
cr.setPublisher("HL7 International / "+wg.getName()); cr.setPublisher("HL7 International / "+wg.getName());
cr.getContact().clear(); boolean found = false;
cr.addContact().addTelecom().setSystem(ContactPointSystem.URL).setValue(wg.getLink()); for (ContactDetail c : cr.getContact()) {
for (ContactPoint t : c.getTelecom()) {
if ((t.getSystem() == ContactPointSystem.URL) && wg.getLink().equals(t.getValue())) {
found = true;
}
}
}
if (!found) {
cr.addContact().addTelecom().setSystem(ContactPointSystem.URL).setValue(wg.getLink());
}
} }
public static void setHl7WG(CanonicalResource cr) { public static void setHl7WG(CanonicalResource cr) {
if ("http://hl7.org/fhir/days-of-week".equals(cr.getUrl())) {
System.out.println("!");
}
String wgc = ToolingExtensions.readStringExtension(cr, ToolingExtensions.EXT_WORKGROUP); String wgc = ToolingExtensions.readStringExtension(cr, ToolingExtensions.EXT_WORKGROUP);
if (wgc == null) { if (wgc == null) {
wgc = "fhir"; wgc = "fhir";
@ -35,8 +53,17 @@ public class CanonicalResourceUtilities {
} }
ToolingExtensions.setCodeExtension(cr, ToolingExtensions.EXT_WORKGROUP, wg.getCode()); ToolingExtensions.setCodeExtension(cr, ToolingExtensions.EXT_WORKGROUP, wg.getCode());
cr.setPublisher("HL7 International / "+wg.getName()); cr.setPublisher("HL7 International / "+wg.getName());
cr.getContact().clear(); boolean found = false;
cr.addContact().addTelecom().setSystem(ContactPointSystem.URL).setValue(wg.getLink()); for (ContactDetail c : cr.getContact()) {
for (ContactPoint t : c.getTelecom()) {
if ((t.getSystem() == ContactPointSystem.URL) && wg.getLink().equals(t.getValue())) {
found = true;
}
}
}
if (!found) {
cr.addContact().addTelecom().setSystem(ContactPointSystem.URL).setValue(wg.getLink());
}
} }
public static void setHl7WG(Element res, String code) { public static void setHl7WG(Element res, String code) {

View File

@ -264,6 +264,7 @@ public class ToolingExtensions {
public static final String EXT_ARTIFACT_NAME = "http://hl7.org/fhir/StructureDefinition/artifact-name"; public static final String EXT_ARTIFACT_NAME = "http://hl7.org/fhir/StructureDefinition/artifact-name";
public static final String EXT_ARTIFACT_DESC = "http://hl7.org/fhir/StructureDefinition/artifact-description"; public static final String EXT_ARTIFACT_DESC = "http://hl7.org/fhir/StructureDefinition/artifact-description";
public static final String EXT_ED_SUPPRESS = "http://hl7.org/fhir/StructureDefinition/elementdefinition-suppress"; public static final String EXT_ED_SUPPRESS = "http://hl7.org/fhir/StructureDefinition/elementdefinition-suppress";
public static final String EXT_SEARCH_PARAMETER_BASE = "http://hl7.org/fhir/tools/StructureDefinition/searchparameter-base-type";;
// specific extension helpers // specific extension helpers

View File

@ -105,6 +105,14 @@ public class IgLoader implements IValidationEngineLoader {
} }
NpmPackage npm = srcPackage.matches(FilesystemPackageCacheManager.PACKAGE_VERSION_REGEX_OPT) && !new File(srcPackage).exists() ? getPackageCacheManager().loadPackage(srcPackage, null) : null; NpmPackage npm = srcPackage.matches(FilesystemPackageCacheManager.PACKAGE_VERSION_REGEX_OPT) && !new File(srcPackage).exists() ? getPackageCacheManager().loadPackage(srcPackage, null) : null;
if (npm == null && new File(srcPackage).exists()) {
// try treating the file as an npm
try {
npm = NpmPackage.fromPackage(new FileInputStream(srcPackage));
} catch (Exception e) {
// nothing - any errors will be properly handled later in the process
}
}
if (npm != null) { if (npm != null) {
for (String s : npm.dependencies()) { for (String s : npm.dependencies()) {
if (!getContext().getLoadedPackages().contains(s)) { if (!getContext().getLoadedPackages().contains(s)) {

View File

@ -12,6 +12,7 @@ import org.hl7.fhir.r5.fhirpath.ExpressionNode.Kind;
import org.hl7.fhir.r5.fhirpath.ExpressionNode.Operation; import org.hl7.fhir.r5.fhirpath.ExpressionNode.Operation;
import org.hl7.fhir.r5.fhirpath.FHIRPathEngine.IssueMessage; import org.hl7.fhir.r5.fhirpath.FHIRPathEngine.IssueMessage;
import org.hl7.fhir.r5.model.SearchParameter; import org.hl7.fhir.r5.model.SearchParameter;
import org.hl7.fhir.r5.utils.ToolingExtensions;
import org.hl7.fhir.utilities.Utilities; import org.hl7.fhir.utilities.Utilities;
import org.hl7.fhir.utilities.i18n.I18nConstants; import org.hl7.fhir.utilities.i18n.I18nConstants;
import org.hl7.fhir.utilities.validation.ValidationMessage; import org.hl7.fhir.utilities.validation.ValidationMessage;
@ -45,9 +46,15 @@ public class SearchParameterValidator extends BaseValidator {
if (cs.hasChild("expression", false)) { if (cs.hasChild("expression", false)) {
List<String> bases = new ArrayList<>(); List<String> bases = new ArrayList<>();
for (Element b : cs.getChildrenByName("base")) { for (Element b : cs.getChildrenByName("base")) {
bases.add(b.primitiveValue()); if (b.hasExtension(ToolingExtensions.EXT_SEARCH_PARAMETER_BASE)) {
bases.add(b.getExtensionValue(ToolingExtensions.EXT_SEARCH_PARAMETER_BASE).primitiveValue());
} else {
bases.add(b.primitiveValue());
}
}
if (!bases.isEmpty()) { // that'd be an error somewhere else
ok = checkExpression(errors, stack.push(cs.getNamedChild("expression", false), -1, null, null), cs.getNamedChildValue("expression", false), bases) && ok;
} }
ok = checkExpression(errors, stack.push(cs.getNamedChild("expression", false), -1, null, null), cs.getNamedChildValue("expression", false), bases) && ok;
} }
String master = cs.getNamedChildValue("derivedFrom", false); String master = cs.getNamedChildValue("derivedFrom", false);
if (!Utilities.noString(master)) { if (!Utilities.noString(master)) {