Merge pull request #1255 from hapifhir/gg-202305-server-error

Fix for wrong display when server returns error
This commit is contained in:
Grahame Grieve 2023-05-09 20:10:00 -05:00 committed by GitHub
commit 34c5ff93c4
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
26 changed files with 452 additions and 57 deletions

View File

@ -44,6 +44,9 @@ public class VersionConvertorConstants {
public static final String EXT_OLD_CONCEPTMAP_EQUIVALENCE = "http://hl7.org/fhir/1.0/StructureDefinition/extension-ConceptMap.element.target.equivalence"; public static final String EXT_OLD_CONCEPTMAP_EQUIVALENCE = "http://hl7.org/fhir/1.0/StructureDefinition/extension-ConceptMap.element.target.equivalence";
public static final String EXT_ACTUAL_RESOURCE_NAME = "http://hl7.org/fhir/tools/StructureDefinition/original-resource-name"; public static final String EXT_ACTUAL_RESOURCE_NAME = "http://hl7.org/fhir/tools/StructureDefinition/original-resource-name";
public static final String EXT_QUESTIONNAIRE_ITEM_TYPE_ORIGINAL = QuestionnaireRenderer.EXT_QUESTIONNAIRE_ITEM_TYPE_ORIGINAL; public static final String EXT_QUESTIONNAIRE_ITEM_TYPE_ORIGINAL = QuestionnaireRenderer.EXT_QUESTIONNAIRE_ITEM_TYPE_ORIGINAL;
public static final String EXT_NAMINGSYSTEM_TITLE = "http://hl7.org/fhir/5.0/StructureDefinition/extension-NamingSystem.title";
public static final String EXT_NAMINGSYSTEM_URL = "http://hl7.org/fhir/5.0/StructureDefinition/extension-NamingSystem.url";
public static final String EXT_NAMINGSYSTEM_VERSION = "http://hl7.org/fhir/5.0/StructureDefinition/extension-NamingSystem.version";
public static String refToVS(String url) { public static String refToVS(String url) {
if (url == null) if (url == null)

View File

@ -1,5 +1,6 @@
package org.hl7.fhir.convertors.conv10_50.resources10_50; package org.hl7.fhir.convertors.conv10_50.resources10_50;
import org.hl7.fhir.convertors.VersionConvertorConstants;
import org.hl7.fhir.convertors.context.ConversionContext10_50; import org.hl7.fhir.convertors.context.ConversionContext10_50;
import org.hl7.fhir.convertors.conv10_50.VersionConvertor_10_50; import org.hl7.fhir.convertors.conv10_50.VersionConvertor_10_50;
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.CodeableConcept10_50; import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.CodeableConcept10_50;
@ -8,6 +9,12 @@ import org.hl7.fhir.convertors.conv10_50.datatypes10_50.complextypes10_50.Period
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Boolean10_50; import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Boolean10_50;
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.DateTime10_50; import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.DateTime10_50;
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.String10_50; import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.String10_50;
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Uri10_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.String43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.Uri43_50;
import org.hl7.fhir.dstu2.model.Extension;
import org.hl7.fhir.dstu2.model.StringType;
import org.hl7.fhir.dstu2.model.UriType;
import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRException;
public class NamingSystem10_50 { public class NamingSystem10_50 {
@ -17,8 +24,14 @@ public class NamingSystem10_50 {
return null; return null;
org.hl7.fhir.dstu2.model.NamingSystem tgt = new org.hl7.fhir.dstu2.model.NamingSystem(); org.hl7.fhir.dstu2.model.NamingSystem tgt = new org.hl7.fhir.dstu2.model.NamingSystem();
ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt); ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt);
if (src.hasUrlElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).setValue(Uri10_50.convertUri(src.getUrlElement())));
if (src.hasVersionElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).setValue(String10_50.convertString(src.getVersionElement())));
if (src.hasNameElement()) if (src.hasNameElement())
tgt.setNameElement(String10_50.convertString(src.getNameElement())); tgt.setNameElement(String10_50.convertString(src.getNameElement()));
if (src.hasTitleElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).setValue(String10_50.convertString(src.getTitleElement())));
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())
@ -51,9 +64,20 @@ public class NamingSystem10_50 {
if (src == null || src.isEmpty()) if (src == null || src.isEmpty())
return null; return null;
org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem(); org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem();
ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt); ConversionContext10_50.INSTANCE.getVersionConvertor_10_50().copyDomainResource(src, tgt, VersionConvertorConstants.EXT_NAMINGSYSTEM_URL, VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION, VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE);
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL)) {
tgt.setUrlElement(Uri10_50.convertUri((UriType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).getValue()));
}
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION)) {
tgt.setVersionElement(String10_50.convertString((StringType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).getValue()));
}
if (src.hasNameElement()) if (src.hasNameElement())
tgt.setNameElement(String10_50.convertString(src.getNameElement())); tgt.setNameElement(String10_50.convertString(src.getNameElement()));
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE)) {
tgt.setTitleElement(String10_50.convertString((StringType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).getValue()));
}
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations10_50.convertConformanceResourceStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())

View File

