Update to 4.3.x core JAR (#1715)
* Added optionality for adding resource fetcher * Added coverage that proves invocations * Bumped version of fhir.core to latest version. Added wrapping of AssumeValidRestReferences * Added optionality for adding resource fetcher * Added coverage that proves invocations * Bumped version of fhir.core to latest version. Added wrapping of AssumeValidRestReferences * Start working on converter * Account for compile errors * Test fix * Work no validator * Work on getting core working * Add some test coverage * Many test fixes Co-authored-by: Jens Kristian Villadsen <46567685+jvitrifork@users.noreply.github.com>
This commit is contained in:
parent
ddc7b601ee
commit
60f16dd91d
|
@ -1,7 +1,7 @@
|
||||||
package example;
|
package example;
|
||||||
|
|
||||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor30;
|
import org.hl7.fhir.convertors.conv10_30.Observation10_30;
|
||||||
import org.hl7.fhir.convertors.*;
|
import org.hl7.fhir.convertors.conv14_30.Questionnaire14_30;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
|
|
||||||
public class ConverterExamples {
|
public class ConverterExamples {
|
||||||
|
@ -9,16 +9,12 @@ public class ConverterExamples {
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public void c1020() throws FHIRException {
|
public void c1020() throws FHIRException {
|
||||||
//START SNIPPET: 1020
|
//START SNIPPET: 1020
|
||||||
// Create a converter
|
|
||||||
NullVersionConverterAdvisor30 advisor = new NullVersionConverterAdvisor30();
|
|
||||||
VersionConvertor_10_30 converter = new VersionConvertor_10_30(advisor);
|
|
||||||
|
|
||||||
// Create an input resource to convert
|
// Create an input resource to convert
|
||||||
org.hl7.fhir.dstu2.model.Observation input = new org.hl7.fhir.dstu2.model.Observation();
|
org.hl7.fhir.dstu2.model.Observation input = new org.hl7.fhir.dstu2.model.Observation();
|
||||||
input.setEncounter(new org.hl7.fhir.dstu2.model.Reference("Encounter/123"));
|
input.setEncounter(new org.hl7.fhir.dstu2.model.Reference("Encounter/123"));
|
||||||
|
|
||||||
// Convert the resource
|
// Convert the resource
|
||||||
org.hl7.fhir.dstu3.model.Observation output = converter.convertObservation(input);
|
org.hl7.fhir.dstu3.model.Observation output = Observation10_30.convertObservation(input);
|
||||||
String context = output.getContext().getReference();
|
String context = output.getContext().getReference();
|
||||||
//END SNIPPET: 1020
|
//END SNIPPET: 1020
|
||||||
}
|
}
|
||||||
|
@ -31,7 +27,7 @@ public class ConverterExamples {
|
||||||
input.setTitle("My title");
|
input.setTitle("My title");
|
||||||
|
|
||||||
// Convert the resource
|
// Convert the resource
|
||||||
org.hl7.fhir.dstu3.model.Questionnaire output = VersionConvertor_14_30.convertQuestionnaire(input);
|
org.hl7.fhir.dstu3.model.Questionnaire output = Questionnaire14_30.convertQuestionnaire(input);
|
||||||
String context = output.getTitle();
|
String context = output.getTitle();
|
||||||
//END SNIPPET: 1420
|
//END SNIPPET: 1420
|
||||||
}
|
}
|
||||||
|
|
|
@ -58,7 +58,8 @@ public enum VersionEnum {
|
||||||
V4_0_0,
|
V4_0_0,
|
||||||
V4_0_3,
|
V4_0_3,
|
||||||
V4_1_0,
|
V4_1_0,
|
||||||
V4_2_0;
|
V4_2_0,
|
||||||
|
V4_3_0;
|
||||||
|
|
||||||
public static VersionEnum latestVersion() {
|
public static VersionEnum latestVersion() {
|
||||||
VersionEnum[] values = VersionEnum.values();
|
VersionEnum[] values = VersionEnum.values();
|
||||||
|
|
|
@ -26,7 +26,6 @@ import org.apache.commons.cli.Options;
|
||||||
import org.apache.commons.csv.CSVFormat;
|
import org.apache.commons.csv.CSVFormat;
|
||||||
import org.apache.commons.csv.CSVPrinter;
|
import org.apache.commons.csv.CSVPrinter;
|
||||||
import org.apache.commons.csv.QuoteMode;
|
import org.apache.commons.csv.QuoteMode;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.r4.model.Bundle;
|
import org.hl7.fhir.r4.model.Bundle;
|
||||||
import org.hl7.fhir.r4.model.ConceptMap;
|
import org.hl7.fhir.r4.model.ConceptMap;
|
||||||
|
@ -43,6 +42,7 @@ import java.util.List;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.defaultString;
|
import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||||
|
|
||||||
public class ExportConceptMapToCsvCommand extends AbstractImportExportCsvConceptMapCommand {
|
public class ExportConceptMapToCsvCommand extends AbstractImportExportCsvConceptMapCommand {
|
||||||
// TODO: Don't use qualified names for loggers in HAPI CLI.
|
// TODO: Don't use qualified names for loggers in HAPI CLI.
|
||||||
|
@ -114,7 +114,7 @@ public class ExportConceptMapToCsvCommand extends AbstractImportExportCsvConcept
|
||||||
|
|
||||||
private void convertConceptMapToCsv(org.hl7.fhir.dstu3.model.ConceptMap theConceptMap) throws ExecutionException {
|
private void convertConceptMapToCsv(org.hl7.fhir.dstu3.model.ConceptMap theConceptMap) throws ExecutionException {
|
||||||
try {
|
try {
|
||||||
convertConceptMapToCsv(VersionConvertor_30_40.convertConceptMap(theConceptMap));
|
convertConceptMapToCsv(convertConceptMap(theConceptMap));
|
||||||
} catch (FHIRException fe) {
|
} catch (FHIRException fe) {
|
||||||
throw new ExecutionException(fe);
|
throw new ExecutionException(fe);
|
||||||
}
|
}
|
||||||
|
|
|
@ -28,7 +28,6 @@ import org.apache.commons.cli.Options;
|
||||||
import org.apache.commons.csv.CSVFormat;
|
import org.apache.commons.csv.CSVFormat;
|
||||||
import org.apache.commons.csv.CSVParser;
|
import org.apache.commons.csv.CSVParser;
|
||||||
import org.apache.commons.csv.CSVRecord;
|
import org.apache.commons.csv.CSVRecord;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.r4.model.ConceptMap;
|
import org.hl7.fhir.r4.model.ConceptMap;
|
||||||
import org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent;
|
import org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent;
|
||||||
|
@ -45,7 +44,10 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.ExecutionException;
|
import java.util.concurrent.ExecutionException;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.*;
|
import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||||
|
|
||||||
public class ImportCsvToConceptMapCommand extends AbstractImportExportCsvConceptMapCommand {
|
public class ImportCsvToConceptMapCommand extends AbstractImportExportCsvConceptMapCommand {
|
||||||
// TODO: Don't use qualified names for loggers in HAPI CLI.
|
// TODO: Don't use qualified names for loggers in HAPI CLI.
|
||||||
|
@ -154,7 +156,7 @@ public class ImportCsvToConceptMapCommand extends AbstractImportExportCsvConcept
|
||||||
|
|
||||||
private org.hl7.fhir.dstu3.model.ConceptMap convertCsvToConceptMapDstu3() throws ExecutionException {
|
private org.hl7.fhir.dstu3.model.ConceptMap convertCsvToConceptMapDstu3() throws ExecutionException {
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_40.convertConceptMap(convertCsvToConceptMapR4());
|
return convertConceptMap(convertCsvToConceptMapR4());
|
||||||
} catch (FHIRException fe) {
|
} catch (FHIRException fe) {
|
||||||
throw new ExecutionException(fe);
|
throw new ExecutionException(fe);
|
||||||
}
|
}
|
||||||
|
@ -174,7 +176,7 @@ public class ImportCsvToConceptMapCommand extends AbstractImportExportCsvConcept
|
||||||
.withFirstRecordAsHeader()
|
.withFirstRecordAsHeader()
|
||||||
.withIgnoreHeaderCase()
|
.withIgnoreHeaderCase()
|
||||||
.withIgnoreEmptyLines()
|
.withIgnoreEmptyLines()
|
||||||
.withTrim());
|
.withTrim())
|
||||||
) {
|
) {
|
||||||
retVal.setUrl(conceptMapUrl);
|
retVal.setUrl(conceptMapUrl);
|
||||||
|
|
||||||
|
|
|
@ -31,7 +31,11 @@ import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import ca.uhn.fhir.rest.server.interceptor.InterceptorAdapter;
|
import ca.uhn.fhir.rest.server.interceptor.InterceptorAdapter;
|
||||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor30;
|
import org.hl7.fhir.converter.NullVersionConverterAdvisor30;
|
||||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor40;
|
import org.hl7.fhir.converter.NullVersionConverterAdvisor40;
|
||||||
import org.hl7.fhir.convertors.*;
|
import org.hl7.fhir.convertors.VersionConvertorAdvisor30;
|
||||||
|
import org.hl7.fhir.convertors.VersionConvertorAdvisor40;
|
||||||
|
import org.hl7.fhir.convertors.VersionConvertor_10_30;
|
||||||
|
import org.hl7.fhir.convertors.VersionConvertor_10_40;
|
||||||
|
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
||||||
import org.hl7.fhir.dstu3.model.Resource;
|
import org.hl7.fhir.dstu3.model.Resource;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
@ -40,7 +44,9 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import javax.servlet.http.HttpServletResponse;
|
import javax.servlet.http.HttpServletResponse;
|
||||||
import java.util.StringTokenizer;
|
import java.util.StringTokenizer;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.*;
|
import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* <b>This is an experimental interceptor! Use with caution as
|
* <b>This is an experimental interceptor! Use with caution as
|
||||||
|
@ -54,16 +60,12 @@ import static org.apache.commons.lang3.StringUtils.*;
|
||||||
public class VersionedApiConverterInterceptor extends InterceptorAdapter {
|
public class VersionedApiConverterInterceptor extends InterceptorAdapter {
|
||||||
private final FhirContext myCtxDstu2;
|
private final FhirContext myCtxDstu2;
|
||||||
private final FhirContext myCtxDstu2Hl7Org;
|
private final FhirContext myCtxDstu2Hl7Org;
|
||||||
private VersionConvertor_30_40 myVersionConvertor_30_40;
|
private final NullVersionConverterAdvisor40 advisor40;
|
||||||
private VersionConvertor_10_40 myVersionConvertor_10_40;
|
private final NullVersionConverterAdvisor30 advisor30;
|
||||||
private VersionConvertor_10_30 myVersionConvertor_10_30;
|
|
||||||
|
|
||||||
public VersionedApiConverterInterceptor() {
|
public VersionedApiConverterInterceptor() {
|
||||||
myVersionConvertor_30_40 = new VersionConvertor_30_40();
|
advisor40 = new NullVersionConverterAdvisor40();
|
||||||
VersionConvertorAdvisor40 advisor40 = new NullVersionConverterAdvisor40();
|
advisor30 = new NullVersionConverterAdvisor30();
|
||||||
myVersionConvertor_10_40 = new VersionConvertor_10_40(advisor40);
|
|
||||||
VersionConvertorAdvisor30 advisor30 = new NullVersionConverterAdvisor30();
|
|
||||||
myVersionConvertor_10_30 = new VersionConvertor_10_30(advisor30);
|
|
||||||
|
|
||||||
myCtxDstu2 = FhirContext.forDstu2();
|
myCtxDstu2 = FhirContext.forDstu2();
|
||||||
myCtxDstu2Hl7Org = FhirContext.forDstu2Hl7Org();
|
myCtxDstu2Hl7Org = FhirContext.forDstu2Hl7Org();
|
||||||
|
@ -104,17 +106,17 @@ public class VersionedApiConverterInterceptor extends InterceptorAdapter {
|
||||||
IBaseResource converted = null;
|
IBaseResource converted = null;
|
||||||
try {
|
try {
|
||||||
if (wantVersion == FhirVersionEnum.R4 && haveVersion == FhirVersionEnum.DSTU3) {
|
if (wantVersion == FhirVersionEnum.R4 && haveVersion == FhirVersionEnum.DSTU3) {
|
||||||
converted = myVersionConvertor_30_40.convertResource(toDstu3(responseResource), true);
|
converted = VersionConvertor_30_40.convertResource(toDstu3(responseResource), true);
|
||||||
} else if (wantVersion == FhirVersionEnum.DSTU3 && haveVersion == FhirVersionEnum.R4) {
|
} else if (wantVersion == FhirVersionEnum.DSTU3 && haveVersion == FhirVersionEnum.R4) {
|
||||||
converted = myVersionConvertor_30_40.convertResource(toR4(responseResource), true);
|
converted = VersionConvertor_30_40.convertResource(toR4(responseResource), true);
|
||||||
} else if (wantVersion == FhirVersionEnum.DSTU2 && haveVersion == FhirVersionEnum.R4) {
|
} else if (wantVersion == FhirVersionEnum.DSTU2 && haveVersion == FhirVersionEnum.R4) {
|
||||||
converted = myVersionConvertor_10_40.convertResource(toR4(responseResource));
|
converted = VersionConvertor_10_40.convertResource(toR4(responseResource), advisor40);
|
||||||
} else if (wantVersion == FhirVersionEnum.R4 && haveVersion == FhirVersionEnum.DSTU2) {
|
} else if (wantVersion == FhirVersionEnum.R4 && haveVersion == FhirVersionEnum.DSTU2) {
|
||||||
converted = myVersionConvertor_10_40.convertResource(toDstu2(responseResource));
|
converted = VersionConvertor_10_40.convertResource(toDstu2(responseResource), advisor40);
|
||||||
} else if (wantVersion == FhirVersionEnum.DSTU2 && haveVersion == FhirVersionEnum.DSTU3) {
|
} else if (wantVersion == FhirVersionEnum.DSTU2 && haveVersion == FhirVersionEnum.DSTU3) {
|
||||||
converted = myVersionConvertor_10_30.convertResource(toDstu3(responseResource));
|
converted = VersionConvertor_10_30.convertResource(toDstu3(responseResource), advisor30);
|
||||||
} else if (wantVersion == FhirVersionEnum.DSTU3 && haveVersion == FhirVersionEnum.DSTU2) {
|
} else if (wantVersion == FhirVersionEnum.DSTU3 && haveVersion == FhirVersionEnum.DSTU2) {
|
||||||
converted = myVersionConvertor_10_30.convertResource(toDstu2(responseResource));
|
converted = VersionConvertor_10_30.convertResource(toDstu2(responseResource), advisor30);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
|
|
@ -27,8 +27,12 @@ import org.hl7.fhir.r5.model.Bundle;
|
||||||
import org.hl7.fhir.r5.model.CodeSystem;
|
import org.hl7.fhir.r5.model.CodeSystem;
|
||||||
import org.hl7.fhir.r5.model.ValueSet;
|
import org.hl7.fhir.r5.model.ValueSet;
|
||||||
|
|
||||||
|
import java.util.IdentityHashMap;
|
||||||
|
|
||||||
public class NullVersionConverterAdvisor50 implements VersionConvertorAdvisor50 {
|
public class NullVersionConverterAdvisor50 implements VersionConvertorAdvisor50 {
|
||||||
|
|
||||||
|
private IdentityHashMap<ValueSet, CodeSystem> myCodeSystems = new IdentityHashMap<>();
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean ignoreEntry(Bundle.BundleEntryComponent src) {
|
public boolean ignoreEntry(Bundle.BundleEntryComponent src) {
|
||||||
return false;
|
return false;
|
||||||
|
@ -56,11 +60,11 @@ public class NullVersionConverterAdvisor50 implements VersionConvertorAdvisor50
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void handleCodeSystem(CodeSystem tgtcs, ValueSet source) throws FHIRException {
|
public void handleCodeSystem(CodeSystem tgtcs, ValueSet source) throws FHIRException {
|
||||||
|
myCodeSystems.put(source, tgtcs);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public CodeSystem getCodeSystem(ValueSet src) throws FHIRException {
|
public CodeSystem getCodeSystem(ValueSet src) throws FHIRException {
|
||||||
return null;
|
return myCodeSystems.get(src);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -16,13 +16,10 @@ public class VersionConvertor_10_30Test {
|
||||||
@Test
|
@Test
|
||||||
public void testConvert() throws FHIRException {
|
public void testConvert() throws FHIRException {
|
||||||
|
|
||||||
NullVersionConverterAdvisor30 advisor = new NullVersionConverterAdvisor30();
|
|
||||||
VersionConvertor_10_30 converter = new VersionConvertor_10_30(advisor);
|
|
||||||
|
|
||||||
org.hl7.fhir.dstu2.model.Observation input = new org.hl7.fhir.dstu2.model.Observation();
|
org.hl7.fhir.dstu2.model.Observation input = new org.hl7.fhir.dstu2.model.Observation();
|
||||||
input.setEncounter(new org.hl7.fhir.dstu2.model.Reference("Encounter/123"));
|
input.setEncounter(new org.hl7.fhir.dstu2.model.Reference("Encounter/123"));
|
||||||
|
|
||||||
org.hl7.fhir.dstu3.model.Observation output = converter.convertObservation(input);
|
org.hl7.fhir.dstu3.model.Observation output = (Observation) VersionConvertor_10_30.convertResource(input);
|
||||||
String context = output.getContext().getReference();
|
String context = output.getContext().getReference();
|
||||||
|
|
||||||
assertEquals("Encounter/123", context);
|
assertEquals("Encounter/123", context);
|
||||||
|
@ -31,9 +28,6 @@ public class VersionConvertor_10_30Test {
|
||||||
@Test
|
@Test
|
||||||
public void testConvertSpecimen() throws FHIRException {
|
public void testConvertSpecimen() throws FHIRException {
|
||||||
|
|
||||||
NullVersionConverterAdvisor30 advisor = new NullVersionConverterAdvisor30();
|
|
||||||
VersionConvertor_10_30 converter = new VersionConvertor_10_30(advisor);
|
|
||||||
|
|
||||||
Specimen spec = new Specimen();
|
Specimen spec = new Specimen();
|
||||||
CodeableConcept cc = new CodeableConcept();
|
CodeableConcept cc = new CodeableConcept();
|
||||||
Coding coding = new Coding();
|
Coding coding = new Coding();
|
||||||
|
@ -58,7 +52,7 @@ public class VersionConvertor_10_30Test {
|
||||||
Specimen.SpecimenContainerComponent specimenContainerComponent = new Specimen.SpecimenContainerComponent();
|
Specimen.SpecimenContainerComponent specimenContainerComponent = new Specimen.SpecimenContainerComponent();
|
||||||
specimenContainerComponent.getExtension().add(new Extension().setUrl("some_url").setValue(new StringType("some_value")));
|
specimenContainerComponent.getExtension().add(new Extension().setUrl("some_url").setValue(new StringType("some_value")));
|
||||||
spec.setContainer(Collections.singletonList(specimenContainerComponent));
|
spec.setContainer(Collections.singletonList(specimenContainerComponent));
|
||||||
Resource resource = converter.convertResource(spec);
|
Resource resource = VersionConvertor_10_30.convertResource(spec);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -3,6 +3,7 @@ package org.hl7.fhir.converter;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_14_30;
|
import org.hl7.fhir.convertors.VersionConvertor_14_30;
|
||||||
|
import org.hl7.fhir.dstu3.model.Questionnaire;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
|
@ -14,7 +15,7 @@ public class VersionConvertor_14_30Test {
|
||||||
org.hl7.fhir.dstu2016may.model.Questionnaire input = new org.hl7.fhir.dstu2016may.model.Questionnaire();
|
org.hl7.fhir.dstu2016may.model.Questionnaire input = new org.hl7.fhir.dstu2016may.model.Questionnaire();
|
||||||
input.setTitle("My title");
|
input.setTitle("My title");
|
||||||
|
|
||||||
org.hl7.fhir.dstu3.model.Questionnaire output = VersionConvertor_14_30.convertQuestionnaire(input);
|
org.hl7.fhir.dstu3.model.Questionnaire output = (Questionnaire) VersionConvertor_14_30.convertResource(input);
|
||||||
String context = output.getTitle();
|
String context = output.getTitle();
|
||||||
|
|
||||||
assertEquals("My title", context);
|
assertEquals("My title", context);
|
||||||
|
|
|
@ -20,9 +20,8 @@ package ca.uhn.hapi.fhir.docs;
|
||||||
* #L%
|
* #L%
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor30;
|
import org.hl7.fhir.convertors.conv10_30.Observation10_30;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_10_30;
|
import org.hl7.fhir.convertors.conv14_30.Questionnaire14_30;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_14_30;
|
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
|
|
||||||
public class ConverterExamples {
|
public class ConverterExamples {
|
||||||
|
@ -30,16 +29,12 @@ public class ConverterExamples {
|
||||||
@SuppressWarnings("unused")
|
@SuppressWarnings("unused")
|
||||||
public void c1020() throws FHIRException {
|
public void c1020() throws FHIRException {
|
||||||
//START SNIPPET: 1020
|
//START SNIPPET: 1020
|
||||||
// Create a converter
|
|
||||||
NullVersionConverterAdvisor30 advisor = new NullVersionConverterAdvisor30();
|
|
||||||
VersionConvertor_10_30 converter = new VersionConvertor_10_30(advisor);
|
|
||||||
|
|
||||||
// Create an input resource to convert
|
// Create an input resource to convert
|
||||||
org.hl7.fhir.dstu2.model.Observation input = new org.hl7.fhir.dstu2.model.Observation();
|
org.hl7.fhir.dstu2.model.Observation input = new org.hl7.fhir.dstu2.model.Observation();
|
||||||
input.setEncounter(new org.hl7.fhir.dstu2.model.Reference("Encounter/123"));
|
input.setEncounter(new org.hl7.fhir.dstu2.model.Reference("Encounter/123"));
|
||||||
|
|
||||||
// Convert the resource
|
// Convert the resource
|
||||||
org.hl7.fhir.dstu3.model.Observation output = converter.convertObservation(input);
|
org.hl7.fhir.dstu3.model.Observation output = Observation10_30.convertObservation(input);
|
||||||
String context = output.getContext().getReference();
|
String context = output.getContext().getReference();
|
||||||
//END SNIPPET: 1020
|
//END SNIPPET: 1020
|
||||||
}
|
}
|
||||||
|
@ -52,7 +47,7 @@ public class ConverterExamples {
|
||||||
input.setTitle("My title");
|
input.setTitle("My title");
|
||||||
|
|
||||||
// Convert the resource
|
// Convert the resource
|
||||||
org.hl7.fhir.dstu3.model.Questionnaire output = VersionConvertor_14_30.convertQuestionnaire(input);
|
org.hl7.fhir.dstu3.model.Questionnaire output = Questionnaire14_30.convertQuestionnaire(input);
|
||||||
String context = output.getTitle();
|
String context = output.getTitle();
|
||||||
//END SNIPPET: 1420
|
//END SNIPPET: 1420
|
||||||
}
|
}
|
||||||
|
|
|
@ -0,0 +1,6 @@
|
||||||
|
---
|
||||||
|
type: change
|
||||||
|
issue: 1715
|
||||||
|
title: The version converters for all versions except R4/R5 have been reworked to be split into individual
|
||||||
|
classes per resource type (the R4/R5 converters were already organized this way). Thanks to Mark Iantorno
|
||||||
|
for a huge effort to write a Java source parser/serializer to acomplish this task.
|
|
@ -24,10 +24,10 @@ import ca.uhn.fhir.context.FhirContext;
|
||||||
import ca.uhn.fhir.context.support.IContextValidationSupport;
|
import ca.uhn.fhir.context.support.IContextValidationSupport;
|
||||||
import ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao;
|
import ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao;
|
||||||
import ca.uhn.fhir.jpa.dao.IFhirResourceDaoCodeSystem;
|
import ca.uhn.fhir.jpa.dao.IFhirResourceDaoCodeSystem;
|
||||||
import ca.uhn.fhir.jpa.model.cross.IBasePersistedResource;
|
|
||||||
import ca.uhn.fhir.jpa.model.cross.ResourcePersistentId;
|
|
||||||
import ca.uhn.fhir.jpa.dao.data.ITermCodeSystemDao;
|
import ca.uhn.fhir.jpa.dao.data.ITermCodeSystemDao;
|
||||||
import ca.uhn.fhir.jpa.entity.TermCodeSystem;
|
import ca.uhn.fhir.jpa.entity.TermCodeSystem;
|
||||||
|
import ca.uhn.fhir.jpa.model.cross.IBasePersistedResource;
|
||||||
|
import ca.uhn.fhir.jpa.model.cross.ResourcePersistentId;
|
||||||
import ca.uhn.fhir.jpa.model.entity.ResourceTable;
|
import ca.uhn.fhir.jpa.model.entity.ResourceTable;
|
||||||
import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
|
import ca.uhn.fhir.jpa.searchparam.SearchParameterMap;
|
||||||
import ca.uhn.fhir.jpa.term.api.ITermCodeSystemStorageSvc;
|
import ca.uhn.fhir.jpa.term.api.ITermCodeSystemStorageSvc;
|
||||||
|
@ -35,7 +35,6 @@ import ca.uhn.fhir.jpa.util.LogicUtil;
|
||||||
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
||||||
import ca.uhn.fhir.rest.param.TokenParam;
|
import ca.uhn.fhir.rest.param.TokenParam;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.dstu3.hapi.validation.ValidationSupportChain;
|
import org.hl7.fhir.dstu3.hapi.validation.ValidationSupportChain;
|
||||||
import org.hl7.fhir.dstu3.model.CodeSystem;
|
import org.hl7.fhir.dstu3.model.CodeSystem;
|
||||||
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
||||||
|
@ -53,6 +52,7 @@ import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.CodeSystem30_40.convertCodeSystem;
|
||||||
|
|
||||||
@Transactional
|
@Transactional
|
||||||
public class FhirResourceDaoCodeSystemDstu3 extends BaseHapiFhirResourceDao<CodeSystem> implements IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept> {
|
public class FhirResourceDaoCodeSystemDstu3 extends BaseHapiFhirResourceDao<CodeSystem> implements IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept> {
|
||||||
|
@ -147,7 +147,7 @@ public class FhirResourceDaoCodeSystemDstu3 extends BaseHapiFhirResourceDao<Code
|
||||||
|
|
||||||
CodeSystem csDstu3 = (CodeSystem) theResource;
|
CodeSystem csDstu3 = (CodeSystem) theResource;
|
||||||
|
|
||||||
org.hl7.fhir.r4.model.CodeSystem cs = VersionConvertor_30_40.convertCodeSystem(csDstu3);
|
org.hl7.fhir.r4.model.CodeSystem cs = convertCodeSystem(csDstu3);
|
||||||
addPidToResource(theEntity, cs);
|
addPidToResource(theEntity, cs);
|
||||||
|
|
||||||
myTerminologyCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(cs, (ResourceTable) theEntity);
|
myTerminologyCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(cs, (ResourceTable) theEntity);
|
||||||
|
|
|
@ -22,21 +22,24 @@ package ca.uhn.fhir.jpa.dao.dstu3;
|
||||||
|
|
||||||
import ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao;
|
import ca.uhn.fhir.jpa.dao.BaseHapiFhirResourceDao;
|
||||||
import ca.uhn.fhir.jpa.dao.IFhirResourceDaoConceptMap;
|
import ca.uhn.fhir.jpa.dao.IFhirResourceDaoConceptMap;
|
||||||
|
import ca.uhn.fhir.jpa.entity.TermConceptMapGroupElement;
|
||||||
|
import ca.uhn.fhir.jpa.entity.TermConceptMapGroupElementTarget;
|
||||||
import ca.uhn.fhir.jpa.model.cross.IBasePersistedResource;
|
import ca.uhn.fhir.jpa.model.cross.IBasePersistedResource;
|
||||||
|
import ca.uhn.fhir.jpa.model.entity.ResourceTable;
|
||||||
import ca.uhn.fhir.jpa.term.TranslationMatch;
|
import ca.uhn.fhir.jpa.term.TranslationMatch;
|
||||||
import ca.uhn.fhir.jpa.term.TranslationRequest;
|
import ca.uhn.fhir.jpa.term.TranslationRequest;
|
||||||
import ca.uhn.fhir.jpa.term.TranslationResult;
|
import ca.uhn.fhir.jpa.term.TranslationResult;
|
||||||
import ca.uhn.fhir.jpa.model.entity.ResourceTable;
|
|
||||||
import ca.uhn.fhir.jpa.entity.TermConceptMapGroupElement;
|
|
||||||
import ca.uhn.fhir.jpa.entity.TermConceptMapGroupElementTarget;
|
|
||||||
import ca.uhn.fhir.jpa.term.api.ITermReadSvc;
|
import ca.uhn.fhir.jpa.term.api.ITermReadSvc;
|
||||||
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.dstu3.model.ConceptMap;
|
import org.hl7.fhir.dstu3.model.ConceptMap;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.hl7.fhir.r4.model.*;
|
import org.hl7.fhir.r4.model.BooleanType;
|
||||||
|
import org.hl7.fhir.r4.model.CodeType;
|
||||||
|
import org.hl7.fhir.r4.model.Coding;
|
||||||
|
import org.hl7.fhir.r4.model.StringType;
|
||||||
|
import org.hl7.fhir.r4.model.UriType;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
|
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -44,6 +47,8 @@ import java.util.HashSet;
|
||||||
import java.util.List;
|
import java.util.List;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
|
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||||
|
|
||||||
public class FhirResourceDaoConceptMapDstu3 extends BaseHapiFhirResourceDao<ConceptMap> implements IFhirResourceDaoConceptMap<ConceptMap> {
|
public class FhirResourceDaoConceptMapDstu3 extends BaseHapiFhirResourceDao<ConceptMap> implements IFhirResourceDaoConceptMap<ConceptMap> {
|
||||||
@Autowired
|
@Autowired
|
||||||
private ITermReadSvc myHapiTerminologySvc;
|
private ITermReadSvc myHapiTerminologySvc;
|
||||||
|
@ -166,7 +171,7 @@ public class FhirResourceDaoConceptMapDstu3 extends BaseHapiFhirResourceDao<Conc
|
||||||
if (retVal.getDeleted() == null) {
|
if (retVal.getDeleted() == null) {
|
||||||
try {
|
try {
|
||||||
ConceptMap conceptMap = (ConceptMap) theResource;
|
ConceptMap conceptMap = (ConceptMap) theResource;
|
||||||
org.hl7.fhir.r4.model.ConceptMap converted = VersionConvertor_30_40.convertConceptMap(conceptMap);
|
org.hl7.fhir.r4.model.ConceptMap converted = convertConceptMap(conceptMap);
|
||||||
myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, converted);
|
myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, converted);
|
||||||
} catch (FHIRException fe) {
|
} catch (FHIRException fe) {
|
||||||
throw new InternalErrorException(fe);
|
throw new InternalErrorException(fe);
|
||||||
|
|
|
@ -33,12 +33,15 @@ import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
import ca.uhn.fhir.util.ElementUtil;
|
import ca.uhn.fhir.util.ElementUtil;
|
||||||
import org.apache.commons.codec.binary.StringUtils;
|
import org.apache.commons.codec.binary.StringUtils;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.dstu3.hapi.ctx.DefaultProfileValidationSupport;
|
import org.hl7.fhir.dstu3.hapi.ctx.DefaultProfileValidationSupport;
|
||||||
import org.hl7.fhir.dstu3.hapi.ctx.HapiWorkerContext;
|
import org.hl7.fhir.dstu3.hapi.ctx.HapiWorkerContext;
|
||||||
import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
|
import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.CodeSystem;
|
||||||
|
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
||||||
|
import org.hl7.fhir.dstu3.model.Coding;
|
||||||
import org.hl7.fhir.dstu3.model.Enumerations.PublicationStatus;
|
import org.hl7.fhir.dstu3.model.Enumerations.PublicationStatus;
|
||||||
|
import org.hl7.fhir.dstu3.model.IntegerType;
|
||||||
|
import org.hl7.fhir.dstu3.model.ValueSet;
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent;
|
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent;
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetFilterComponent;
|
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetFilterComponent;
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet.FilterOperator;
|
import org.hl7.fhir.dstu3.model.ValueSet.FilterOperator;
|
||||||
|
@ -51,7 +54,6 @@ import org.hl7.fhir.instance.model.api.IPrimitiveType;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
import org.springframework.beans.factory.annotation.Autowired;
|
||||||
import org.springframework.beans.factory.annotation.Qualifier;
|
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.Date;
|
import java.util.Date;
|
||||||
|
@ -59,6 +61,7 @@ import java.util.List;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ValueSet30_40.convertValueSet;
|
||||||
|
|
||||||
public class FhirResourceDaoValueSetDstu3 extends BaseHapiFhirResourceDao<ValueSet> implements IFhirResourceDaoValueSet<ValueSet, Coding, CodeableConcept> {
|
public class FhirResourceDaoValueSetDstu3 extends BaseHapiFhirResourceDao<ValueSet> implements IFhirResourceDaoValueSet<ValueSet, Coding, CodeableConcept> {
|
||||||
private static final Logger ourLog = LoggerFactory.getLogger(FhirResourceDaoValueSetDstu3.class);
|
private static final Logger ourLog = LoggerFactory.getLogger(FhirResourceDaoValueSetDstu3.class);
|
||||||
|
@ -420,7 +423,7 @@ public class FhirResourceDaoValueSetDstu3 extends BaseHapiFhirResourceDao<ValueS
|
||||||
if (retVal.getDeleted() == null) {
|
if (retVal.getDeleted() == null) {
|
||||||
try {
|
try {
|
||||||
ValueSet valueSet = (ValueSet) theResource;
|
ValueSet valueSet = (ValueSet) theResource;
|
||||||
org.hl7.fhir.r4.model.ValueSet converted = VersionConvertor_30_40.convertValueSet(valueSet);
|
org.hl7.fhir.r4.model.ValueSet converted = convertValueSet(valueSet);
|
||||||
myHapiTerminologySvc.storeTermValueSet(retVal, converted);
|
myHapiTerminologySvc.storeTermValueSet(retVal, converted);
|
||||||
} catch (FHIRException fe) {
|
} catch (FHIRException fe) {
|
||||||
throw new InternalErrorException(fe);
|
throw new InternalErrorException(fe);
|
||||||
|
|
|
@ -148,7 +148,7 @@ public class FhirResourceDaoCodeSystemR5 extends BaseHapiFhirResourceDao<CodeSys
|
||||||
CodeSystem cs = (CodeSystem) theResource;
|
CodeSystem cs = (CodeSystem) theResource;
|
||||||
addPidToResource(theEntity, theResource);
|
addPidToResource(theEntity, theResource);
|
||||||
|
|
||||||
myTerminologyCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(org.hl7.fhir.convertors.conv40_50.CodeSystem.convertCodeSystem(cs), (ResourceTable) theEntity);
|
myTerminologyCodeSystemStorageSvc.storeNewCodeSystemVersionIfNeeded(org.hl7.fhir.convertors.conv40_50.CodeSystem40_50.convertCodeSystem(cs), (ResourceTable) theEntity);
|
||||||
}
|
}
|
||||||
|
|
||||||
return retVal;
|
return retVal;
|
||||||
|
|
|
@ -166,7 +166,7 @@ public class FhirResourceDaoConceptMapR5 extends BaseHapiFhirResourceDao<Concept
|
||||||
|
|
||||||
if (retVal.getDeleted() == null) {
|
if (retVal.getDeleted() == null) {
|
||||||
ConceptMap conceptMap = (ConceptMap) theResource;
|
ConceptMap conceptMap = (ConceptMap) theResource;
|
||||||
myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, org.hl7.fhir.convertors.conv40_50.ConceptMap.convertConceptMap(conceptMap));
|
myHapiTerminologySvc.storeTermConceptMapAndChildren(retVal, org.hl7.fhir.convertors.conv40_50.ConceptMap40_50.convertConceptMap(conceptMap));
|
||||||
} else {
|
} else {
|
||||||
myHapiTerminologySvc.deleteConceptMapAndChildren(retVal);
|
myHapiTerminologySvc.deleteConceptMapAndChildren(retVal);
|
||||||
}
|
}
|
||||||
|
|
|
@ -415,7 +415,7 @@ public class FhirResourceDaoValueSetR5 extends BaseHapiFhirResourceDao<ValueSet>
|
||||||
if (myDaoConfig.isPreExpandValueSets() && !retVal.isUnchangedInCurrentOperation()) {
|
if (myDaoConfig.isPreExpandValueSets() && !retVal.isUnchangedInCurrentOperation()) {
|
||||||
if (retVal.getDeleted() == null) {
|
if (retVal.getDeleted() == null) {
|
||||||
ValueSet valueSet = (ValueSet) theResource;
|
ValueSet valueSet = (ValueSet) theResource;
|
||||||
myHapiTerminologySvc.storeTermValueSet(retVal, org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(valueSet));
|
myHapiTerminologySvc.storeTermValueSet(retVal, org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(valueSet));
|
||||||
} else {
|
} else {
|
||||||
myHapiTerminologySvc.deleteValueSetAndChildren(retVal);
|
myHapiTerminologySvc.deleteValueSetAndChildren(retVal);
|
||||||
}
|
}
|
||||||
|
|
|
@ -39,7 +39,6 @@ import ca.uhn.fhir.util.ValidateUtil;
|
||||||
import com.google.common.base.Charsets;
|
import com.google.common.base.Charsets;
|
||||||
import com.google.common.collect.ArrayListMultimap;
|
import com.google.common.collect.ArrayListMultimap;
|
||||||
import com.google.common.collect.Multimap;
|
import com.google.common.collect.Multimap;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.instance.model.api.IBaseParameters;
|
import org.hl7.fhir.instance.model.api.IBaseParameters;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.hl7.fhir.instance.model.api.ICompositeType;
|
import org.hl7.fhir.instance.model.api.ICompositeType;
|
||||||
|
@ -61,6 +60,7 @@ import java.util.Map;
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
import static org.apache.commons.lang3.StringUtils.trim;
|
import static org.apache.commons.lang3.StringUtils.trim;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.CodeSystem30_40.convertCodeSystem;
|
||||||
|
|
||||||
public class TerminologyUploaderProvider extends BaseJpaProvider {
|
public class TerminologyUploaderProvider extends BaseJpaProvider {
|
||||||
|
|
||||||
|
@ -272,10 +272,10 @@ public class TerminologyUploaderProvider extends BaseJpaProvider {
|
||||||
CodeSystem nextCodeSystem;
|
CodeSystem nextCodeSystem;
|
||||||
switch (getContext().getVersion().getVersion()) {
|
switch (getContext().getVersion().getVersion()) {
|
||||||
case DSTU3:
|
case DSTU3:
|
||||||
nextCodeSystem = VersionConvertor_30_40.convertCodeSystem((org.hl7.fhir.dstu3.model.CodeSystem) theCodeSystem);
|
nextCodeSystem = convertCodeSystem((org.hl7.fhir.dstu3.model.CodeSystem) theCodeSystem);
|
||||||
break;
|
break;
|
||||||
case R5:
|
case R5:
|
||||||
nextCodeSystem = org.hl7.fhir.convertors.conv40_50.CodeSystem.convertCodeSystem((org.hl7.fhir.r5.model.CodeSystem) theCodeSystem);
|
nextCodeSystem = org.hl7.fhir.convertors.conv40_50.CodeSystem40_50.convertCodeSystem((org.hl7.fhir.r5.model.CodeSystem) theCodeSystem);
|
||||||
break;
|
break;
|
||||||
default:
|
default:
|
||||||
nextCodeSystem = (CodeSystem) theCodeSystem;
|
nextCodeSystem = (CodeSystem) theCodeSystem;
|
||||||
|
|
|
@ -21,9 +21,9 @@ package ca.uhn.fhir.jpa.provider.dstu3;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import ca.uhn.fhir.jpa.dao.IFhirResourceDaoConceptMap;
|
import ca.uhn.fhir.jpa.dao.IFhirResourceDaoConceptMap;
|
||||||
|
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
||||||
import ca.uhn.fhir.jpa.term.TranslationRequest;
|
import ca.uhn.fhir.jpa.term.TranslationRequest;
|
||||||
import ca.uhn.fhir.jpa.term.TranslationResult;
|
import ca.uhn.fhir.jpa.term.TranslationResult;
|
||||||
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
|
||||||
import ca.uhn.fhir.rest.annotation.IdParam;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
import ca.uhn.fhir.rest.annotation.Operation;
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
import ca.uhn.fhir.rest.annotation.OperationParam;
|
import ca.uhn.fhir.rest.annotation.OperationParam;
|
||||||
|
@ -31,11 +31,21 @@ import ca.uhn.fhir.rest.api.server.RequestDetails;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.BooleanType;
|
||||||
|
import org.hl7.fhir.dstu3.model.CodeType;
|
||||||
|
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
||||||
|
import org.hl7.fhir.dstu3.model.Coding;
|
||||||
|
import org.hl7.fhir.dstu3.model.ConceptMap;
|
||||||
|
import org.hl7.fhir.dstu3.model.IdType;
|
||||||
|
import org.hl7.fhir.dstu3.model.Parameters;
|
||||||
|
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;
|
||||||
|
|
||||||
import javax.servlet.http.HttpServletRequest;
|
import javax.servlet.http.HttpServletRequest;
|
||||||
|
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.Parameters30_40.convertParameters;
|
||||||
|
|
||||||
public class BaseJpaResourceProviderConceptMapDstu3 extends JpaResourceProviderDstu3<ConceptMap> {
|
public class BaseJpaResourceProviderConceptMapDstu3 extends JpaResourceProviderDstu3<ConceptMap> {
|
||||||
@Operation(name = JpaConstants.OPERATION_TRANSLATE, idempotent = true, returnParameters = {
|
@Operation(name = JpaConstants.OPERATION_TRANSLATE, idempotent = true, returnParameters = {
|
||||||
@OperationParam(name = "result", type = BooleanType.class, min = 1, max = 1),
|
@OperationParam(name = "result", type = BooleanType.class, min = 1, max = 1),
|
||||||
|
@ -129,7 +139,7 @@ public class BaseJpaResourceProviderConceptMapDstu3 extends JpaResourceProviderD
|
||||||
TranslationResult result = dao.translate(translationRequest, theRequestDetails);
|
TranslationResult result = dao.translate(translationRequest, theRequestDetails);
|
||||||
|
|
||||||
// Convert from R4 to DSTU3
|
// Convert from R4 to DSTU3
|
||||||
return VersionConvertor_30_40.convertParameters(result.toParameters());
|
return convertParameters(result.toParameters());
|
||||||
} catch (FHIRException fe) {
|
} catch (FHIRException fe) {
|
||||||
throw new InternalErrorException(fe);
|
throw new InternalErrorException(fe);
|
||||||
} finally {
|
} finally {
|
||||||
|
|
|
@ -21,17 +21,28 @@ package ca.uhn.fhir.jpa.provider.dstu3;
|
||||||
*/
|
*/
|
||||||
|
|
||||||
import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
|
import ca.uhn.fhir.jpa.dao.IFhirResourceDao;
|
||||||
import ca.uhn.fhir.jpa.provider.BaseJpaResourceProvider;
|
|
||||||
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
||||||
import ca.uhn.fhir.rest.annotation.*;
|
import ca.uhn.fhir.jpa.provider.BaseJpaResourceProvider;
|
||||||
|
import ca.uhn.fhir.rest.annotation.ConditionalUrlParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Create;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Delete;
|
||||||
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
|
import ca.uhn.fhir.rest.annotation.OperationParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.ResourceParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Update;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Validate;
|
||||||
import ca.uhn.fhir.rest.api.EncodingEnum;
|
import ca.uhn.fhir.rest.api.EncodingEnum;
|
||||||
import ca.uhn.fhir.rest.api.MethodOutcome;
|
import ca.uhn.fhir.rest.api.MethodOutcome;
|
||||||
import ca.uhn.fhir.rest.api.ValidationModeEnum;
|
import ca.uhn.fhir.rest.api.ValidationModeEnum;
|
||||||
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
import org.hl7.fhir.dstu3.model.BooleanType;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.IdType;
|
||||||
|
import org.hl7.fhir.dstu3.model.IntegerType;
|
||||||
|
import org.hl7.fhir.dstu3.model.Meta;
|
||||||
|
import org.hl7.fhir.dstu3.model.Parameters;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.instance.model.api.IAnyResource;
|
import org.hl7.fhir.instance.model.api.IAnyResource;
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
|
@ -41,6 +52,7 @@ import javax.servlet.http.HttpServletRequest;
|
||||||
import static ca.uhn.fhir.jpa.model.util.JpaConstants.OPERATION_META;
|
import static ca.uhn.fhir.jpa.model.util.JpaConstants.OPERATION_META;
|
||||||
import static ca.uhn.fhir.jpa.model.util.JpaConstants.OPERATION_META_ADD;
|
import static ca.uhn.fhir.jpa.model.util.JpaConstants.OPERATION_META_ADD;
|
||||||
import static ca.uhn.fhir.jpa.model.util.JpaConstants.OPERATION_META_DELETE;
|
import static ca.uhn.fhir.jpa.model.util.JpaConstants.OPERATION_META_DELETE;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.Parameters30_40.convertParameters;
|
||||||
|
|
||||||
public class JpaResourceProviderDstu3<T extends IAnyResource> extends BaseJpaResourceProvider<T> {
|
public class JpaResourceProviderDstu3<T extends IAnyResource> extends BaseJpaResourceProvider<T> {
|
||||||
|
|
||||||
|
@ -91,7 +103,7 @@ public class JpaResourceProviderDstu3<T extends IAnyResource> extends BaseJpaRes
|
||||||
RequestDetails theRequest) {
|
RequestDetails theRequest) {
|
||||||
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(theIdParam, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(theIdParam, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_40.convertParameters(retVal);
|
return convertParameters(retVal);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -107,7 +119,7 @@ public class JpaResourceProviderDstu3<T extends IAnyResource> extends BaseJpaRes
|
||||||
RequestDetails theRequest) {
|
RequestDetails theRequest) {
|
||||||
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(null, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(null, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_40.convertParameters(retVal);
|
return convertParameters(retVal);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -3,17 +3,26 @@ package ca.uhn.fhir.jpa.provider.dstu3;
|
||||||
import ca.uhn.fhir.jpa.dao.FulltextSearchSvcImpl.Suggestion;
|
import ca.uhn.fhir.jpa.dao.FulltextSearchSvcImpl.Suggestion;
|
||||||
import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
|
import ca.uhn.fhir.jpa.dao.IFhirSystemDao;
|
||||||
import ca.uhn.fhir.jpa.dao.IFulltextSearchSvc;
|
import ca.uhn.fhir.jpa.dao.IFulltextSearchSvc;
|
||||||
import ca.uhn.fhir.jpa.provider.BaseJpaSystemProviderDstu2Plus;
|
|
||||||
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
import ca.uhn.fhir.jpa.model.util.JpaConstants;
|
||||||
|
import ca.uhn.fhir.jpa.provider.BaseJpaSystemProviderDstu2Plus;
|
||||||
import ca.uhn.fhir.model.api.annotation.Description;
|
import ca.uhn.fhir.model.api.annotation.Description;
|
||||||
import ca.uhn.fhir.rest.annotation.*;
|
import ca.uhn.fhir.rest.annotation.IdParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Operation;
|
||||||
|
import ca.uhn.fhir.rest.annotation.OperationParam;
|
||||||
|
import ca.uhn.fhir.rest.annotation.Transaction;
|
||||||
|
import ca.uhn.fhir.rest.annotation.TransactionParam;
|
||||||
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||||
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
|
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
import org.hl7.fhir.dstu3.model.BooleanType;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.Bundle;
|
||||||
|
import org.hl7.fhir.dstu3.model.DecimalType;
|
||||||
|
import org.hl7.fhir.dstu3.model.IntegerType;
|
||||||
|
import org.hl7.fhir.dstu3.model.Meta;
|
||||||
|
import org.hl7.fhir.dstu3.model.Parameters;
|
||||||
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
|
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
|
||||||
|
import org.hl7.fhir.dstu3.model.StringType;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseBundle;
|
import org.hl7.fhir.instance.model.api.IBaseBundle;
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
|
@ -29,6 +38,7 @@ import java.util.TreeMap;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
|
import static org.apache.commons.lang3.ObjectUtils.defaultIfNull;
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.Parameters30_40.convertParameters;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
|
@ -72,7 +82,7 @@ public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundl
|
||||||
) {
|
) {
|
||||||
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_40.convertParameters(retVal);
|
return convertParameters(retVal);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -90,7 +100,7 @@ public class JpaSystemProviderDstu3 extends BaseJpaSystemProviderDstu2Plus<Bundl
|
||||||
) {
|
) {
|
||||||
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_40.convertParameters(retVal);
|
return convertParameters(retVal);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -122,7 +122,7 @@ public class BaseJpaResourceProviderConceptMapR5 extends JpaResourceProviderR5<C
|
||||||
IFhirResourceDaoConceptMap<ConceptMap> dao = (IFhirResourceDaoConceptMap<ConceptMap>) getDao();
|
IFhirResourceDaoConceptMap<ConceptMap> dao = (IFhirResourceDaoConceptMap<ConceptMap>) getDao();
|
||||||
TranslationResult result = dao.translate(translationRequest, theRequestDetails);
|
TranslationResult result = dao.translate(translationRequest, theRequestDetails);
|
||||||
org.hl7.fhir.r4.model.Parameters parameters = result.toParameters();
|
org.hl7.fhir.r4.model.Parameters parameters = result.toParameters();
|
||||||
return org.hl7.fhir.convertors.conv40_50.Parameters.convertParameters(parameters);
|
return org.hl7.fhir.convertors.conv40_50.Parameters40_50.convertParameters(parameters);
|
||||||
} finally {
|
} finally {
|
||||||
endRequest(theServletRequest);
|
endRequest(theServletRequest);
|
||||||
}
|
}
|
||||||
|
|
|
@ -86,7 +86,7 @@ public class JpaResourceProviderR5<T extends IAnyResource> extends BaseJpaResour
|
||||||
RequestDetails theRequest) {
|
RequestDetails theRequest) {
|
||||||
|
|
||||||
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(theIdParam, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(theIdParam, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
||||||
return org.hl7.fhir.convertors.conv40_50.Parameters.convertParameters(parameters);
|
return org.hl7.fhir.convertors.conv40_50.Parameters40_50.convertParameters(parameters);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -99,7 +99,7 @@ public class JpaResourceProviderR5<T extends IAnyResource> extends BaseJpaResour
|
||||||
@OperationParam(name = JpaConstants.OPERATION_EXPUNGE_PARAM_EXPUNGE_PREVIOUS_VERSIONS) BooleanType theExpungeOldVersions,
|
@OperationParam(name = JpaConstants.OPERATION_EXPUNGE_PARAM_EXPUNGE_PREVIOUS_VERSIONS) BooleanType theExpungeOldVersions,
|
||||||
RequestDetails theRequest) {
|
RequestDetails theRequest) {
|
||||||
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(null, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(null, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
||||||
return org.hl7.fhir.convertors.conv40_50.Parameters.convertParameters(parameters);
|
return org.hl7.fhir.convertors.conv40_50.Parameters40_50.convertParameters(parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(name = OPERATION_META, idempotent = true, returnParameters = {
|
@Operation(name = OPERATION_META, idempotent = true, returnParameters = {
|
||||||
|
|
|
@ -68,7 +68,7 @@ public class JpaSystemProviderR5 extends BaseJpaSystemProviderDstu2Plus<Bundle,
|
||||||
RequestDetails theRequestDetails
|
RequestDetails theRequestDetails
|
||||||
) {
|
) {
|
||||||
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
||||||
return org.hl7.fhir.convertors.conv40_50.Parameters.convertParameters(parameters);
|
return org.hl7.fhir.convertors.conv40_50.Parameters40_50.convertParameters(parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Operation(name = JpaConstants.OPERATION_EXPUNGE, idempotent = false, returnParameters = {
|
@Operation(name = JpaConstants.OPERATION_EXPUNGE, idempotent = false, returnParameters = {
|
||||||
|
@ -82,7 +82,7 @@ public class JpaSystemProviderR5 extends BaseJpaSystemProviderDstu2Plus<Bundle,
|
||||||
RequestDetails theRequestDetails
|
RequestDetails theRequestDetails
|
||||||
) {
|
) {
|
||||||
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
org.hl7.fhir.r4.model.Parameters parameters = super.doExpunge(theLimit, theExpungeDeletedResources, theExpungeOldVersions, theExpungeEverything, theRequestDetails);
|
||||||
return org.hl7.fhir.convertors.conv40_50.Parameters.convertParameters(parameters);
|
return org.hl7.fhir.convertors.conv40_50.Parameters40_50.convertParameters(parameters);
|
||||||
}
|
}
|
||||||
|
|
||||||
// This is generated by hand:
|
// This is generated by hand:
|
||||||
|
|
|
@ -9,10 +9,13 @@ import ca.uhn.fhir.jpa.term.api.ITermReadSvcDstu3;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
import ca.uhn.fhir.util.CoverageIgnore;
|
import ca.uhn.fhir.util.CoverageIgnore;
|
||||||
import ca.uhn.fhir.util.ValidateUtil;
|
import ca.uhn.fhir.util.ValidateUtil;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
|
import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.CodeSystem;
|
||||||
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent;
|
import org.hl7.fhir.dstu3.model.CodeSystem.ConceptDefinitionComponent;
|
||||||
|
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
||||||
|
import org.hl7.fhir.dstu3.model.Coding;
|
||||||
|
import org.hl7.fhir.dstu3.model.StructureDefinition;
|
||||||
|
import org.hl7.fhir.dstu3.model.ValueSet;
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent;
|
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent;
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet.ValueSetExpansionComponent;
|
import org.hl7.fhir.dstu3.model.ValueSet.ValueSetExpansionComponent;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
|
@ -31,6 +34,9 @@ import java.util.List;
|
||||||
import java.util.Optional;
|
import java.util.Optional;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.CodeSystem30_40.convertCodeSystem;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ValueSet30_40.convertValueSet;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ValueSet30_40.convertValueSetExpansionComponent;
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* #%L
|
* #%L
|
||||||
|
@ -104,7 +110,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||||
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
||||||
org.hl7.fhir.r4.model.ValueSet.ValueSetExpansionComponent expandedR4 = super.expandValueSetInMemory(valueSetToExpandR4, null).getExpansion();
|
org.hl7.fhir.r4.model.ValueSet.ValueSetExpansionComponent expandedR4 = super.expandValueSetInMemory(valueSetToExpandR4, null).getExpansion();
|
||||||
return VersionConvertor_30_40.convertValueSetExpansionComponent(expandedR4);
|
return convertValueSetExpansionComponent(expandedR4);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -118,7 +124,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||||
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
||||||
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSetInMemory(valueSetToExpandR4, null);
|
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSetInMemory(valueSetToExpandR4, null);
|
||||||
return VersionConvertor_30_40.convertValueSet(expandedR4);
|
return convertValueSet(expandedR4);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -127,7 +133,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
||||||
@Override
|
@Override
|
||||||
protected org.hl7.fhir.r4.model.ValueSet toCanonicalValueSet(IBaseResource theValueSet) throws FHIRException {
|
protected org.hl7.fhir.r4.model.ValueSet toCanonicalValueSet(IBaseResource theValueSet) throws FHIRException {
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||||
valueSetToExpandR4 = VersionConvertor_30_40.convertValueSet((ValueSet) theValueSet);
|
valueSetToExpandR4 = convertValueSet((ValueSet) theValueSet);
|
||||||
return valueSetToExpandR4;
|
return valueSetToExpandR4;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -139,7 +145,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||||
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
||||||
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSet(valueSetToExpandR4, theOffset, theCount);
|
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSet(valueSetToExpandR4, theOffset, theCount);
|
||||||
return VersionConvertor_30_40.convertValueSet(expandedR4);
|
return convertValueSet(expandedR4);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -256,7 +262,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
||||||
public org.hl7.fhir.r4.model.CodeSystem getCodeSystemFromContext(String theSystem) {
|
public org.hl7.fhir.r4.model.CodeSystem getCodeSystemFromContext(String theSystem) {
|
||||||
CodeSystem codeSystem = myValidationSupport.fetchCodeSystem(myContext, theSystem);
|
CodeSystem codeSystem = myValidationSupport.fetchCodeSystem(myContext, theSystem);
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_40.convertCodeSystem(codeSystem);
|
return convertCodeSystem(codeSystem);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -323,7 +329,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
||||||
public ValidateCodeResult validateCodeIsInPreExpandedValueSet(IBaseResource theValueSet, String theSystem, String theCode, String theDisplay, IBaseDatatype theCoding, IBaseDatatype theCodeableConcept) {
|
public ValidateCodeResult validateCodeIsInPreExpandedValueSet(IBaseResource theValueSet, String theSystem, String theCode, String theDisplay, IBaseDatatype theCoding, IBaseDatatype theCodeableConcept) {
|
||||||
ValidateUtil.isNotNullOrThrowUnprocessableEntity(theValueSet, "ValueSet must not be null");
|
ValidateUtil.isNotNullOrThrowUnprocessableEntity(theValueSet, "ValueSet must not be null");
|
||||||
ValueSet valueSet = (ValueSet) theValueSet;
|
ValueSet valueSet = (ValueSet) theValueSet;
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetR4 = VersionConvertor_30_40.convertValueSet(valueSet);
|
org.hl7.fhir.r4.model.ValueSet valueSetR4 = convertValueSet(valueSet);
|
||||||
|
|
||||||
Coding coding = (Coding) theCoding;
|
Coding coding = (Coding) theCoding;
|
||||||
org.hl7.fhir.r4.model.Coding codingR4 = null;
|
org.hl7.fhir.r4.model.Coding codingR4 = null;
|
||||||
|
@ -347,7 +353,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
||||||
public boolean isValueSetPreExpandedForCodeValidation(IBaseResource theValueSet) {
|
public boolean isValueSetPreExpandedForCodeValidation(IBaseResource theValueSet) {
|
||||||
ValidateUtil.isNotNullOrThrowUnprocessableEntity(theValueSet, "ValueSet must not be null");
|
ValidateUtil.isNotNullOrThrowUnprocessableEntity(theValueSet, "ValueSet must not be null");
|
||||||
ValueSet valueSet = (ValueSet) theValueSet;
|
ValueSet valueSet = (ValueSet) theValueSet;
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetR4 = VersionConvertor_30_40.convertValueSet(valueSet);
|
org.hl7.fhir.r4.model.ValueSet valueSetR4 = convertValueSet(valueSet);
|
||||||
return super.isValueSetPreExpandedForCodeValidation(valueSetR4);
|
return super.isValueSetPreExpandedForCodeValidation(valueSetR4);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -90,21 +90,21 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
||||||
super.throwInvalidValueSet(theValueSet);
|
super.throwInvalidValueSet(theValueSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
return expandValueSetAndReturnVersionIndependentConcepts(org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(valueSetR5), null);
|
return expandValueSetAndReturnVersionIndependentConcepts(org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(valueSetR5), null);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBaseResource expandValueSet(IBaseResource theInput) {
|
public IBaseResource expandValueSet(IBaseResource theInput) {
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpand = toCanonicalValueSet(theInput);
|
org.hl7.fhir.r4.model.ValueSet valueSetToExpand = toCanonicalValueSet(theInput);
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetR4 = super.expandValueSetInMemory(valueSetToExpand, null);
|
org.hl7.fhir.r4.model.ValueSet valueSetR4 = super.expandValueSetInMemory(valueSetToExpand, null);
|
||||||
return org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(valueSetR4);
|
return org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(valueSetR4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public IBaseResource expandValueSet(IBaseResource theInput, int theOffset, int theCount) {
|
public IBaseResource expandValueSet(IBaseResource theInput, int theOffset, int theCount) {
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpand = toCanonicalValueSet(theInput);
|
org.hl7.fhir.r4.model.ValueSet valueSetToExpand = toCanonicalValueSet(theInput);
|
||||||
org.hl7.fhir.r4.model.ValueSet valueSetR4 = super.expandValueSet(valueSetToExpand, theOffset, theCount);
|
org.hl7.fhir.r4.model.ValueSet valueSetR4 = super.expandValueSet(valueSetToExpand, theOffset, theCount);
|
||||||
return org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(valueSetR4);
|
return org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(valueSetR4);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -117,8 +117,8 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
||||||
public ValueSetExpander.ValueSetExpansionOutcome expandValueSet(FhirContext theContext, ConceptSetComponent theInclude) {
|
public ValueSetExpander.ValueSetExpansionOutcome expandValueSet(FhirContext theContext, ConceptSetComponent theInclude) {
|
||||||
ValueSet valueSetToExpand = new ValueSet();
|
ValueSet valueSetToExpand = new ValueSet();
|
||||||
valueSetToExpand.getCompose().addInclude(theInclude);
|
valueSetToExpand.getCompose().addInclude(theInclude);
|
||||||
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSetInMemory(org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(valueSetToExpand), null);
|
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSetInMemory(org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(valueSetToExpand), null);
|
||||||
return new ValueSetExpander.ValueSetExpansionOutcome(org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(expandedR4));
|
return new ValueSetExpander.ValueSetExpansionOutcome(org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(expandedR4));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -199,13 +199,13 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
||||||
@Override
|
@Override
|
||||||
public org.hl7.fhir.r4.model.CodeSystem getCodeSystemFromContext(String theSystem) {
|
public org.hl7.fhir.r4.model.CodeSystem getCodeSystemFromContext(String theSystem) {
|
||||||
CodeSystem codeSystemR5 = myValidationSupport.fetchCodeSystem(myContext, theSystem);
|
CodeSystem codeSystemR5 = myValidationSupport.fetchCodeSystem(myContext, theSystem);
|
||||||
return org.hl7.fhir.convertors.conv40_50.CodeSystem.convertCodeSystem(codeSystemR5);
|
return org.hl7.fhir.convertors.conv40_50.CodeSystem40_50.convertCodeSystem(codeSystemR5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected org.hl7.fhir.r4.model.ValueSet getValueSetFromResourceTable(ResourceTable theResourceTable) {
|
protected org.hl7.fhir.r4.model.ValueSet getValueSetFromResourceTable(ResourceTable theResourceTable) {
|
||||||
ValueSet valueSetR5 = myValueSetResourceDao.toResource(ValueSet.class, theResourceTable, null, false);
|
ValueSet valueSetR5 = myValueSetResourceDao.toResource(ValueSet.class, theResourceTable, null, false);
|
||||||
return org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(valueSetR5);
|
return org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(valueSetR5);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -277,7 +277,7 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected org.hl7.fhir.r4.model.ValueSet toCanonicalValueSet(IBaseResource theValueSet) throws org.hl7.fhir.exceptions.FHIRException {
|
protected org.hl7.fhir.r4.model.ValueSet toCanonicalValueSet(IBaseResource theValueSet) throws org.hl7.fhir.exceptions.FHIRException {
|
||||||
return org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet((ValueSet) theValueSet);
|
return org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet((ValueSet) theValueSet);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -37,6 +37,9 @@ import org.springframework.context.event.ContextStartedEvent;
|
||||||
import org.springframework.context.event.EventListener;
|
import org.springframework.context.event.EventListener;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.CodeSystem30_40.convertCodeSystem;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ValueSet30_40.convertValueSet;
|
||||||
|
|
||||||
public class TermVersionAdapterSvcDstu3 extends BaseTermVersionAdapterSvcImpl implements ITermVersionAdapterSvc {
|
public class TermVersionAdapterSvcDstu3 extends BaseTermVersionAdapterSvcImpl implements ITermVersionAdapterSvc {
|
||||||
|
|
||||||
|
@ -72,7 +75,7 @@ public class TermVersionAdapterSvcDstu3 extends BaseTermVersionAdapterSvcImpl im
|
||||||
public IIdType createOrUpdateCodeSystem(org.hl7.fhir.r4.model.CodeSystem theCodeSystemResource) {
|
public IIdType createOrUpdateCodeSystem(org.hl7.fhir.r4.model.CodeSystem theCodeSystemResource) {
|
||||||
CodeSystem resourceToStore;
|
CodeSystem resourceToStore;
|
||||||
try {
|
try {
|
||||||
resourceToStore = VersionConvertor_30_40.convertCodeSystem(theCodeSystemResource);
|
resourceToStore = convertCodeSystem(theCodeSystemResource);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -89,7 +92,7 @@ public class TermVersionAdapterSvcDstu3 extends BaseTermVersionAdapterSvcImpl im
|
||||||
public void createOrUpdateConceptMap(org.hl7.fhir.r4.model.ConceptMap theConceptMap) {
|
public void createOrUpdateConceptMap(org.hl7.fhir.r4.model.ConceptMap theConceptMap) {
|
||||||
ConceptMap resourceToStore;
|
ConceptMap resourceToStore;
|
||||||
try {
|
try {
|
||||||
resourceToStore = VersionConvertor_30_40.convertConceptMap(theConceptMap);
|
resourceToStore = convertConceptMap(theConceptMap);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -105,7 +108,7 @@ public class TermVersionAdapterSvcDstu3 extends BaseTermVersionAdapterSvcImpl im
|
||||||
public void createOrUpdateValueSet(org.hl7.fhir.r4.model.ValueSet theValueSet) {
|
public void createOrUpdateValueSet(org.hl7.fhir.r4.model.ValueSet theValueSet) {
|
||||||
ValueSet valueSetDstu3;
|
ValueSet valueSetDstu3;
|
||||||
try {
|
try {
|
||||||
valueSetDstu3 = VersionConvertor_30_40.convertValueSet(theValueSet);
|
valueSetDstu3 = convertValueSet(theValueSet);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
|
|
@ -62,7 +62,7 @@ public class TermVersionAdapterSvcR5 extends BaseTermVersionAdapterSvcImpl imple
|
||||||
public IIdType createOrUpdateCodeSystem(org.hl7.fhir.r4.model.CodeSystem theCodeSystemResource) {
|
public IIdType createOrUpdateCodeSystem(org.hl7.fhir.r4.model.CodeSystem theCodeSystemResource) {
|
||||||
validateCodeSystemForStorage(theCodeSystemResource);
|
validateCodeSystemForStorage(theCodeSystemResource);
|
||||||
|
|
||||||
CodeSystem codeSystemR4 = org.hl7.fhir.convertors.conv40_50.CodeSystem.convertCodeSystem(theCodeSystemResource);
|
CodeSystem codeSystemR4 = org.hl7.fhir.convertors.conv40_50.CodeSystem40_50.convertCodeSystem(theCodeSystemResource);
|
||||||
if (isBlank(theCodeSystemResource.getIdElement().getIdPart())) {
|
if (isBlank(theCodeSystemResource.getIdElement().getIdPart())) {
|
||||||
String matchUrl = "CodeSystem?url=" + UrlUtil.escapeUrlParam(theCodeSystemResource.getUrl());
|
String matchUrl = "CodeSystem?url=" + UrlUtil.escapeUrlParam(theCodeSystemResource.getUrl());
|
||||||
return myCodeSystemResourceDao.update(codeSystemR4, matchUrl).getId();
|
return myCodeSystemResourceDao.update(codeSystemR4, matchUrl).getId();
|
||||||
|
@ -74,7 +74,7 @@ public class TermVersionAdapterSvcR5 extends BaseTermVersionAdapterSvcImpl imple
|
||||||
@Override
|
@Override
|
||||||
public void createOrUpdateConceptMap(org.hl7.fhir.r4.model.ConceptMap theConceptMap) {
|
public void createOrUpdateConceptMap(org.hl7.fhir.r4.model.ConceptMap theConceptMap) {
|
||||||
|
|
||||||
ConceptMap conceptMapR4 = org.hl7.fhir.convertors.conv40_50.ConceptMap.convertConceptMap(theConceptMap);
|
ConceptMap conceptMapR4 = org.hl7.fhir.convertors.conv40_50.ConceptMap40_50.convertConceptMap(theConceptMap);
|
||||||
|
|
||||||
if (isBlank(theConceptMap.getIdElement().getIdPart())) {
|
if (isBlank(theConceptMap.getIdElement().getIdPart())) {
|
||||||
String matchUrl = "ConceptMap?url=" + UrlUtil.escapeUrlParam(theConceptMap.getUrl());
|
String matchUrl = "ConceptMap?url=" + UrlUtil.escapeUrlParam(theConceptMap.getUrl());
|
||||||
|
@ -87,7 +87,7 @@ public class TermVersionAdapterSvcR5 extends BaseTermVersionAdapterSvcImpl imple
|
||||||
@Override
|
@Override
|
||||||
public void createOrUpdateValueSet(org.hl7.fhir.r4.model.ValueSet theValueSet) {
|
public void createOrUpdateValueSet(org.hl7.fhir.r4.model.ValueSet theValueSet) {
|
||||||
|
|
||||||
ValueSet valueSetR4 = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(theValueSet);
|
ValueSet valueSetR4 = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(theValueSet);
|
||||||
|
|
||||||
if (isBlank(theValueSet.getIdElement().getIdPart())) {
|
if (isBlank(theValueSet.getIdElement().getIdPart())) {
|
||||||
String matchUrl = "ValueSet?url=" + UrlUtil.escapeUrlParam(theValueSet.getUrl());
|
String matchUrl = "ValueSet?url=" + UrlUtil.escapeUrlParam(theValueSet.getUrl());
|
||||||
|
|
|
@ -1,9 +1,5 @@
|
||||||
package ca.uhn.fhir.jpa.dao.dstu2;
|
package ca.uhn.fhir.jpa.dao.dstu2;
|
||||||
|
|
||||||
import static org.hamcrest.Matchers.containsString;
|
|
||||||
import static org.junit.Assert.assertThat;
|
|
||||||
import static org.junit.Assert.fail;
|
|
||||||
|
|
||||||
import ca.uhn.fhir.jpa.dao.DaoConfig;
|
import ca.uhn.fhir.jpa.dao.DaoConfig;
|
||||||
import ca.uhn.fhir.model.api.IResource;
|
import ca.uhn.fhir.model.api.IResource;
|
||||||
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
|
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
|
||||||
|
@ -32,7 +28,11 @@ import org.junit.Before;
|
||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.IOException;
|
import java.io.IOException;
|
||||||
import java.util.Arrays;
|
import java.util.Collections;
|
||||||
|
|
||||||
|
import static org.hamcrest.Matchers.containsString;
|
||||||
|
import static org.junit.Assert.assertThat;
|
||||||
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
public class FhirResourceDaoDstu2ValidateTest extends BaseJpaDstu2Test {
|
public class FhirResourceDaoDstu2ValidateTest extends BaseJpaDstu2Test {
|
||||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoDstu2ValidateTest.class);
|
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(FhirResourceDaoDstu2ValidateTest.class);
|
||||||
|
@ -94,15 +94,14 @@ public class FhirResourceDaoDstu2ValidateTest extends BaseJpaDstu2Test {
|
||||||
myStructureDefinitionDao.create(sd, mySrd);
|
myStructureDefinitionDao.create(sd, mySrd);
|
||||||
|
|
||||||
Observation input = new Observation();
|
Observation input = new Observation();
|
||||||
ResourceMetadataKeyEnum.PROFILES.put(input, Arrays.asList(new IdDt(sd.getUrl())));
|
ResourceMetadataKeyEnum.PROFILES.put(input, Collections.singletonList(new IdDt(sd.getUrl())));
|
||||||
|
|
||||||
input.addIdentifier().setSystem("http://acme").setValue("12345");
|
input.addIdentifier().setSystem("http://acme").setValue("12345");
|
||||||
input.getEncounter().setReference("http://foo.com/Encounter/9");
|
input.getEncounter().setReference("http://foo.com/Encounter/9");
|
||||||
input.setStatus(ObservationStatusEnum.FINAL);
|
input.setStatus(ObservationStatusEnum.FINAL);
|
||||||
input.getCode().addCoding().setSystem("http://loinc.org").setCode("12345");
|
input.getCode().addCoding().setSystem("http://loinc.org").setCode("12345");
|
||||||
|
|
||||||
String encoded = null;
|
String encoded;
|
||||||
MethodOutcome outcome = null;
|
|
||||||
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
||||||
switch (enc) {
|
switch (enc) {
|
||||||
case JSON:
|
case JSON:
|
||||||
|
@ -130,12 +129,12 @@ public class FhirResourceDaoDstu2ValidateTest extends BaseJpaDstu2Test {
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testValidateResourceContainingProfileDeclarationInvalid() throws Exception {
|
public void testValidateResourceContainingProfileDeclarationInvalid() {
|
||||||
String methodName = "testValidateResourceContainingProfileDeclarationInvalid";
|
String methodName = "testValidateResourceContainingProfileDeclarationInvalid";
|
||||||
|
|
||||||
Observation input = new Observation();
|
Observation input = new Observation();
|
||||||
String profileUri = "http://example.com/StructureDefinition/" + methodName;
|
String profileUri = "http://example.com/StructureDefinition/" + methodName;
|
||||||
ResourceMetadataKeyEnum.PROFILES.put(input, Arrays.asList(new IdDt(profileUri)));
|
ResourceMetadataKeyEnum.PROFILES.put(input, Collections.singletonList(new IdDt(profileUri)));
|
||||||
|
|
||||||
input.addIdentifier().setSystem("http://acme").setValue("12345");
|
input.addIdentifier().setSystem("http://acme").setValue("12345");
|
||||||
input.getEncounter().setReference("http://foo.com/Encounter/9");
|
input.getEncounter().setReference("http://foo.com/Encounter/9");
|
||||||
|
@ -148,7 +147,7 @@ public class FhirResourceDaoDstu2ValidateTest extends BaseJpaDstu2Test {
|
||||||
|
|
||||||
String ooString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(outcome.getOperationOutcome());
|
String ooString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(outcome.getOperationOutcome());
|
||||||
ourLog.info(ooString);
|
ourLog.info(ooString);
|
||||||
assertThat(ooString, containsString("StructureDefinition reference \\\"" + profileUri + "\\\" could not be resolved"));
|
assertThat(ooString, containsString("Profile reference 'http://example.com/StructureDefinition/testValidateResourceContainingProfileDeclarationInvalid' could not be resolved, so has not been checked"));
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -35,7 +35,6 @@ import ca.uhn.fhir.util.UrlUtil;
|
||||||
import org.apache.commons.io.IOUtils;
|
import org.apache.commons.io.IOUtils;
|
||||||
import org.hibernate.search.jpa.FullTextEntityManager;
|
import org.hibernate.search.jpa.FullTextEntityManager;
|
||||||
import org.hibernate.search.jpa.Search;
|
import org.hibernate.search.jpa.Search;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
|
||||||
import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
|
import org.hl7.fhir.dstu3.hapi.ctx.IValidationSupport;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.*;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
|
@ -60,6 +59,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.util.Map;
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||||
import static org.junit.Assert.fail;
|
import static org.junit.Assert.fail;
|
||||||
|
|
||||||
@RunWith(SpringJUnit4ClassRunner.class)
|
@RunWith(SpringJUnit4ClassRunner.class)
|
||||||
|
@ -386,7 +386,7 @@ public abstract class BaseJpaDstu3Test extends BaseJpaTest {
|
||||||
*/
|
*/
|
||||||
public static ConceptMap createConceptMap() {
|
public static ConceptMap createConceptMap() {
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_40.convertConceptMap(BaseJpaR4Test.createConceptMap());
|
return convertConceptMap(BaseJpaR4Test.createConceptMap());
|
||||||
} catch (FHIRException fe) {
|
} catch (FHIRException fe) {
|
||||||
throw new InternalErrorException(fe);
|
throw new InternalErrorException(fe);
|
||||||
}
|
}
|
||||||
|
|
|
@ -15,6 +15,7 @@ import org.hl7.fhir.dstu3.hapi.validation.FhirInstanceValidator;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import org.hl7.fhir.dstu3.model.*;
|
||||||
import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
|
import org.hl7.fhir.dstu3.model.Bundle.BundleEntryComponent;
|
||||||
import org.hl7.fhir.dstu3.model.Observation.ObservationStatus;
|
import org.hl7.fhir.dstu3.model.Observation.ObservationStatus;
|
||||||
|
import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
import org.hl7.fhir.r5.utils.IResourceValidator;
|
import org.hl7.fhir.r5.utils.IResourceValidator;
|
||||||
|
@ -322,15 +323,11 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
|
||||||
|
|
||||||
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
||||||
String encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
|
String encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
|
||||||
try {
|
MethodOutcome output = myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
|
||||||
myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
|
OperationOutcome oo = (OperationOutcome) output.getOperationOutcome();
|
||||||
fail();
|
String outputString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(oo);
|
||||||
} catch (PreconditionFailedException e) {
|
ourLog.info(outputString);
|
||||||
String ooString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome());
|
assertThat(outputString, containsString("Profile reference 'http://example.com/StructureDefinition/testValidateResourceContainingProfileDeclarationInvalid' could not be resolved, so has not been checked"));
|
||||||
ourLog.info(ooString);
|
|
||||||
assertThat(ooString, containsString("StructureDefinition reference \\\"" + profileUri + "\\\" could not be resolved"));
|
|
||||||
}
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -395,15 +395,11 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
|
||||||
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
||||||
String encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
|
String encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
|
||||||
|
|
||||||
try {
|
MethodOutcome output = myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
|
||||||
myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
|
org.hl7.fhir.r4.model.OperationOutcome oo = (org.hl7.fhir.r4.model.OperationOutcome) output.getOperationOutcome();
|
||||||
fail();
|
String outputString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(oo);
|
||||||
} catch (PreconditionFailedException e) {
|
ourLog.info(outputString);
|
||||||
String ooString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome());
|
assertThat(outputString, containsString("Profile reference 'http://example.com/StructureDefinition/testValidateResourceContainingProfileDeclarationInvalid' could not be resolved, so has not been checked"));
|
||||||
ourLog.info(ooString);
|
|
||||||
assertThat(ooString, containsString("StructureDefinition reference \\\"" + profileUri + "\\\" could not be resolved"));
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -54,8 +54,8 @@ public class ValidatorAcrossVersionsTest {
|
||||||
ourLog.info(ctxDstu2.newJsonParser().setPrettyPrint(true).encodeResourceToString(result.toOperationOutcome()));
|
ourLog.info(ctxDstu2.newJsonParser().setPrettyPrint(true).encodeResourceToString(result.toOperationOutcome()));
|
||||||
|
|
||||||
assertEquals(2, result.getMessages().size());
|
assertEquals(2, result.getMessages().size());
|
||||||
assertEquals("No questionnaire is identified, so no validation can be performed against the base questionnaire", result.getMessages().get(0).getMessage());
|
assertEquals("Profile http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse, Element 'QuestionnaireResponse.status': minimum required = 1, but only found 0", result.getMessages().get(0).getMessage());
|
||||||
assertEquals("Profile http://hl7.org/fhir/StructureDefinition/QuestionnaireResponse, Element 'QuestionnaireResponse.status': minimum required = 1, but only found 0", result.getMessages().get(1).getMessage());
|
assertEquals("No questionnaire is identified, so no validation can be performed against the base questionnaire", result.getMessages().get(1).getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,12 +26,16 @@ import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.exceptions.PathEngineException;
|
import org.hl7.fhir.exceptions.PathEngineException;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
import org.hl7.fhir.r5.context.IWorkerContext;
|
import org.hl7.fhir.r5.context.IWorkerContext;
|
||||||
import org.hl7.fhir.r5.hapi.ctx.HapiWorkerContext;
|
|
||||||
import org.hl7.fhir.r5.hapi.ctx.DefaultProfileValidationSupport;
|
import org.hl7.fhir.r5.hapi.ctx.DefaultProfileValidationSupport;
|
||||||
|
import org.hl7.fhir.r5.hapi.ctx.HapiWorkerContext;
|
||||||
import org.hl7.fhir.r5.hapi.ctx.IValidationSupport;
|
import org.hl7.fhir.r5.hapi.ctx.IValidationSupport;
|
||||||
import org.hl7.fhir.r5.model.*;
|
import org.hl7.fhir.r5.model.Base;
|
||||||
|
import org.hl7.fhir.r5.model.IdType;
|
||||||
|
import org.hl7.fhir.r5.model.Resource;
|
||||||
|
import org.hl7.fhir.r5.model.ResourceType;
|
||||||
|
import org.hl7.fhir.r5.model.TypeDetails;
|
||||||
|
import org.hl7.fhir.r5.model.ValueSet;
|
||||||
import org.hl7.fhir.r5.utils.FHIRPathEngine;
|
import org.hl7.fhir.r5.utils.FHIRPathEngine;
|
||||||
import org.springframework.beans.factory.annotation.Autowired;
|
|
||||||
|
|
||||||
import javax.annotation.PostConstruct;
|
import javax.annotation.PostConstruct;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
@ -115,7 +119,7 @@ public class SearchParamExtractorR5 extends BaseSearchParamExtractor implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Base resolveReference(Object theAppContext, String theUrl) throws FHIRException {
|
public Base resolveReference(Object appContext, String theUrl, Base refContext) throws FHIRException {
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* When we're doing resolution within the SearchParamExtractor, if we want
|
* When we're doing resolution within the SearchParamExtractor, if we want
|
||||||
|
|
|
@ -106,14 +106,22 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public <T extends Resource> T fetchResource(Class<T> theClass, String theUri) {
|
public <T extends Resource> T fetchResource(Class<T> theClass, String theUri) {
|
||||||
|
Validate.notBlank(theUri, "theUri must not be null or blank");
|
||||||
if (myValidationSupport == null) {
|
if (myValidationSupport == null) {
|
||||||
return null;
|
return null;
|
||||||
} else {
|
} else {
|
||||||
@SuppressWarnings("unchecked")
|
try {
|
||||||
T retVal = (T) myFetchedResourceCache.get(theUri, t->{
|
//noinspection unchecked
|
||||||
return myValidationSupport.fetchResource(myCtx, theClass, theUri);
|
return (T) myFetchedResourceCache.get(theUri, t -> {
|
||||||
|
T resource = myValidationSupport.fetchResource(myCtx, theClass, theUri);
|
||||||
|
if (resource == null) {
|
||||||
|
throw new IllegalArgumentException();
|
||||||
|
}
|
||||||
|
return resource;
|
||||||
});
|
});
|
||||||
return retVal;
|
} catch (IllegalArgumentException e) {
|
||||||
|
return null;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -343,6 +343,11 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
||||||
return fetchResource(StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
return fetchResource(StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StructureDefinition fetchRawProfile(String url) {
|
||||||
|
throw new UnsupportedOperationException();
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getTypeNames() {
|
public List<String> getTypeNames() {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
|
|
@ -4,20 +4,24 @@ import ca.uhn.fhir.context.ConfigurationException;
|
||||||
import ca.uhn.fhir.rest.api.EncodingEnum;
|
import ca.uhn.fhir.rest.api.EncodingEnum;
|
||||||
import ca.uhn.fhir.util.XmlUtil;
|
import ca.uhn.fhir.util.XmlUtil;
|
||||||
import ca.uhn.fhir.validation.IValidationContext;
|
import ca.uhn.fhir.validation.IValidationContext;
|
||||||
import com.google.gson.*;
|
import com.google.gson.Gson;
|
||||||
|
import com.google.gson.GsonBuilder;
|
||||||
|
import com.google.gson.JsonArray;
|
||||||
|
import com.google.gson.JsonElement;
|
||||||
|
import com.google.gson.JsonObject;
|
||||||
import org.apache.commons.codec.Charsets;
|
import org.apache.commons.codec.Charsets;
|
||||||
import org.apache.commons.io.input.ReaderInputStream;
|
import org.apache.commons.io.input.ReaderInputStream;
|
||||||
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.r5.context.IWorkerContext;
|
import org.hl7.fhir.r5.context.IWorkerContext;
|
||||||
import org.hl7.fhir.r5.elementmodel.Manager;
|
import org.hl7.fhir.r5.elementmodel.Manager;
|
||||||
|
import org.hl7.fhir.r5.model.StructureDefinition;
|
||||||
import org.hl7.fhir.r5.utils.FHIRPathEngine;
|
import org.hl7.fhir.r5.utils.FHIRPathEngine;
|
||||||
import org.hl7.fhir.r5.utils.IResourceValidator;
|
import org.hl7.fhir.r5.utils.IResourceValidator;
|
||||||
import org.hl7.fhir.r5.utils.ValidationProfileSet;
|
|
||||||
import org.hl7.fhir.r5.validation.InstanceValidator;
|
import org.hl7.fhir.r5.validation.InstanceValidator;
|
||||||
import org.hl7.fhir.utilities.validation.ValidationMessage;
|
import org.hl7.fhir.utilities.validation.ValidationMessage;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.w3c.dom.Document;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
|
||||||
import org.w3c.dom.NodeList;
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
|
@ -33,7 +37,9 @@ public class ValidatorWrapper {
|
||||||
private boolean myAnyExtensionsAllowed;
|
private boolean myAnyExtensionsAllowed;
|
||||||
private boolean myErrorForUnknownProfiles;
|
private boolean myErrorForUnknownProfiles;
|
||||||
private boolean myNoTerminologyChecks;
|
private boolean myNoTerminologyChecks;
|
||||||
|
private boolean myAssumeValidRestReferences;
|
||||||
private Collection<? extends String> myExtensionDomains;
|
private Collection<? extends String> myExtensionDomains;
|
||||||
|
private IResourceValidator.IValidatorResourceFetcher myValidatorResourceFetcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -42,6 +48,15 @@ public class ValidatorWrapper {
|
||||||
super();
|
super();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAssumeValidRestReferences() {
|
||||||
|
return myAssumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public ValidatorWrapper setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||||
|
this.myAssumeValidRestReferences = assumeValidRestReferences;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public ValidatorWrapper setBestPracticeWarningLevel(IResourceValidator.BestPracticeWarningLevel theBestPracticeWarningLevel) {
|
public ValidatorWrapper setBestPracticeWarningLevel(IResourceValidator.BestPracticeWarningLevel theBestPracticeWarningLevel) {
|
||||||
myBestPracticeWarningLevel = theBestPracticeWarningLevel;
|
myBestPracticeWarningLevel = theBestPracticeWarningLevel;
|
||||||
return this;
|
return this;
|
||||||
|
@ -67,6 +82,12 @@ public class ValidatorWrapper {
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
public ValidatorWrapper setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||||
|
this.myValidatorResourceFetcher = validatorResourceFetcher;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
|
|
||||||
public List<ValidationMessage> validate(IWorkerContext theWorkerContext, IValidationContext<?> theValidationContext) {
|
public List<ValidationMessage> validate(IWorkerContext theWorkerContext, IValidationContext<?> theValidationContext) {
|
||||||
InstanceValidator v;
|
InstanceValidator v;
|
||||||
FHIRPathEngine.IEvaluationContext evaluationCtx = new org.hl7.fhir.r5.hapi.validation.FhirInstanceValidator.NullEvaluationContext();
|
FHIRPathEngine.IEvaluationContext evaluationCtx = new org.hl7.fhir.r5.hapi.validation.FhirInstanceValidator.NullEvaluationContext();
|
||||||
|
@ -76,19 +97,21 @@ public class ValidatorWrapper {
|
||||||
throw new ConfigurationException(e);
|
throw new ConfigurationException(e);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
v.setAssumeValidRestReferences(isAssumeValidRestReferences());
|
||||||
v.setBestPracticeWarningLevel(myBestPracticeWarningLevel);
|
v.setBestPracticeWarningLevel(myBestPracticeWarningLevel);
|
||||||
v.setAnyExtensionsAllowed(myAnyExtensionsAllowed);
|
v.setAnyExtensionsAllowed(myAnyExtensionsAllowed);
|
||||||
v.setResourceIdRule(IResourceValidator.IdStatus.OPTIONAL);
|
v.setResourceIdRule(IResourceValidator.IdStatus.OPTIONAL);
|
||||||
v.setNoTerminologyChecks(myNoTerminologyChecks);
|
v.setNoTerminologyChecks(myNoTerminologyChecks);
|
||||||
v.setErrorForUnknownProfiles(myErrorForUnknownProfiles);
|
v.setErrorForUnknownProfiles(myErrorForUnknownProfiles);
|
||||||
v.getExtensionDomains().addAll(myExtensionDomains);
|
v.getExtensionDomains().addAll(myExtensionDomains);
|
||||||
|
v.setFetcher(myValidatorResourceFetcher);
|
||||||
v.setAllowXsiLocation(true);
|
v.setAllowXsiLocation(true);
|
||||||
|
|
||||||
List<ValidationMessage> messages = new ArrayList<>();
|
List<ValidationMessage> messages = new ArrayList<>();
|
||||||
|
|
||||||
ValidationProfileSet profileSet = new ValidationProfileSet();
|
List<StructureDefinition> profileUrls = new ArrayList<>();
|
||||||
for (String next : theValidationContext.getOptions().getProfiles()) {
|
for (String next : theValidationContext.getOptions().getProfiles()) {
|
||||||
profileSet.getCanonical().add(new ValidationProfileSet.ProfileRegistration(next, true));
|
fetchAndAddProfile(theWorkerContext, profileUrls, next);
|
||||||
}
|
}
|
||||||
|
|
||||||
String input = theValidationContext.getResourceAsString();
|
String input = theValidationContext.getResourceAsString();
|
||||||
|
@ -109,14 +132,14 @@ public class ValidatorWrapper {
|
||||||
// Determine if meta/profiles are present...
|
// Determine if meta/profiles are present...
|
||||||
ArrayList<String> profiles = determineIfProfilesSpecified(document);
|
ArrayList<String> profiles = determineIfProfilesSpecified(document);
|
||||||
for (String nextProfile : profiles) {
|
for (String nextProfile : profiles) {
|
||||||
profileSet.getCanonical().add(new ValidationProfileSet.ProfileRegistration(nextProfile, true));
|
fetchAndAddProfile(theWorkerContext, profileUrls, nextProfile);
|
||||||
}
|
}
|
||||||
|
|
||||||
String resourceAsString = theValidationContext.getResourceAsString();
|
String resourceAsString = theValidationContext.getResourceAsString();
|
||||||
InputStream inputStream = new ReaderInputStream(new StringReader(resourceAsString), Charsets.UTF_8);
|
InputStream inputStream = new ReaderInputStream(new StringReader(resourceAsString), Charsets.UTF_8);
|
||||||
|
|
||||||
Manager.FhirFormat format = Manager.FhirFormat.XML;
|
Manager.FhirFormat format = Manager.FhirFormat.XML;
|
||||||
v.validate(null, messages, inputStream, format, profileSet);
|
v.validate(null, messages, inputStream, format, profileUrls);
|
||||||
|
|
||||||
} else if (encoding == EncodingEnum.JSON) {
|
} else if (encoding == EncodingEnum.JSON) {
|
||||||
|
|
||||||
|
@ -129,7 +152,8 @@ public class ValidatorWrapper {
|
||||||
if (profileElement != null && profileElement.isJsonArray()) {
|
if (profileElement != null && profileElement.isJsonArray()) {
|
||||||
JsonArray profiles = profileElement.getAsJsonArray();
|
JsonArray profiles = profileElement.getAsJsonArray();
|
||||||
for (JsonElement element : profiles) {
|
for (JsonElement element : profiles) {
|
||||||
profileSet.getCanonical().add(new ValidationProfileSet.ProfileRegistration(element.getAsString(), true));
|
String nextProfile = element.getAsString();
|
||||||
|
fetchAndAddProfile(theWorkerContext, profileUrls, nextProfile);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -138,7 +162,7 @@ public class ValidatorWrapper {
|
||||||
InputStream inputStream = new ReaderInputStream(new StringReader(resourceAsString), Charsets.UTF_8);
|
InputStream inputStream = new ReaderInputStream(new StringReader(resourceAsString), Charsets.UTF_8);
|
||||||
|
|
||||||
Manager.FhirFormat format = Manager.FhirFormat.JSON;
|
Manager.FhirFormat format = Manager.FhirFormat.JSON;
|
||||||
v.validate(null, messages, inputStream, format, profileSet);
|
v.validate(null, messages, inputStream, format, profileUrls);
|
||||||
|
|
||||||
} else {
|
} else {
|
||||||
throw new IllegalArgumentException("Unknown encoding: " + encoding);
|
throw new IllegalArgumentException("Unknown encoding: " + encoding);
|
||||||
|
@ -157,16 +181,15 @@ public class ValidatorWrapper {
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void fetchAndAddProfile(IWorkerContext theWorkerContext, List<StructureDefinition> theProfileStructureDefinitions, String theUrl) throws org.hl7.fhir.exceptions.FHIRException {
|
||||||
|
try {
|
||||||
|
StructureDefinition structureDefinition = theWorkerContext.fetchResourceWithException(StructureDefinition.class, theUrl);
|
||||||
|
theProfileStructureDefinitions.add(structureDefinition);
|
||||||
|
} catch (FHIRException e) {
|
||||||
|
ourLog.debug("Failed to load profile: {}", theUrl);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private String determineResourceName(Document theDocument) {
|
|
||||||
NodeList list = theDocument.getChildNodes();
|
|
||||||
for (int i = 0; i < list.getLength(); i++) {
|
|
||||||
if (list.item(i) instanceof Element) {
|
|
||||||
return list.item(i).getLocalName();
|
|
||||||
}
|
|
||||||
}
|
|
||||||
return theDocument.getDocumentElement().getLocalName();
|
|
||||||
}
|
|
||||||
|
|
||||||
private ArrayList<String> determineIfProfilesSpecified(Document theDocument) {
|
private ArrayList<String> determineIfProfilesSpecified(Document theDocument) {
|
||||||
ArrayList<String> profileNames = new ArrayList<>();
|
ArrayList<String> profileNames = new ArrayList<>();
|
||||||
|
|
|
@ -1,14 +1,10 @@
|
||||||
package org.hl7.fhir.dstu2016may.hapi.validation;
|
package org.hl7.fhir.dstu2016may.hapi.validation;
|
||||||
|
|
||||||
import java.net.MalformedURLException;
|
import ca.uhn.fhir.context.FhirContext;
|
||||||
import java.net.URL;
|
|
||||||
import java.util.*;
|
|
||||||
import java.util.concurrent.TimeUnit;
|
|
||||||
|
|
||||||
import javax.annotation.Nonnull;
|
|
||||||
import javax.annotation.Nullable;
|
|
||||||
|
|
||||||
import ca.uhn.fhir.rest.api.Constants;
|
import ca.uhn.fhir.rest.api.Constants;
|
||||||
|
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||||
|
import ca.uhn.fhir.validation.IValidationContext;
|
||||||
|
import ca.uhn.fhir.validation.IValidatorModule;
|
||||||
import com.github.benmanes.caffeine.cache.Caffeine;
|
import com.github.benmanes.caffeine.cache.Caffeine;
|
||||||
import com.github.benmanes.caffeine.cache.LoadingCache;
|
import com.github.benmanes.caffeine.cache.LoadingCache;
|
||||||
import org.apache.commons.lang3.Validate;
|
import org.apache.commons.lang3.Validate;
|
||||||
|
@ -18,28 +14,45 @@ import org.apache.commons.lang3.time.DateUtils;
|
||||||
import org.fhir.ucum.UcumService;
|
import org.fhir.ucum.UcumService;
|
||||||
import org.hl7.fhir.common.hapi.validation.ValidatorWrapper;
|
import org.hl7.fhir.common.hapi.validation.ValidatorWrapper;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_14_50;
|
import org.hl7.fhir.convertors.VersionConvertor_14_50;
|
||||||
|
import org.hl7.fhir.convertors.conv14_50.CodeSystem14_50;
|
||||||
|
import org.hl7.fhir.convertors.conv14_50.StructureDefinition14_50;
|
||||||
|
import org.hl7.fhir.convertors.conv14_50.ValueSet14_50;
|
||||||
|
import org.hl7.fhir.dstu2016may.model.CodeSystem;
|
||||||
|
import org.hl7.fhir.dstu2016may.model.CodeableConcept;
|
||||||
|
import org.hl7.fhir.dstu2016may.model.Coding;
|
||||||
|
import org.hl7.fhir.dstu2016may.model.ImplementationGuide;
|
||||||
|
import org.hl7.fhir.dstu2016may.model.Questionnaire;
|
||||||
|
import org.hl7.fhir.dstu2016may.model.StructureDefinition;
|
||||||
|
import org.hl7.fhir.dstu2016may.model.ValueSet;
|
||||||
import org.hl7.fhir.exceptions.DefinitionException;
|
import org.hl7.fhir.exceptions.DefinitionException;
|
||||||
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
||||||
import org.hl7.fhir.r5.context.IWorkerContext;
|
import org.hl7.fhir.r5.context.IWorkerContext;
|
||||||
import org.hl7.fhir.r5.formats.IParser;
|
import org.hl7.fhir.r5.formats.IParser;
|
||||||
import org.hl7.fhir.r5.formats.ParserType;
|
import org.hl7.fhir.r5.formats.ParserType;
|
||||||
import org.hl7.fhir.r5.model.CanonicalResource;
|
import org.hl7.fhir.r5.model.CanonicalResource;
|
||||||
|
import org.hl7.fhir.r5.model.Resource;
|
||||||
import org.hl7.fhir.r5.utils.INarrativeGenerator;
|
import org.hl7.fhir.r5.utils.INarrativeGenerator;
|
||||||
import org.hl7.fhir.r5.utils.IResourceValidator;
|
import org.hl7.fhir.r5.utils.IResourceValidator;
|
||||||
import org.hl7.fhir.r5.model.Resource;
|
|
||||||
import org.hl7.fhir.dstu2016may.model.*;
|
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
|
||||||
import org.hl7.fhir.utilities.TerminologyServiceOptions;
|
|
||||||
import org.hl7.fhir.utilities.TranslationServices;
|
import org.hl7.fhir.utilities.TranslationServices;
|
||||||
import org.hl7.fhir.utilities.validation.ValidationMessage;
|
import org.hl7.fhir.utilities.validation.ValidationMessage;
|
||||||
import org.hl7.fhir.utilities.validation.ValidationOptions;
|
import org.hl7.fhir.utilities.validation.ValidationOptions;
|
||||||
import org.w3c.dom.*;
|
import org.w3c.dom.Document;
|
||||||
import org.w3c.dom.Element;
|
import org.w3c.dom.Element;
|
||||||
|
import org.w3c.dom.NodeList;
|
||||||
|
|
||||||
import ca.uhn.fhir.context.FhirContext;
|
import javax.annotation.Nonnull;
|
||||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
import javax.annotation.Nullable;
|
||||||
import ca.uhn.fhir.validation.IValidationContext;
|
import java.net.MalformedURLException;
|
||||||
import ca.uhn.fhir.validation.IValidatorModule;
|
import java.net.URL;
|
||||||
|
import java.util.ArrayList;
|
||||||
|
import java.util.Arrays;
|
||||||
|
import java.util.Collections;
|
||||||
|
import java.util.HashSet;
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.Map;
|
||||||
|
import java.util.Set;
|
||||||
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
public class FhirInstanceValidator extends BaseValidatorBridge implements IValidatorModule {
|
public class FhirInstanceValidator extends BaseValidatorBridge implements IValidatorModule {
|
||||||
|
|
||||||
|
@ -382,7 +395,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
}
|
}
|
||||||
|
|
||||||
public org.hl7.fhir.r5.model.StructureDefinition convert(StructureDefinition next) {
|
public org.hl7.fhir.r5.model.StructureDefinition convert(StructureDefinition next) {
|
||||||
org.hl7.fhir.r5.model.StructureDefinition structureDefinition = VersionConvertor_14_50.convertStructureDefinition(next);
|
org.hl7.fhir.r5.model.StructureDefinition structureDefinition = StructureDefinition14_50.convertStructureDefinition(next);
|
||||||
if (next.getDerivation() != org.hl7.fhir.dstu2016may.model.StructureDefinition.TypeDerivationRule.CONSTRAINT) {
|
if (next.getDerivation() != org.hl7.fhir.dstu2016may.model.StructureDefinition.TypeDerivationRule.CONSTRAINT) {
|
||||||
structureDefinition.setType(next.getName());
|
structureDefinition.setType(next.getName());
|
||||||
}
|
}
|
||||||
|
@ -408,7 +421,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent conceptDefinition = null;
|
org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent conceptDefinition = null;
|
||||||
if (theResult.asConceptDefinition() != null) {
|
if (theResult.asConceptDefinition() != null) {
|
||||||
try {
|
try {
|
||||||
conceptDefinition = VersionConvertor_14_50.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
conceptDefinition = CodeSystem14_50.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -428,7 +441,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
public org.hl7.fhir.r5.terminologies.ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
public org.hl7.fhir.r5.terminologies.ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
||||||
ValueSet convertedSource;
|
ValueSet convertedSource;
|
||||||
try {
|
try {
|
||||||
convertedSource = VersionConvertor_14_50.convertValueSet(source);
|
convertedSource = ValueSet14_50.convertValueSet(source);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -437,7 +450,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
||||||
if (expanded.getValueset() != null) {
|
if (expanded.getValueset() != null) {
|
||||||
try {
|
try {
|
||||||
convertedResult = VersionConvertor_14_50.convertValueSet(expanded.getValueset());
|
convertedResult = ValueSet14_50.convertValueSet(expanded.getValueset());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -458,7 +471,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
ValueSet.ConceptSetComponent convertedInc = null;
|
ValueSet.ConceptSetComponent convertedInc = null;
|
||||||
if (inc != null) {
|
if (inc != null) {
|
||||||
try {
|
try {
|
||||||
convertedInc = VersionConvertor_14_50.convertConceptSetComponent(inc);
|
convertedInc = ValueSet14_50.convertConceptSetComponent(inc);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -468,7 +481,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent valueSetExpansionComponent = null;
|
org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent valueSetExpansionComponent = null;
|
||||||
if (expansion != null) {
|
if (expansion != null) {
|
||||||
try {
|
try {
|
||||||
valueSetExpansionComponent = VersionConvertor_14_50.convertValueSetExpansionComponent(expansion);
|
valueSetExpansionComponent = ValueSet14_50.convertValueSetExpansionComponent(expansion);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -492,7 +505,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_14_50.convertCodeSystem(fetched);
|
return CodeSystem14_50.convertCodeSystem(fetched);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -572,6 +585,11 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||||
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getTypeNames() {
|
public List<String> getTypeNames() {
|
||||||
|
@ -665,7 +683,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -680,7 +698,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
ValueSet convertedVs = null;
|
ValueSet convertedVs = null;
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -700,7 +718,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
convertedCode = VersionConvertor_14_50.convertCoding(code);
|
convertedCode = VersionConvertor_14_50.convertCoding(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -720,7 +738,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
||||||
convertedCode = VersionConvertor_14_50.convertCodeableConcept(code);
|
convertedCode = VersionConvertor_14_50.convertCodeableConcept(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
|
|
@ -23,6 +23,7 @@ import org.hl7.fhir.dstu3.model.Coding;
|
||||||
import org.hl7.fhir.dstu3.model.ImplementationGuide;
|
import org.hl7.fhir.dstu3.model.ImplementationGuide;
|
||||||
import org.hl7.fhir.dstu3.model.Questionnaire;
|
import org.hl7.fhir.dstu3.model.Questionnaire;
|
||||||
import org.hl7.fhir.dstu3.model.Resource;
|
import org.hl7.fhir.dstu3.model.Resource;
|
||||||
|
import org.hl7.fhir.dstu3.model.SearchParameter;
|
||||||
import org.hl7.fhir.dstu3.model.StructureDefinition;
|
import org.hl7.fhir.dstu3.model.StructureDefinition;
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet;
|
import org.hl7.fhir.dstu3.model.ValueSet;
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
|
@ -56,6 +57,13 @@ import java.util.Map;
|
||||||
import java.util.Set;
|
import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
|
import static org.hl7.fhir.convertors.conv30_50.CodeSystem30_50.convertCodeSystem;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_50.CodeSystem30_50.convertConceptDefinitionComponent;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_50.StructureDefinition30_50.convertStructureDefinition;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_50.ValueSet30_50.convertConceptSetComponent;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_50.ValueSet30_50.convertValueSet;
|
||||||
|
import static org.hl7.fhir.convertors.conv30_50.ValueSet30_50.convertValueSetExpansionComponent;
|
||||||
|
|
||||||
@SuppressWarnings({"PackageAccessibility", "Duplicates"})
|
@SuppressWarnings({"PackageAccessibility", "Duplicates"})
|
||||||
public class FhirInstanceValidator extends BaseValidatorBridge implements IInstanceValidatorModule {
|
public class FhirInstanceValidator extends BaseValidatorBridge implements IInstanceValidatorModule {
|
||||||
|
|
||||||
|
@ -66,10 +74,12 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
private StructureDefinition myStructureDefintion;
|
private StructureDefinition myStructureDefintion;
|
||||||
private IValidationSupport myValidationSupport;
|
private IValidationSupport myValidationSupport;
|
||||||
private boolean noTerminologyChecks = false;
|
private boolean noTerminologyChecks = false;
|
||||||
|
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||||
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
||||||
|
|
||||||
private boolean errorForUnknownProfiles;
|
private boolean errorForUnknownProfiles;
|
||||||
private List<String> myExtensionDomains = Collections.emptyList();
|
private List<String> myExtensionDomains = Collections.emptyList();
|
||||||
|
private boolean assumeValidRestReferences;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -285,10 +295,28 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
||||||
.setExtensionDomains(getExtensionDomains())
|
.setExtensionDomains(getExtensionDomains())
|
||||||
.setNoTerminologyChecks(isNoTerminologyChecks())
|
.setNoTerminologyChecks(isNoTerminologyChecks())
|
||||||
|
.setValidatorResourceFetcher(getValidatorResourceFetcher())
|
||||||
|
.setAssumeValidRestReferences(isAssumeValidRestReferences())
|
||||||
.validate(wrappedWorkerContext, theValidationCtx);
|
.validate(wrappedWorkerContext, theValidationCtx);
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IResourceValidator.IValidatorResourceFetcher getValidatorResourceFetcher() {
|
||||||
|
return validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||||
|
this.validatorResourceFetcher = validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAssumeValidRestReferences() {
|
||||||
|
return assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||||
|
this.assumeValidRestReferences = assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class WorkerContextWrapper implements IWorkerContext {
|
private static class WorkerContextWrapper implements IWorkerContext {
|
||||||
private final HapiWorkerContext myWrap;
|
private final HapiWorkerContext myWrap;
|
||||||
|
@ -327,6 +355,9 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
case "ImplementationGuide":
|
case "ImplementationGuide":
|
||||||
fetched = myWrap.fetchResource(ImplementationGuide.class, key.getUri());
|
fetched = myWrap.fetchResource(ImplementationGuide.class, key.getUri());
|
||||||
break;
|
break;
|
||||||
|
case "SearchParameter":
|
||||||
|
fetched = myWrap.fetchResource(SearchParameter.class, key.getUri());
|
||||||
|
break;
|
||||||
default:
|
default:
|
||||||
throw new UnsupportedOperationException("Don't know how to fetch " + key.getResourceName());
|
throw new UnsupportedOperationException("Don't know how to fetch " + key.getResourceName());
|
||||||
}
|
}
|
||||||
|
@ -386,7 +417,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
retVal = new ArrayList<>();
|
retVal = new ArrayList<>();
|
||||||
for (StructureDefinition next : myWrap.allStructures()) {
|
for (StructureDefinition next : myWrap.allStructures()) {
|
||||||
try {
|
try {
|
||||||
retVal.add(VersionConvertor_30_50.convertStructureDefinition(next));
|
retVal.add(convertStructureDefinition(next));
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -416,7 +447,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent conceptDefinition = null;
|
org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent conceptDefinition = null;
|
||||||
if (theResult.asConceptDefinition() != null) {
|
if (theResult.asConceptDefinition() != null) {
|
||||||
try {
|
try {
|
||||||
conceptDefinition = VersionConvertor_30_50.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
conceptDefinition = convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -436,7 +467,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
public ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
public ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
||||||
ValueSet convertedSource;
|
ValueSet convertedSource;
|
||||||
try {
|
try {
|
||||||
convertedSource = VersionConvertor_30_50.convertValueSet(source);
|
convertedSource = convertValueSet(source);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -445,7 +476,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
||||||
if (expanded.getValueset() != null) {
|
if (expanded.getValueset() != null) {
|
||||||
try {
|
try {
|
||||||
convertedResult = VersionConvertor_30_50.convertValueSet(expanded.getValueset());
|
convertedResult = convertValueSet(expanded.getValueset());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -467,7 +498,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
ValueSet.ConceptSetComponent convertedInc = null;
|
ValueSet.ConceptSetComponent convertedInc = null;
|
||||||
if (inc != null) {
|
if (inc != null) {
|
||||||
try {
|
try {
|
||||||
convertedInc = VersionConvertor_30_50.convertConceptSetComponent(inc);
|
convertedInc = convertConceptSetComponent(inc);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -477,7 +508,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent valueSetExpansionComponent = null;
|
org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent valueSetExpansionComponent = null;
|
||||||
if (expansion != null) {
|
if (expansion != null) {
|
||||||
try {
|
try {
|
||||||
valueSetExpansionComponent = VersionConvertor_30_50.convertValueSetExpansionComponent(expansion);
|
valueSetExpansionComponent = convertValueSetExpansionComponent(expansion);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -495,7 +526,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return VersionConvertor_30_50.convertCodeSystem(fetched);
|
return convertCodeSystem(fetched);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -584,6 +615,11 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||||
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getTypeNames() {
|
public List<String> getTypeNames() {
|
||||||
return myWrap.getTypeNames();
|
return myWrap.getTypeNames();
|
||||||
|
@ -676,7 +712,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
convertedVs = convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -691,7 +727,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
ValueSet convertedVs = null;
|
ValueSet convertedVs = null;
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
convertedVs = convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -711,7 +747,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
convertedCode = VersionConvertor_30_50.convertCoding(code);
|
convertedCode = VersionConvertor_30_50.convertCoding(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
convertedVs = convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -731,7 +767,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
convertedCode = VersionConvertor_30_50.convertCodeableConcept(code);
|
convertedCode = VersionConvertor_30_50.convertCodeableConcept(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
convertedVs = convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
|
|
@ -27,12 +27,13 @@ import org.fhir.ucum.UcumService;
|
||||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor50;
|
import org.hl7.fhir.converter.NullVersionConverterAdvisor50;
|
||||||
import org.hl7.fhir.convertors.VersionConvertorAdvisor50;
|
import org.hl7.fhir.convertors.VersionConvertorAdvisor50;
|
||||||
import org.hl7.fhir.convertors.VersionConvertor_10_50;
|
import org.hl7.fhir.convertors.VersionConvertor_10_50;
|
||||||
|
import org.hl7.fhir.convertors.conv10_50.ValueSet10_50;
|
||||||
|
import org.hl7.fhir.convertors.conv14_50.CodeSystem14_50;
|
||||||
import org.hl7.fhir.dstu2.model.CodeableConcept;
|
import org.hl7.fhir.dstu2.model.CodeableConcept;
|
||||||
import org.hl7.fhir.dstu2.model.Coding;
|
import org.hl7.fhir.dstu2.model.Coding;
|
||||||
import org.hl7.fhir.dstu2.model.Questionnaire;
|
import org.hl7.fhir.dstu2.model.Questionnaire;
|
||||||
import org.hl7.fhir.dstu2.model.StructureDefinition;
|
import org.hl7.fhir.dstu2.model.StructureDefinition;
|
||||||
import org.hl7.fhir.dstu2.model.ValueSet;
|
import org.hl7.fhir.dstu2.model.ValueSet;
|
||||||
import org.hl7.fhir.exceptions.DefinitionException;
|
|
||||||
import org.hl7.fhir.exceptions.FHIRException;
|
import org.hl7.fhir.exceptions.FHIRException;
|
||||||
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
||||||
import org.hl7.fhir.r5.context.IWorkerContext;
|
import org.hl7.fhir.r5.context.IWorkerContext;
|
||||||
|
@ -60,6 +61,7 @@ import java.io.IOException;
|
||||||
import java.io.InputStream;
|
import java.io.InputStream;
|
||||||
import java.net.MalformedURLException;
|
import java.net.MalformedURLException;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
|
import java.nio.charset.StandardCharsets;
|
||||||
import java.util.ArrayList;
|
import java.util.ArrayList;
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
import java.util.HashSet;
|
import java.util.HashSet;
|
||||||
|
@ -69,6 +71,11 @@ import java.util.Set;
|
||||||
import java.util.concurrent.TimeUnit;
|
import java.util.concurrent.TimeUnit;
|
||||||
|
|
||||||
import static org.apache.commons.lang3.StringUtils.isBlank;
|
import static org.apache.commons.lang3.StringUtils.isBlank;
|
||||||
|
import static org.hl7.fhir.convertors.VersionConvertor_10_50.convertCoding;
|
||||||
|
import static org.hl7.fhir.convertors.conv10_50.StructureDefinition10_50.convertStructureDefinition;
|
||||||
|
import static org.hl7.fhir.convertors.conv10_50.ValueSet10_50.convertConceptSetComponent;
|
||||||
|
import static org.hl7.fhir.convertors.conv10_50.ValueSet10_50.convertValueSet;
|
||||||
|
import static org.hl7.fhir.convertors.conv10_50.ValueSet10_50.convertValueSetExpansionComponent;
|
||||||
|
|
||||||
public class FhirInstanceValidator extends BaseValidatorBridge implements IInstanceValidatorModule {
|
public class FhirInstanceValidator extends BaseValidatorBridge implements IInstanceValidatorModule {
|
||||||
|
|
||||||
|
@ -81,8 +88,19 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
private StructureDefinition myStructureDefintion;
|
private StructureDefinition myStructureDefintion;
|
||||||
private IValidationSupport myValidationSupport;
|
private IValidationSupport myValidationSupport;
|
||||||
private boolean noTerminologyChecks = false;
|
private boolean noTerminologyChecks = false;
|
||||||
|
|
||||||
|
public boolean isAssumeValidRestReferences() {
|
||||||
|
return assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||||
|
this.assumeValidRestReferences = assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
private boolean assumeValidRestReferences;
|
||||||
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
||||||
private VersionConvertorAdvisor50 myAdvisor = new NullVersionConverterAdvisor50();
|
private VersionConvertorAdvisor50 myAdvisor = new NullVersionConverterAdvisor50();
|
||||||
|
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -287,6 +305,8 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
v.setAnyExtensionsAllowed(isAnyExtensionsAllowed());
|
v.setAnyExtensionsAllowed(isAnyExtensionsAllowed());
|
||||||
v.setResourceIdRule(IdStatus.OPTIONAL);
|
v.setResourceIdRule(IdStatus.OPTIONAL);
|
||||||
v.setNoTerminologyChecks(isNoTerminologyChecks());
|
v.setNoTerminologyChecks(isNoTerminologyChecks());
|
||||||
|
v.setFetcher(getValidatorResourceFetcher());
|
||||||
|
v.setAssumeValidRestReferences(isAssumeValidRestReferences());
|
||||||
|
|
||||||
List<ValidationMessage> messages = new ArrayList<>();
|
List<ValidationMessage> messages = new ArrayList<>();
|
||||||
|
|
||||||
|
@ -388,6 +408,14 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
return messages;
|
return messages;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IResourceValidator.IValidatorResourceFetcher getValidatorResourceFetcher() {
|
||||||
|
return validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||||
|
this.validatorResourceFetcher = validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected List<ValidationMessage> validate(IValidationContext<?> theCtx) {
|
protected List<ValidationMessage> validate(IValidationContext<?> theCtx) {
|
||||||
return validate(theCtx.getFhirContext(), theCtx.getResourceAsString(), theCtx.getResourceAsStringEncoding());
|
return validate(theCtx.getFhirContext(), theCtx.getResourceAsString(), theCtx.getResourceAsStringEncoding());
|
||||||
|
@ -428,7 +456,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
profileText = IOUtils.toString(inputStream, "UTF-8");
|
profileText = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
|
||||||
} catch (IOException e1) {
|
} catch (IOException e1) {
|
||||||
if (theMessages != null) {
|
if (theMessages != null) {
|
||||||
theMessages.add(new ValidationMessage().setLevel(IssueSeverity.FATAL)
|
theMessages.add(new ValidationMessage().setLevel(IssueSeverity.FATAL)
|
||||||
|
@ -457,11 +485,17 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
case "StructureDefinition":
|
case "StructureDefinition":
|
||||||
fetched = myWrap.fetchResource(StructureDefinition.class, key.getUri());
|
fetched = myWrap.fetchResource(StructureDefinition.class, key.getUri());
|
||||||
break;
|
break;
|
||||||
|
case "CodeSystem":
|
||||||
case "ValueSet":
|
case "ValueSet":
|
||||||
fetched = myWrap.fetchResource(ValueSet.class, key.getUri());
|
fetched = myWrap.fetchResource(ValueSet.class, key.getUri());
|
||||||
break;
|
|
||||||
case "CodeSystem":
|
ValueSet fetchedVs = (ValueSet) fetched;
|
||||||
fetched = myWrap.fetchResource(ValueSet.class, key.getUri());
|
if (!fetchedVs.hasCompose()) {
|
||||||
|
if (fetchedVs.hasCodeSystem()) {
|
||||||
|
fetchedVs.getCompose().addInclude().setSystem(fetchedVs.getCodeSystem().getSystem());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
break;
|
break;
|
||||||
case "Questionnaire":
|
case "Questionnaire":
|
||||||
fetched = myWrap.fetchResource(Questionnaire.class, key.getUri());
|
fetched = myWrap.fetchResource(Questionnaire.class, key.getUri());
|
||||||
|
@ -477,7 +511,15 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
}
|
}
|
||||||
|
|
||||||
try {
|
try {
|
||||||
org.hl7.fhir.r5.model.Resource converted = new VersionConvertor_10_50(myAdvisor).convertResource(fetched);
|
org.hl7.fhir.r5.model.Resource converted;
|
||||||
|
if ("CodeSystem".equals(key.getUri())) {
|
||||||
|
NullVersionConverterAdvisor50 advisor = new NullVersionConverterAdvisor50();
|
||||||
|
converted = ValueSet10_50.convertValueSet((ValueSet) fetched, advisor);
|
||||||
|
converted = advisor.getCodeSystem((org.hl7.fhir.r5.model.ValueSet) converted);
|
||||||
|
} else {
|
||||||
|
converted = VersionConvertor_10_50.convertResource(fetched);
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
if (fetched instanceof StructureDefinition) {
|
if (fetched instanceof StructureDefinition) {
|
||||||
StructureDefinition fetchedSd = (StructureDefinition) fetched;
|
StructureDefinition fetchedSd = (StructureDefinition) fetched;
|
||||||
|
@ -501,7 +543,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
|
|
||||||
public WorkerContextWrapper(HapiWorkerContext theWorkerContext) {
|
public WorkerContextWrapper(HapiWorkerContext theWorkerContext) {
|
||||||
myWrap = theWorkerContext;
|
myWrap = theWorkerContext;
|
||||||
myConverter = new VersionConvertor_10_50(myAdvisor);
|
myConverter = new VersionConvertor_10_50();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -510,7 +552,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void generateSnapshot(org.hl7.fhir.r5.model.StructureDefinition p) throws DefinitionException, FHIRException {
|
public void generateSnapshot(org.hl7.fhir.r5.model.StructureDefinition p) throws FHIRException {
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -547,7 +589,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
retVal = new ArrayList<>();
|
retVal = new ArrayList<>();
|
||||||
for (StructureDefinition next : myWrap.allStructures()) {
|
for (StructureDefinition next : myWrap.allStructures()) {
|
||||||
try {
|
try {
|
||||||
org.hl7.fhir.r5.model.StructureDefinition converted = new VersionConvertor_10_50(myAdvisor).convertStructureDefinition(next);
|
org.hl7.fhir.r5.model.StructureDefinition converted = convertStructureDefinition(next);
|
||||||
if (converted != null) {
|
if (converted != null) {
|
||||||
retVal.add(converted);
|
retVal.add(converted);
|
||||||
}
|
}
|
||||||
|
@ -587,7 +629,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
public ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
public ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
||||||
ValueSet convertedSource = null;
|
ValueSet convertedSource = null;
|
||||||
try {
|
try {
|
||||||
convertedSource = new VersionConvertor_10_50(myAdvisor).convertValueSet(source);
|
convertedSource = convertValueSet(source);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -596,7 +638,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
||||||
if (expanded.getValueset() != null) {
|
if (expanded.getValueset() != null) {
|
||||||
try {
|
try {
|
||||||
convertedResult = new VersionConvertor_10_50(myAdvisor).convertValueSet(expanded.getValueset());
|
convertedResult = convertValueSet(expanded.getValueset());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -618,7 +660,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
ValueSet.ConceptSetComponent convertedInc = null;
|
ValueSet.ConceptSetComponent convertedInc = null;
|
||||||
if (inc != null) {
|
if (inc != null) {
|
||||||
try {
|
try {
|
||||||
convertedInc = new VersionConvertor_10_50(myAdvisor).convertConceptSetComponent(inc);
|
convertedInc = convertConceptSetComponent(inc);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -628,7 +670,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent valueSetExpansionComponent = null;
|
org.hl7.fhir.r5.model.ValueSet.ValueSetExpansionComponent valueSetExpansionComponent = null;
|
||||||
if (expansion != null) {
|
if (expansion != null) {
|
||||||
try {
|
try {
|
||||||
valueSetExpansionComponent = new VersionConvertor_10_50(myAdvisor).convertValueSetExpansionComponent(expansion);
|
valueSetExpansionComponent = convertValueSetExpansionComponent(expansion);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -733,6 +775,11 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/"+typeName);
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/"+typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||||
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void setUcumService(UcumService ucumService) {
|
public void setUcumService(UcumService ucumService) {
|
||||||
throw new UnsupportedOperationException();
|
throw new UnsupportedOperationException();
|
||||||
|
@ -825,7 +872,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = new VersionConvertor_10_50(myAdvisor).convertValueSet(vs);
|
convertedVs = convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -840,8 +887,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
ValueSet convertedVs = null;
|
ValueSet convertedVs = null;
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
VersionConvertorAdvisor50 advisor50 = new NullVersionConverterAdvisor50();
|
convertedVs = convertValueSet(vs);
|
||||||
convertedVs = new VersionConvertor_10_50(advisor50).convertValueSet(vs);
|
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -858,10 +904,10 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (code != null) {
|
if (code != null) {
|
||||||
convertedCode = new VersionConvertor_10_50(myAdvisor).convertCoding(code);
|
convertedCode = convertCoding(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = new VersionConvertor_10_50(myAdvisor).convertValueSet(vs);
|
convertedVs = convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -878,10 +924,10 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (code != null) {
|
if (code != null) {
|
||||||
convertedCode = new VersionConvertor_10_50(myAdvisor).convertCodeableConcept(code);
|
convertedCode = VersionConvertor_10_50.convertCodeableConcept(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = new VersionConvertor_10_50(myAdvisor).convertValueSet(vs);
|
convertedVs = convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
|
|
@ -199,7 +199,7 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
||||||
nextSystem = nextComposeConceptSet.getSystem();
|
nextSystem = nextComposeConceptSet.getSystem();
|
||||||
}
|
}
|
||||||
|
|
||||||
if (StringUtils.equals(nextSystem, nextComposeConceptSet.getSystem())) {
|
if (Constants.codeSystemNotNeeded(theSystem) || StringUtils.equals(nextSystem, nextComposeConceptSet.getSystem())) {
|
||||||
for (ConceptReferenceComponent nextComposeCode : nextComposeConceptSet.getConcept()) {
|
for (ConceptReferenceComponent nextComposeCode : nextComposeConceptSet.getConcept()) {
|
||||||
ConceptDefinitionComponent conceptDef = new ConceptDefinitionComponent();
|
ConceptDefinitionComponent conceptDef = new ConceptDefinitionComponent();
|
||||||
conceptDef.setCode(nextComposeCode.getCode());
|
conceptDef.setCode(nextComposeCode.getCode());
|
||||||
|
@ -211,7 +211,13 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
||||||
}
|
}
|
||||||
|
|
||||||
if (nextComposeConceptSet.getConcept().isEmpty()){
|
if (nextComposeConceptSet.getConcept().isEmpty()){
|
||||||
ValidationResult result = validateCode(nextSystem, theCode, null);
|
|
||||||
|
String validateSystem = nextSystem;
|
||||||
|
if (Constants.codeSystemNotNeeded(nextSystem)) {
|
||||||
|
validateSystem = nextComposeConceptSet.getSystem();
|
||||||
|
}
|
||||||
|
|
||||||
|
ValidationResult result = validateCode(validateSystem, theCode, null);
|
||||||
if (result.isOk()){
|
if (result.isOk()){
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
|
@ -59,7 +59,8 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
private IValidationSupport myValidationSupport;
|
private IValidationSupport myValidationSupport;
|
||||||
private boolean noTerminologyChecks = false;
|
private boolean noTerminologyChecks = false;
|
||||||
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
||||||
|
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||||
|
private boolean assumeValidRestReferences;
|
||||||
private boolean errorForUnknownProfiles;
|
private boolean errorForUnknownProfiles;
|
||||||
private List<String> extensionDomains = Collections.emptyList();
|
private List<String> extensionDomains = Collections.emptyList();
|
||||||
|
|
||||||
|
@ -225,13 +226,32 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
||||||
.setExtensionDomains(getExtensionDomains())
|
.setExtensionDomains(getExtensionDomains())
|
||||||
.setNoTerminologyChecks(isNoTerminologyChecks())
|
.setNoTerminologyChecks(isNoTerminologyChecks())
|
||||||
|
.setValidatorResourceFetcher(getValidatorResourceFetcher())
|
||||||
|
.setAssumeValidRestReferences(isAssumeValidRestReferences())
|
||||||
.validate(wrappedWorkerContext, theValidationCtx);
|
.validate(wrappedWorkerContext, theValidationCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IResourceValidator.IValidatorResourceFetcher getValidatorResourceFetcher() {
|
||||||
|
return validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||||
|
this.validatorResourceFetcher = validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private List<String> getExtensionDomains() {
|
private List<String> getExtensionDomains() {
|
||||||
return extensionDomains;
|
return extensionDomains;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean isAssumeValidRestReferences() {
|
||||||
|
return assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||||
|
this.assumeValidRestReferences = assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class WorkerContextWrapper implements IWorkerContext {
|
private static class WorkerContextWrapper implements IWorkerContext {
|
||||||
private final HapiWorkerContext myWrap;
|
private final HapiWorkerContext myWrap;
|
||||||
|
@ -317,7 +337,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
retVal = new ArrayList<>();
|
retVal = new ArrayList<>();
|
||||||
for (StructureDefinition next : myWrap.allStructures()) {
|
for (StructureDefinition next : myWrap.allStructures()) {
|
||||||
try {
|
try {
|
||||||
retVal.add(org.hl7.fhir.convertors.conv40_50.StructureDefinition.convertStructureDefinition(next));
|
retVal.add(org.hl7.fhir.convertors.conv40_50.StructureDefinition40_50.convertStructureDefinition(next));
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -347,7 +367,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent conceptDefinition = null;
|
org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent conceptDefinition = null;
|
||||||
if (theResult.asConceptDefinition() != null) {
|
if (theResult.asConceptDefinition() != null) {
|
||||||
try {
|
try {
|
||||||
conceptDefinition = org.hl7.fhir.convertors.conv40_50.CodeSystem.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
conceptDefinition = org.hl7.fhir.convertors.conv40_50.CodeSystem40_50.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -367,7 +387,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
public ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
public ValueSetExpander.ValueSetExpansionOutcome expandVS(org.hl7.fhir.r5.model.ValueSet source, boolean cacheOk, boolean heiarchical) {
|
||||||
ValueSet convertedSource;
|
ValueSet convertedSource;
|
||||||
try {
|
try {
|
||||||
convertedSource = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(source);
|
convertedSource = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(source);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -376,7 +396,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
||||||
if (expanded.getValueset() != null) {
|
if (expanded.getValueset() != null) {
|
||||||
try {
|
try {
|
||||||
convertedResult = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(expanded.getValueset());
|
convertedResult = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(expanded.getValueset());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -398,7 +418,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
ValueSet.ConceptSetComponent convertedInc = null;
|
ValueSet.ConceptSetComponent convertedInc = null;
|
||||||
if (inc != null) {
|
if (inc != null) {
|
||||||
try {
|
try {
|
||||||
convertedInc = org.hl7.fhir.convertors.conv40_50.ValueSet.convertConceptSetComponent(inc);
|
convertedInc = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertConceptSetComponent(inc);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -408,7 +428,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
org.hl7.fhir.r5.model.ValueSet valueSetExpansion = null;
|
org.hl7.fhir.r5.model.ValueSet valueSetExpansion = null;
|
||||||
if (expansion != null) {
|
if (expansion != null) {
|
||||||
try {
|
try {
|
||||||
valueSetExpansion = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(expansion.getValueset());
|
valueSetExpansion = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(expansion.getValueset());
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -424,7 +444,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
try {
|
try {
|
||||||
return org.hl7.fhir.convertors.conv40_50.CodeSystem.convertCodeSystem(fetched);
|
return org.hl7.fhir.convertors.conv40_50.CodeSystem40_50.convertCodeSystem(fetched);
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
}
|
}
|
||||||
|
@ -509,6 +529,11 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||||
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getTypeNames() {
|
public List<String> getTypeNames() {
|
||||||
return myWrap.getTypeNames();
|
return myWrap.getTypeNames();
|
||||||
|
@ -605,7 +630,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
|
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(vs);
|
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -620,7 +645,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
ValueSet convertedVs = null;
|
ValueSet convertedVs = null;
|
||||||
try {
|
try {
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(vs);
|
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -640,7 +665,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
convertedCode = VersionConvertor_40_50.convertCoding(code);
|
convertedCode = VersionConvertor_40_50.convertCoding(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(vs);
|
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
@ -660,7 +685,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
||||||
convertedCode = VersionConvertor_40_50.convertCodeableConcept(code);
|
convertedCode = VersionConvertor_40_50.convertCodeableConcept(code);
|
||||||
}
|
}
|
||||||
if (vs != null) {
|
if (vs != null) {
|
||||||
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(vs);
|
convertedVs = org.hl7.fhir.convertors.conv40_50.ValueSet40_50.convertValueSet(vs);
|
||||||
}
|
}
|
||||||
} catch (FHIRException e) {
|
} catch (FHIRException e) {
|
||||||
throw new InternalErrorException(e);
|
throw new InternalErrorException(e);
|
||||||
|
|
|
@ -54,7 +54,9 @@ public class FhirInstanceValidator extends org.hl7.fhir.r5.hapi.validation.BaseV
|
||||||
private boolean noTerminologyChecks = false;
|
private boolean noTerminologyChecks = false;
|
||||||
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
||||||
private boolean errorForUnknownProfiles;
|
private boolean errorForUnknownProfiles;
|
||||||
|
private boolean assumeValidRestReferences;
|
||||||
private List<String> myExtensionDomains = Collections.emptyList();
|
private List<String> myExtensionDomains = Collections.emptyList();
|
||||||
|
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Constructor
|
* Constructor
|
||||||
|
@ -220,9 +222,27 @@ public class FhirInstanceValidator extends org.hl7.fhir.r5.hapi.validation.BaseV
|
||||||
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
||||||
.setExtensionDomains(getExtensionDomains())
|
.setExtensionDomains(getExtensionDomains())
|
||||||
.setNoTerminologyChecks(isNoTerminologyChecks())
|
.setNoTerminologyChecks(isNoTerminologyChecks())
|
||||||
|
.setValidatorResourceFetcher(getValidatorResourceFetcher())
|
||||||
|
.setAssumeValidRestReferences(isAssumeValidRestReferences())
|
||||||
.validate(wrappedWorkerContext, theValidationCtx);
|
.validate(wrappedWorkerContext, theValidationCtx);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public IResourceValidator.IValidatorResourceFetcher getValidatorResourceFetcher() {
|
||||||
|
return validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||||
|
this.validatorResourceFetcher = validatorResourceFetcher;
|
||||||
|
}
|
||||||
|
|
||||||
|
public boolean isAssumeValidRestReferences() {
|
||||||
|
return assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
public void setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||||
|
this.assumeValidRestReferences = assumeValidRestReferences;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
private static class WorkerContextWrapper implements IWorkerContext {
|
private static class WorkerContextWrapper implements IWorkerContext {
|
||||||
private final HapiWorkerContext myWrap;
|
private final HapiWorkerContext myWrap;
|
||||||
|
@ -514,6 +534,11 @@ public class FhirInstanceValidator extends org.hl7.fhir.r5.hapi.validation.BaseV
|
||||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, "http://hl7.org/fhir/StructureDefinition/" + typeName);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public StructureDefinition fetchRawProfile(String url) {
|
||||||
|
return myWrap.fetchRawProfile(url);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public List<String> getTypeNames() {
|
public List<String> getTypeNames() {
|
||||||
return myWrap.getTypeNames();
|
return myWrap.getTypeNames();
|
||||||
|
@ -706,7 +731,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r5.hapi.validation.BaseV
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public Base resolveReference(Object appContext, String url) throws FHIRException {
|
public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
|
||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -24,10 +24,12 @@ import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent;
|
||||||
import org.hl7.fhir.dstu3.model.ValueSet.ValueSetExpansionComponent;
|
import org.hl7.fhir.dstu3.model.ValueSet.ValueSetExpansionComponent;
|
||||||
import org.hl7.fhir.dstu3.utils.FHIRPathEngine;
|
import org.hl7.fhir.dstu3.utils.FHIRPathEngine;
|
||||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||||
|
import org.hl7.fhir.r5.utils.IResourceValidator;
|
||||||
import org.junit.*;
|
import org.junit.*;
|
||||||
import org.junit.rules.TestRule;
|
import org.junit.rules.TestRule;
|
||||||
import org.junit.rules.TestWatcher;
|
import org.junit.rules.TestWatcher;
|
||||||
import org.junit.runner.Description;
|
import org.junit.runner.Description;
|
||||||
|
import org.mockito.internal.matchers.Any;
|
||||||
import org.mockito.invocation.InvocationOnMock;
|
import org.mockito.invocation.InvocationOnMock;
|
||||||
import org.mockito.stubbing.Answer;
|
import org.mockito.stubbing.Answer;
|
||||||
|
|
||||||
|
@ -41,8 +43,7 @@ import static org.hamcrest.Matchers.*;
|
||||||
import static org.junit.Assert.*;
|
import static org.junit.Assert.*;
|
||||||
import static org.mockito.ArgumentMatchers.nullable;
|
import static org.mockito.ArgumentMatchers.nullable;
|
||||||
import static org.mockito.Matchers.any;
|
import static org.mockito.Matchers.any;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.*;
|
||||||
import static org.mockito.Mockito.when;
|
|
||||||
|
|
||||||
public class FhirInstanceValidatorDstu3Test {
|
public class FhirInstanceValidatorDstu3Test {
|
||||||
|
|
||||||
|
@ -975,7 +976,7 @@ public class FhirInstanceValidatorDstu3Test {
|
||||||
myInstanceVal.setValidationSupport(myMockSupport);
|
myInstanceVal.setValidationSupport(myMockSupport);
|
||||||
ValidationResult output = myVal.validateWithResult(input);
|
ValidationResult output = myVal.validateWithResult(input);
|
||||||
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
||||||
assertThat(errors.toString(), containsString("StructureDefinition reference \"http://foo/structuredefinition/myprofile\" could not be resolved"));
|
assertThat(errors.toString(), containsString("Profile reference 'http://foo/structuredefinition/myprofile' could not be resolved, so has not been checked"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -1145,6 +1146,20 @@ public class FhirInstanceValidatorDstu3Test {
|
||||||
ourLog.info(output.getMessages().get(0).getMessage());
|
ourLog.info(output.getMessages().get(0).getMessage());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvocationOfValidatorFetcher() throws IOException {
|
||||||
|
String input = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/dstu3-rick-test.json"), Charsets.UTF_8);
|
||||||
|
|
||||||
|
IResourceValidator.IValidatorResourceFetcher resourceFetcher = mock(IResourceValidator.IValidatorResourceFetcher.class);
|
||||||
|
when(resourceFetcher.validationPolicy(any(),anyString(), anyString())).thenReturn(IResourceValidator.ReferenceValidationPolicy.CHECK_TYPE_IF_EXISTS);
|
||||||
|
myInstanceVal.setValidatorResourceFetcher(resourceFetcher);
|
||||||
|
myVal.validateWithResult(input);
|
||||||
|
|
||||||
|
verify(resourceFetcher, times(3)).resolveURL(any(), anyString(), anyString());
|
||||||
|
verify(resourceFetcher, times(4)).validationPolicy(any(), anyString(), anyString());
|
||||||
|
verify(resourceFetcher, times(4)).fetch(any(), anyString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testValueWithWhitespace() throws IOException {
|
public void testValueWithWhitespace() throws IOException {
|
||||||
String input = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/dstu3-rick-test.json"), Charsets.UTF_8);
|
String input = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/dstu3-rick-test.json"), Charsets.UTF_8);
|
||||||
|
|
|
@ -704,7 +704,7 @@ public class QuestionnaireResponseValidatorDstu3Test {
|
||||||
coding.setCode("1293");
|
coding.setCode("1293");
|
||||||
QuestionnaireResponseItemAnswerComponent answer = qrItem.addAnswer();
|
QuestionnaireResponseItemAnswerComponent answer = qrItem.addAnswer();
|
||||||
answer.setValue(coding);
|
answer.setValue(coding);
|
||||||
coding.addExtension("http://hl7.org/fhir/StructureDefinition/questionnaire-hidden", new BooleanType(true));
|
coding.addExtension("http://hl7.org/fhir/StructureDefinition/iso21090-CO-value", new DecimalType("1.0"));
|
||||||
qr.addItem().setLinkId("2B").addAnswer().setValue(new BooleanType(true));
|
qr.addItem().setLinkId("2B").addAnswer().setValue(new BooleanType(true));
|
||||||
|
|
||||||
String reference = qr.getQuestionnaire().getReference();
|
String reference = qr.getQuestionnaire().getReference();
|
||||||
|
|
|
@ -20,6 +20,7 @@ import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
import java.util.Collections;
|
import java.util.Collections;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.hamcrest.CoreMatchers.containsString;
|
import static org.hamcrest.CoreMatchers.containsString;
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
|
@ -71,7 +72,7 @@ public class QuestionnaireValidatorDstu3Test {
|
||||||
ValidationResult errors = myVal.validateWithResult(q);
|
ValidationResult errors = myVal.validateWithResult(q);
|
||||||
ourLog.info(errors.toString());
|
ourLog.info(errors.toString());
|
||||||
assertThat(errors.isSuccessful(), Matchers.is(true));
|
assertThat(errors.isSuccessful(), Matchers.is(true));
|
||||||
assertThat(errors.getMessages(), Matchers.empty());
|
assertThat(errors.getMessages().stream().filter(t->t.getSeverity().ordinal() > ResultSeverityEnum.INFORMATION.ordinal()).collect(Collectors.toList()), Matchers.empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -66,9 +66,10 @@ import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.nullable;
|
import static org.mockito.ArgumentMatchers.*;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.*;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
|
|
||||||
public class FhirInstanceValidatorR4Test extends BaseTest {
|
public class FhirInstanceValidatorR4Test extends BaseTest {
|
||||||
|
|
||||||
|
@ -397,7 +398,11 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
||||||
|
|
||||||
ValidationResult output = myVal.validateWithResult(encoded);
|
ValidationResult output = myVal.validateWithResult(encoded);
|
||||||
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
||||||
assertEquals(46, errors.size());
|
errors = errors
|
||||||
|
.stream()
|
||||||
|
.filter(t->t.getMessage().contains("Bundle entry missing fullUrl"))
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
assertEquals(5, errors.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -633,8 +638,8 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
||||||
CachingValidationSupport support = new CachingValidationSupport(new ValidationSupportChain(defaultSupport, valSupport));
|
CachingValidationSupport support = new CachingValidationSupport(new ValidationSupportChain(defaultSupport, valSupport));
|
||||||
|
|
||||||
// Prepopulate SDs
|
// Prepopulate SDs
|
||||||
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/dstu3/myconsent-profile.xml"));
|
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/r4/myconsent-profile.xml"));
|
||||||
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/dstu3/myconsent-ext.xml"));
|
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/r4/myconsent-ext.xml"));
|
||||||
|
|
||||||
FhirValidator val = ourCtx.newValidator();
|
FhirValidator val = ourCtx.newValidator();
|
||||||
val.registerValidatorModule(new FhirInstanceValidator(support));
|
val.registerValidatorModule(new FhirInstanceValidator(support));
|
||||||
|
@ -652,6 +657,8 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
||||||
.setSystem("http://terminology.hl7.org/CodeSystem/consentcategorycodes")
|
.setSystem("http://terminology.hl7.org/CodeSystem/consentcategorycodes")
|
||||||
.setCode("acd");
|
.setCode("acd");
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
// Should pass
|
// Should pass
|
||||||
ValidationResult output = val.validateWithResult(input);
|
ValidationResult output = val.validateWithResult(input);
|
||||||
List<SingleValidationMessage> all = logResultsAndReturnErrorOnes(output);
|
List<SingleValidationMessage> all = logResultsAndReturnErrorOnes(output);
|
||||||
|
@ -1031,7 +1038,7 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
||||||
myInstanceVal.setValidationSupport(myMockSupport);
|
myInstanceVal.setValidationSupport(myMockSupport);
|
||||||
ValidationResult output = myVal.validateWithResult(input);
|
ValidationResult output = myVal.validateWithResult(input);
|
||||||
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
||||||
assertThat(errors.toString(), containsString("StructureDefinition reference \"http://foo/structuredefinition/myprofile\" could not be resolved"));
|
assertThat(errors.toString(), containsString("Profile reference 'http://foo/structuredefinition/myprofile' could not be resolved, so has not been checked"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
@ -1250,6 +1257,21 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
||||||
assertEquals(0, all.size());
|
assertEquals(0, all.size());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvocationOfValidatorFetcher() throws IOException {
|
||||||
|
|
||||||
|
String encoded = loadResource("/r4/r4-caredove-bundle.json");
|
||||||
|
|
||||||
|
IResourceValidator.IValidatorResourceFetcher resourceFetcher = mock(IResourceValidator.IValidatorResourceFetcher.class);
|
||||||
|
when(resourceFetcher.validationPolicy(any(),anyString(), anyString())).thenReturn(IResourceValidator.ReferenceValidationPolicy.CHECK_TYPE_IF_EXISTS);
|
||||||
|
myInstanceVal.setValidatorResourceFetcher(resourceFetcher);
|
||||||
|
myVal.validateWithResult(encoded);
|
||||||
|
|
||||||
|
verify(resourceFetcher, times(14)).resolveURL(any(), anyString(), anyString());
|
||||||
|
verify(resourceFetcher, times(12)).validationPolicy(any(), anyString(), anyString());
|
||||||
|
verify(resourceFetcher, times(12)).fetch(any(), anyString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
@Ignore
|
@Ignore
|
||||||
public void testValidateStructureDefinition() throws IOException {
|
public void testValidateStructureDefinition() throws IOException {
|
||||||
|
|
|
@ -23,6 +23,8 @@ import org.junit.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
import static org.junit.Assert.assertEquals;
|
import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.Mockito.mock;
|
||||||
|
@ -72,7 +74,7 @@ public class QuestionnaireValidatorR4Test {
|
||||||
ValidationResult errors = myVal.validateWithResult(q);
|
ValidationResult errors = myVal.validateWithResult(q);
|
||||||
ourLog.info(errors.toString());
|
ourLog.info(errors.toString());
|
||||||
assertThat(errors.isSuccessful(), Matchers.is(true));
|
assertThat(errors.isSuccessful(), Matchers.is(true));
|
||||||
assertThat(errors.getMessages(), Matchers.empty());
|
assertThat(errors.getMessages().stream().filter(t->t.getSeverity().ordinal() > ResultSeverityEnum.INFORMATION.ordinal()).collect(Collectors.toList()), Matchers.empty());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -53,9 +53,10 @@ import static org.junit.Assert.assertEquals;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
import static org.junit.Assert.assertThat;
|
import static org.junit.Assert.assertThat;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
import static org.mockito.ArgumentMatchers.nullable;
|
import static org.mockito.ArgumentMatchers.*;
|
||||||
import static org.mockito.Mockito.mock;
|
import static org.mockito.ArgumentMatchers.anyString;
|
||||||
import static org.mockito.Mockito.when;
|
import static org.mockito.Mockito.*;
|
||||||
|
import static org.mockito.Mockito.times;
|
||||||
|
|
||||||
public class FhirInstanceValidatorR5Test {
|
public class FhirInstanceValidatorR5Test {
|
||||||
|
|
||||||
|
@ -415,6 +416,23 @@ public class FhirInstanceValidatorR5Test {
|
||||||
assertThat(nonInfo, empty());
|
assertThat(nonInfo, empty());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testInvocationOfValidatorFetcher() throws IOException {
|
||||||
|
|
||||||
|
String input = IOUtils.toString(FhirInstanceValidator.class.getResourceAsStream("/vitals.json"), Charsets.UTF_8);
|
||||||
|
|
||||||
|
IResourceValidator.IValidatorResourceFetcher resourceFetcher = mock(IResourceValidator.IValidatorResourceFetcher.class);
|
||||||
|
when(resourceFetcher.validationPolicy(any(),anyString(), anyString())).thenReturn(IResourceValidator.ReferenceValidationPolicy.CHECK_TYPE_IF_EXISTS);
|
||||||
|
myInstanceVal.setValidatorResourceFetcher(resourceFetcher);
|
||||||
|
myVal.validateWithResult(input);
|
||||||
|
|
||||||
|
verify(resourceFetcher, times(12)).resolveURL(any(), anyString(), anyString());
|
||||||
|
verify(resourceFetcher, times(3)).validationPolicy(any(), anyString(), anyString());
|
||||||
|
verify(resourceFetcher, times(3)).fetch(any(), anyString());
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testIsNoTerminologyChecks() {
|
public void testIsNoTerminologyChecks() {
|
||||||
assertFalse(myInstanceVal.isNoTerminologyChecks());
|
assertFalse(myInstanceVal.isNoTerminologyChecks());
|
||||||
|
@ -774,7 +792,7 @@ public class FhirInstanceValidatorR5Test {
|
||||||
myInstanceVal.setValidationSupport(myMockSupport);
|
myInstanceVal.setValidationSupport(myMockSupport);
|
||||||
ValidationResult output = myVal.validateWithResult(input);
|
ValidationResult output = myVal.validateWithResult(input);
|
||||||
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
List<SingleValidationMessage> errors = logResultsAndReturnNonInformationalOnes(output);
|
||||||
assertThat(errors.toString(), containsString("StructureDefinition reference \"http://foo/structuredefinition/myprofile\" could not be resolved"));
|
assertThat(errors.toString(), containsString("Profile reference 'http://foo/structuredefinition/myprofile' could not be resolved, so has not been checked"));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
|
|
|
@ -0,0 +1,34 @@
|
||||||
|
<StructureDefinition xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="PruebaExtension" />
|
||||||
|
<meta>
|
||||||
|
<lastUpdated value="2017-12-19T16:53:11.296+01:00" />
|
||||||
|
</meta>
|
||||||
|
<url value="http://hl7.org/fhir/StructureDefinition/PruebaExtension" />
|
||||||
|
<name value="PruebaExtension" />
|
||||||
|
<status value="draft" />
|
||||||
|
<date value="2017-12-19T16:51:07.089+01:00" />
|
||||||
|
<fhirVersion value="3.0.1" />
|
||||||
|
<kind value="complex-type" />
|
||||||
|
<abstract value="false" />
|
||||||
|
<context>
|
||||||
|
<type value="fhirpath" />
|
||||||
|
<expression value="Consent" />
|
||||||
|
</context>
|
||||||
|
<type value="Extension" />
|
||||||
|
<baseDefinition value="http://hl7.org/fhir/StructureDefinition/Extension" />
|
||||||
|
<derivation value="constraint" />
|
||||||
|
<differential>
|
||||||
|
<element id="Extension.url">
|
||||||
|
<path value="Extension.url" />
|
||||||
|
<fixedUri value="http://hl7.org/fhir/StructureDefinition/PruebaExtension" />
|
||||||
|
</element>
|
||||||
|
<element id="Extension.value[x]:valueString">
|
||||||
|
<path value="Extension.valueString" />
|
||||||
|
<sliceName value="valueString" />
|
||||||
|
<min value="1" />
|
||||||
|
<type>
|
||||||
|
<code value="string" />
|
||||||
|
</type>
|
||||||
|
</element>
|
||||||
|
</differential>
|
||||||
|
</StructureDefinition>
|
|
@ -0,0 +1,42 @@
|
||||||
|
<StructureDefinition xmlns="http://hl7.org/fhir">
|
||||||
|
<id value="Consent" />
|
||||||
|
<meta>
|
||||||
|
<lastUpdated value="2017-12-21T17:22:27.087+01:00" />
|
||||||
|
</meta>
|
||||||
|
<url value="http://hl7.org/fhir/StructureDefinition/MyConsent" />
|
||||||
|
<name value="Consent" />
|
||||||
|
<status value="draft" />
|
||||||
|
<date value="2017-12-19T09:08:41.006+01:00" />
|
||||||
|
<description value="prueba
" />
|
||||||
|
<fhirVersion value="3.0.1" />
|
||||||
|
<kind value="resource" />
|
||||||
|
<abstract value="false" />
|
||||||
|
<type value="Consent" />
|
||||||
|
<baseDefinition value="http://hl7.org/fhir/StructureDefinition/Consent" />
|
||||||
|
<derivation value="constraint" />
|
||||||
|
<differential>
|
||||||
|
<element id="Consent.extension">
|
||||||
|
<path value="Consent.extension" />
|
||||||
|
<slicing>
|
||||||
|
<discriminator>
|
||||||
|
<type value="value" />
|
||||||
|
<path value="url" />
|
||||||
|
</discriminator>
|
||||||
|
<rules value="open" />
|
||||||
|
</slicing>
|
||||||
|
</element>
|
||||||
|
<element id="Consent.extension:pruebaExtension">
|
||||||
|
<path value="Consent.extension" />
|
||||||
|
<sliceName value="pruebaExtension" />
|
||||||
|
<min value="1" />
|
||||||
|
<type>
|
||||||
|
<code value="Extension" />
|
||||||
|
<profile value="http://hl7.org/fhir/StructureDefinition/PruebaExtension" />
|
||||||
|
</type>
|
||||||
|
</element>
|
||||||
|
<element id="Consent.identifier">
|
||||||
|
<path value="Consent.identifier" />
|
||||||
|
<min value="1" />
|
||||||
|
</element>
|
||||||
|
</differential>
|
||||||
|
</StructureDefinition>
|
|
@ -0,0 +1,97 @@
|
||||||
|
{
|
||||||
|
"resourceType": "Observation",
|
||||||
|
"id": "satO2",
|
||||||
|
"meta": {
|
||||||
|
"profile": [
|
||||||
|
"http://hl7.org/fhir/StructureDefinition/vitalsigns"
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"text": {
|
||||||
|
"status": "generated",
|
||||||
|
"div": "<div xmlns=\"http://www.w3.org/1999/xhtml\"><p><b>Generated Narrative with Details</b></p><p><b>id</b>: satO2</p><p><b>meta</b>: </p><p><b>identifier</b>: o1223435-10</p><p><b>partOf</b>: <a>Procedure/ob</a></p><p><b>status</b>: final</p><p><b>category</b>: Vital Signs <span>(Details : {http://terminology.hl7.org/CodeSystem/observation-category code 'vital-signs' = 'Vital Signs', given as 'Vital Signs'})</span></p><p><b>code</b>: Oxygen saturation in Arterial blood <span>(Details : {LOINC code '2708-6' = 'Oxygen saturation in Arterial blood', given as 'Oxygen saturation in Arterial blood'}; {LOINC code '59408-5' = 'Oxygen saturation in Arterial blood by Pulse oximetry', given as 'Oxygen saturation in Arterial blood by Pulse oximetry'}; {urn:iso:std:iso:11073:10101 code '150456' = '150456', given as 'MDC_PULS_OXIM_SAT_O2'})</span></p><p><b>subject</b>: <a>Patient/example</a></p><p><b>effective</b>: Dec 5, 2014 9:30:10 AM</p><p><b>value</b>: 95 %<span> (Details: UCUM code % = '%')</span></p><p><b>interpretation</b>: Normal (applies to non-numeric results) <span>(Details : {http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation code 'N' = 'Normal', given as 'Normal'})</span></p><p><b>device</b>: <a>DeviceMetric/example</a></p><h3>ReferenceRanges</h3><table><tr><td>-</td><td><b>Low</b></td><td><b>High</b></td></tr><tr><td>*</td><td>90 %<span> (Details: UCUM code % = '%')</span></td><td>99 %<span> (Details: UCUM code % = '%')</span></td></tr></table></div>"
|
||||||
|
},
|
||||||
|
"identifier": [
|
||||||
|
{
|
||||||
|
"system": "http://goodcare.org/observation/id",
|
||||||
|
"value": "o1223435-10"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"partOf": [
|
||||||
|
{
|
||||||
|
"reference": "Procedure/ob"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"status": "final",
|
||||||
|
"category": [
|
||||||
|
{
|
||||||
|
"coding": [
|
||||||
|
{
|
||||||
|
"system": "http://terminology.hl7.org/CodeSystem/observation-category",
|
||||||
|
"code": "vital-signs",
|
||||||
|
"display": "Vital Signs"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"text": "Vital Signs"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"code": {
|
||||||
|
"coding": [
|
||||||
|
{
|
||||||
|
"system": "http://loinc.org",
|
||||||
|
"code": "2708-6",
|
||||||
|
"display": "Oxygen saturation in Arterial blood"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"system": "http://loinc.org",
|
||||||
|
"code": "59408-5",
|
||||||
|
"display": "Oxygen saturation in Arterial blood by Pulse oximetry"
|
||||||
|
},
|
||||||
|
{
|
||||||
|
"system": "urn:iso:std:iso:11073:10101",
|
||||||
|
"code": "150456",
|
||||||
|
"display": "MDC_PULS_OXIM_SAT_O2"
|
||||||
|
}
|
||||||
|
]
|
||||||
|
},
|
||||||
|
"subject": {
|
||||||
|
"reference": "Patient/example"
|
||||||
|
},
|
||||||
|
"effectiveDateTime": "2014-12-05T09:30:10+01:00",
|
||||||
|
"valueQuantity": {
|
||||||
|
"value": 95,
|
||||||
|
"unit": "%",
|
||||||
|
"system": "http://unitsofmeasure.org",
|
||||||
|
"code": "%"
|
||||||
|
},
|
||||||
|
"interpretation": [
|
||||||
|
{
|
||||||
|
"coding": [
|
||||||
|
{
|
||||||
|
"system": "http://terminology.hl7.org/CodeSystem/v3-ObservationInterpretation",
|
||||||
|
"code": "N",
|
||||||
|
"display": "Normal"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"text": "Normal (applies to non-numeric results)"
|
||||||
|
}
|
||||||
|
],
|
||||||
|
"device": {
|
||||||
|
"reference": "DeviceMetric/example"
|
||||||
|
},
|
||||||
|
"referenceRange": [
|
||||||
|
{
|
||||||
|
"low": {
|
||||||
|
"value": 90,
|
||||||
|
"unit": "%",
|
||||||
|
"system": "http://unitsofmeasure.org",
|
||||||
|
"code": "%"
|
||||||
|
},
|
||||||
|
"high": {
|
||||||
|
"value": 99,
|
||||||
|
"unit": "%",
|
||||||
|
"system": "http://unitsofmeasure.org",
|
||||||
|
"code": "%"
|
||||||
|
}
|
||||||
|
}
|
||||||
|
]
|
||||||
|
}
|
2
pom.xml
2
pom.xml
|
@ -606,7 +606,7 @@
|
||||||
|
|
||||||
<properties>
|
<properties>
|
||||||
|
|
||||||
<fhir_core_version>4.2.0</fhir_core_version>
|
<fhir_core_version>4.2.1-SNAPSHOT</fhir_core_version>
|
||||||
<ucum_version>1.0.2</ucum_version>
|
<ucum_version>1.0.2</ucum_version>
|
||||||
|
|
||||||
<surefire_jvm_args>-Dfile.encoding=UTF-8 -Xmx2048m</surefire_jvm_args>
|
<surefire_jvm_args>-Dfile.encoding=UTF-8 -Xmx2048m</surefire_jvm_args>
|
||||||
|
|
Loading…
Reference in New Issue