From f7a495685ba2b7ca75696af4bfa647241d44f70e Mon Sep 17 00:00:00 2001 From: dotasek Date: Thu, 6 Jun 2024 16:21:14 -0400 Subject: [PATCH 01/11] Fix case typo in Consent.ProvisionComponent --- .../resources30_40/Consent30_40.java | 13 +- .../resources40_50/Consent40_50.java | 9 +- .../org/hl7/fhir/r4/formats/RdfParser.java | 2 +- .../org/hl7/fhir/r4/formats/XmlParser.java | 12 +- .../java/org/hl7/fhir/r4/model/Consent.java | 140 +++++++++--------- 5 files changed, 89 insertions(+), 87 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java index 1c783f74c..eaf5aba5a 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java @@ -13,6 +13,7 @@ import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Date import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Uri30_40; import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.r4.model.CodeableConcept; +import org.hl7.fhir.r4.model.Consent; import org.hl7.fhir.r4.model.Identifier; public class Consent30_40 { @@ -47,7 +48,7 @@ public class Consent30_40 { tgt.setPolicyRule(new CodeableConcept(c)); } if (src.hasSecurityLabel() || src.hasPeriod() || src.hasActor() || src.hasAction() || src.hasPurpose() || src.hasDataPeriod() || src.hasData() || src.hasExcept()) { - org.hl7.fhir.r4.model.Consent.provisionComponent pc = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + Consent.ProvisionComponent pc = new Consent.ProvisionComponent(); if (src.hasPeriod()) pc.setPeriod(Period30_40.convertPeriod(src.getPeriod())); for (org.hl7.fhir.dstu3.model.Consent.ConsentActorComponent t : src.getActor()) @@ -104,7 +105,7 @@ public class Consent30_40 { } } if (src.hasProvision()) { - org.hl7.fhir.r4.model.Consent.provisionComponent p = src.getProvision(); + Consent.ProvisionComponent p = src.getProvision(); if (p.hasPeriod()) tgt.setPeriod(Period30_40.convertPeriod(p.getPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionActorComponent t : p.getActor()) @@ -117,7 +118,7 @@ public class Consent30_40 { tgt.setDataPeriod(Period30_40.convertPeriod(p.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : p.getData()) tgt.addData(convertConsentDataComponent(t)); - for (org.hl7.fhir.r4.model.Consent.provisionComponent t : p.getProvision()) + for (Consent.ProvisionComponent t : p.getProvision()) tgt.addExcept(convertExceptComponent(t)); } return tgt; @@ -369,7 +370,7 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { + static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.dstu3.model.Consent.ExceptComponent tgt = new org.hl7.fhir.dstu3.model.Consent.ExceptComponent(); @@ -393,10 +394,10 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.r4.model.Consent.provisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { + static public Consent.ProvisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { if (src == null) return null; - org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); ConversionContext30_40.INSTANCE.getVersionConvertor_30_40().copyBackboneElement(src,tgt); if (src.hasType()) tgt.setTypeElement(convertConsentExceptType(src.getTypeElement())); diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java index 0fe389de5..d5fa94f0f 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java @@ -10,6 +10,7 @@ import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Boolean40 import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.DateTime40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.special40_50.Reference40_50; import org.hl7.fhir.exceptions.FHIRException; +import org.hl7.fhir.r4.model.Consent; /* Copyright (c) 2011+, HL7, Inc. @@ -220,7 +221,7 @@ public class Consent40_50 { return tgt; } - public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { + public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.r5.model.Consent.ProvisionComponent tgt = new org.hl7.fhir.r5.model.Consent.ProvisionComponent(); @@ -242,15 +243,15 @@ public class Consent40_50 { tgt.setDataPeriod(Period40_50.convertPeriod(src.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : src.getData()) tgt.addData(convertprovisionDataComponent(t)); - for (org.hl7.fhir.r4.model.Consent.provisionComponent t : src.getProvision()) + for (Consent.ProvisionComponent t : src.getProvision()) tgt.addProvision(convertprovisionComponent(t)); return tgt; } - public static org.hl7.fhir.r4.model.Consent.provisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { + public static Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; - org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); + Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt); // if (src.hasType()) // tgt.setTypeElement(convertConsentProvisionType(src.getTypeElement())); diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java index e09127adc..ee7a21d82 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java @@ -4917,7 +4917,7 @@ public class RdfParser extends RdfParserBase { } protected void composeConsentprovisionComponent(Complex parent, String parentType, String name, - Consent.provisionComponent element, int index) { + Consent.ProvisionComponent element, int index) { if (element == null) return; Complex t; diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java index 7ccf6fdd6..6c46487ea 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java @@ -6924,9 +6924,9 @@ public class XmlParser extends XmlParserBase { return true; } - protected Consent.provisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) + protected Consent.ProvisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) throws XmlPullParserException, IOException, FHIRFormatError { - Consent.provisionComponent res = new Consent.provisionComponent(); + Consent.ProvisionComponent res = new Consent.ProvisionComponent(); parseBackboneAttributes(xpp, res); next(xpp); int eventType = nextNoWhitespace(xpp); @@ -6941,7 +6941,7 @@ public class XmlParser extends XmlParserBase { } protected boolean parseConsentprovisionComponentContent(int eventType, XmlPullParser xpp, Consent owner, - Consent.provisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { + Consent.ProvisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("type")) { res.setTypeElement( parseEnumeration(xpp, Consent.ConsentProvisionType.NULL, new Consent.ConsentProvisionTypeEnumFactory())); @@ -34008,7 +34008,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponent(String name, Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponent(String name, Consent.ProvisionComponent element) throws IOException { if (element != null) { composeElementAttributes(element); xml.enter(FHIR_NS, name); @@ -34018,7 +34018,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponentElements(Consent.provisionComponent element) throws IOException { + protected void composeConsentprovisionComponentElements(Consent.ProvisionComponent element) throws IOException { composeBackboneElementElements(element); if (element.hasTypeElement()) composeEnumeration("type", element.getTypeElement(), new Consent.ConsentProvisionTypeEnumFactory()); @@ -34057,7 +34057,7 @@ public class XmlParser extends XmlParserBase { composeConsentprovisionDataComponent("data", e); } if (element.hasProvision()) { - for (Consent.provisionComponent e : element.getProvision()) + for (Consent.ProvisionComponent e : element.getProvision()) composeConsentprovisionComponent("provision", e); } } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java index c2abe1adf..8ddec6144 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java @@ -750,9 +750,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("authority")) { this.authority = null; @@ -1111,9 +1111,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("verified")) { this.verified = null; @@ -1215,7 +1215,7 @@ public class Consent extends DomainResource { } @Block() - public static class provisionComponent extends BackboneElement implements IBaseBackboneElement { + public static class ProvisionComponent extends BackboneElement implements IBaseBackboneElement { /** * Action to take - permit or deny - when the rule conditions are met. Not * permitted in root rule, required in all nested rules. @@ -1308,16 +1308,16 @@ public class Consent extends DomainResource { * Rules which provide exceptions to the base rule or subrules. */ @Child(name = "provision", type = { - provisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) + ProvisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) @Description(shortDefinition = "Nested Exception Rules", formalDefinition = "Rules which provide exceptions to the base rule or subrules.") - protected List provision; + protected List provision; private static final long serialVersionUID = -1280172451L; /** * Constructor */ - public provisionComponent() { + public ProvisionComponent() { super(); } @@ -1351,7 +1351,7 @@ public class Consent extends DomainResource { * extensions. The accessor "getType" gives direct access to the * value */ - public provisionComponent setTypeElement(Enumeration value) { + public ProvisionComponent setTypeElement(Enumeration value) { this.type = value; return this; } @@ -1368,7 +1368,7 @@ public class Consent extends DomainResource { * @param value Action to take - permit or deny - when the rule conditions are * met. Not permitted in root rule, required in all nested rules. */ - public provisionComponent setType(ConsentProvisionType value) { + public ProvisionComponent setType(ConsentProvisionType value) { if (value == null) this.type = null; else { @@ -1398,7 +1398,7 @@ public class Consent extends DomainResource { /** * @param value {@link #period} (The timeframe in this rule is valid.) */ - public provisionComponent setPeriod(Period value) { + public ProvisionComponent setPeriod(Period value) { this.period = value; return this; } @@ -1417,7 +1417,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setActor(List theActor) { + public ProvisionComponent setActor(List theActor) { this.actor = theActor; return this; } @@ -1439,7 +1439,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addActor(provisionActorComponent t) { // 3 + public ProvisionComponent addActor(provisionActorComponent t) { // 3 if (t == null) return this; if (this.actor == null) @@ -1471,7 +1471,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setAction(List theAction) { + public ProvisionComponent setAction(List theAction) { this.action = theAction; return this; } @@ -1493,7 +1493,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addAction(CodeableConcept t) { // 3 + public ProvisionComponent addAction(CodeableConcept t) { // 3 if (t == null) return this; if (this.action == null) @@ -1527,7 +1527,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setSecurityLabel(List theSecurityLabel) { + public ProvisionComponent setSecurityLabel(List theSecurityLabel) { this.securityLabel = theSecurityLabel; return this; } @@ -1549,7 +1549,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addSecurityLabel(Coding t) { // 3 + public ProvisionComponent addSecurityLabel(Coding t) { // 3 if (t == null) return this; if (this.securityLabel == null) @@ -1583,7 +1583,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setPurpose(List thePurpose) { + public ProvisionComponent setPurpose(List thePurpose) { this.purpose = thePurpose; return this; } @@ -1605,7 +1605,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addPurpose(Coding t) { // 3 + public ProvisionComponent addPurpose(Coding t) { // 3 if (t == null) return this; if (this.purpose == null) @@ -1640,7 +1640,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setClass_(List theClass_) { + public ProvisionComponent setClass_(List theClass_) { this.class_ = theClass_; return this; } @@ -1662,7 +1662,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addClass_(Coding t) { // 3 + public ProvisionComponent addClass_(Coding t) { // 3 if (t == null) return this; if (this.class_ == null) @@ -1695,7 +1695,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setCode(List theCode) { + public ProvisionComponent setCode(List theCode) { this.code = theCode; return this; } @@ -1717,7 +1717,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addCode(CodeableConcept t) { // 3 + public ProvisionComponent addCode(CodeableConcept t) { // 3 if (t == null) return this; if (this.code == null) @@ -1758,7 +1758,7 @@ public class Consent extends DomainResource { * @param value {@link #dataPeriod} (Clinical or Operational Relevant period of * time that bounds the data controlled by this rule.) */ - public provisionComponent setDataPeriod(Period value) { + public ProvisionComponent setDataPeriod(Period value) { this.dataPeriod = value; return this; } @@ -1776,7 +1776,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setData(List theData) { + public ProvisionComponent setData(List theData) { this.data = theData; return this; } @@ -1798,7 +1798,7 @@ public class Consent extends DomainResource { return t; } - public provisionComponent addData(provisionDataComponent t) { // 3 + public ProvisionComponent addData(provisionDataComponent t) { // 3 if (t == null) return this; if (this.data == null) @@ -1822,16 +1822,16 @@ public class Consent extends DomainResource { * @return {@link #provision} (Rules which provide exceptions to the base rule * or subrules.) */ - public List getProvision() { + public List getProvision() { if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); return this.provision; } /** * @return Returns a reference to this for easy method chaining */ - public provisionComponent setProvision(List theProvision) { + public ProvisionComponent setProvision(List theProvision) { this.provision = theProvision; return this; } @@ -1839,25 +1839,25 @@ public class Consent extends DomainResource { public boolean hasProvision() { if (this.provision == null) return false; - for (provisionComponent item : this.provision) + for (ProvisionComponent item : this.provision) if (!item.isEmpty()) return true; return false; } - public provisionComponent addProvision() { // 3 - provisionComponent t = new provisionComponent(); + public ProvisionComponent addProvision() { // 3 + ProvisionComponent t = new ProvisionComponent(); if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return t; } - public provisionComponent addProvision(provisionComponent t) { // 3 + public ProvisionComponent addProvision(ProvisionComponent t) { // 3 if (t == null) return this; if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return this; } @@ -1866,7 +1866,7 @@ public class Consent extends DomainResource { * @return The first repetition of repeating field {@link #provision}, creating * it if it does not already exist */ - public provisionComponent getProvisionFirstRep() { + public ProvisionComponent getProvisionFirstRep() { if (getProvision().isEmpty()) { addProvision(); } @@ -2021,7 +2021,7 @@ public class Consent extends DomainResource { this.getData().add((provisionDataComponent) value); // provisionDataComponent return value; case -547120939: // provision - this.getProvision().add((provisionComponent) value); // provisionComponent + this.getProvision().add((ProvisionComponent) value); // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -2053,13 +2053,13 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().add((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().add((provisionComponent) value); + this.getProvision().add((ProvisionComponent) value); } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("type")) { this.type = null; @@ -2082,7 +2082,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().remove((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().remove((provisionComponent) value); + this.getProvision().remove((ProvisionComponent) value); } else super.removeChild(name, value); @@ -2180,13 +2180,13 @@ public class Consent extends DomainResource { return super.addChild(name); } - public provisionComponent copy() { - provisionComponent dst = new provisionComponent(); + public ProvisionComponent copy() { + ProvisionComponent dst = new ProvisionComponent(); copyValues(dst); return dst; } - public void copyValues(provisionComponent dst) { + public void copyValues(ProvisionComponent dst) { super.copyValues(dst); dst.type = type == null ? null : type.copy(); dst.period = period == null ? null : period.copy(); @@ -2234,8 +2234,8 @@ public class Consent extends DomainResource { } ; if (provision != null) { - dst.provision = new ArrayList(); - for (provisionComponent i : provision) + dst.provision = new ArrayList(); + for (ProvisionComponent i : provision) dst.provision.add(i.copy()); } ; @@ -2245,9 +2245,9 @@ public class Consent extends DomainResource { public boolean equalsDeep(Base other_) { if (!super.equalsDeep(other_)) return false; - if (!(other_ instanceof provisionComponent)) + if (!(other_ instanceof ProvisionComponent)) return false; - provisionComponent o = (provisionComponent) other_; + ProvisionComponent o = (ProvisionComponent) other_; return compareDeep(type, o.type, true) && compareDeep(period, o.period, true) && compareDeep(actor, o.actor, true) && compareDeep(action, o.action, true) && compareDeep(securityLabel, o.securityLabel, true) && compareDeep(purpose, o.purpose, true) && compareDeep(class_, o.class_, true) @@ -2259,9 +2259,9 @@ public class Consent extends DomainResource { public boolean equalsShallow(Base other_) { if (!super.equalsShallow(other_)) return false; - if (!(other_ instanceof provisionComponent)) + if (!(other_ instanceof ProvisionComponent)) return false; - provisionComponent o = (provisionComponent) other_; + ProvisionComponent o = (ProvisionComponent) other_; return compareValues(type, o.type, true); } @@ -2468,9 +2468,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("role")) { this.role = null; @@ -2771,9 +2771,9 @@ public class Consent extends DomainResource { } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("meaning")) { this.meaning = null; @@ -2996,7 +2996,7 @@ public class Consent extends DomainResource { */ @Child(name = "provision", type = {}, order = 12, min = 0, max = 1, modifier = false, summary = true) @Description(shortDefinition = "Constraints to the base Consent.policyRule", formalDefinition = "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.") - protected provisionComponent provision; + protected ProvisionComponent provision; private static final long serialVersionUID = 206528051L; @@ -3663,12 +3663,12 @@ public class Consent extends DomainResource { * @return {@link #provision} (An exception to the base policy of this consent. * An exception can be an addition or removal of access permissions.) */ - public provisionComponent getProvision() { + public ProvisionComponent getProvision() { if (this.provision == null) if (Configuration.errorOnAutoCreate()) throw new Error("Attempt to auto-create Consent.provision"); else if (Configuration.doAutoCreate()) - this.provision = new provisionComponent(); // cc + this.provision = new ProvisionComponent(); // cc return this.provision; } @@ -3681,7 +3681,7 @@ public class Consent extends DomainResource { * consent. An exception can be an addition or removal of access * permissions.) */ - public Consent setProvision(provisionComponent value) { + public Consent setProvision(ProvisionComponent value) { this.provision = value; return this; } @@ -3877,7 +3877,7 @@ public class Consent extends DomainResource { this.getVerification().add((ConsentVerificationComponent) value); // ConsentVerificationComponent return value; case -547120939: // provision - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -3913,13 +3913,13 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().add((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent } else return super.setProperty(name, value); return value; - } - - @Override + } + + @Override public void removeChild(String name, Base value) throws FHIRException { if (name.equals("identifier")) { this.getIdentifier().remove(castToIdentifier(value)); @@ -3946,7 +3946,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().remove((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (provisionComponent) value; // provisionComponent + this.provision = (ProvisionComponent) value; // provisionComponent } else super.removeChild(name, value); @@ -4058,7 +4058,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { return addVerification(); } else if (name.equals("provision")) { - this.provision = new provisionComponent(); + this.provision = new ProvisionComponent(); return this.provision; } else return super.addChild(name); From 9dae4118ae843e3380d845ee0a29d6bc1d277f94 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Sat, 14 Sep 2024 08:26:07 +0800 Subject: [PATCH 02/11] refactor error handling in ProfileUtilities --- .../conformance/profile/ProfileUtilities.java | 95 ++++++++++--------- 1 file changed, 48 insertions(+), 47 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java index 7a75e0358..bc8d243a2 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/conformance/profile/ProfileUtilities.java @@ -413,11 +413,10 @@ public class ProfileUtilities { // note that ProfileUtilities are used re-entrantly internally, so nothing with process state can be here private final IWorkerContext context; private FHIRPathEngine fpe; - private List messages; + private List messages = new ArrayList(); private List snapshotStack = new ArrayList(); private ProfileKnowledgeProvider pkp; // private boolean igmode; - private boolean exception; private ValidationOptions terminologyServiceOptions = new ValidationOptions(FhirPublication.R5); private boolean newSlicingProcessing; private String defWebRoot; @@ -431,11 +430,16 @@ public class ProfileUtilities { private MappingMergeModeOption mappingMergeMode = MappingMergeModeOption.APPEND; private boolean forPublication; private List obligationProfiles = new ArrayList<>(); + private boolean wantThrowExceptions; public ProfileUtilities(IWorkerContext context, List messages, ProfileKnowledgeProvider pkp, FHIRPathEngine fpe) { super(); this.context = context; - this.messages = messages; + if (messages != null) { + this.messages = messages; + } else { + wantThrowExceptions = true; + } this.pkp = pkp; this.fpe = fpe; @@ -447,7 +451,11 @@ public class ProfileUtilities { public ProfileUtilities(IWorkerContext context, List messages, ProfileKnowledgeProvider pkp) { super(); this.context = context; - this.messages = messages; + if (messages != null) { + this.messages = messages; + } else { + wantThrowExceptions = true; + } this.pkp = pkp; if (context != null) { this.fpe = new FHIRPathEngine(context, this); @@ -789,7 +797,7 @@ public class ProfileUtilities { ce++; if (e.hasId()) { String msg = "No match found for "+e.getId()+" in the generated snapshot: check that the path and definitions are legal in the differential (including order)"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.differential.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.differential.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR)); } } i++; @@ -862,19 +870,19 @@ public class ProfileUtilities { slice.getFocus().setMin(count); } else { String msg = "The slice definition for "+slice.getFocus().getId()+" has a minimum of "+slice.getFocus().getMin()+" but the slices add up to a minimum of "+count; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+slice.getIndex()+"]", msg, forPublication ? ValidationMessage.IssueSeverity.ERROR : ValidationMessage.IssueSeverity.INFORMATION).setIgnorableError(true)); } } count = slice.checkMax(); if (count > -1 && repeats) { String msg = "The slice definition for "+slice.getFocus().getId()+" has a maximum of "+slice.getFocus().getMax()+" but the slices add up to a maximum of "+count+". Check that this is what is intended"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+slice.getIndex()+"]", msg, ValidationMessage.IssueSeverity.INFORMATION)); } if (!slice.checkMinMax()) { String msg = "The slice definition for "+slice.getFocus().getId()+" has a maximum of "+slice.getFocus().getMax()+" which is less than the minimum of "+slice.getFocus().getMin(); - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+slice.getIndex()+"]", msg, ValidationMessage.IssueSeverity.WARNING)); } slices.remove(s); @@ -885,13 +893,13 @@ public class ProfileUtilities { } if (ed.hasSliceName() && !slices.containsKey(ed.getPath())) { String msg = "The element "+ed.getId()+" launches straight into slicing without the slicing being set up properly first"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR).setIgnorableError(true)); } if (ed.hasSliceName() && slices.containsKey(ed.getPath())) { if (!slices.get(ed.getPath()).count(ed, ed.getSliceName())) { String msg = "Duplicate slice name "+ed.getSliceName()+" on "+ed.getId()+" (["+i+"])"; - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+i+"]", msg, ValidationMessage.IssueSeverity.ERROR).setIgnorableError(true)); } } @@ -910,10 +918,8 @@ public class ProfileUtilities { } } if (sd == null) { - if (messages != null) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, "StructureDefinition.snapshot.element["+i+"]", "The type of profile "+u.getValue()+" cannot be checked as the profile is not known", IssueSeverity.WARNING)); - } } else { String wt = t.getWorkingCode(); if (ed.getPath().equals("Bundle.entry.response.outcome")) { @@ -1012,13 +1018,15 @@ public class ProfileUtilities { } private void handleError(String url, String msg) { - if (exception) - throw new DefinitionException(msg); - else - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, url, msg, ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.VALUE, url, msg, ValidationMessage.IssueSeverity.ERROR)); } - + private void addMessage(ValidationMessage msg) { + messages.add(msg); + if (msg.getLevel() == IssueSeverity.ERROR && wantThrowExceptions) { + throw new DefinitionException(msg.getMessage()); + } + } private void copyInheritedExtensions(StructureDefinition base, StructureDefinition derived, String webUrl) { @@ -2249,7 +2257,7 @@ public class ProfileUtilities { * Not sure we have enough information here to do the check properly. Might be better done when we're sorting the profile? if (i != start && result.isEmpty() && !path.startsWith(context.getElement().get(start).getPath())) - messages.add(new ValidationMessage(Source.ProfileValidator, IssueType.VALUE, "StructureDefinition.differential.element["+Integer.toString(start)+"]", "Error: unknown element '"+context.getElement().get(start).getPath()+"' (or it is out of order) in profile '"+url+"' (looking for '"+path+"')", IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, IssueType.VALUE, "StructureDefinition.differential.element["+Integer.toString(start)+"]", "Error: unknown element '"+context.getElement().get(start).getPath()+"' (or it is out of order) in profile '"+url+"' (looking for '"+path+"')", IssueSeverity.WARNING)); */ result.add(context.getElement().get(i)); @@ -2529,7 +2537,7 @@ public class ProfileUtilities { if (derived.hasMinElement()) { if (!Base.compareDeep(derived.getMinElement(), base.getMinElement(), false)) { if (derived.getMin() < base.getMin() && !derived.hasSliceName()) // in a slice, minimum cardinality rules do not apply - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived min ("+Integer.toString(derived.getMin())+") cannot be less than the base min ("+Integer.toString(base.getMin())+") in "+srcSD.getVersionedUrl(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived min ("+Integer.toString(derived.getMin())+") cannot be less than the base min ("+Integer.toString(base.getMin())+") in "+srcSD.getVersionedUrl(), ValidationMessage.IssueSeverity.ERROR)); base.setMinElement(derived.getMinElement().copy()); } else if (trimDifferential) derived.setMinElement(null); @@ -2540,7 +2548,7 @@ public class ProfileUtilities { if (derived.hasMaxElement()) { if (!Base.compareDeep(derived.getMaxElement(), base.getMaxElement(), false)) { if (isLargerMax(derived.getMax(), base.getMax())) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived max ("+derived.getMax()+") cannot be greater than the base max ("+base.getMax()+")", ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+source.getPath(), "Element "+base.getPath()+": derived max ("+derived.getMax()+") cannot be greater than the base max ("+base.getMax()+")", ValidationMessage.IssueSeverity.ERROR)); base.setMaxElement(derived.getMaxElement().copy()); } else if (trimDifferential) derived.setMaxElement(null); @@ -2642,7 +2650,7 @@ public class ProfileUtilities { } if (!(base.hasMustSupportElement() && Base.compareDeep(base.getMustSupportElement(), mse, false))) { if (base.hasMustSupport() && base.getMustSupport() && !derived.getMustSupport()) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-support = false] when [must-support = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-support = false] when [must-support = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); } base.setMustSupportElement(mse); } else if (trimDifferential) @@ -2654,7 +2662,7 @@ public class ProfileUtilities { if (derived.hasMustHaveValueElement()) { if (!(base.hasMustHaveValueElement() && Base.compareDeep(derived.getMustHaveValueElement(), base.getMustHaveValueElement(), false))) { if (base.hasMustHaveValue() && base.getMustHaveValue() && !derived.getMustHaveValue()) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-have-value = false] when [must-have-value = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Illegal constraint [must-have-value = false] when [must-have-value = true] in the base profile", ValidationMessage.IssueSeverity.ERROR)); } base.setMustHaveValueElement(derived.getMustHaveValueElement().copy()); } else if (trimDifferential) @@ -2721,25 +2729,25 @@ public class ProfileUtilities { if (!base.hasBinding() || !Base.compareDeep(derived.getBinding(), base.getBinding(), false)) { if (base.hasBinding() && base.getBinding().getStrength() == BindingStrength.REQUIRED && derived.getBinding().getStrength() != BindingStrength.REQUIRED) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "illegal attempt to change the binding on "+derived.getPath()+" from "+base.getBinding().getStrength().toCode()+" to "+derived.getBinding().getStrength().toCode(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "illegal attempt to change the binding on "+derived.getPath()+" from "+base.getBinding().getStrength().toCode()+" to "+derived.getBinding().getStrength().toCode(), ValidationMessage.IssueSeverity.ERROR)); // throw new DefinitionException("StructureDefinition "+pn+" at "+derived.getPath()+": illegal attempt to change a binding from "+base.getBinding().getStrength().toCode()+" to "+derived.getBinding().getStrength().toCode()); else if (base.hasBinding() && derived.hasBinding() && base.getBinding().getStrength() == BindingStrength.REQUIRED && base.getBinding().hasValueSet() && derived.getBinding().hasValueSet()) { ValueSet baseVs = context.findTxResource(ValueSet.class, base.getBinding().getValueSet(), srcSD); ValueSet contextVs = context.findTxResource(ValueSet.class, derived.getBinding().getValueSet(), derivedSrc); if (baseVs == null) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); } else if (contextVs == null) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be located", ValidationMessage.IssueSeverity.WARNING)); } else { ValueSetExpansionOutcome expBase = context.expandVS(baseVs, true, false); ValueSetExpansionOutcome expDerived = context.expandVS(contextVs, true, false); if (expBase.getValueset() == null) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+base.getPath(), "Binding "+base.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); else if (expDerived.getValueset() == null) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" could not be expanded", ValidationMessage.IssueSeverity.WARNING)); else if (ToolingExtensions.hasExtension(expBase.getValueset().getExpansion(), ToolingExtensions.EXT_EXP_TOOCOSTLY)) { if (ToolingExtensions.hasExtension(expDerived.getValueset().getExpansion(), ToolingExtensions.EXT_EXP_TOOCOSTLY) || expDerived.getValueset().getExpansion().getContains().size() > 100) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Unable to check if "+derived.getBinding().getValueSet()+" is a proper subset of " +base.getBinding().getValueSet()+" - base value set is too large to check", ValidationMessage.IssueSeverity.WARNING)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Unable to check if "+derived.getBinding().getValueSet()+" is a proper subset of " +base.getBinding().getValueSet()+" - base value set is too large to check", ValidationMessage.IssueSeverity.WARNING)); } else { boolean ok = true; for (ValueSetExpansionContainsComponent cc : expDerived.getValueset().getExpansion().getContains()) { @@ -2750,11 +2758,11 @@ public class ProfileUtilities { } } if (!ok) { - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); } } } else if (!isSubset(expBase.getValueset(), expDerived.getValueset())) - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, pn+"."+derived.getPath(), "Binding "+derived.getBinding().getValueSet()+" is not a subset of binding "+base.getBinding().getValueSet(), ValidationMessage.IssueSeverity.ERROR)); } } ElementDefinitionBindingComponent d = derived.getBinding(); @@ -2965,11 +2973,7 @@ public class ProfileUtilities { if (tgtOk) { ok = true; } else { - if (messages == null) { - throw new FHIRException(context.formatMessage(I18nConstants.ERROR_AT__THE_TARGET_PROFILE__IS_NOT__VALID_CONSTRAINT_ON_THE_BASE_, purl, derived.getPath(), url, td.getTargetProfile())); - } else { - messages.add(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, derived.getPath(), "The target profile " + u.getValue() + " is not a valid constraint on the base (" + td.getTargetProfile() + ") at " + derived.getPath(), IssueSeverity.ERROR)); - } + addMessage(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, derived.getPath(), context.formatMessage(I18nConstants.ERROR_AT__THE_TARGET_PROFILE__IS_NOT__VALID_CONSTRAINT_ON_THE_BASE_, purl, derived.getPath(), url, td.getTargetProfile()), IssueSeverity.ERROR)); } } } else { @@ -2989,9 +2993,7 @@ public class ProfileUtilities { } StructureDefinition sd = context.fetchResource(StructureDefinition.class, url); if (sd == null) { - if (messages != null) { - messages.add(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, path, "Cannot check whether the target profile " + url + " on "+dPath+" is valid constraint on the base because it is not known", IssueSeverity.WARNING)); - } + addMessage(new ValidationMessage(Source.InstanceValidator, IssueType.BUSINESSRULE, path, "Cannot check whether the target profile " + url + " on "+dPath+" is valid constraint on the base because it is not known", IssueSeverity.WARNING)); return true; } else { if (sd.hasBaseDefinition() && sdConformsToTargets(path, dPath, sd.getBaseDefinition(), td)) { @@ -3022,7 +3024,7 @@ public class ProfileUtilities { } if (!ok) { - messages.add(new ValidationMessage(Source.InstanceValidator, IssueType.CONFLICT, dest.getId(), "The "+fieldName+" value has type '"+ft+"' which is not valid (valid "+Utilities.pluralize("type", dest.getType().size())+": "+types.toString()+")", IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.InstanceValidator, IssueType.CONFLICT, dest.getId(), "The "+fieldName+" value has type '"+ft+"' which is not valid (valid "+Utilities.pluralize("type", dest.getType().size())+": "+types.toString()+")", IssueSeverity.ERROR)); } } @@ -3936,10 +3938,7 @@ public class ProfileUtilities { } ed.setId(bs); if (idList.containsKey(bs)) { - if (exception || messages == null) { - throw new DefinitionException(context.formatMessage(I18nConstants.SAME_ID_ON_MULTIPLE_ELEMENTS__IN_, bs, idList.get(bs), ed.getPath(), name)); - } else - messages.add(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, name+"."+bs, "Duplicate Element id "+bs, ValidationMessage.IssueSeverity.ERROR)); + addMessage(new ValidationMessage(Source.ProfileValidator, ValidationMessage.IssueType.BUSINESSRULE, name+"."+bs, context.formatMessage(I18nConstants.SAME_ID_ON_MULTIPLE_ELEMENTS__IN_, bs, idList.get(bs), ed.getPath(), name), ValidationMessage.IssueSeverity.ERROR)); } idList.put(bs, ed.getPath()); if (ed.hasContentReference() && ed.getContentReference().startsWith("#")) { @@ -4315,12 +4314,12 @@ public class ProfileUtilities { public boolean isThrowException() { - return exception; + return wantThrowExceptions; } public void setThrowException(boolean exception) { - this.exception = exception; + this.wantThrowExceptions = exception; } @@ -4578,7 +4577,9 @@ public class ProfileUtilities { } public void setMessages(List messages) { - this.messages = messages; + if (messages != null) { + this.messages = messages; + } } private Map> propertyCache = new HashMap<>(); From dd01e008ca6fdc4742293f38a9c99d77c7e33d74 Mon Sep 17 00:00:00 2001 From: dotasek Date: Sun, 15 Sep 2024 10:01:53 -0400 Subject: [PATCH 03/11] Revert "Merge pull request #1649 from hapifhir/do-20240606-fix-classname-typo" This reverts commit 0c7e6ce9ac037170ff5af169fbade1e0232321e0, reversing changes made to bfed8a15d535dc040a92931baddc0457568ea379. --- .../resources30_40/Consent30_40.java | 13 +-- .../resources40_50/Consent40_50.java | 9 +- .../org/hl7/fhir/r4/formats/RdfParser.java | 2 +- .../org/hl7/fhir/r4/formats/XmlParser.java | 12 +- .../java/org/hl7/fhir/r4/model/Consent.java | 104 +++++++++--------- 5 files changed, 69 insertions(+), 71 deletions(-) diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java index eaf5aba5a..1c783f74c 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv30_40/resources30_40/Consent30_40.java @@ -13,7 +13,6 @@ import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Date import org.hl7.fhir.convertors.conv30_40.datatypes30_40.primitivetypes30_40.Uri30_40; import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.r4.model.CodeableConcept; -import org.hl7.fhir.r4.model.Consent; import org.hl7.fhir.r4.model.Identifier; public class Consent30_40 { @@ -48,7 +47,7 @@ public class Consent30_40 { tgt.setPolicyRule(new CodeableConcept(c)); } if (src.hasSecurityLabel() || src.hasPeriod() || src.hasActor() || src.hasAction() || src.hasPurpose() || src.hasDataPeriod() || src.hasData() || src.hasExcept()) { - Consent.ProvisionComponent pc = new Consent.ProvisionComponent(); + org.hl7.fhir.r4.model.Consent.provisionComponent pc = new org.hl7.fhir.r4.model.Consent.provisionComponent(); if (src.hasPeriod()) pc.setPeriod(Period30_40.convertPeriod(src.getPeriod())); for (org.hl7.fhir.dstu3.model.Consent.ConsentActorComponent t : src.getActor()) @@ -105,7 +104,7 @@ public class Consent30_40 { } } if (src.hasProvision()) { - Consent.ProvisionComponent p = src.getProvision(); + org.hl7.fhir.r4.model.Consent.provisionComponent p = src.getProvision(); if (p.hasPeriod()) tgt.setPeriod(Period30_40.convertPeriod(p.getPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionActorComponent t : p.getActor()) @@ -118,7 +117,7 @@ public class Consent30_40 { tgt.setDataPeriod(Period30_40.convertPeriod(p.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : p.getData()) tgt.addData(convertConsentDataComponent(t)); - for (Consent.ProvisionComponent t : p.getProvision()) + for (org.hl7.fhir.r4.model.Consent.provisionComponent t : p.getProvision()) tgt.addExcept(convertExceptComponent(t)); } return tgt; @@ -370,7 +369,7 @@ public class Consent30_40 { return tgt; } - static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(Consent.ProvisionComponent src) throws FHIRException { + static public org.hl7.fhir.dstu3.model.Consent.ExceptComponent convertExceptComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.dstu3.model.Consent.ExceptComponent tgt = new org.hl7.fhir.dstu3.model.Consent.ExceptComponent(); @@ -394,10 +393,10 @@ public class Consent30_40 { return tgt; } - static public Consent.ProvisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { + static public org.hl7.fhir.r4.model.Consent.provisionComponent convertExceptComponent(org.hl7.fhir.dstu3.model.Consent.ExceptComponent src) throws FHIRException { if (src == null) return null; - Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); + org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); ConversionContext30_40.INSTANCE.getVersionConvertor_30_40().copyBackboneElement(src,tgt); if (src.hasType()) tgt.setTypeElement(convertConsentExceptType(src.getTypeElement())); diff --git a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java index d5fa94f0f..0fe389de5 100644 --- a/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java +++ b/org.hl7.fhir.convertors/src/main/java/org/hl7/fhir/convertors/conv40_50/resources40_50/Consent40_50.java @@ -10,7 +10,6 @@ import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Boolean40 import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.DateTime40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.special40_50.Reference40_50; import org.hl7.fhir.exceptions.FHIRException; -import org.hl7.fhir.r4.model.Consent; /* Copyright (c) 2011+, HL7, Inc. @@ -221,7 +220,7 @@ public class Consent40_50 { return tgt; } - public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(Consent.ProvisionComponent src) throws FHIRException { + public static org.hl7.fhir.r5.model.Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r4.model.Consent.provisionComponent src) throws FHIRException { if (src == null) return null; org.hl7.fhir.r5.model.Consent.ProvisionComponent tgt = new org.hl7.fhir.r5.model.Consent.ProvisionComponent(); @@ -243,15 +242,15 @@ public class Consent40_50 { tgt.setDataPeriod(Period40_50.convertPeriod(src.getDataPeriod())); for (org.hl7.fhir.r4.model.Consent.provisionDataComponent t : src.getData()) tgt.addData(convertprovisionDataComponent(t)); - for (Consent.ProvisionComponent t : src.getProvision()) + for (org.hl7.fhir.r4.model.Consent.provisionComponent t : src.getProvision()) tgt.addProvision(convertprovisionComponent(t)); return tgt; } - public static Consent.ProvisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { + public static org.hl7.fhir.r4.model.Consent.provisionComponent convertprovisionComponent(org.hl7.fhir.r5.model.Consent.ProvisionComponent src) throws FHIRException { if (src == null) return null; - Consent.ProvisionComponent tgt = new Consent.ProvisionComponent(); + org.hl7.fhir.r4.model.Consent.provisionComponent tgt = new org.hl7.fhir.r4.model.Consent.provisionComponent(); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyBackboneElement(src, tgt); // if (src.hasType()) // tgt.setTypeElement(convertConsentProvisionType(src.getTypeElement())); diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java index ee7a21d82..e09127adc 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/RdfParser.java @@ -4917,7 +4917,7 @@ public class RdfParser extends RdfParserBase { } protected void composeConsentprovisionComponent(Complex parent, String parentType, String name, - Consent.ProvisionComponent element, int index) { + Consent.provisionComponent element, int index) { if (element == null) return; Complex t; diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java index 6c46487ea..7ccf6fdd6 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/formats/XmlParser.java @@ -6924,9 +6924,9 @@ public class XmlParser extends XmlParserBase { return true; } - protected Consent.ProvisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) + protected Consent.provisionComponent parseConsentprovisionComponent(XmlPullParser xpp, Consent owner) throws XmlPullParserException, IOException, FHIRFormatError { - Consent.ProvisionComponent res = new Consent.ProvisionComponent(); + Consent.provisionComponent res = new Consent.provisionComponent(); parseBackboneAttributes(xpp, res); next(xpp); int eventType = nextNoWhitespace(xpp); @@ -6941,7 +6941,7 @@ public class XmlParser extends XmlParserBase { } protected boolean parseConsentprovisionComponentContent(int eventType, XmlPullParser xpp, Consent owner, - Consent.ProvisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { + Consent.provisionComponent res) throws XmlPullParserException, IOException, FHIRFormatError { if (eventType == XmlPullParser.START_TAG && xpp.getName().equals("type")) { res.setTypeElement( parseEnumeration(xpp, Consent.ConsentProvisionType.NULL, new Consent.ConsentProvisionTypeEnumFactory())); @@ -34008,7 +34008,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponent(String name, Consent.ProvisionComponent element) throws IOException { + protected void composeConsentprovisionComponent(String name, Consent.provisionComponent element) throws IOException { if (element != null) { composeElementAttributes(element); xml.enter(FHIR_NS, name); @@ -34018,7 +34018,7 @@ public class XmlParser extends XmlParserBase { } } - protected void composeConsentprovisionComponentElements(Consent.ProvisionComponent element) throws IOException { + protected void composeConsentprovisionComponentElements(Consent.provisionComponent element) throws IOException { composeBackboneElementElements(element); if (element.hasTypeElement()) composeEnumeration("type", element.getTypeElement(), new Consent.ConsentProvisionTypeEnumFactory()); @@ -34057,7 +34057,7 @@ public class XmlParser extends XmlParserBase { composeConsentprovisionDataComponent("data", e); } if (element.hasProvision()) { - for (Consent.ProvisionComponent e : element.getProvision()) + for (Consent.provisionComponent e : element.getProvision()) composeConsentprovisionComponent("provision", e); } } diff --git a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java index eb2e25345..1560c3f27 100644 --- a/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java +++ b/org.hl7.fhir.r4/src/main/java/org/hl7/fhir/r4/model/Consent.java @@ -1221,7 +1221,7 @@ public class Consent extends DomainResource { } @Block() - public static class ProvisionComponent extends BackboneElement implements IBaseBackboneElement { + public static class provisionComponent extends BackboneElement implements IBaseBackboneElement { /** * Action to take - permit or deny - when the rule conditions are met. Not * permitted in root rule, required in all nested rules. @@ -1314,16 +1314,16 @@ public class Consent extends DomainResource { * Rules which provide exceptions to the base rule or subrules. */ @Child(name = "provision", type = { - ProvisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) + provisionComponent.class }, order = 11, min = 0, max = Child.MAX_UNLIMITED, modifier = false, summary = false) @Description(shortDefinition = "Nested Exception Rules", formalDefinition = "Rules which provide exceptions to the base rule or subrules.") - protected List provision; + protected List provision; private static final long serialVersionUID = -1280172451L; /** * Constructor */ - public ProvisionComponent() { + public provisionComponent() { super(); } @@ -1357,7 +1357,7 @@ public class Consent extends DomainResource { * extensions. The accessor "getType" gives direct access to the * value */ - public ProvisionComponent setTypeElement(Enumeration value) { + public provisionComponent setTypeElement(Enumeration value) { this.type = value; return this; } @@ -1374,7 +1374,7 @@ public class Consent extends DomainResource { * @param value Action to take - permit or deny - when the rule conditions are * met. Not permitted in root rule, required in all nested rules. */ - public ProvisionComponent setType(ConsentProvisionType value) { + public provisionComponent setType(ConsentProvisionType value) { if (value == null) this.type = null; else { @@ -1404,7 +1404,7 @@ public class Consent extends DomainResource { /** * @param value {@link #period} (The timeframe in this rule is valid.) */ - public ProvisionComponent setPeriod(Period value) { + public provisionComponent setPeriod(Period value) { this.period = value; return this; } @@ -1423,7 +1423,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setActor(List theActor) { + public provisionComponent setActor(List theActor) { this.actor = theActor; return this; } @@ -1445,7 +1445,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addActor(provisionActorComponent t) { // 3 + public provisionComponent addActor(provisionActorComponent t) { // 3 if (t == null) return this; if (this.actor == null) @@ -1477,7 +1477,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setAction(List theAction) { + public provisionComponent setAction(List theAction) { this.action = theAction; return this; } @@ -1499,7 +1499,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addAction(CodeableConcept t) { // 3 + public provisionComponent addAction(CodeableConcept t) { // 3 if (t == null) return this; if (this.action == null) @@ -1533,7 +1533,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setSecurityLabel(List theSecurityLabel) { + public provisionComponent setSecurityLabel(List theSecurityLabel) { this.securityLabel = theSecurityLabel; return this; } @@ -1555,7 +1555,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addSecurityLabel(Coding t) { // 3 + public provisionComponent addSecurityLabel(Coding t) { // 3 if (t == null) return this; if (this.securityLabel == null) @@ -1589,7 +1589,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setPurpose(List thePurpose) { + public provisionComponent setPurpose(List thePurpose) { this.purpose = thePurpose; return this; } @@ -1611,7 +1611,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addPurpose(Coding t) { // 3 + public provisionComponent addPurpose(Coding t) { // 3 if (t == null) return this; if (this.purpose == null) @@ -1646,7 +1646,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setClass_(List theClass_) { + public provisionComponent setClass_(List theClass_) { this.class_ = theClass_; return this; } @@ -1668,7 +1668,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addClass_(Coding t) { // 3 + public provisionComponent addClass_(Coding t) { // 3 if (t == null) return this; if (this.class_ == null) @@ -1701,7 +1701,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setCode(List theCode) { + public provisionComponent setCode(List theCode) { this.code = theCode; return this; } @@ -1723,7 +1723,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addCode(CodeableConcept t) { // 3 + public provisionComponent addCode(CodeableConcept t) { // 3 if (t == null) return this; if (this.code == null) @@ -1764,7 +1764,7 @@ public class Consent extends DomainResource { * @param value {@link #dataPeriod} (Clinical or Operational Relevant period of * time that bounds the data controlled by this rule.) */ - public ProvisionComponent setDataPeriod(Period value) { + public provisionComponent setDataPeriod(Period value) { this.dataPeriod = value; return this; } @@ -1782,7 +1782,7 @@ public class Consent extends DomainResource { /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setData(List theData) { + public provisionComponent setData(List theData) { this.data = theData; return this; } @@ -1804,7 +1804,7 @@ public class Consent extends DomainResource { return t; } - public ProvisionComponent addData(provisionDataComponent t) { // 3 + public provisionComponent addData(provisionDataComponent t) { // 3 if (t == null) return this; if (this.data == null) @@ -1828,16 +1828,16 @@ public class Consent extends DomainResource { * @return {@link #provision} (Rules which provide exceptions to the base rule * or subrules.) */ - public List getProvision() { + public List getProvision() { if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); return this.provision; } /** * @return Returns a reference to this for easy method chaining */ - public ProvisionComponent setProvision(List theProvision) { + public provisionComponent setProvision(List theProvision) { this.provision = theProvision; return this; } @@ -1845,25 +1845,25 @@ public class Consent extends DomainResource { public boolean hasProvision() { if (this.provision == null) return false; - for (ProvisionComponent item : this.provision) + for (provisionComponent item : this.provision) if (!item.isEmpty()) return true; return false; } - public ProvisionComponent addProvision() { // 3 - ProvisionComponent t = new ProvisionComponent(); + public provisionComponent addProvision() { // 3 + provisionComponent t = new provisionComponent(); if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return t; } - public ProvisionComponent addProvision(ProvisionComponent t) { // 3 + public provisionComponent addProvision(provisionComponent t) { // 3 if (t == null) return this; if (this.provision == null) - this.provision = new ArrayList(); + this.provision = new ArrayList(); this.provision.add(t); return this; } @@ -1872,7 +1872,7 @@ public class Consent extends DomainResource { * @return The first repetition of repeating field {@link #provision}, creating * it if it does not already exist */ - public ProvisionComponent getProvisionFirstRep() { + public provisionComponent getProvisionFirstRep() { if (getProvision().isEmpty()) { addProvision(); } @@ -2027,7 +2027,7 @@ public class Consent extends DomainResource { this.getData().add((provisionDataComponent) value); // provisionDataComponent return value; case -547120939: // provision - this.getProvision().add((ProvisionComponent) value); // provisionComponent + this.getProvision().add((provisionComponent) value); // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -2059,7 +2059,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().add((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().add((ProvisionComponent) value); + this.getProvision().add((provisionComponent) value); } else return super.setProperty(name, value); return value; @@ -2088,7 +2088,7 @@ public class Consent extends DomainResource { } else if (name.equals("data")) { this.getData().remove((provisionDataComponent) value); } else if (name.equals("provision")) { - this.getProvision().remove((ProvisionComponent) value); + this.getProvision().remove((provisionComponent) value); } else super.removeChild(name, value); @@ -2186,13 +2186,13 @@ public class Consent extends DomainResource { return super.addChild(name); } - public ProvisionComponent copy() { - ProvisionComponent dst = new ProvisionComponent(); + public provisionComponent copy() { + provisionComponent dst = new provisionComponent(); copyValues(dst); return dst; } - public void copyValues(ProvisionComponent dst) { + public void copyValues(provisionComponent dst) { super.copyValues(dst); dst.type = type == null ? null : type.copy(); dst.period = period == null ? null : period.copy(); @@ -2240,8 +2240,8 @@ public class Consent extends DomainResource { } ; if (provision != null) { - dst.provision = new ArrayList(); - for (ProvisionComponent i : provision) + dst.provision = new ArrayList(); + for (provisionComponent i : provision) dst.provision.add(i.copy()); } ; @@ -2251,9 +2251,9 @@ public class Consent extends DomainResource { public boolean equalsDeep(Base other_) { if (!super.equalsDeep(other_)) return false; - if (!(other_ instanceof ProvisionComponent)) + if (!(other_ instanceof provisionComponent)) return false; - ProvisionComponent o = (ProvisionComponent) other_; + provisionComponent o = (provisionComponent) other_; return compareDeep(type, o.type, true) && compareDeep(period, o.period, true) && compareDeep(actor, o.actor, true) && compareDeep(action, o.action, true) && compareDeep(securityLabel, o.securityLabel, true) && compareDeep(purpose, o.purpose, true) && compareDeep(class_, o.class_, true) @@ -2265,9 +2265,9 @@ public class Consent extends DomainResource { public boolean equalsShallow(Base other_) { if (!super.equalsShallow(other_)) return false; - if (!(other_ instanceof ProvisionComponent)) + if (!(other_ instanceof provisionComponent)) return false; - ProvisionComponent o = (ProvisionComponent) other_; + provisionComponent o = (provisionComponent) other_; return compareValues(type, o.type, true); } @@ -3002,7 +3002,7 @@ public class Consent extends DomainResource { */ @Child(name = "provision", type = {}, order = 12, min = 0, max = 1, modifier = false, summary = true) @Description(shortDefinition = "Constraints to the base Consent.policyRule", formalDefinition = "An exception to the base policy of this consent. An exception can be an addition or removal of access permissions.") - protected ProvisionComponent provision; + protected provisionComponent provision; private static final long serialVersionUID = 206528051L; @@ -3669,12 +3669,12 @@ public class Consent extends DomainResource { * @return {@link #provision} (An exception to the base policy of this consent. * An exception can be an addition or removal of access permissions.) */ - public ProvisionComponent getProvision() { + public provisionComponent getProvision() { if (this.provision == null) if (Configuration.errorOnAutoCreate()) throw new Error("Attempt to auto-create Consent.provision"); else if (Configuration.doAutoCreate()) - this.provision = new ProvisionComponent(); // cc + this.provision = new provisionComponent(); // cc return this.provision; } @@ -3687,7 +3687,7 @@ public class Consent extends DomainResource { * consent. An exception can be an addition or removal of access * permissions.) */ - public Consent setProvision(ProvisionComponent value) { + public Consent setProvision(provisionComponent value) { this.provision = value; return this; } @@ -3883,7 +3883,7 @@ public class Consent extends DomainResource { this.getVerification().add((ConsentVerificationComponent) value); // ConsentVerificationComponent return value; case -547120939: // provision - this.provision = (ProvisionComponent) value; // provisionComponent + this.provision = (provisionComponent) value; // provisionComponent return value; default: return super.setProperty(hash, name, value); @@ -3919,7 +3919,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().add((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (ProvisionComponent) value; // provisionComponent + this.provision = (provisionComponent) value; // provisionComponent } else return super.setProperty(name, value); return value; @@ -3952,7 +3952,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { this.getVerification().remove((ConsentVerificationComponent) value); } else if (name.equals("provision")) { - this.provision = (ProvisionComponent) value; // provisionComponent + this.provision = (provisionComponent) value; // provisionComponent } else super.removeChild(name, value); @@ -4064,7 +4064,7 @@ public class Consent extends DomainResource { } else if (name.equals("verification")) { return addVerification(); } else if (name.equals("provision")) { - this.provision = new ProvisionComponent(); + this.provision = new provisionComponent(); return this.provision; } else return super.addChild(name); From 0d8c5942e799ad718dc1e5e688064cf02c17434b Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 17 Sep 2024 14:11:13 +0800 Subject: [PATCH 04/11] Fix rendering path for value set references for kindling --- .../main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java index 4a78a67c8..16adae09a 100644 --- a/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java +++ b/org.hl7.fhir.r5/src/main/java/org/hl7/fhir/r5/renderers/ValueSetRenderer.java @@ -750,9 +750,9 @@ public class ValueSetRenderer extends TerminologyRenderer { if (cs == null) { return "?cs-n?"; } - String ref = (String) cs.getUserData("filename"); + String ref = cs.getWebPath(); if (ref == null) { - ref = (String) cs.getWebPath(); + ref = cs.getUserString("filename"); } return ref == null ? null : ref.replace("\\", "/"); } From 11efed6635c40f077924c7650b301fe5981bb9dd Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 17 Sep 2024 16:16:09 +0800 Subject: [PATCH 05/11] Validation of experimental property --- .../fhir/utilities/i18n/I18nConstants.java | 3 +++ .../src/main/resources/Messages.properties | 4 +++- .../hl7/fhir/validation/ValidationEngine.java | 2 ++ .../fhir/validation/cli/model/CliContext.java | 18 +++++++++++++- .../cli/services/ValidationService.java | 1 + .../hl7/fhir/validation/cli/utils/Params.java | 5 +++- .../instance/InstanceValidator.java | 13 ++++++++++ .../type/StructureDefinitionValidator.java | 24 ++++++++++++------- .../validation/tests/ValidationTests.java | 3 +++ 9 files changed, 62 insertions(+), 11 deletions(-) diff --git a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java index db81c97c3..e8af42a88 100644 --- a/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java +++ b/org.hl7.fhir.utilities/src/main/java/org/hl7/fhir/utilities/i18n/I18nConstants.java @@ -1108,4 +1108,7 @@ public class I18nConstants { public static final String SM_TARGET_TYPE_UNKNOWN = "SM_TARGET_TYPE_UNKNOWN"; public static final String XHTML_XHTML_ATTRIBUTE_XML_SPACE = "XHTML_XHTML_ATTRIBUTE_XML_SPACE"; public static final String VALIDATION_HL7_PUBLISHER_MULTIPLE_WGS = "VALIDATION_HL7_PUBLISHER_MULTIPLE_WGS"; + public static final String SD_BASE_EXPERIMENTAL = "SD_BASE_EXPERIMENTAL"; + public static final String SD_ED_EXPERIMENTAL_BINDING = "SD_ED_EXPERIMENTAL_BINDING"; + public static final String VALIDATION_NO_EXPERIMENTAL_CONTENT = "VALIDATION_NO_EXPERIMENTAL_CONTENT"; } diff --git a/org.hl7.fhir.utilities/src/main/resources/Messages.properties b/org.hl7.fhir.utilities/src/main/resources/Messages.properties index bae41d4af..35811c33e 100644 --- a/org.hl7.fhir.utilities/src/main/resources/Messages.properties +++ b/org.hl7.fhir.utilities/src/main/resources/Messages.properties @@ -1140,4 +1140,6 @@ XHTML_XHTML_ATTRIBUTE_XML_SPACE = The attribute 'xml:space' is legal but has a f VALIDATION_HL7_PUBLISHER_MULTIPLE_WGS = This resource has more than workgroup extension (http://hl7.org/fhir/StructureDefinition/structuredefinition-wg) NO_VALID_DISPLAY_FOUND_NONE_FOR_LANG = Wrong Display Name ''{0}'' for {1}#{2}. There are no valid display names found for language(s) ''{3}''. Default display is ''{4}'' NO_VALID_DISPLAY_AT_ALL = Cannot validate display Name ''{0}'' for {1}#{2}: No displays are known - +SD_BASE_EXPERIMENTAL = The definition builds on ''{0}'' which is experimental, but this definition is not labeled as experimental +SD_ED_EXPERIMENTAL_BINDING = The definition for the element ''{0}'' binds to the value set ''{1}'' which is experimental, but this structure is not labeled as experimental +VALIDATION_NO_EXPERIMENTAL_CONTENT = Experimental content is not allowed in this context diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java index 9bf88787c..46f5d948b 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/ValidationEngine.java @@ -227,6 +227,7 @@ public class ValidationEngine implements IValidatorResourceFetcher, IValidationP @Getter @Setter private boolean checkIPSCodes; @Getter @Setter private BestPracticeWarningLevel bestPracticeLevel; @Getter @Setter private boolean unknownCodeSystemsCauseErrors; + @Getter @Setter private boolean noExperimentalContent; @Getter @Setter private Locale locale; @Getter @Setter private List igs = new ArrayList<>(); @Getter @Setter private List extensionDomains = new ArrayList<>(); @@ -909,6 +910,7 @@ public class ValidationEngine implements IValidatorResourceFetcher, IValidationP validator.setPolicyAdvisor(policyAdvisor); } validator.setUnknownCodeSystemsCauseErrors(unknownCodeSystemsCauseErrors); + validator.setNoExperimentalContent(noExperimentalContent); return validator; } diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java index 79c604c6c..418526071 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/model/CliContext.java @@ -165,6 +165,9 @@ public class CliContext { @JsonProperty("unknownCodeSystemsCauseErrors") private boolean unknownCodeSystemsCauseErrors; + + @JsonProperty("noExperimentalContent") + private boolean noExperimentalContent; @JsonProperty("baseEngine") public String getBaseEngine() { @@ -836,6 +839,7 @@ public class CliContext { Objects.equals(bestPracticeLevel, that.bestPracticeLevel) && Objects.equals(watchScanDelay, that.watchScanDelay) && Objects.equals(unknownCodeSystemsCauseErrors, that.unknownCodeSystemsCauseErrors) && + Objects.equals(noExperimentalContent, that.noExperimentalContent) && Objects.equals(watchSettleTime, that.watchSettleTime) ; } @@ -844,7 +848,7 @@ public class CliContext { return Objects.hash(baseEngine, doNative, extensions, hintAboutNonMustSupport, recursive, doDebug, assumeValidRestReferences, canDoNative, noInternalCaching, noExtensibleBindingMessages, noInvariants, displayWarnings, wantInvariantsInMessages, map, output, outputSuffix, htmlOutput, txServer, sv, txLog, txCache, mapLog, lang, srcLang, tgtLang, fhirpath, snomedCT, targetVer, igs, questionnaireMode, level, profiles, sources, inputs, mode, locale, locations, crumbTrails, forPublication, showTimes, allowExampleUrls, outputStyle, jurisdiction, noUnicodeBiDiControlChars, - watchMode, watchScanDelay, watchSettleTime, bestPracticeLevel, unknownCodeSystemsCauseErrors, htmlInMarkdownCheck, allowDoubleQuotesInFHIRPath, checkIPSCodes); + watchMode, watchScanDelay, watchSettleTime, bestPracticeLevel, unknownCodeSystemsCauseErrors, noExperimentalContent, htmlInMarkdownCheck, allowDoubleQuotesInFHIRPath, checkIPSCodes); } @Override @@ -904,6 +908,7 @@ public class CliContext { ", watchSettleTime=" + watchSettleTime + ", watchScanDelay=" + watchScanDelay + ", unknownCodeSystemsCauseErrors=" + unknownCodeSystemsCauseErrors + + ", noExperimentalContent=" + noExperimentalContent + '}'; } @@ -973,5 +978,16 @@ public class CliContext { this.unknownCodeSystemsCauseErrors = unknownCodeSystemsCauseErrors; } + @JsonProperty("noExperimentalContent") + public boolean isNoExperimentalContent() { + return noExperimentalContent; + } + + + @JsonProperty("noExperimentalContent") + public void setNoExperimentalContent(boolean noExperimentalContent) { + this.noExperimentalContent = noExperimentalContent; + } + } \ No newline at end of file diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java index 61d4b7d5f..82abdff63 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/services/ValidationService.java @@ -582,6 +582,7 @@ public class ValidationService { validationEngine.getBundleValidationRules().addAll(cliContext.getBundleValidationRules()); validationEngine.setJurisdiction(CodeSystemUtilities.readCoding(cliContext.getJurisdiction())); validationEngine.setUnknownCodeSystemsCauseErrors(cliContext.isUnknownCodeSystemsCauseErrors()); + validationEngine.setNoExperimentalContent(cliContext.isNoExperimentalContent()); TerminologyCache.setNoCaching(cliContext.isNoInternalCaching()); validationEngine.prepare(); // generate any missing snapshots System.out.println(" go (" + timeTracker.milestone() + ")"); diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java index 0983d0072..0b220f5f8 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/cli/utils/Params.java @@ -94,7 +94,8 @@ public class Params { public static final String DISABLE_DEFAULT_RESOURCE_FETCHER = "-disable-default-resource-fetcher"; public static final String CHECK_IPS_CODES = "-check-ips-codes"; public static final String BEST_PRACTICE = "-best-practice"; - public static final String UNKNOWN_CODESYSTEMS_CAUSE_ERROR = "-unknown-codesystems-cause-errors"; + public static final String UNKNOWN_CODESYSTEMS_CAUSE_ERROR = "-unknown-codesystems-cause-errors"; + public static final String NO_EXPERIMENTAL_CONTENT = "-no-experimental-content"; public static final String RUN_TESTS = "-run-tests"; @@ -321,6 +322,8 @@ public class Params { cliContext.setForPublication(true); } else if (args[i].equals(UNKNOWN_CODESYSTEMS_CAUSE_ERROR)) { cliContext.setUnknownCodeSystemsCauseErrors(true); + } else if (args[i].equals(NO_EXPERIMENTAL_CONTENT)) { + cliContext.setNoExperimentalContent(true); } else if (args[i].equals(VERBOSE)) { cliContext.setCrumbTrails(true); } else if (args[i].equals(ALLOW_EXAMPLE_URLS)) { diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java index dbc8eb164..96c72324a 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/InstanceValidator.java @@ -599,6 +599,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat private IDigitalSignatureServices signatureServices; private ContextUtilities cu; private boolean unknownCodeSystemsCauseErrors; + private boolean noExperimentalContent; public InstanceValidator(@Nonnull IWorkerContext theContext, @Nonnull IEvaluationContext hostServices, @Nonnull XVerExtensionManager xverManager) { super(theContext, xverManager, false); @@ -5718,6 +5719,10 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat hint(errors, "2023-08-14", IssueType.BUSINESSRULE, element.line(), element.col(), stack.getLiteralPath(), statusCodesDeeplyConsistent(status, standardsStatus), I18nConstants.VALIDATION_VAL_STATUS_INCONSISTENT_HINT, status, standardsStatus); } } + if (noExperimentalContent) { + String exp = element.getNamedChildValue("experimental"); + ok = rule(errors, "2024-09-17", IssueType.BUSINESSRULE, element.line(), element.col(), stack.getLiteralPath(), !"true".equals(exp), I18nConstants.VALIDATION_NO_EXPERIMENTAL_CONTENT) && ok; + } if (isHL7Core(element) && !isExample()) { ok = checkPublisherConsistency(valContext, errors, element, stack, contained) && ok; @@ -7839,6 +7844,14 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat public void setUnknownCodeSystemsCauseErrors(boolean unknownCodeSystemsCauseErrors) { this.unknownCodeSystemsCauseErrors = unknownCodeSystemsCauseErrors; } + + public boolean isNoExperimentalContent() { + return noExperimentalContent; + } + + public void setNoExperimentalContent(boolean noExperimentalContent) { + this.noExperimentalContent = noExperimentalContent; + } } diff --git a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java index 09f0be183..0df6dd68f 100644 --- a/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java +++ b/org.hl7.fhir.validation/src/main/java/org/hl7/fhir/validation/instance/type/StructureDefinitionValidator.java @@ -85,6 +85,7 @@ public class StructureDefinitionValidator extends BaseValidator { List snapshot = sd.getSnapshot().getElement(); sd.setSnapshot(null); typeName = sd.getTypeName(); + boolean experimental = "true".equals(src.getNamedChildValue("experimental", false)); StructureDefinition base = context.fetchResource(StructureDefinition.class, sd.getBaseDefinition()); if (warning(errors, NO_RULE_DATE, IssueType.NOTFOUND, stack.getLiteralPath(), base != null, I18nConstants.UNABLE_TO_FIND_BASE__FOR_, sd.getBaseDefinition(), "StructureDefinition, so can't check the differential")) { if (rule(errors, NO_RULE_DATE, IssueType.NOTFOUND, stack.getLiteralPath(), sd.hasDerivation(), I18nConstants.SD_MUST_HAVE_DERIVATION, sd.getUrl())) { @@ -129,6 +130,7 @@ public class StructureDefinitionValidator extends BaseValidator { ok = rule(errors, "2022-11-02", IssueType.NOTFOUND, stack.getLiteralPath(), base.getKindElement().primitiveValue().equals(src.getChildValue("kind")), I18nConstants.SD_DERIVATION_KIND_MISMATCH, base.getKindElement().primitiveValue(), src.getChildValue("kind")) && ok; } + warning(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), !base.getExperimental() || experimental, I18nConstants.SD_BASE_EXPERIMENTAL, sd.getBaseDefinition()); } List differentials = src.getChildrenByName("differential"); @@ -136,10 +138,10 @@ public class StructureDefinitionValidator extends BaseValidator { boolean logical = "logical".equals(src.getNamedChildValue("kind", false)); boolean constraint = "constraint".equals(src.getNamedChildValue("derivation", false)); for (Element differential : differentials) { - ok = validateElementList(errors, differential, stack.push(differential, -1, null, null), false, snapshots.size() > 0, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base) && ok; + ok = validateElementList(errors, differential, stack.push(differential, -1, null, null), false, snapshots.size() > 0, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base, experimental) && ok; } for (Element snapshotE : snapshots) { - ok = validateElementList(errors, snapshotE, stack.push(snapshotE, -1, null, null), true, true, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base) && ok; + ok = validateElementList(errors, snapshotE, stack.push(snapshotE, -1, null, null), true, true, sd, typeName, logical, constraint, src.getNamedChildValue("type", false), src.getNamedChildValue("url", false), src.getNamedChildValue("type", false), base, experimental) && ok; } // obligation profile support @@ -189,6 +191,7 @@ public class StructureDefinitionValidator extends BaseValidator { } } } catch (Exception e) { + e.printStackTrace(); rule(errors, NO_RULE_DATE, IssueType.EXCEPTION, stack.getLiteralPath(), false, I18nConstants.ERROR_GENERATING_SNAPSHOT, e.getMessage()); ok = false; } @@ -409,19 +412,19 @@ public class StructureDefinitionValidator extends BaseValidator { } } - private boolean validateElementList(List errors, Element elementList, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, String rootPath, String profileUrl, String profileType, StructureDefinition base) { + private boolean validateElementList(List errors, Element elementList, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, String rootPath, String profileUrl, String profileType, StructureDefinition base, boolean experimental) { Map invariantMap = new HashMap<>(); boolean ok = true; List elements = elementList.getChildrenByName("element"); int cc = 0; for (Element element : elements) { - ok = validateElementDefinition(errors, elements, element, stack.push(element, cc, null, null), snapshot, hasSnapshot, sd, typeName, logical, constraint, invariantMap, rootPath, profileUrl, profileType, base) && ok; + ok = validateElementDefinition(errors, elements, element, stack.push(element, cc, null, null), snapshot, hasSnapshot, sd, typeName, logical, constraint, invariantMap, rootPath, profileUrl, profileType, base, experimental) && ok; cc++; } return ok; } - private boolean validateElementDefinition(List errors, List elements, Element element, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, Map invariantMap, String rootPath, String profileUrl, String profileType, StructureDefinition base) { + private boolean validateElementDefinition(List errors, List elements, Element element, NodeStack stack, boolean snapshot, boolean hasSnapshot, StructureDefinition sd, String typeName, boolean logical, boolean constraint, Map invariantMap, String rootPath, String profileUrl, String profileType, StructureDefinition base, boolean experimental) { boolean ok = true; boolean typeMustSupport = false; String path = element.getNamedChildValue("path", false); @@ -522,7 +525,7 @@ public class StructureDefinitionValidator extends BaseValidator { ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), characteristics.contains("can-bind") , I18nConstants.SD_ILLEGAL_CHARACTERISTICS, "Binding", typeCodes) && ok; } Element binding = element.getNamedChild("binding", false); - ok = validateBinding(errors, binding, stack.push(binding, -1, null, null), typeCodes, snapshot, path) && ok; + ok = validateBinding(errors, binding, stack.push(binding, -1, null, null), typeCodes, snapshot, path, experimental) && ok; } else { // this is a good idea but there's plenty of cases where the rule isn't met; maybe one day it's worth investing the time to exclude these cases and bring this rule back // String bt = boundType(typeCodes); @@ -986,7 +989,7 @@ public class StructureDefinitionValidator extends BaseValidator { return null; } - private boolean validateBinding(List errors, Element binding, NodeStack stack, Set typeCodes, boolean snapshot, String path) { + private boolean validateBinding(List errors, Element binding, NodeStack stack, Set typeCodes, boolean snapshot, String path, boolean experimental) { boolean ok = true; if (bindableType(typeCodes) == null) { ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), !snapshot, I18nConstants.SD_ED_BIND_NO_BINDABLE, path, typeCodes.toString()) && ok; @@ -1006,7 +1009,12 @@ public class StructureDefinitionValidator extends BaseValidator { if (warning(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs != null || serverSupportsValueSet(ref), I18nConstants.SD_ED_BIND_UNKNOWN_VS, path, ref)) { if (vs != null) { - ok = rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs instanceof ValueSet, I18nConstants.SD_ED_BIND_NOT_VS, path, ref, vs.fhirType()) && ok; + if (rule(errors, NO_RULE_DATE, IssueType.BUSINESSRULE, stack.getLiteralPath(), vs instanceof ValueSet, I18nConstants.SD_ED_BIND_NOT_VS, path, ref, vs.fhirType())) { + ValueSet vsr = (ValueSet) vs; + warning(errors, "2024-09-17", IssueType.BUSINESSRULE, stack.getLiteralPath(), !vsr.getExperimental() || experimental, I18nConstants.SD_ED_EXPERIMENTAL_BINDING, path, ref); + } else { + ok = false; + } } } } diff --git a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java index 880fb2f9c..c43b88da0 100644 --- a/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java +++ b/org.hl7.fhir.validation/src/test/java/org/hl7/fhir/validation/tests/ValidationTests.java @@ -362,6 +362,9 @@ public class ValidationTests implements IEvaluationContext, IValidatorResourceFe if (content.has("security-checks")) { val.setSecurityChecks(content.get("security-checks").getAsBoolean()); } + if (content.has("no-experimental-content")) { + val.setNoExperimentalContent(content.get("no-experimental-content").getAsBoolean()); + } if (content.has("noHtmlInMarkdown")) { val.setHtmlInMarkdownCheck(HtmlInMarkdownCheck.ERROR); } From ded7bc0ffdd59bdc1c5074c68e8965d13463989a Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Tue, 17 Sep 2024 16:20:22 +0800 Subject: [PATCH 06/11] release notes --- RELEASE_NOTES.md | 21 ++++++++------------- 1 file changed, 8 insertions(+), 13 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index f9e202bce..ce6a47dee 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,18 +1,13 @@ ## Validator Changes -* Fix expression for con-3 properly (fix validation problem on some condition resources) -* Fix FHIRPath bug using wrong type on simple elements when checking FHIRPath types -* FHIRPath: Allow _ in constant names (per FHIRPath spec) -* Fix value set rendering creating wrong references -* Fix bug processing value set includes / excludes that are just value sets (no system value) -* Alter processing of unknown code systems per discussion at ,https://chat.fhir.org/#narrow/stream/179252-IG-creation/topic/Don't.20error.20when.20you.20can't.20find.20code.20system and implement unknown-codesystems-cause-errors -* Improve message for when elements are out of order in profile differentials - +* Validate of experimental property on bindings +* Add -no-experimental-content flag +* Allow JSON named extensions to be structure types other than logical +* Process relative URLs properly in base when generating snapshots ## Other code changes -* fix problem where profile rendering had spurious 'slices for' nodes everywhere -* Update SQL-On-FHIR implementation for latest cases, and clone test cases to general test care repository -* Fix problem generating value set spreadsheets -* fix concurrent modification error processing language translations -* Check for null fetcher processing ConceptMaps (#1728) +* Fix rendering path for value set references for kindling +* refactor error handling in ProfileUtilities +* Fix for NPE processing packages + From 9ba7bb447ff1549ddcafc3d10f6dbc290f9772de Mon Sep 17 00:00:00 2001 From: markiantorno Date: Tue, 17 Sep 2024 09:44:27 +0000 Subject: [PATCH 07/11] Updating i18n-coverage csv and png table ***NO_CI*** --- i18n-coverage-table.png | Bin 30997 -> 31259 bytes i18n-coverage.csv | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) diff --git a/i18n-coverage-table.png b/i18n-coverage-table.png index 612370aec15032fa2a6d7e70464b4c1834f5737d..e3f25dc2dce82da4083f7e944f91d22eb0c5c443 100644 GIT binary patch literal 31259 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 X+Kh3o+KE~wN#n;(F+FQyx8Z*PM(9Cy literal 30997 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 XhCDj|VmbbbVrr|tk=}z%`%nKDnu$X! diff --git a/i18n-coverage.csv b/i18n-coverage.csv index 49cf39ece..bf44bb436 100644 --- a/i18n-coverage.csv +++ b/i18n-coverage.csv @@ -1,5 +1,5 @@ Locale,Coverage #,Coverage % -de,831,41% +de,831,40% es,714,35% ja,902,44% nl,1989,98% From e7f5c238d6c7dcbf8b2d3164cbdf93dc00c79bc6 Mon Sep 17 00:00:00 2001 From: Mark Iantorno Date: Tue, 17 Sep 2024 20:31:50 +0000 Subject: [PATCH 08/11] Updating test case dependency to v1.5.22 ***NO_CI*** --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 57abeddaf..cba39c632 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.22-SNAPSHOT + 1.5.22 2.17.0 5.9.2 1.8.2 From d2ad535b0b764fa52e979096debf4ea505101f18 Mon Sep 17 00:00:00 2001 From: Grahame Grieve Date: Wed, 18 Sep 2024 04:36:03 +0800 Subject: [PATCH 09/11] update tests dependency --- pom.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/pom.xml b/pom.xml index 57abeddaf..cba39c632 100644 --- a/pom.xml +++ b/pom.xml @@ -21,7 +21,7 @@ 1.26.0 32.0.1-jre 6.4.1 - 1.5.22-SNAPSHOT + 1.5.22 2.17.0 5.9.2 1.8.2 From 46affee48ff1dfb854df91fc0c6dc7c7d66dcdfd Mon Sep 17 00:00:00 2001 From: markiantorno Date: Tue, 17 Sep 2024 21:09:53 +0000 Subject: [PATCH 10/11] Release: v6.3.26 ## Validator Changes * Validate of experimental property on bindings * Add -no-experimental-content flag * Allow JSON named extensions to be structure types other than logical * Process relative URLs properly in base when generating snapshots ## Other code changes * Fix rendering path for value set references for kindling * refactor error handling in ProfileUtilities * Fix for NPE processing packages ***NO_CI*** --- org.hl7.fhir.convertors/pom.xml | 2 +- org.hl7.fhir.dstu2/pom.xml | 2 +- org.hl7.fhir.dstu2016may/pom.xml | 2 +- org.hl7.fhir.dstu3/pom.xml | 2 +- org.hl7.fhir.r4/pom.xml | 2 +- org.hl7.fhir.r4b/pom.xml | 2 +- org.hl7.fhir.r5/pom.xml | 2 +- org.hl7.fhir.report/pom.xml | 2 +- org.hl7.fhir.utilities/pom.xml | 2 +- org.hl7.fhir.validation.cli/pom.xml | 2 +- org.hl7.fhir.validation/pom.xml | 2 +- pom.xml | 2 +- 12 files changed, 12 insertions(+), 12 deletions(-) diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml index 497a67ca5..0a6586c96 100644 --- a/org.hl7.fhir.convertors/pom.xml +++ b/org.hl7.fhir.convertors/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml index 1ef5e9c18..fc29044d2 100644 --- a/org.hl7.fhir.dstu2/pom.xml +++ b/org.hl7.fhir.dstu2/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml index 10836492e..01bd0a40b 100644 --- a/org.hl7.fhir.dstu2016may/pom.xml +++ b/org.hl7.fhir.dstu2016may/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml index 9b9f1ede2..30d848f3b 100644 --- a/org.hl7.fhir.dstu3/pom.xml +++ b/org.hl7.fhir.dstu3/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml index bc3634f35..f24471b4b 100644 --- a/org.hl7.fhir.r4/pom.xml +++ b/org.hl7.fhir.r4/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml index df709cb6a..ed4dcdda5 100644 --- a/org.hl7.fhir.r4b/pom.xml +++ b/org.hl7.fhir.r4b/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml index 8bb7cfbb9..d9e3ffc8c 100644 --- a/org.hl7.fhir.r5/pom.xml +++ b/org.hl7.fhir.r5/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml index f0adc1c86..dca6fb2f2 100644 --- a/org.hl7.fhir.report/pom.xml +++ b/org.hl7.fhir.report/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml index e4d08a59f..4facadbd1 100644 --- a/org.hl7.fhir.utilities/pom.xml +++ b/org.hl7.fhir.utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml index 54e5ebfa8..351f7d192 100644 --- a/org.hl7.fhir.validation.cli/pom.xml +++ b/org.hl7.fhir.validation.cli/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml index 10e3221ea..122708b8e 100644 --- a/org.hl7.fhir.validation/pom.xml +++ b/org.hl7.fhir.validation/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 ../pom.xml diff --git a/pom.xml b/pom.xml index cba39c632..2ff0f4ba3 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ HAPI FHIR --> org.hl7.fhir.core - 6.3.26-SNAPSHOT + 6.3.26 pom From f3bd5b9be80ae3717b1121081ca54bd68c298e1f Mon Sep 17 00:00:00 2001 From: markiantorno Date: Tue, 17 Sep 2024 22:00:24 +0000 Subject: [PATCH 11/11] Updating version to: 6.3.27-SNAPSHOT and incrementing test cases dependency. --- RELEASE_NOTES.md | 10 ++-------- org.hl7.fhir.convertors/pom.xml | 2 +- org.hl7.fhir.dstu2/pom.xml | 2 +- org.hl7.fhir.dstu2016may/pom.xml | 2 +- org.hl7.fhir.dstu3/pom.xml | 2 +- org.hl7.fhir.r4/pom.xml | 2 +- org.hl7.fhir.r4b/pom.xml | 2 +- org.hl7.fhir.r5/pom.xml | 2 +- org.hl7.fhir.report/pom.xml | 2 +- org.hl7.fhir.utilities/pom.xml | 2 +- org.hl7.fhir.validation.cli/pom.xml | 2 +- org.hl7.fhir.validation/pom.xml | 2 +- pom.xml | 2 +- 13 files changed, 14 insertions(+), 20 deletions(-) diff --git a/RELEASE_NOTES.md b/RELEASE_NOTES.md index ce6a47dee..7b06c6ab5 100644 --- a/RELEASE_NOTES.md +++ b/RELEASE_NOTES.md @@ -1,13 +1,7 @@ ## Validator Changes -* Validate of experimental property on bindings -* Add -no-experimental-content flag -* Allow JSON named extensions to be structure types other than logical -* Process relative URLs properly in base when generating snapshots +* no changes ## Other code changes -* Fix rendering path for value set references for kindling -* refactor error handling in ProfileUtilities -* Fix for NPE processing packages - +* no changes \ No newline at end of file diff --git a/org.hl7.fhir.convertors/pom.xml b/org.hl7.fhir.convertors/pom.xml index 0a6586c96..954879875 100644 --- a/org.hl7.fhir.convertors/pom.xml +++ b/org.hl7.fhir.convertors/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu2/pom.xml b/org.hl7.fhir.dstu2/pom.xml index fc29044d2..0f35fa8bd 100644 --- a/org.hl7.fhir.dstu2/pom.xml +++ b/org.hl7.fhir.dstu2/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu2016may/pom.xml b/org.hl7.fhir.dstu2016may/pom.xml index 01bd0a40b..73f375a3b 100644 --- a/org.hl7.fhir.dstu2016may/pom.xml +++ b/org.hl7.fhir.dstu2016may/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.dstu3/pom.xml b/org.hl7.fhir.dstu3/pom.xml index 30d848f3b..cf607fb20 100644 --- a/org.hl7.fhir.dstu3/pom.xml +++ b/org.hl7.fhir.dstu3/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r4/pom.xml b/org.hl7.fhir.r4/pom.xml index f24471b4b..5dcc8666b 100644 --- a/org.hl7.fhir.r4/pom.xml +++ b/org.hl7.fhir.r4/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r4b/pom.xml b/org.hl7.fhir.r4b/pom.xml index ed4dcdda5..aec9ce8e4 100644 --- a/org.hl7.fhir.r4b/pom.xml +++ b/org.hl7.fhir.r4b/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.r5/pom.xml b/org.hl7.fhir.r5/pom.xml index d9e3ffc8c..b196a2821 100644 --- a/org.hl7.fhir.r5/pom.xml +++ b/org.hl7.fhir.r5/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.report/pom.xml b/org.hl7.fhir.report/pom.xml index dca6fb2f2..dda6b248f 100644 --- a/org.hl7.fhir.report/pom.xml +++ b/org.hl7.fhir.report/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.utilities/pom.xml b/org.hl7.fhir.utilities/pom.xml index 4facadbd1..a2e86d2a1 100644 --- a/org.hl7.fhir.utilities/pom.xml +++ b/org.hl7.fhir.utilities/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.validation.cli/pom.xml b/org.hl7.fhir.validation.cli/pom.xml index 351f7d192..de8286041 100644 --- a/org.hl7.fhir.validation.cli/pom.xml +++ b/org.hl7.fhir.validation.cli/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/org.hl7.fhir.validation/pom.xml b/org.hl7.fhir.validation/pom.xml index 122708b8e..19fe4ae82 100644 --- a/org.hl7.fhir.validation/pom.xml +++ b/org.hl7.fhir.validation/pom.xml @@ -5,7 +5,7 @@ ca.uhn.hapi.fhir org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT ../pom.xml diff --git a/pom.xml b/pom.xml index 2ff0f4ba3..aac61867c 100644 --- a/pom.xml +++ b/pom.xml @@ -14,7 +14,7 @@ HAPI FHIR --> org.hl7.fhir.core - 6.3.26 + 6.3.27-SNAPSHOT pom