@ -1,5 +1,6 @@
package org.hl7.fhir.convertors.conv14_50.resources14_50; package org.hl7.fhir.convertors.conv14_50.resources14_50;
import org.hl7.fhir.convertors.VersionConvertorConstants;
import org.hl7.fhir.convertors.context.ConversionContext14_50; import org.hl7.fhir.convertors.context.ConversionContext14_50;
import org.hl7.fhir.convertors.conv14_50.datatypes14_50.complextypes14_50.CodeableConcept14_50; import org.hl7.fhir.convertors.conv14_50.datatypes14_50.complextypes14_50.CodeableConcept14_50;
import org.hl7.fhir.convertors.conv14_50.datatypes14_50.complextypes14_50.ContactPoint14_50; import org.hl7.fhir.convertors.conv14_50.datatypes14_50.complextypes14_50.ContactPoint14_50;
@ -7,6 +8,9 @@ import org.hl7.fhir.convertors.conv14_50.datatypes14_50.complextypes14_50.Period
import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.Boolean14_50; import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.Boolean14_50;
import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.DateTime14_50; import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.DateTime14_50;
import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.String14_50; import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.String14_50;
import org.hl7.fhir.convertors.conv14_50.datatypes14_50.primitivetypes14_50.Uri14_50;
import org.hl7.fhir.dstu2016may.model.Extension;
import org.hl7.fhir.dstu2016may.model.StringType;
import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRException;
public class NamingSystem14_50 { public class NamingSystem14_50 {
@ -14,10 +18,14 @@ public class NamingSystem14_50 {
public static org.hl7.fhir.r5.model.NamingSystem convertNamingSystem(org.hl7.fhir.dstu2016may.model.NamingSystem src) throws FHIRException { public static org.hl7.fhir.r5.model.NamingSystem convertNamingSystem(org.hl7.fhir.dstu2016may.model.NamingSystem src) throws FHIRException {
if (src == null || src.isEmpty()) if (src == null || src.isEmpty())
return null; return null;
org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem(); org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem();
ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyDomainResource(src, tgt); ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyDomainResource(src, tgt, VersionConvertorConstants.EXT_NAMINGSYSTEM_URL, VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION, VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE);
if (src.hasNameElement()) if (src.hasNameElement())
tgt.setNameElement(String14_50.convertString(src.getNameElement())); tgt.setNameElement(String14_50.convertString(src.getNameElement()));
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE)) {
tgt.setTitleElement(String14_50.convertString((StringType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).getValue()));
}
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations14_50.convertConformanceResourceStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations14_50.convertConformanceResourceStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())
@ -51,8 +59,15 @@ public class NamingSystem14_50 {
return null; return null;
org.hl7.fhir.dstu2016may.model.NamingSystem tgt = new org.hl7.fhir.dstu2016may.model.NamingSystem(); org.hl7.fhir.dstu2016may.model.NamingSystem tgt = new org.hl7.fhir.dstu2016may.model.NamingSystem();
ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyDomainResource(src, tgt); ConversionContext14_50.INSTANCE.getVersionConvertor_14_50().copyDomainResource(src, tgt);
if (src.hasUrlElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).setValue(Uri14_50.convertUri(src.getUrlElement())));
if (src.hasVersionElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).setValue(String14_50.convertString(src.getVersionElement())));
if (src.hasNameElement()) if (src.hasNameElement())
tgt.setNameElement(String14_50.convertString(src.getNameElement())); tgt.setNameElement(String14_50.convertString(src.getNameElement()));
if (src.hasTitleElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).setValue(String14_50.convertString(src.getTitleElement())));
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations14_50.convertConformanceResourceStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations14_50.convertConformanceResourceStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())

View File

@ -1,6 +1,8 @@
package org.hl7.fhir.convertors.conv30_50.resources30_50; package org.hl7.fhir.convertors.conv30_50.resources30_50;
import org.hl7.fhir.convertors.VersionConvertorConstants;
import org.hl7.fhir.convertors.context.ConversionContext30_50; import org.hl7.fhir.convertors.context.ConversionContext30_50;
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Uri10_50;
import org.hl7.fhir.convertors.conv30_50.datatypes30_50.ContactDetail30_50; import org.hl7.fhir.convertors.conv30_50.datatypes30_50.ContactDetail30_50;
import org.hl7.fhir.convertors.conv30_50.datatypes30_50.UsageContext30_50; import org.hl7.fhir.convertors.conv30_50.datatypes30_50.UsageContext30_50;
import org.hl7.fhir.convertors.conv30_50.datatypes30_50.complextypes30_50.CodeableConcept30_50; import org.hl7.fhir.convertors.conv30_50.datatypes30_50.complextypes30_50.CodeableConcept30_50;
@ -9,6 +11,12 @@ import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.Bool
import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.DateTime30_50; import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.DateTime30_50;
import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.MarkDown30_50; import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.MarkDown30_50;
import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.String30_50; import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.String30_50;
import org.hl7.fhir.convertors.conv30_50.datatypes30_50.primitivetypes30_50.Uri30_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.String43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.Uri43_50;
import org.hl7.fhir.dstu3.model.Extension;
import org.hl7.fhir.dstu3.model.StringType;
import org.hl7.fhir.dstu3.model.UriType;
import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRException;
public class NamingSystem30_50 { public class NamingSystem30_50 {
@ -18,8 +26,15 @@ public class NamingSystem30_50 {
return null; return null;
org.hl7.fhir.dstu3.model.NamingSystem tgt = new org.hl7.fhir.dstu3.model.NamingSystem(); org.hl7.fhir.dstu3.model.NamingSystem tgt = new org.hl7.fhir.dstu3.model.NamingSystem();
ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyDomainResource(src, tgt); ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyDomainResource(src, tgt);
if (src.hasUrlElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).setValue(Uri30_50.convertUri(src.getUrlElement())));
if (src.hasVersionElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).setValue(String30_50.convertString(src.getVersionElement())));
if (src.hasName()) if (src.hasName())
tgt.setNameElement(String30_50.convertString(src.getNameElement())); tgt.setNameElement(String30_50.convertString(src.getNameElement()));
if (src.hasTitleElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).setValue(String30_50.convertString(src.getTitleElement())));
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations30_50.convertPublicationStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations30_50.convertPublicationStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())
@ -51,9 +66,19 @@ public class NamingSystem30_50 {
if (src == null) if (src == null)
return null; return null;
org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem(); org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem();
ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyDomainResource(src, tgt); ConversionContext30_50.INSTANCE.getVersionConvertor_30_50().copyDomainResource(src, tgt, VersionConvertorConstants.EXT_NAMINGSYSTEM_URL, VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION, VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE);
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL)) {
tgt.setUrlElement(Uri30_50.convertUri((UriType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).getValue()));
}
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION)) {
tgt.setVersionElement(String30_50.convertString((StringType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).getValue()));
}
if (src.hasName()) if (src.hasName())
tgt.setNameElement(String30_50.convertString(src.getNameElement())); tgt.setNameElement(String30_50.convertString(src.getNameElement()));
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE)) {
tgt.setTitleElement(String30_50.convertString((StringType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).getValue()));
}
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations30_50.convertPublicationStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations30_50.convertPublicationStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())

View File

