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:
commit
031c5690d8
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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) {
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
|
@ -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)) {
|
||||||
|
|
Loading…
Reference in New Issue