@ -1,6 +1,9 @@
package org.hl7.fhir.convertors.conv40_50.resources40_50; package org.hl7.fhir.convertors.conv40_50.resources40_50;
import org.hl7.fhir.convertors.VersionConvertorConstants;
import org.hl7.fhir.convertors.context.ConversionContext40_50; import org.hl7.fhir.convertors.context.ConversionContext40_50;
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.String10_50;
import org.hl7.fhir.convertors.conv10_50.datatypes10_50.primitivetypes10_50.Uri10_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.CodeableConcept40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.CodeableConcept40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.Period40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.general40_50.Period40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.metadata40_50.ContactDetail40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.metadata40_50.ContactDetail40_50;
@ -9,7 +12,13 @@ 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.primitive40_50.DateTime40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.MarkDown40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.MarkDown40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.String40_50; import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.String40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Uri40_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.String43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.Uri43_50;
import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r4.model.Extension;
import org.hl7.fhir.r4.model.StringType;
import org.hl7.fhir.r4.model.UriType;
/* /*
Copyright (c) 2011+, HL7, Inc. Copyright (c) 2011+, HL7, Inc.
@ -45,10 +54,22 @@ public class NamingSystem40_50 {
public static org.hl7.fhir.r5.model.NamingSystem convertNamingSystem(org.hl7.fhir.r4.model.NamingSystem src) throws FHIRException { public static org.hl7.fhir.r5.model.NamingSystem convertNamingSystem(org.hl7.fhir.r4.model.NamingSystem src) throws FHIRException {
if (src == null) if (src == null)
return null; return null;
org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem(); org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem();
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt, VersionConvertorConstants.EXT_NAMINGSYSTEM_URL, VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION, VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE);
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL)) {
tgt.setUrlElement(Uri40_50.convertUri((UriType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).getValue()));
}
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION)) {
tgt.setVersionElement(String40_50.convertString((StringType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).getValue()));
}
if (src.hasName()) if (src.hasName())
tgt.setNameElement(String40_50.convertString(src.getNameElement())); tgt.setNameElement(String40_50.convertString(src.getNameElement()));
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE)) {
tgt.setTitleElement(String40_50.convertString((StringType) src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).getValue()));
}
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations40_50.convertPublicationStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations40_50.convertPublicationStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())
@ -81,8 +102,15 @@ public class NamingSystem40_50 {
return null; return null;
org.hl7.fhir.r4.model.NamingSystem tgt = new org.hl7.fhir.r4.model.NamingSystem(); org.hl7.fhir.r4.model.NamingSystem tgt = new org.hl7.fhir.r4.model.NamingSystem();
ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt); ConversionContext40_50.INSTANCE.getVersionConvertor_40_50().copyDomainResource(src, tgt);
if (src.hasUrlElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).setValue(Uri40_50.convertUri(src.getUrlElement())));
if (src.hasVersionElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).setValue(String40_50.convertString(src.getVersionElement())));
if (src.hasName()) if (src.hasName())
tgt.setNameElement(String40_50.convertString(src.getNameElement())); tgt.setNameElement(String40_50.convertString(src.getNameElement()));
if (src.hasTitleElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).setValue(String40_50.convertString(src.getTitleElement())));
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations40_50.convertPublicationStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations40_50.convertPublicationStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())

View File

@ -2,6 +2,9 @@ package org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50;
import org.hl7.fhir.convertors.context.ConversionContext43_50; import org.hl7.fhir.convertors.context.ConversionContext43_50;
import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r4b.model.DataType;
import org.hl7.fhir.r4b.model.PrimitiveType;
import org.hl7.fhir.r5.model.UriType;
public class Uri43_50 { public class Uri43_50 {
public static org.hl7.fhir.r5.model.UriType convertUri(org.hl7.fhir.r4b.model.UriType src) throws FHIRException { public static org.hl7.fhir.r5.model.UriType convertUri(org.hl7.fhir.r4b.model.UriType src) throws FHIRException {
@ -15,4 +18,15 @@ public class Uri43_50 {
ConversionContext43_50.INSTANCE.getVersionConvertor_43_50().copyElement(src, tgt); ConversionContext43_50.INSTANCE.getVersionConvertor_43_50().copyElement(src, tgt);
return tgt; return tgt;
} }
public static UriType convertToUri(DataType src) {
if (src instanceof PrimitiveType<?>) {
PrimitiveType<?> p = (PrimitiveType<?>) src;
org.hl7.fhir.r5.model.UriType tgt = p.hasValue() ? new org.hl7.fhir.r5.model.UriType(p.getValueAsString()) : new org.hl7.fhir.r5.model.UriType();
ConversionContext43_50.INSTANCE.getVersionConvertor_43_50().copyElement(src, tgt);
return tgt;
} else {
throw new FHIRException("Unable to convert "+src.fhirType()+" to a URI Type");
}
}
} }

View File

@ -1,6 +1,9 @@
package org.hl7.fhir.convertors.conv43_50.resources43_50; package org.hl7.fhir.convertors.conv43_50.resources43_50;
import org.hl7.fhir.convertors.VersionConvertorConstants;
import org.hl7.fhir.convertors.context.ConversionContext43_50; import org.hl7.fhir.convertors.context.ConversionContext43_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.String40_50;
import org.hl7.fhir.convertors.conv40_50.datatypes40_50.primitive40_50.Uri40_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.general43_50.CodeableConcept43_50; import org.hl7.fhir.convertors.conv43_50.datatypes43_50.general43_50.CodeableConcept43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.general43_50.Period43_50; import org.hl7.fhir.convertors.conv43_50.datatypes43_50.general43_50.Period43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.metadata43_50.ContactDetail43_50; import org.hl7.fhir.convertors.conv43_50.datatypes43_50.metadata43_50.ContactDetail43_50;
@ -9,7 +12,9 @@ import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.Boolean43
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.DateTime43_50; import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.DateTime43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.MarkDown43_50; import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.MarkDown43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.String43_50; import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.String43_50;
import org.hl7.fhir.convertors.conv43_50.datatypes43_50.primitive43_50.Uri43_50;
import org.hl7.fhir.exceptions.FHIRException; import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.r4b.model.Extension;
/* /*
Copyright (c) 2011+, HL7, Inc. Copyright (c) 2011+, HL7, Inc.
@ -46,9 +51,19 @@ public class NamingSystem43_50 {
if (src == null) if (src == null)
return null; return null;
org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem(); org.hl7.fhir.r5.model.NamingSystem tgt = new org.hl7.fhir.r5.model.NamingSystem();
ConversionContext43_50.INSTANCE.getVersionConvertor_43_50().copyDomainResource(src, tgt); ConversionContext43_50.INSTANCE.getVersionConvertor_43_50().copyDomainResource(src, tgt, VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE);
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL)) {
tgt.setUrlElement(Uri43_50.convertToUri(src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).getValue()));
}
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION)) {
tgt.setVersionElement(String43_50.convertString(src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).getValueStringType()));
}
if (src.hasName()) if (src.hasName())
tgt.setNameElement(String43_50.convertString(src.getNameElement())); tgt.setNameElement(String43_50.convertString(src.getNameElement()));
if (src.hasExtension(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE)) {
tgt.setTitleElement(String43_50.convertString(src.getExtensionByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).getValueStringType()));
}
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations43_50.convertPublicationStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations43_50.convertPublicationStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())
@ -81,8 +96,16 @@ public class NamingSystem43_50 {
return null; return null;
org.hl7.fhir.r4b.model.NamingSystem tgt = new org.hl7.fhir.r4b.model.NamingSystem(); org.hl7.fhir.r4b.model.NamingSystem tgt = new org.hl7.fhir.r4b.model.NamingSystem();
ConversionContext43_50.INSTANCE.getVersionConvertor_43_50().copyDomainResource(src, tgt); ConversionContext43_50.INSTANCE.getVersionConvertor_43_50().copyDomainResource(src, tgt);
if (src.hasUrlElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_URL).setValue(Uri43_50.convertUri(src.getUrlElement())));
if (src.hasVersionElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_VERSION).setValue(String43_50.convertString(src.getVersionElement())));
if (src.hasName()) if (src.hasName())
tgt.setNameElement(String43_50.convertString(src.getNameElement())); tgt.setNameElement(String43_50.convertString(src.getNameElement()));
if (src.hasTitleElement())
tgt.getExtension().add(new Extension().setUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).setValue(String43_50.convertString(src.getTitleElement())));
if (src.hasStatus()) if (src.hasStatus())
tgt.setStatusElement(Enumerations43_50.convertPublicationStatus(src.getStatusElement())); tgt.setStatusElement(Enumerations43_50.convertPublicationStatus(src.getStatusElement()));
if (src.hasKind()) if (src.hasKind())

View File

@ -0,0 +1,33 @@
package org.hl7.fhir.convertors.conv40_50;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.IOException;
import java.io.InputStream;
import org.hl7.fhir.convertors.VersionConvertorConstants;
import org.hl7.fhir.convertors.factory.VersionConvertorFactory_40_50;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class NamingSystem40_50Test {
@Test
@DisplayName("Test r5 -> r4 NamingSystem conversion.")
public void testR5_R4() throws IOException {
InputStream r4b_input = this.getClass().getResourceAsStream("/naming_system_r4.xml");
org.hl7.fhir.r4.model.NamingSystem r4b_actual = (org.hl7.fhir.r4.model.NamingSystem) new org.hl7.fhir.r4.formats.XmlParser().parse(r4b_input);
org.hl7.fhir.r5.model.NamingSystem r5_conv = (org.hl7.fhir.r5.model.NamingSystem) VersionConvertorFactory_40_50.convertResource(r4b_actual);
org.hl7.fhir.r4.model.NamingSystem r4b_conv = (org.hl7.fhir.r4.model.NamingSystem) VersionConvertorFactory_40_50.convertResource(r5_conv);
assertEquals(1, r4b_actual.getExtensionsByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).size());
assertEquals(0, r5_conv.getExtensionsByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).size());
assertEquals("American Dental Association Area of Oral Cavity System", r5_conv.getTitle());
assertEquals("http://terminology.hl7.org/NamingSystem/ADAAreaOralCavitySystem", r5_conv.getUrl());
assertEquals("1.0.0", r5_conv.getVersion());
assertEquals(1, r4b_conv.getExtensionsByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).size());
}
}

View File

@ -0,0 +1,33 @@
package org.hl7.fhir.convertors.conv43_50;
import static org.junit.jupiter.api.Assertions.assertEquals;
import java.io.IOException;
import java.io.InputStream;
import org.hl7.fhir.convertors.VersionConvertorConstants;
import org.hl7.fhir.convertors.factory.VersionConvertorFactory_43_50;
import org.junit.jupiter.api.DisplayName;
import org.junit.jupiter.api.Test;
public class NamingSystem43_50Test {
@Test
@DisplayName("Test r5 -> r4 NamingSystem conversion.")
public void testR5_R4() throws IOException {
InputStream r4b_input = this.getClass().getResourceAsStream("/naming_system_r4.xml");
org.hl7.fhir.r4b.model.NamingSystem r4b_actual = (org.hl7.fhir.r4b.model.NamingSystem) new org.hl7.fhir.r4b.formats.XmlParser().parse(r4b_input);
org.hl7.fhir.r5.model.NamingSystem r5_conv = (org.hl7.fhir.r5.model.NamingSystem) VersionConvertorFactory_43_50.convertResource(r4b_actual);
org.hl7.fhir.r4b.model.NamingSystem r4b_conv = (org.hl7.fhir.r4b.model.NamingSystem) VersionConvertorFactory_43_50.convertResource(r5_conv);
assertEquals(1, r4b_actual.getExtensionsByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).size());
assertEquals(0, r5_conv.getExtensionsByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).size());
assertEquals("American Dental Association Area of Oral Cavity System", r5_conv.getTitle());
assertEquals("http://terminology.hl7.org/NamingSystem/ADAAreaOralCavitySystem", r5_conv.getUrl());
assertEquals("1.0.0", r5_conv.getVersion());
assertEquals(1, r4b_conv.getExtensionsByUrl(VersionConvertorConstants.EXT_NAMINGSYSTEM_TITLE).size());
}
}

View File

@ -0,0 +1,31 @@
<?xml version="1.0" encoding="UTF-8"?>
<NamingSystem xmlns="http://hl7.org/fhir">
<id value="ADAAreaOralCavitySystem"/>
<extension url="http://hl7.org/fhir/5.0/StructureDefinition/extension-NamingSystem.title">
<valueString value="American Dental Association Area of Oral Cavity System"/>
</extension>
<extension url="http://hl7.org/fhir/5.0/StructureDefinition/extension-NamingSystem.url">
<valueUri value="http://terminology.hl7.org/NamingSystem/ADAAreaOralCavitySystem"/>
</extension>
<extension url="http://hl7.org/fhir/5.0/StructureDefinition/extension-NamingSystem.version">
<valueString value="1.0.0"/>
</extension>
<name value="ADAAreaOralCavitySystem"/>
<status value="active"/>
<kind value="codesystem"/>
<date value="2022-04-07T00:00:00-00:00"/>
<publisher value="American Dental Association"/>
<contact>
<name value="American Dental Association; 211 East Chicago Avenue Chicago, IL 60610-2678"/>
</contact>
<description value="The Area of Oral Cavity System is accepted and approved by the ADA and is the most commonly used system used by dental professionals in America.&#13;&#10;&#13;&#10;Area of the oral cavity is designated by a two-digit code.&#13;&#10;&#13;&#10;The Area of Oral Cavity System can be found in the ADA Comprehensive ADA Dental Claim Form Completion Instructions (see https://www.ada.org/-/media/project/ada-organization/ada/ada-org/files/publications/cdt/v2019adadentalclaimcompletioninstructions_v3_2022feb.pdf). For more information see here: https://www.ada.org/publications/cdt/ada-dental-claim-form. &#13;&#10;&#13;&#10;A Statement of Understanding (SOU) between ADA and HL7 exists here: http://www.hl7.org/documentcenter/public/mou/ADA%20HL7%20SOU%202021_signed.pdf"/>
<uniqueId>
<type value="uri"/>
<value value="http://terminology.hl7.org/CodeSystem/ADAAreaOralCavitySystem"/>
<preferred value="true"/>
<comment value="This is the URL endorsed by the HTA and is considered authoritative."/>
<period>
<start value="2022-04-07"/>
</period>
</uniqueId>
</NamingSystem>

View File

@ -316,4 +316,26 @@ public abstract class DomainResource extends Resource implements IBaseHasExtensi
} }
public boolean hasExtension(String url) {
for (Extension e : getExtension())
if (url.equals(e.getUrl()))
return true;
return false;
}
public Extension getExtensionByUrl(String theUrl) {
org.apache.commons.lang3.Validate.notBlank(theUrl, "theUrl must not be blank or null");
ArrayList<Extension> retVal = new ArrayList<Extension>();
for (Extension next : getExtension()) {
if (theUrl.equals(next.getUrl())) {
retVal.add(next);
}
}
if (retVal.size() == 0)
return null;
else {
org.apache.commons.lang3.Validate.isTrue(retVal.size() == 1, "Url "+theUrl+" must have only one match");
return retVal.get(0);
}
}
} }

View File

@ -390,4 +390,28 @@ public abstract class DomainResource extends Resource implements IBaseHasExtensi
} }
public boolean hasExtension(String url) {
for (Extension e : getExtension())
if (url.equals(e.getUrl()))
return true;
return false;
}
public Extension getExtensionByUrl(String theUrl) {
org.apache.commons.lang3.Validate.notBlank(theUrl, "theUrl must not be blank or null");
ArrayList<Extension> retVal = new ArrayList<Extension>();
for (Extension next : getExtension()) {
if (theUrl.equals(next.getUrl())) {
retVal.add(next);
}
}
if (retVal.size() == 0)
return null;
else {
org.apache.commons.lang3.Validate.isTrue(retVal.size() == 1, "Url "+theUrl+" must have only one match");
return retVal.get(0);
}
}
} }

View File

@ -84,16 +84,34 @@ public class ResourceUtilities {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for (OperationOutcomeIssueComponent t : error.getIssue()) for (OperationOutcomeIssueComponent t : error.getIssue())
if (t.getSeverity() == IssueSeverity.ERROR) if (t.getSeverity() == IssueSeverity.ERROR)
b.append("Error:" +t.getDetails()+"\r\n"); b.append("Error:" +gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.FATAL) else if (t.getSeverity() == IssueSeverity.FATAL)
b.append("Fatal:" +t.getDetails()+"\r\n"); b.append("Fatal:" +gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.WARNING) else if (t.getSeverity() == IssueSeverity.WARNING)
b.append("Warning:" +t.getDetails()+"\r\n"); b.append("Warning:" +gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.INFORMATION) else if (t.getSeverity() == IssueSeverity.INFORMATION)
b.append("Information:" +t.getDetails()+"\r\n"); b.append("Information:" +gen(t.getDetails())+"\r\n");
return b.toString(); return b.toString();
} }
private static String gen(CodeableConcept details) {
if (details.hasText()) {
return details.getText();
}
for (Coding c : details.getCoding()) {
if (c.hasDisplay()) {
return c.getDisplay();
}
}
for (Coding c : details.getCoding()) {
if (c.hasCode()) {
return c.getCode();
}
}
return "(no details supplied)";
}
public static Resource getById(Bundle feed, ResourceType type, String reference) { public static Resource getById(Bundle feed, ResourceType type, String reference) {
for (BundleEntryComponent item : feed.getEntry()) { for (BundleEntryComponent item : feed.getEntry()) {
if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type) if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type)

View File

@ -85,16 +85,34 @@ public class ResourceUtilities {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for (OperationOutcomeIssueComponent t : error.getIssue()) for (OperationOutcomeIssueComponent t : error.getIssue())
if (t.getSeverity() == IssueSeverity.ERROR) if (t.getSeverity() == IssueSeverity.ERROR)
b.append("Error:" +t.getDetails()+"\r\n"); b.append("Error:" +gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.FATAL) else if (t.getSeverity() == IssueSeverity.FATAL)
b.append("Fatal:" +t.getDetails()+"\r\n"); b.append("Fatal:" +gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.WARNING) else if (t.getSeverity() == IssueSeverity.WARNING)
b.append("Warning:" +t.getDetails()+"\r\n"); b.append("Warning:" +gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.INFORMATION) else if (t.getSeverity() == IssueSeverity.INFORMATION)
b.append("Information:" +t.getDetails()+"\r\n"); b.append("Information:" +gen(t.getDetails())+"\r\n");
return b.toString(); return b.toString();
} }
private static String gen(CodeableConcept details) {
if (details.hasText()) {
return details.getText();
}
for (Coding c : details.getCoding()) {
if (c.hasDisplay()) {
return c.getDisplay();
}
}
for (Coding c : details.getCoding()) {
if (c.hasCode()) {
return c.getCode();
}
}
return "(no details supplied)";
}
public static Resource getById(Bundle feed, ResourceType type, String reference) { public static Resource getById(Bundle feed, ResourceType type, String reference) {
for (BundleEntryComponent item : feed.getEntry()) { for (BundleEntryComponent item : feed.getEntry()) {
if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type) if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type)

View File

@ -78,16 +78,34 @@ public class ResourceUtilities {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for (OperationOutcomeIssueComponent t : error.getIssue()) for (OperationOutcomeIssueComponent t : error.getIssue())
if (t.getSeverity() == IssueSeverity.ERROR) if (t.getSeverity() == IssueSeverity.ERROR)
b.append("Error:" +t.getDetails()+"\r\n"); b.append("Error:" + gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.FATAL) else if (t.getSeverity() == IssueSeverity.FATAL)
b.append("Fatal:" +t.getDetails()+"\r\n"); b.append("Fatal:"+gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.WARNING) else if (t.getSeverity() == IssueSeverity.WARNING)
b.append("Warning:" +t.getDetails()+"\r\n"); b.append("Warning:" +gen(t.getDetails())+"\r\n");
else if (t.getSeverity() == IssueSeverity.INFORMATION) else if (t.getSeverity() == IssueSeverity.INFORMATION)
b.append("Information:" +t.getDetails()+"\r\n"); b.append("Information:" +gen(t.getDetails())+"\r\n");
return b.toString(); return b.toString();
} }
private static String gen(CodeableConcept details) {
if (details.hasText()) {
return details.getText();
}
for (Coding c : details.getCoding()) {
if (c.hasDisplay()) {
return c.getDisplay();
}
}
for (Coding c : details.getCoding()) {
if (c.hasCode()) {
return c.getCode();
}
}
return "(no details supplied)";
}
public static Resource getById(Bundle feed, ResourceType type, String reference) { public static Resource getById(Bundle feed, ResourceType type, String reference) {
for (BundleEntryComponent item : feed.getEntry()) { for (BundleEntryComponent item : feed.getEntry()) {
if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type) if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type)

View File

@ -79,18 +79,36 @@ public class ResourceUtilities {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for (OperationOutcomeIssueComponent t : error.getIssue()) { for (OperationOutcomeIssueComponent t : error.getIssue()) {
if (t.getSeverity() == IssueSeverity.ERROR) { if (t.getSeverity() == IssueSeverity.ERROR) {
b.append("Error:" +t.getDetails()+"\r\n"); b.append("Error:" +gen(t.getDetails())+"\r\n");
} else if (t.getSeverity() == IssueSeverity.FATAL) { } else if (t.getSeverity() == IssueSeverity.FATAL) {
b.append("Fatal:" +t.getDetails()+"\r\n"); b.append("Fatal:" +gen(t.getDetails())+"\r\n");
} else if (t.getSeverity() == IssueSeverity.WARNING) { } else if (t.getSeverity() == IssueSeverity.WARNING) {
b.append("Warning:" +t.getDetails()+"\r\n"); b.append("Warning:" +gen(t.getDetails())+"\r\n");
} else if (t.getSeverity() == IssueSeverity.INFORMATION) { } else if (t.getSeverity() == IssueSeverity.INFORMATION) {
b.append("Information:" +t.getDetails()+"\r\n"); b.append("Information:" +gen(t.getDetails())+"\r\n");
} }
} }
return b.toString(); return b.toString();
} }
private static String gen(CodeableConcept details) {
if (details.hasText()) {
return details.getText();
}
for (Coding c : details.getCoding()) {
if (c.hasDisplay()) {
return c.getDisplay();
}
}
for (Coding c : details.getCoding()) {
if (c.hasCode()) {
return c.getCode();
}
}
return "(no details supplied)";
}
public static Resource getById(Bundle feed, ResourceType type, String reference) { public static Resource getById(Bundle feed, ResourceType type, String reference) {
for (BundleEntryComponent item : feed.getEntry()) { for (BundleEntryComponent item : feed.getEntry()) {
if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type) if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type)

View File

@ -122,6 +122,7 @@ public interface IWorkerContext {
private String txLink; private String txLink;
private String diagnostics; private String diagnostics;
private List<OperationOutcomeIssueComponent> issues = new ArrayList<>(); private List<OperationOutcomeIssueComponent> issues = new ArrayList<>();
private CodeableConcept codeableConcept;
@Override @Override
public String toString() { public String toString() {
@ -277,6 +278,16 @@ public interface IWorkerContext {
return issues; return issues;
} }
public ValidationResult addCodeableConcept(CodeableConcept vcc) {
if (!vcc.isEmpty()) {
codeableConcept = vcc;
}
return this;
}
public CodeableConcept getCodeableConcept() {
return codeableConcept;
}
} }

View File

@ -410,6 +410,13 @@ public boolean hasCoding(String system, String code) {
return hasCoding() ? getCoding().toString() : "["+getText()+"]"; return hasCoding() ? getCoding().toString() : "["+getText()+"]";
} }
public void removeCoding(String system, String version, String code) {
getCoding().removeIf(c ->
(system == null || system.equals(c.getSystem())) &&
(version == null || version.equals(c.getVersion())) &&
(code == null || code.equals(c.getCode())));
}
// end addition // end addition
} }

View File

@ -32,29 +32,19 @@ package org.hl7.fhir.r5.model;
// Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0 // Generated on Thu, Mar 23, 2023 19:59+1100 for FHIR v5.0.0
import java.util.ArrayList; import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import org.hl7.fhir.r5.model.Enumerations.*;
import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.instance.model.api.ICompositeType;
import ca.uhn.fhir.model.api.annotation.ResourceDef;
import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
import org.hl7.fhir.instance.model.api.IBaseBackboneElement;
import ca.uhn.fhir.model.api.annotation.Child;
import ca.uhn.fhir.model.api.annotation.ChildOrder;
import ca.uhn.fhir.model.api.annotation.Description;
import ca.uhn.fhir.model.api.annotation.Block;
import java.util.Collections; import java.util.Collections;
import java.util.Set; import java.util.List;
import org.hl7.fhir.instance.model.api.IDomainResource;
import org.hl7.fhir.instance.model.api.IBaseDatatypeElement; import org.hl7.fhir.exceptions.FHIRException;
import org.hl7.fhir.instance.model.api.IBaseHasExtensions; import org.hl7.fhir.instance.model.api.IBaseHasExtensions;
import org.hl7.fhir.instance.model.api.IBaseHasModifierExtensions; import org.hl7.fhir.instance.model.api.IBaseHasModifierExtensions;
import org.hl7.fhir.instance.model.api.IBaseBackboneElement; import org.hl7.fhir.instance.model.api.IDomainResource;
import org.hl7.fhir.r5.utils.ToolingExtensions; import org.hl7.fhir.r5.utils.ToolingExtensions;
import org.hl7.fhir.utilities.StandardsStatus; import org.hl7.fhir.utilities.StandardsStatus;
import ca.uhn.fhir.model.api.annotation.Child;
import ca.uhn.fhir.model.api.annotation.Description;
import ca.uhn.fhir.model.api.annotation.SearchParamDefinition;
/** /**
* A resource that includes narrative, extensions, and contained resources. * A resource that includes narrative, extensions, and contained resources.
*/ */
@ -522,6 +512,7 @@ public void checkNoModifiers(String noun, String verb) throws FHIRException {
ToolingExtensions.setStandardsStatus(this, status, null); ToolingExtensions.setStandardsStatus(this, status, null);
} }
// end addition // end addition
} }

View File

@ -158,6 +158,7 @@ public class ValueSetValidator {
// first, we validate the codings themselves // first, we validate the codings themselves
ValidationProcessInfo info = new ValidationProcessInfo(); ValidationProcessInfo info = new ValidationProcessInfo();
CodeableConcept vcc = new CodeableConcept();
if (options.getValueSetMode() != ValueSetMode.CHECK_MEMERSHIP_ONLY) { if (options.getValueSetMode() != ValueSetMode.CHECK_MEMERSHIP_ONLY) {
int i = 0; int i = 0;
for (Coding c : code.getCoding()) { for (Coding c : code.getCoding()) {
@ -183,7 +184,7 @@ public class ValueSetValidator {
} }
} else { } else {
c.setUserData("cs", cs); c.setUserData("cs", cs);
res = validateCode(path+".coding["+i+"]", c, cs); res = validateCode(path+".coding["+i+"]", c, cs, vcc);
} }
info.getIssues().addAll(res.getIssues()); info.getIssues().addAll(res.getIssues());
i++; i++;
@ -202,6 +203,12 @@ public class ValueSetValidator {
} else if (ok) { } else if (ok) {
result = true; result = true;
foundCoding = c; foundCoding = c;
if (options.getValueSetMode() == ValueSetMode.CHECK_MEMERSHIP_ONLY) {
vcc.addCoding().setSystem(c.getSystem()).setVersion(c.getVersion()).setCode(c.getCode());
}
}
if (ok == null || !ok) {
vcc.removeCoding(c.getSystem(), c.getVersion(), c.getCode());
} }
} }
if (result == null) { if (result == null) {
@ -222,6 +229,7 @@ public class ValueSetValidator {
res.setVersion(foundCoding.hasVersion() ? foundCoding.getVersion() : ((CodeSystem) foundCoding.getUserData("cs")).getVersion()); res.setVersion(foundCoding.hasVersion() ? foundCoding.getVersion() : ((CodeSystem) foundCoding.getUserData("cs")).getVersion());
res.setDisplay(cd.getDisplay()); res.setDisplay(cd.getDisplay());
} }
res.addCodeableConcept(vcc);
return res; return res;
} else if (foundCoding == null) { } else if (foundCoding == null) {
return new ValidationResult(IssueSeverity.ERROR, "Internal Error that should not happen", makeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, path, "Internal Error that should not happen")); return new ValidationResult(IssueSeverity.ERROR, "Internal Error that should not happen", makeIssue(IssueSeverity.FATAL, IssueType.EXCEPTION, path, "Internal Error that should not happen"));
@ -229,11 +237,11 @@ public class ValueSetValidator {
String disp = lookupDisplay(foundCoding); String disp = lookupDisplay(foundCoding);
ConceptDefinitionComponent cd = new ConceptDefinitionComponent(foundCoding.getCode()); ConceptDefinitionComponent cd = new ConceptDefinitionComponent(foundCoding.getCode());
cd.setDisplay(disp); cd.setDisplay(disp);
return new ValidationResult(IssueSeverity.WARNING, info.summary(), foundCoding.getSystem(), getVersion(foundCoding), cd, disp, info.getIssues()); return new ValidationResult(IssueSeverity.WARNING, info.summary(), foundCoding.getSystem(), getVersion(foundCoding), cd, disp, info.getIssues()).addCodeableConcept(vcc);
} else { } else {
ConceptDefinitionComponent cd = new ConceptDefinitionComponent(foundCoding.getCode()); ConceptDefinitionComponent cd = new ConceptDefinitionComponent(foundCoding.getCode());
cd.setDisplay(lookupDisplay(foundCoding)); cd.setDisplay(lookupDisplay(foundCoding));
return new ValidationResult(foundCoding.getSystem(), getVersion(foundCoding), cd, getPreferredDisplay(cd, null)); return new ValidationResult(foundCoding.getSystem(), getVersion(foundCoding), cd, getPreferredDisplay(cd, null)).addCodeableConcept(vcc);
} }
} }
@ -406,7 +414,7 @@ public class ValueSetValidator {
// we can't validate that here. // we can't validate that here.
throw new FHIRException("Unable to evaluate based on empty code system"); throw new FHIRException("Unable to evaluate based on empty code system");
} }
res = validateCode(path, code, cs); res = validateCode(path, code, cs, null);
} else if (cs == null && valueset.hasExpansion() && inExpansion) { } else if (cs == null && valueset.hasExpansion() && inExpansion) {
// we just take the value set as face value then // we just take the value set as face value then
res = new ValidationResult(system, wv, new ConceptDefinitionComponent().setCode(code.getCode()).setDisplay(code.getDisplay()), code.getDisplay()); res = new ValidationResult(system, wv, new ConceptDefinitionComponent().setCode(code.getCode()).setDisplay(code.getDisplay()), code.getDisplay());
@ -589,7 +597,7 @@ public class ValueSetValidator {
return false; return false;
} }
private ValidationResult validateCode(String path, Coding code, CodeSystem cs) { private ValidationResult validateCode(String path, Coding code, CodeSystem cs, CodeableConcept vcc) {
ConceptDefinitionComponent cc = cs.hasUserData("tx.cs.special") ? ((SpecialCodeSystem) cs.getUserData("tx.cs.special")).findConcept(code) : findCodeInConcept(cs.getConcept(), code.getCode()); ConceptDefinitionComponent cc = cs.hasUserData("tx.cs.special") ? ((SpecialCodeSystem) cs.getUserData("tx.cs.special")).findConcept(code) : findCodeInConcept(cs.getConcept(), code.getCode());
if (cc == null) { if (cc == null) {
if (cs.getContent() == CodeSystemContentMode.FRAGMENT) { if (cs.getContent() == CodeSystemContentMode.FRAGMENT) {
@ -600,8 +608,12 @@ public class ValueSetValidator {
return new ValidationResult(IssueSeverity.ERROR, msg, makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path+".code", msg)); return new ValidationResult(IssueSeverity.ERROR, msg, makeIssue(IssueSeverity.ERROR, IssueType.INVALID, path+".code", msg));
} }
} }
Coding vc = new Coding().setCode(code.getCode()).setSystem(cs.getUrl()).setVersion(cs.getVersion()).setDisplay(getPreferredDisplay(cc, cs));
if (vcc != null) {
vcc.addCoding(vc);
}
if (code.getDisplay() == null) { if (code.getDisplay() == null) {
return new ValidationResult(code.getSystem(), cs.getVersion(), cc, getPreferredDisplay(cc, cs)); return new ValidationResult(code.getSystem(), cs.getVersion(), cc, vc.getDisplay());
} }
CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder(); CommaSeparatedStringBuilder b = new CommaSeparatedStringBuilder();
if (cc.hasDisplay() && isOkLanguage(cs.getLanguage())) { if (cc.hasDisplay() && isOkLanguage(cs.getLanguage())) {

View File

@ -34,6 +34,7 @@ import java.util.List;
import java.util.Locale; import java.util.Locale;
import java.util.Set; import java.util.Set;
import org.hl7.fhir.r5.model.Coding;
import org.hl7.fhir.r5.model.Base; import org.hl7.fhir.r5.model.Base;
import org.hl7.fhir.r5.model.Bundle; import org.hl7.fhir.r5.model.Bundle;
import org.hl7.fhir.r5.model.Bundle.BundleEntryComponent; import org.hl7.fhir.r5.model.Bundle.BundleEntryComponent;
@ -78,18 +79,36 @@ public class ResourceUtilities {
StringBuilder b = new StringBuilder(); StringBuilder b = new StringBuilder();
for (OperationOutcomeIssueComponent t : error.getIssue()) { for (OperationOutcomeIssueComponent t : error.getIssue()) {
if (t.getSeverity() == IssueSeverity.ERROR) { if (t.getSeverity() == IssueSeverity.ERROR) {
b.append("Error:" +t.getDetails()+"\r\n"); b.append("Error:" +gen(t.getDetails())+"\r\n");
} else if (t.getSeverity() == IssueSeverity.FATAL) { } else if (t.getSeverity() == IssueSeverity.FATAL) {
b.append("Fatal:" +t.getDetails()+"\r\n"); b.append("Fatal:" +gen(t.getDetails())+"\r\n");
} else if (t.getSeverity() == IssueSeverity.WARNING) { } else if (t.getSeverity() == IssueSeverity.WARNING) {
b.append("Warning:" +t.getDetails()+"\r\n"); b.append("Warning:" +gen(t.getDetails())+"\r\n");
} else if (t.getSeverity() == IssueSeverity.INFORMATION) { } else if (t.getSeverity() == IssueSeverity.INFORMATION) {
b.append("Information:" +t.getDetails()+"\r\n"); b.append("Information:" +gen(t.getDetails())+"\r\n");
} }
} }
return b.toString(); return b.toString();
} }
private static String gen(CodeableConcept details) {
if (details.hasText()) {
return details.getText();
}
for (Coding c : details.getCoding()) {
if (c.hasDisplay()) {
return c.getDisplay();
}
}
for (Coding c : details.getCoding()) {
if (c.hasCode()) {
return c.getCode();
}
}
return "(no details supplied)";
}
public static Resource getById(Bundle feed, ResourceType type, String reference) { public static Resource getById(Bundle feed, ResourceType type, String reference) {
for (BundleEntryComponent item : feed.getEntry()) { for (BundleEntryComponent item : feed.getEntry()) {
if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type) if (item.getResource().getId().equals(reference) && item.getResource().getResourceType() == type)

View File

@ -536,7 +536,7 @@ XHTML_URL_INVALID_CHARS_one = URL contains Invalid Character ({1})
XHTML_URL_INVALID_CHARS_other = URL contains {0} Invalid Characters ({1}) XHTML_URL_INVALID_CHARS_other = URL contains {0} Invalid Characters ({1})
TERMINOLOGY_TX_SYSTEM_HTTPS = The system URL ''{0}'' wrongly starts with https: not http: TERMINOLOGY_TX_SYSTEM_HTTPS = The system URL ''{0}'' wrongly starts with https: not http:
CODESYSTEM_CS_NO_VS_NOTCOMPLETE = Review the All Codes Value Set - incomplete CodeSystems generally should not have an all codes value set specified CODESYSTEM_CS_NO_VS_NOTCOMPLETE = Review the All Codes Value Set - incomplete CodeSystems generally should not have an all codes value set specified
TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_IETF_SYSTEM_VALUE = if identifier.system is ''urn:ietf:rfc:3986'', then the identifier.value must be a full URI (e.g. start with a scheme) TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_IETF_SYSTEM_VALUE = if identifier.system is ''urn:ietf:rfc:3986'', then the identifier.value must be a full URI (e.g. start with a scheme), not ''{0}''
TYPE_SPECIFIC_CHECKS_DT_ATT_SIZE_INVALID = Stated Attachment Size {0} is not valid TYPE_SPECIFIC_CHECKS_DT_ATT_SIZE_INVALID = Stated Attachment Size {0} is not valid
TYPE_SPECIFIC_CHECKS_DT_ATT_SIZE_CORRECT = Stated Attachment Size {0} does not match actual attachment size {1} TYPE_SPECIFIC_CHECKS_DT_ATT_SIZE_CORRECT = Stated Attachment Size {0} does not match actual attachment size {1}
TYPE_SPECIFIC_CHECKS_DT_ATT_NO_FETCHER = Attachment size cannot be checked because the validator has not been set up to access the network (url = {0}) TYPE_SPECIFIC_CHECKS_DT_ATT_NO_FETCHER = Attachment size cannot be checked because the validator has not been set up to access the network (url = {0})

View File

@ -2255,7 +2255,7 @@ public class InstanceValidator extends BaseValidator implements IResourceValidat
ok = rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, system == null || isIdentifierSystemReferenceValid(system), I18nConstants.TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_SYSTEM) && ok; ok = rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, system == null || isIdentifierSystemReferenceValid(system), I18nConstants.TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_SYSTEM) && ok;
if ("urn:ietf:rfc:3986".equals(system)) { if ("urn:ietf:rfc:3986".equals(system)) {
String value = element.getNamedChildValue("value"); String value = element.getNamedChildValue("value");
ok = rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, value == null || isAbsolute(value), I18nConstants.TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_IETF_SYSTEM_VALUE) && ok; ok = rule(errors, NO_RULE_DATE, IssueType.CODEINVALID, element.line(), element.col(), path, value == null || isAbsolute(value), I18nConstants.TYPE_SPECIFIC_CHECKS_DT_IDENTIFIER_IETF_SYSTEM_VALUE, value) && ok;
} }
return ok; return ok;
} }

View File

@ -1276,6 +1276,9 @@ public class StructureMapValidator extends BaseValidator {
} }
} }
StructureDefinition tsd = context.fetchTypeDefinition(type); StructureDefinition tsd = context.fetchTypeDefinition(type);
if (tsd == null) {
return false;
}
StructureDefinition sd = context.fetchTypeDefinition(v.getType()); StructureDefinition sd = context.fetchTypeDefinition(v.getType());
while (sd != null) { while (sd != null) {
if (sd.getUrl().equals(tsd.getUrl())) { if (sd.getUrl().equals(tsd.getUrl())) {

View File

@ -50,6 +50,8 @@ public class ExternalTerminologyServiceTests implements ITxTesterLoader {
private static final String SERVER = FhirSettings.getTxFhirDevelopment(); private static final String SERVER = FhirSettings.getTxFhirDevelopment();
// private static final String SERVER = FhirSettings.getTxFhirLocal(); // private static final String SERVER = FhirSettings.getTxFhirLocal();
// private static final String SERVER = "https://r4.ontoserver.csiro.au/fhir";
@Parameters(name = "{index}: id {0}") @Parameters(name = "{index}: id {0}")
public static Iterable<Object[]> data() throws IOException { public static Iterable<Object[]> data() throws IOException {

View File

@ -274,6 +274,9 @@ public class TerminologyServiceTests {
if (vm.getDisplay() != null) { if (vm.getDisplay() != null) {
res.addParameter("display", vm.getDisplay()); res.addParameter("display", vm.getDisplay());
} }
if (vm.getCodeableConcept() != null) {
res.addParameter("codeableConcept", vm.getCodeableConcept());
}
if (vm.getIssues().size() > 0) { if (vm.getIssues().size() > 0) {
OperationOutcome oo = new OperationOutcome(); OperationOutcome oo = new OperationOutcome();
oo.getIssue().addAll(vm.getIssues()); oo.getIssue().addAll(vm.getIssues());