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;
|
||||
|
||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor30;
|
||||
import org.hl7.fhir.convertors.*;
|
||||
import org.hl7.fhir.convertors.conv10_30.Observation10_30;
|
||||
import org.hl7.fhir.convertors.conv14_30.Questionnaire14_30;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
|
||||
public class ConverterExamples {
|
||||
|
@ -9,16 +9,12 @@ public class ConverterExamples {
|
|||
@SuppressWarnings("unused")
|
||||
public void c1020() throws FHIRException {
|
||||
//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
|
||||
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"));
|
||||
|
||||
// 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();
|
||||
//END SNIPPET: 1020
|
||||
}
|
||||
|
@ -31,7 +27,7 @@ public class ConverterExamples {
|
|||
input.setTitle("My title");
|
||||
|
||||
// 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();
|
||||
//END SNIPPET: 1420
|
||||
}
|
||||
|
|
|
@ -58,7 +58,8 @@ public enum VersionEnum {
|
|||
V4_0_0,
|
||||
V4_0_3,
|
||||
V4_1_0,
|
||||
V4_2_0;
|
||||
V4_2_0,
|
||||
V4_3_0;
|
||||
|
||||
public static VersionEnum latestVersion() {
|
||||
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.CSVPrinter;
|
||||
import org.apache.commons.csv.QuoteMode;
|
||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.r4.model.Bundle;
|
||||
import org.hl7.fhir.r4.model.ConceptMap;
|
||||
|
@ -43,6 +42,7 @@ import java.util.List;
|
|||
import java.util.concurrent.ExecutionException;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.defaultString;
|
||||
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||
|
||||
public class ExportConceptMapToCsvCommand extends AbstractImportExportCsvConceptMapCommand {
|
||||
// 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 {
|
||||
try {
|
||||
convertConceptMapToCsv(VersionConvertor_30_40.convertConceptMap(theConceptMap));
|
||||
convertConceptMapToCsv(convertConceptMap(theConceptMap));
|
||||
} catch (FHIRException 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.CSVParser;
|
||||
import org.apache.commons.csv.CSVRecord;
|
||||
import org.hl7.fhir.convertors.VersionConvertor_30_40;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.r4.model.ConceptMap;
|
||||
import org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent;
|
||||
|
@ -45,7 +44,10 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
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 {
|
||||
// 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 {
|
||||
try {
|
||||
return VersionConvertor_30_40.convertConceptMap(convertCsvToConceptMapR4());
|
||||
return convertConceptMap(convertCsvToConceptMapR4());
|
||||
} catch (FHIRException fe) {
|
||||
throw new ExecutionException(fe);
|
||||
}
|
||||
|
@ -174,7 +176,7 @@ public class ImportCsvToConceptMapCommand extends AbstractImportExportCsvConcept
|
|||
.withFirstRecordAsHeader()
|
||||
.withIgnoreHeaderCase()
|
||||
.withIgnoreEmptyLines()
|
||||
.withTrim());
|
||||
.withTrim())
|
||||
) {
|
||||
retVal.setUrl(conceptMapUrl);
|
||||
|
||||
|
|
|
@ -31,7 +31,11 @@ import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
|||
import ca.uhn.fhir.rest.server.interceptor.InterceptorAdapter;
|
||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor30;
|
||||
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.exceptions.FHIRException;
|
||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||
|
@ -40,7 +44,9 @@ import javax.servlet.http.HttpServletRequest;
|
|||
import javax.servlet.http.HttpServletResponse;
|
||||
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
|
||||
|
@ -54,16 +60,12 @@ import static org.apache.commons.lang3.StringUtils.*;
|
|||
public class VersionedApiConverterInterceptor extends InterceptorAdapter {
|
||||
private final FhirContext myCtxDstu2;
|
||||
private final FhirContext myCtxDstu2Hl7Org;
|
||||
private VersionConvertor_30_40 myVersionConvertor_30_40;
|
||||
private VersionConvertor_10_40 myVersionConvertor_10_40;
|
||||
private VersionConvertor_10_30 myVersionConvertor_10_30;
|
||||
private final NullVersionConverterAdvisor40 advisor40;
|
||||
private final NullVersionConverterAdvisor30 advisor30;
|
||||
|
||||
public VersionedApiConverterInterceptor() {
|
||||
myVersionConvertor_30_40 = new VersionConvertor_30_40();
|
||||
VersionConvertorAdvisor40 advisor40 = new NullVersionConverterAdvisor40();
|
||||
myVersionConvertor_10_40 = new VersionConvertor_10_40(advisor40);
|
||||
VersionConvertorAdvisor30 advisor30 = new NullVersionConverterAdvisor30();
|
||||
myVersionConvertor_10_30 = new VersionConvertor_10_30(advisor30);
|
||||
advisor40 = new NullVersionConverterAdvisor40();
|
||||
advisor30 = new NullVersionConverterAdvisor30();
|
||||
|
||||
myCtxDstu2 = FhirContext.forDstu2();
|
||||
myCtxDstu2Hl7Org = FhirContext.forDstu2Hl7Org();
|
||||
|
@ -104,17 +106,17 @@ public class VersionedApiConverterInterceptor extends InterceptorAdapter {
|
|||
IBaseResource converted = null;
|
||||
try {
|
||||
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) {
|
||||
converted = myVersionConvertor_30_40.convertResource(toR4(responseResource), true);
|
||||
converted = VersionConvertor_30_40.convertResource(toR4(responseResource), true);
|
||||
} 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) {
|
||||
converted = myVersionConvertor_10_40.convertResource(toDstu2(responseResource));
|
||||
converted = VersionConvertor_10_40.convertResource(toDstu2(responseResource), advisor40);
|
||||
} 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) {
|
||||
converted = myVersionConvertor_10_30.convertResource(toDstu2(responseResource));
|
||||
converted = VersionConvertor_10_30.convertResource(toDstu2(responseResource), advisor30);
|
||||
}
|
||||
} catch (FHIRException 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.ValueSet;
|
||||
|
||||
import java.util.IdentityHashMap;
|
||||
|
||||
public class NullVersionConverterAdvisor50 implements VersionConvertorAdvisor50 {
|
||||
|
||||
private IdentityHashMap<ValueSet, CodeSystem> myCodeSystems = new IdentityHashMap<>();
|
||||
|
||||
@Override
|
||||
public boolean ignoreEntry(Bundle.BundleEntryComponent src) {
|
||||
return false;
|
||||
|
@ -56,11 +60,11 @@ public class NullVersionConverterAdvisor50 implements VersionConvertorAdvisor50
|
|||
|
||||
@Override
|
||||
public void handleCodeSystem(CodeSystem tgtcs, ValueSet source) throws FHIRException {
|
||||
|
||||
myCodeSystems.put(source, tgtcs);
|
||||
}
|
||||
|
||||
@Override
|
||||
public CodeSystem getCodeSystem(ValueSet src) throws FHIRException {
|
||||
return null;
|
||||
return myCodeSystems.get(src);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -16,13 +16,10 @@ public class VersionConvertor_10_30Test {
|
|||
@Test
|
||||
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();
|
||||
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();
|
||||
|
||||
assertEquals("Encounter/123", context);
|
||||
|
@ -31,9 +28,6 @@ public class VersionConvertor_10_30Test {
|
|||
@Test
|
||||
public void testConvertSpecimen() throws FHIRException {
|
||||
|
||||
NullVersionConverterAdvisor30 advisor = new NullVersionConverterAdvisor30();
|
||||
VersionConvertor_10_30 converter = new VersionConvertor_10_30(advisor);
|
||||
|
||||
Specimen spec = new Specimen();
|
||||
CodeableConcept cc = new CodeableConcept();
|
||||
Coding coding = new Coding();
|
||||
|
@ -58,7 +52,7 @@ public class VersionConvertor_10_30Test {
|
|||
Specimen.SpecimenContainerComponent specimenContainerComponent = new Specimen.SpecimenContainerComponent();
|
||||
specimenContainerComponent.getExtension().add(new Extension().setUrl("some_url").setValue(new StringType("some_value")));
|
||||
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 org.hl7.fhir.convertors.VersionConvertor_14_30;
|
||||
import org.hl7.fhir.dstu3.model.Questionnaire;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
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();
|
||||
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();
|
||||
|
||||
assertEquals("My title", context);
|
||||
|
|
|
@ -20,9 +20,8 @@ package ca.uhn.hapi.fhir.docs;
|
|||
* #L%
|
||||
*/
|
||||
|
||||
import org.hl7.fhir.converter.NullVersionConverterAdvisor30;
|
||||
import org.hl7.fhir.convertors.VersionConvertor_10_30;
|
||||
import org.hl7.fhir.convertors.VersionConvertor_14_30;
|
||||
import org.hl7.fhir.convertors.conv10_30.Observation10_30;
|
||||
import org.hl7.fhir.convertors.conv14_30.Questionnaire14_30;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
|
||||
public class ConverterExamples {
|
||||
|
@ -30,16 +29,12 @@ public class ConverterExamples {
|
|||
@SuppressWarnings("unused")
|
||||
public void c1020() throws FHIRException {
|
||||
//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
|
||||
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"));
|
||||
|
||||
// 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();
|
||||
//END SNIPPET: 1020
|
||||
}
|
||||
|
@ -52,7 +47,7 @@ public class ConverterExamples {
|
|||
input.setTitle("My title");
|
||||
|
||||
// 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();
|
||||
//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.jpa.dao.BaseHapiFhirResourceDao;
|
||||
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.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.searchparam.SearchParameterMap;
|
||||
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.param.TokenParam;
|
||||
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.model.CodeSystem;
|
||||
import org.hl7.fhir.dstu3.model.CodeableConcept;
|
||||
|
@ -53,6 +52,7 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
import static org.hl7.fhir.convertors.conv30_40.CodeSystem30_40.convertCodeSystem;
|
||||
|
||||
@Transactional
|
||||
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;
|
||||
|
||||
org.hl7.fhir.r4.model.CodeSystem cs = VersionConvertor_30_40.convertCodeSystem(csDstu3);
|
||||
org.hl7.fhir.r4.model.CodeSystem cs = convertCodeSystem(csDstu3);
|
||||
addPidToResource(theEntity, cs);
|
||||
|
||||
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.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.entity.ResourceTable;
|
||||
import ca.uhn.fhir.jpa.term.TranslationMatch;
|
||||
import ca.uhn.fhir.jpa.term.TranslationRequest;
|
||||
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.rest.api.server.RequestDetails;
|
||||
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.exceptions.FHIRException;
|
||||
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 java.util.Date;
|
||||
|
@ -44,6 +47,8 @@ import java.util.HashSet;
|
|||
import java.util.List;
|
||||
import java.util.Set;
|
||||
|
||||
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||
|
||||
public class FhirResourceDaoConceptMapDstu3 extends BaseHapiFhirResourceDao<ConceptMap> implements IFhirResourceDaoConceptMap<ConceptMap> {
|
||||
@Autowired
|
||||
private ITermReadSvc myHapiTerminologySvc;
|
||||
|
@ -166,7 +171,7 @@ public class FhirResourceDaoConceptMapDstu3 extends BaseHapiFhirResourceDao<Conc
|
|||
if (retVal.getDeleted() == null) {
|
||||
try {
|
||||
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);
|
||||
} catch (FHIRException 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.util.ElementUtil;
|
||||
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.HapiWorkerContext;
|
||||
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.IntegerType;
|
||||
import org.hl7.fhir.dstu3.model.ValueSet;
|
||||
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetComponent;
|
||||
import org.hl7.fhir.dstu3.model.ValueSet.ConceptSetFilterComponent;
|
||||
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.LoggerFactory;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.beans.factory.annotation.Qualifier;
|
||||
|
||||
import java.util.Collections;
|
||||
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.isNotBlank;
|
||||
import static org.hl7.fhir.convertors.conv30_40.ValueSet30_40.convertValueSet;
|
||||
|
||||
public class FhirResourceDaoValueSetDstu3 extends BaseHapiFhirResourceDao<ValueSet> implements IFhirResourceDaoValueSet<ValueSet, Coding, CodeableConcept> {
|
||||
private static final Logger ourLog = LoggerFactory.getLogger(FhirResourceDaoValueSetDstu3.class);
|
||||
|
@ -420,7 +423,7 @@ public class FhirResourceDaoValueSetDstu3 extends BaseHapiFhirResourceDao<ValueS
|
|||
if (retVal.getDeleted() == null) {
|
||||
try {
|
||||
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);
|
||||
} catch (FHIRException fe) {
|
||||
throw new InternalErrorException(fe);
|
||||
|
|
|
@ -148,7 +148,7 @@ public class FhirResourceDaoCodeSystemR5 extends BaseHapiFhirResourceDao<CodeSys
|
|||
CodeSystem cs = (CodeSystem) 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;
|
||||
|
|
|
@ -166,7 +166,7 @@ public class FhirResourceDaoConceptMapR5 extends BaseHapiFhirResourceDao<Concept
|
|||
|
||||
if (retVal.getDeleted() == null) {
|
||||
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 {
|
||||
myHapiTerminologySvc.deleteConceptMapAndChildren(retVal);
|
||||
}
|
||||
|
|
|
@ -415,7 +415,7 @@ public class FhirResourceDaoValueSetR5 extends BaseHapiFhirResourceDao<ValueSet>
|
|||
if (myDaoConfig.isPreExpandValueSets() && !retVal.isUnchangedInCurrentOperation()) {
|
||||
if (retVal.getDeleted() == null) {
|
||||
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 {
|
||||
myHapiTerminologySvc.deleteValueSetAndChildren(retVal);
|
||||
}
|
||||
|
|
|
@ -39,7 +39,6 @@ import ca.uhn.fhir.util.ValidateUtil;
|
|||
import com.google.common.base.Charsets;
|
||||
import com.google.common.collect.ArrayListMultimap;
|
||||
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.IBaseResource;
|
||||
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.isNotBlank;
|
||||
import static org.apache.commons.lang3.StringUtils.trim;
|
||||
import static org.hl7.fhir.convertors.conv30_40.CodeSystem30_40.convertCodeSystem;
|
||||
|
||||
public class TerminologyUploaderProvider extends BaseJpaProvider {
|
||||
|
||||
|
@ -272,10 +272,10 @@ public class TerminologyUploaderProvider extends BaseJpaProvider {
|
|||
CodeSystem nextCodeSystem;
|
||||
switch (getContext().getVersion().getVersion()) {
|
||||
case DSTU3:
|
||||
nextCodeSystem = VersionConvertor_30_40.convertCodeSystem((org.hl7.fhir.dstu3.model.CodeSystem) theCodeSystem);
|
||||
nextCodeSystem = convertCodeSystem((org.hl7.fhir.dstu3.model.CodeSystem) theCodeSystem);
|
||||
break;
|
||||
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;
|
||||
default:
|
||||
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.model.util.JpaConstants;
|
||||
import ca.uhn.fhir.jpa.term.TranslationRequest;
|
||||
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.Operation;
|
||||
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.InvalidRequestException;
|
||||
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 javax.servlet.http.HttpServletRequest;
|
||||
|
||||
import static org.hl7.fhir.convertors.conv30_40.Parameters30_40.convertParameters;
|
||||
|
||||
public class BaseJpaResourceProviderConceptMapDstu3 extends JpaResourceProviderDstu3<ConceptMap> {
|
||||
@Operation(name = JpaConstants.OPERATION_TRANSLATE, idempotent = true, returnParameters = {
|
||||
@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);
|
||||
|
||||
// Convert from R4 to DSTU3
|
||||
return VersionConvertor_30_40.convertParameters(result.toParameters());
|
||||
return convertParameters(result.toParameters());
|
||||
} catch (FHIRException fe) {
|
||||
throw new InternalErrorException(fe);
|
||||
} finally {
|
||||
|
|
|
@ -21,17 +21,28 @@ package ca.uhn.fhir.jpa.provider.dstu3;
|
|||
*/
|
||||
|
||||
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.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.MethodOutcome;
|
||||
import ca.uhn.fhir.rest.api.ValidationModeEnum;
|
||||
import ca.uhn.fhir.rest.api.server.RequestDetails;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
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.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.instance.model.api.IAnyResource;
|
||||
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_ADD;
|
||||
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> {
|
||||
|
||||
|
@ -91,7 +103,7 @@ public class JpaResourceProviderDstu3<T extends IAnyResource> extends BaseJpaRes
|
|||
RequestDetails theRequest) {
|
||||
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(theIdParam, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
||||
try {
|
||||
return VersionConvertor_30_40.convertParameters(retVal);
|
||||
return convertParameters(retVal);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -107,7 +119,7 @@ public class JpaResourceProviderDstu3<T extends IAnyResource> extends BaseJpaRes
|
|||
RequestDetails theRequest) {
|
||||
org.hl7.fhir.r4.model.Parameters retVal = super.doExpunge(null, theLimit, theExpungeDeletedResources, theExpungeOldVersions, null, theRequest);
|
||||
try {
|
||||
return VersionConvertor_30_40.convertParameters(retVal);
|
||||
return convertParameters(retVal);
|
||||
} catch (FHIRException 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.IFhirSystemDao;
|
||||
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.provider.BaseJpaSystemProviderDstu2Plus;
|
||||
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.server.exceptions.InternalErrorException;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
|
||||
import ca.uhn.fhir.rest.server.servlet.ServletRequestDetails;
|
||||
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.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.StringType;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.instance.model.api.IBaseBundle;
|
||||
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.StringUtils.isBlank;
|
||||
import static org.hl7.fhir.convertors.conv30_40.Parameters30_40.convertParameters;
|
||||
|
||||
/*
|
||||
* #%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);
|
||||
try {
|
||||
return VersionConvertor_30_40.convertParameters(retVal);
|
||||
return convertParameters(retVal);
|
||||
} catch (FHIRException 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);
|
||||
try {
|
||||
return VersionConvertor_30_40.convertParameters(retVal);
|
||||
return convertParameters(retVal);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
|
|
@ -122,7 +122,7 @@ public class BaseJpaResourceProviderConceptMapR5 extends JpaResourceProviderR5<C
|
|||
IFhirResourceDaoConceptMap<ConceptMap> dao = (IFhirResourceDaoConceptMap<ConceptMap>) getDao();
|
||||
TranslationResult result = dao.translate(translationRequest, theRequestDetails);
|
||||
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 {
|
||||
endRequest(theServletRequest);
|
||||
}
|
||||
|
|
|
@ -86,7 +86,7 @@ public class JpaResourceProviderR5<T extends IAnyResource> extends BaseJpaResour
|
|||
RequestDetails 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,
|
||||
RequestDetails 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 = {
|
||||
|
|
|
@ -68,7 +68,7 @@ public class JpaSystemProviderR5 extends BaseJpaSystemProviderDstu2Plus<Bundle,
|
|||
RequestDetails 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 = {
|
||||
|
@ -82,7 +82,7 @@ public class JpaSystemProviderR5 extends BaseJpaSystemProviderDstu2Plus<Bundle,
|
|||
RequestDetails 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:
|
||||
|
|
|
@ -9,10 +9,13 @@ import ca.uhn.fhir.jpa.term.api.ITermReadSvcDstu3;
|
|||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||
import ca.uhn.fhir.util.CoverageIgnore;
|
||||
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.model.*;
|
||||
import org.hl7.fhir.dstu3.model.CodeSystem;
|
||||
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.ValueSetExpansionComponent;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
|
@ -31,6 +34,9 @@ import java.util.List;
|
|||
import java.util.Optional;
|
||||
|
||||
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
|
||||
|
@ -104,7 +110,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
|||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
||||
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) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -118,7 +124,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
|||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
||||
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSetInMemory(valueSetToExpandR4, null);
|
||||
return VersionConvertor_30_40.convertValueSet(expandedR4);
|
||||
return convertValueSet(expandedR4);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -127,7 +133,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
|||
@Override
|
||||
protected org.hl7.fhir.r4.model.ValueSet toCanonicalValueSet(IBaseResource theValueSet) throws FHIRException {
|
||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||
valueSetToExpandR4 = VersionConvertor_30_40.convertValueSet((ValueSet) theValueSet);
|
||||
valueSetToExpandR4 = convertValueSet((ValueSet) theValueSet);
|
||||
return valueSetToExpandR4;
|
||||
}
|
||||
|
||||
|
@ -139,7 +145,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
|||
org.hl7.fhir.r4.model.ValueSet valueSetToExpandR4;
|
||||
valueSetToExpandR4 = toCanonicalValueSet(valueSetToExpand);
|
||||
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSet(valueSetToExpandR4, theOffset, theCount);
|
||||
return VersionConvertor_30_40.convertValueSet(expandedR4);
|
||||
return convertValueSet(expandedR4);
|
||||
} catch (FHIRException 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) {
|
||||
CodeSystem codeSystem = myValidationSupport.fetchCodeSystem(myContext, theSystem);
|
||||
try {
|
||||
return VersionConvertor_30_40.convertCodeSystem(codeSystem);
|
||||
return convertCodeSystem(codeSystem);
|
||||
} catch (FHIRException 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) {
|
||||
ValidateUtil.isNotNullOrThrowUnprocessableEntity(theValueSet, "ValueSet must not be null");
|
||||
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;
|
||||
org.hl7.fhir.r4.model.Coding codingR4 = null;
|
||||
|
@ -347,7 +353,7 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
|||
public boolean isValueSetPreExpandedForCodeValidation(IBaseResource theValueSet) {
|
||||
ValidateUtil.isNotNullOrThrowUnprocessableEntity(theValueSet, "ValueSet must not be null");
|
||||
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);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -90,21 +90,21 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
|||
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
|
||||
public IBaseResource expandValueSet(IBaseResource theInput) {
|
||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpand = toCanonicalValueSet(theInput);
|
||||
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
|
||||
public IBaseResource expandValueSet(IBaseResource theInput, int theOffset, int theCount) {
|
||||
org.hl7.fhir.r4.model.ValueSet valueSetToExpand = toCanonicalValueSet(theInput);
|
||||
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
|
||||
|
@ -117,8 +117,8 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
|||
public ValueSetExpander.ValueSetExpansionOutcome expandValueSet(FhirContext theContext, ConceptSetComponent theInclude) {
|
||||
ValueSet valueSetToExpand = new ValueSet();
|
||||
valueSetToExpand.getCompose().addInclude(theInclude);
|
||||
org.hl7.fhir.r4.model.ValueSet expandedR4 = super.expandValueSetInMemory(org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(valueSetToExpand), null);
|
||||
return new ValueSetExpander.ValueSetExpansionOutcome(org.hl7.fhir.convertors.conv40_50.ValueSet.convertValueSet(expandedR4));
|
||||
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.ValueSet40_50.convertValueSet(expandedR4));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -199,13 +199,13 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
|||
@Override
|
||||
public org.hl7.fhir.r4.model.CodeSystem getCodeSystemFromContext(String 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
|
||||
protected org.hl7.fhir.r4.model.ValueSet getValueSetFromResourceTable(ResourceTable theResourceTable) {
|
||||
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
|
||||
|
@ -277,7 +277,7 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
|||
|
||||
@Override
|
||||
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
|
||||
|
|
|
@ -37,6 +37,9 @@ import org.springframework.context.event.ContextStartedEvent;
|
|||
import org.springframework.context.event.EventListener;
|
||||
|
||||
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 {
|
||||
|
||||
|
@ -72,7 +75,7 @@ public class TermVersionAdapterSvcDstu3 extends BaseTermVersionAdapterSvcImpl im
|
|||
public IIdType createOrUpdateCodeSystem(org.hl7.fhir.r4.model.CodeSystem theCodeSystemResource) {
|
||||
CodeSystem resourceToStore;
|
||||
try {
|
||||
resourceToStore = VersionConvertor_30_40.convertCodeSystem(theCodeSystemResource);
|
||||
resourceToStore = convertCodeSystem(theCodeSystemResource);
|
||||
} catch (FHIRException 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) {
|
||||
ConceptMap resourceToStore;
|
||||
try {
|
||||
resourceToStore = VersionConvertor_30_40.convertConceptMap(theConceptMap);
|
||||
resourceToStore = convertConceptMap(theConceptMap);
|
||||
} catch (FHIRException 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) {
|
||||
ValueSet valueSetDstu3;
|
||||
try {
|
||||
valueSetDstu3 = VersionConvertor_30_40.convertValueSet(theValueSet);
|
||||
valueSetDstu3 = convertValueSet(theValueSet);
|
||||
} catch (FHIRException 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) {
|
||||
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())) {
|
||||
String matchUrl = "CodeSystem?url=" + UrlUtil.escapeUrlParam(theCodeSystemResource.getUrl());
|
||||
return myCodeSystemResourceDao.update(codeSystemR4, matchUrl).getId();
|
||||
|
@ -74,7 +74,7 @@ public class TermVersionAdapterSvcR5 extends BaseTermVersionAdapterSvcImpl imple
|
|||
@Override
|
||||
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())) {
|
||||
String matchUrl = "ConceptMap?url=" + UrlUtil.escapeUrlParam(theConceptMap.getUrl());
|
||||
|
@ -87,7 +87,7 @@ public class TermVersionAdapterSvcR5 extends BaseTermVersionAdapterSvcImpl imple
|
|||
@Override
|
||||
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())) {
|
||||
String matchUrl = "ValueSet?url=" + UrlUtil.escapeUrlParam(theValueSet.getUrl());
|
||||
|
|
|
@ -1,9 +1,5 @@
|
|||
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.model.api.IResource;
|
||||
import ca.uhn.fhir.model.api.ResourceMetadataKeyEnum;
|
||||
|
@ -32,7 +28,11 @@ import org.junit.Before;
|
|||
import org.junit.Test;
|
||||
|
||||
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 {
|
||||
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);
|
||||
|
||||
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.getEncounter().setReference("http://foo.com/Encounter/9");
|
||||
input.setStatus(ObservationStatusEnum.FINAL);
|
||||
input.getCode().addCoding().setSystem("http://loinc.org").setCode("12345");
|
||||
|
||||
String encoded = null;
|
||||
MethodOutcome outcome = null;
|
||||
String encoded;
|
||||
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
||||
switch (enc) {
|
||||
case JSON:
|
||||
|
@ -130,12 +129,12 @@ public class FhirResourceDaoDstu2ValidateTest extends BaseJpaDstu2Test {
|
|||
}
|
||||
|
||||
@Test
|
||||
public void testValidateResourceContainingProfileDeclarationInvalid() throws Exception {
|
||||
public void testValidateResourceContainingProfileDeclarationInvalid() {
|
||||
String methodName = "testValidateResourceContainingProfileDeclarationInvalid";
|
||||
|
||||
Observation input = new Observation();
|
||||
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.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());
|
||||
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.hibernate.search.jpa.FullTextEntityManager;
|
||||
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.model.*;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
|
@ -60,6 +59,7 @@ import java.io.IOException;
|
|||
import java.io.InputStream;
|
||||
import java.util.Map;
|
||||
|
||||
import static org.hl7.fhir.convertors.conv30_40.ConceptMap30_40.convertConceptMap;
|
||||
import static org.junit.Assert.fail;
|
||||
|
||||
@RunWith(SpringJUnit4ClassRunner.class)
|
||||
|
@ -386,7 +386,7 @@ public abstract class BaseJpaDstu3Test extends BaseJpaTest {
|
|||
*/
|
||||
public static ConceptMap createConceptMap() {
|
||||
try {
|
||||
return VersionConvertor_30_40.convertConceptMap(BaseJpaR4Test.createConceptMap());
|
||||
return convertConceptMap(BaseJpaR4Test.createConceptMap());
|
||||
} catch (FHIRException 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.Bundle.BundleEntryComponent;
|
||||
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.IIdType;
|
||||
import org.hl7.fhir.r5.utils.IResourceValidator;
|
||||
|
@ -322,15 +323,11 @@ public class FhirResourceDaoDstu3ValidateTest extends BaseJpaDstu3Test {
|
|||
|
||||
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
||||
String encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
|
||||
try {
|
||||
myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
|
||||
fail();
|
||||
} catch (PreconditionFailedException e) {
|
||||
String ooString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome());
|
||||
ourLog.info(ooString);
|
||||
assertThat(ooString, containsString("StructureDefinition reference \\\"" + profileUri + "\\\" could not be resolved"));
|
||||
}
|
||||
|
||||
MethodOutcome output = myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
|
||||
OperationOutcome oo = (OperationOutcome) output.getOperationOutcome();
|
||||
String outputString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(oo);
|
||||
ourLog.info(outputString);
|
||||
assertThat(outputString, containsString("Profile reference 'http://example.com/StructureDefinition/testValidateResourceContainingProfileDeclarationInvalid' could not be resolved, so has not been checked"));
|
||||
}
|
||||
|
||||
@Test
|
||||
|
|
|
@ -395,15 +395,11 @@ public class FhirResourceDaoR4ValidateTest extends BaseJpaR4Test {
|
|||
ValidationModeEnum mode = ValidationModeEnum.CREATE;
|
||||
String encoded = myFhirCtx.newJsonParser().encodeResourceToString(input);
|
||||
|
||||
try {
|
||||
myObservationDao.validate(input, null, encoded, EncodingEnum.JSON, mode, null, mySrd);
|
||||
fail();
|
||||
} catch (PreconditionFailedException e) {
|
||||
String ooString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(e.getOperationOutcome());
|
||||
ourLog.info(ooString);
|
||||
assertThat(ooString, containsString("StructureDefinition reference \\\"" + profileUri + "\\\" could not be resolved"));
|
||||
}
|
||||
|
||||
MethodOutcome output = 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();
|
||||
String outputString = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(oo);
|
||||
ourLog.info(outputString);
|
||||
assertThat(outputString, containsString("Profile reference 'http://example.com/StructureDefinition/testValidateResourceContainingProfileDeclarationInvalid' could not be resolved, so has not been checked"));
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -54,8 +54,8 @@ public class ValidatorAcrossVersionsTest {
|
|||
ourLog.info(ctxDstu2.newJsonParser().setPrettyPrint(true).encodeResourceToString(result.toOperationOutcome()));
|
||||
|
||||
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(1).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("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.instance.model.api.IBaseResource;
|
||||
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.HapiWorkerContext;
|
||||
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.springframework.beans.factory.annotation.Autowired;
|
||||
|
||||
import javax.annotation.PostConstruct;
|
||||
import java.util.Collections;
|
||||
|
@ -115,7 +119,7 @@ public class SearchParamExtractorR5 extends BaseSearchParamExtractor implements
|
|||
}
|
||||
|
||||
@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
|
||||
|
|
|
@ -106,14 +106,22 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
|||
|
||||
@Override
|
||||
public <T extends Resource> T fetchResource(Class<T> theClass, String theUri) {
|
||||
Validate.notBlank(theUri, "theUri must not be null or blank");
|
||||
if (myValidationSupport == null) {
|
||||
return null;
|
||||
} else {
|
||||
@SuppressWarnings("unchecked")
|
||||
T retVal = (T) myFetchedResourceCache.get(theUri, t->{
|
||||
return myValidationSupport.fetchResource(myCtx, theClass, theUri);
|
||||
try {
|
||||
//noinspection unchecked
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StructureDefinition fetchRawProfile(String url) {
|
||||
throw new UnsupportedOperationException();
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTypeNames() {
|
||||
throw new UnsupportedOperationException();
|
||||
|
|
|
@ -4,20 +4,24 @@ import ca.uhn.fhir.context.ConfigurationException;
|
|||
import ca.uhn.fhir.rest.api.EncodingEnum;
|
||||
import ca.uhn.fhir.util.XmlUtil;
|
||||
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.io.input.ReaderInputStream;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.r5.context.IWorkerContext;
|
||||
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.IResourceValidator;
|
||||
import org.hl7.fhir.r5.utils.ValidationProfileSet;
|
||||
import org.hl7.fhir.r5.validation.InstanceValidator;
|
||||
import org.hl7.fhir.utilities.validation.ValidationMessage;
|
||||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
import org.w3c.dom.Document;
|
||||
import org.w3c.dom.Element;
|
||||
import org.w3c.dom.NodeList;
|
||||
|
||||
import java.io.InputStream;
|
||||
|
@ -33,7 +37,9 @@ public class ValidatorWrapper {
|
|||
private boolean myAnyExtensionsAllowed;
|
||||
private boolean myErrorForUnknownProfiles;
|
||||
private boolean myNoTerminologyChecks;
|
||||
private boolean myAssumeValidRestReferences;
|
||||
private Collection<? extends String> myExtensionDomains;
|
||||
private IResourceValidator.IValidatorResourceFetcher myValidatorResourceFetcher;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -42,6 +48,15 @@ public class ValidatorWrapper {
|
|||
super();
|
||||
}
|
||||
|
||||
public boolean isAssumeValidRestReferences() {
|
||||
return myAssumeValidRestReferences;
|
||||
}
|
||||
|
||||
public ValidatorWrapper setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||
this.myAssumeValidRestReferences = assumeValidRestReferences;
|
||||
return this;
|
||||
}
|
||||
|
||||
public ValidatorWrapper setBestPracticeWarningLevel(IResourceValidator.BestPracticeWarningLevel theBestPracticeWarningLevel) {
|
||||
myBestPracticeWarningLevel = theBestPracticeWarningLevel;
|
||||
return this;
|
||||
|
@ -67,6 +82,12 @@ public class ValidatorWrapper {
|
|||
return this;
|
||||
}
|
||||
|
||||
|
||||
public ValidatorWrapper setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||
this.myValidatorResourceFetcher = validatorResourceFetcher;
|
||||
return this;
|
||||
}
|
||||
|
||||
public List<ValidationMessage> validate(IWorkerContext theWorkerContext, IValidationContext<?> theValidationContext) {
|
||||
InstanceValidator v;
|
||||
FHIRPathEngine.IEvaluationContext evaluationCtx = new org.hl7.fhir.r5.hapi.validation.FhirInstanceValidator.NullEvaluationContext();
|
||||
|
@ -76,19 +97,21 @@ public class ValidatorWrapper {
|
|||
throw new ConfigurationException(e);
|
||||
}
|
||||
|
||||
v.setAssumeValidRestReferences(isAssumeValidRestReferences());
|
||||
v.setBestPracticeWarningLevel(myBestPracticeWarningLevel);
|
||||
v.setAnyExtensionsAllowed(myAnyExtensionsAllowed);
|
||||
v.setResourceIdRule(IResourceValidator.IdStatus.OPTIONAL);
|
||||
v.setNoTerminologyChecks(myNoTerminologyChecks);
|
||||
v.setErrorForUnknownProfiles(myErrorForUnknownProfiles);
|
||||
v.getExtensionDomains().addAll(myExtensionDomains);
|
||||
v.setFetcher(myValidatorResourceFetcher);
|
||||
v.setAllowXsiLocation(true);
|
||||
|
||||
List<ValidationMessage> messages = new ArrayList<>();
|
||||
|
||||
ValidationProfileSet profileSet = new ValidationProfileSet();
|
||||
List<StructureDefinition> profileUrls = new ArrayList<>();
|
||||
for (String next : theValidationContext.getOptions().getProfiles()) {
|
||||
profileSet.getCanonical().add(new ValidationProfileSet.ProfileRegistration(next, true));
|
||||
fetchAndAddProfile(theWorkerContext, profileUrls, next);
|
||||
}
|
||||
|
||||
String input = theValidationContext.getResourceAsString();
|
||||
|
@ -109,14 +132,14 @@ public class ValidatorWrapper {
|
|||
// Determine if meta/profiles are present...
|
||||
ArrayList<String> profiles = determineIfProfilesSpecified(document);
|
||||
for (String nextProfile : profiles) {
|
||||
profileSet.getCanonical().add(new ValidationProfileSet.ProfileRegistration(nextProfile, true));
|
||||
fetchAndAddProfile(theWorkerContext, profileUrls, nextProfile);
|
||||
}
|
||||
|
||||
String resourceAsString = theValidationContext.getResourceAsString();
|
||||
InputStream inputStream = new ReaderInputStream(new StringReader(resourceAsString), Charsets.UTF_8);
|
||||
|
||||
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) {
|
||||
|
||||
|
@ -129,7 +152,8 @@ public class ValidatorWrapper {
|
|||
if (profileElement != null && profileElement.isJsonArray()) {
|
||||
JsonArray profiles = profileElement.getAsJsonArray();
|
||||
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);
|
||||
|
||||
Manager.FhirFormat format = Manager.FhirFormat.JSON;
|
||||
v.validate(null, messages, inputStream, format, profileSet);
|
||||
v.validate(null, messages, inputStream, format, profileUrls);
|
||||
|
||||
} else {
|
||||
throw new IllegalArgumentException("Unknown encoding: " + encoding);
|
||||
|
@ -157,16 +181,15 @@ public class ValidatorWrapper {
|
|||
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) {
|
||||
ArrayList<String> profileNames = new ArrayList<>();
|
||||
|
|
|
@ -1,14 +1,10 @@
|
|||
package org.hl7.fhir.dstu2016may.hapi.validation;
|
||||
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.util.*;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
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.LoadingCache;
|
||||
import org.apache.commons.lang3.Validate;
|
||||
|
@ -18,28 +14,45 @@ import org.apache.commons.lang3.time.DateUtils;
|
|||
import org.fhir.ucum.UcumService;
|
||||
import org.hl7.fhir.common.hapi.validation.ValidatorWrapper;
|
||||
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.FHIRException;
|
||||
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
||||
import org.hl7.fhir.r5.context.IWorkerContext;
|
||||
import org.hl7.fhir.r5.formats.IParser;
|
||||
import org.hl7.fhir.r5.formats.ParserType;
|
||||
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.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.validation.ValidationMessage;
|
||||
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.NodeList;
|
||||
|
||||
import ca.uhn.fhir.context.FhirContext;
|
||||
import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
|
||||
import ca.uhn.fhir.validation.IValidationContext;
|
||||
import ca.uhn.fhir.validation.IValidatorModule;
|
||||
import javax.annotation.Nonnull;
|
||||
import javax.annotation.Nullable;
|
||||
import java.net.MalformedURLException;
|
||||
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 {
|
||||
|
||||
|
@ -382,7 +395,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
}
|
||||
|
||||
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) {
|
||||
structureDefinition.setType(next.getName());
|
||||
}
|
||||
|
@ -408,7 +421,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
org.hl7.fhir.r5.model.CodeSystem.ConceptDefinitionComponent conceptDefinition = null;
|
||||
if (theResult.asConceptDefinition() != null) {
|
||||
try {
|
||||
conceptDefinition = VersionConvertor_14_50.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
||||
conceptDefinition = CodeSystem14_50.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
||||
} catch (FHIRException 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) {
|
||||
ValueSet convertedSource;
|
||||
try {
|
||||
convertedSource = VersionConvertor_14_50.convertValueSet(source);
|
||||
convertedSource = ValueSet14_50.convertValueSet(source);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -437,7 +450,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
||||
if (expanded.getValueset() != null) {
|
||||
try {
|
||||
convertedResult = VersionConvertor_14_50.convertValueSet(expanded.getValueset());
|
||||
convertedResult = ValueSet14_50.convertValueSet(expanded.getValueset());
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -458,7 +471,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
ValueSet.ConceptSetComponent convertedInc = null;
|
||||
if (inc != null) {
|
||||
try {
|
||||
convertedInc = VersionConvertor_14_50.convertConceptSetComponent(inc);
|
||||
convertedInc = ValueSet14_50.convertConceptSetComponent(inc);
|
||||
} catch (FHIRException 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;
|
||||
if (expansion != null) {
|
||||
try {
|
||||
valueSetExpansionComponent = VersionConvertor_14_50.convertValueSetExpansionComponent(expansion);
|
||||
valueSetExpansionComponent = ValueSet14_50.convertValueSetExpansionComponent(expansion);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -492,7 +505,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
return null;
|
||||
}
|
||||
try {
|
||||
return VersionConvertor_14_50.convertCodeSystem(fetched);
|
||||
return CodeSystem14_50.convertCodeSystem(fetched);
|
||||
} catch (FHIRException 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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public List<String> getTypeNames() {
|
||||
|
@ -665,7 +683,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
|
||||
try {
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
||||
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -680,7 +698,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
ValueSet convertedVs = null;
|
||||
try {
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
||||
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -700,7 +718,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
convertedCode = VersionConvertor_14_50.convertCoding(code);
|
||||
}
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
||||
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -720,7 +738,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IValid
|
|||
convertedCode = VersionConvertor_14_50.convertCodeableConcept(code);
|
||||
}
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_14_50.convertValueSet(vs);
|
||||
convertedVs = ValueSet14_50.convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException 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.Questionnaire;
|
||||
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.ValueSet;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
|
@ -56,6 +57,13 @@ import java.util.Map;
|
|||
import java.util.Set;
|
||||
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"})
|
||||
public class FhirInstanceValidator extends BaseValidatorBridge implements IInstanceValidatorModule {
|
||||
|
||||
|
@ -66,10 +74,12 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
private StructureDefinition myStructureDefintion;
|
||||
private IValidationSupport myValidationSupport;
|
||||
private boolean noTerminologyChecks = false;
|
||||
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
||||
|
||||
private boolean errorForUnknownProfiles;
|
||||
private List<String> myExtensionDomains = Collections.emptyList();
|
||||
private boolean assumeValidRestReferences;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -285,10 +295,28 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
||||
.setExtensionDomains(getExtensionDomains())
|
||||
.setNoTerminologyChecks(isNoTerminologyChecks())
|
||||
.setValidatorResourceFetcher(getValidatorResourceFetcher())
|
||||
.setAssumeValidRestReferences(isAssumeValidRestReferences())
|
||||
.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 final HapiWorkerContext myWrap;
|
||||
|
@ -327,6 +355,9 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
case "ImplementationGuide":
|
||||
fetched = myWrap.fetchResource(ImplementationGuide.class, key.getUri());
|
||||
break;
|
||||
case "SearchParameter":
|
||||
fetched = myWrap.fetchResource(SearchParameter.class, key.getUri());
|
||||
break;
|
||||
default:
|
||||
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<>();
|
||||
for (StructureDefinition next : myWrap.allStructures()) {
|
||||
try {
|
||||
retVal.add(VersionConvertor_30_50.convertStructureDefinition(next));
|
||||
retVal.add(convertStructureDefinition(next));
|
||||
} catch (FHIRException 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;
|
||||
if (theResult.asConceptDefinition() != null) {
|
||||
try {
|
||||
conceptDefinition = VersionConvertor_30_50.convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
||||
conceptDefinition = convertConceptDefinitionComponent(theResult.asConceptDefinition());
|
||||
} catch (FHIRException 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) {
|
||||
ValueSet convertedSource;
|
||||
try {
|
||||
convertedSource = VersionConvertor_30_50.convertValueSet(source);
|
||||
convertedSource = convertValueSet(source);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -445,7 +476,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
||||
if (expanded.getValueset() != null) {
|
||||
try {
|
||||
convertedResult = VersionConvertor_30_50.convertValueSet(expanded.getValueset());
|
||||
convertedResult = convertValueSet(expanded.getValueset());
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -467,7 +498,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
ValueSet.ConceptSetComponent convertedInc = null;
|
||||
if (inc != null) {
|
||||
try {
|
||||
convertedInc = VersionConvertor_30_50.convertConceptSetComponent(inc);
|
||||
convertedInc = convertConceptSetComponent(inc);
|
||||
} catch (FHIRException 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;
|
||||
if (expansion != null) {
|
||||
try {
|
||||
valueSetExpansionComponent = VersionConvertor_30_50.convertValueSetExpansionComponent(expansion);
|
||||
valueSetExpansionComponent = convertValueSetExpansionComponent(expansion);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -495,7 +526,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
return null;
|
||||
}
|
||||
try {
|
||||
return VersionConvertor_30_50.convertCodeSystem(fetched);
|
||||
return convertCodeSystem(fetched);
|
||||
} catch (FHIRException 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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTypeNames() {
|
||||
return myWrap.getTypeNames();
|
||||
|
@ -676,7 +712,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
|
||||
try {
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -691,7 +727,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
ValueSet convertedVs = null;
|
||||
try {
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -711,7 +747,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
convertedCode = VersionConvertor_30_50.convertCoding(code);
|
||||
}
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -731,7 +767,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
convertedCode = VersionConvertor_30_50.convertCodeableConcept(code);
|
||||
}
|
||||
if (vs != null) {
|
||||
convertedVs = VersionConvertor_30_50.convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
|
|
@ -27,12 +27,13 @@ import org.fhir.ucum.UcumService;
|
|||
import org.hl7.fhir.converter.NullVersionConverterAdvisor50;
|
||||
import org.hl7.fhir.convertors.VersionConvertorAdvisor50;
|
||||
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.Coding;
|
||||
import org.hl7.fhir.dstu2.model.Questionnaire;
|
||||
import org.hl7.fhir.dstu2.model.StructureDefinition;
|
||||
import org.hl7.fhir.dstu2.model.ValueSet;
|
||||
import org.hl7.fhir.exceptions.DefinitionException;
|
||||
import org.hl7.fhir.exceptions.FHIRException;
|
||||
import org.hl7.fhir.exceptions.TerminologyServiceException;
|
||||
import org.hl7.fhir.r5.context.IWorkerContext;
|
||||
|
@ -60,6 +61,7 @@ import java.io.IOException;
|
|||
import java.io.InputStream;
|
||||
import java.net.MalformedURLException;
|
||||
import java.net.URL;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.ArrayList;
|
||||
import java.util.Collections;
|
||||
import java.util.HashSet;
|
||||
|
@ -69,6 +71,11 @@ import java.util.Set;
|
|||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
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 {
|
||||
|
||||
|
@ -81,8 +88,19 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
private StructureDefinition myStructureDefintion;
|
||||
private IValidationSupport myValidationSupport;
|
||||
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 VersionConvertorAdvisor50 myAdvisor = new NullVersionConverterAdvisor50();
|
||||
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -287,6 +305,8 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
v.setAnyExtensionsAllowed(isAnyExtensionsAllowed());
|
||||
v.setResourceIdRule(IdStatus.OPTIONAL);
|
||||
v.setNoTerminologyChecks(isNoTerminologyChecks());
|
||||
v.setFetcher(getValidatorResourceFetcher());
|
||||
v.setAssumeValidRestReferences(isAssumeValidRestReferences());
|
||||
|
||||
List<ValidationMessage> messages = new ArrayList<>();
|
||||
|
||||
|
@ -388,6 +408,14 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
return messages;
|
||||
}
|
||||
|
||||
public IResourceValidator.IValidatorResourceFetcher getValidatorResourceFetcher() {
|
||||
return validatorResourceFetcher;
|
||||
}
|
||||
|
||||
public void setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||
this.validatorResourceFetcher = validatorResourceFetcher;
|
||||
}
|
||||
|
||||
@Override
|
||||
protected List<ValidationMessage> validate(IValidationContext<?> theCtx) {
|
||||
return validate(theCtx.getFhirContext(), theCtx.getResourceAsString(), theCtx.getResourceAsStringEncoding());
|
||||
|
@ -428,7 +456,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
return null;
|
||||
}
|
||||
}
|
||||
profileText = IOUtils.toString(inputStream, "UTF-8");
|
||||
profileText = IOUtils.toString(inputStream, StandardCharsets.UTF_8);
|
||||
} catch (IOException e1) {
|
||||
if (theMessages != null) {
|
||||
theMessages.add(new ValidationMessage().setLevel(IssueSeverity.FATAL)
|
||||
|
@ -457,11 +485,17 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
case "StructureDefinition":
|
||||
fetched = myWrap.fetchResource(StructureDefinition.class, key.getUri());
|
||||
break;
|
||||
case "CodeSystem":
|
||||
case "ValueSet":
|
||||
fetched = myWrap.fetchResource(ValueSet.class, key.getUri());
|
||||
break;
|
||||
case "CodeSystem":
|
||||
fetched = myWrap.fetchResource(ValueSet.class, key.getUri());
|
||||
|
||||
ValueSet fetchedVs = (ValueSet) fetched;
|
||||
if (!fetchedVs.hasCompose()) {
|
||||
if (fetchedVs.hasCodeSystem()) {
|
||||
fetchedVs.getCompose().addInclude().setSystem(fetchedVs.getCodeSystem().getSystem());
|
||||
}
|
||||
}
|
||||
|
||||
break;
|
||||
case "Questionnaire":
|
||||
fetched = myWrap.fetchResource(Questionnaire.class, key.getUri());
|
||||
|
@ -477,7 +511,15 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
}
|
||||
|
||||
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) {
|
||||
StructureDefinition fetchedSd = (StructureDefinition) fetched;
|
||||
|
@ -501,7 +543,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
|
||||
public WorkerContextWrapper(HapiWorkerContext theWorkerContext) {
|
||||
myWrap = theWorkerContext;
|
||||
myConverter = new VersionConvertor_10_50(myAdvisor);
|
||||
myConverter = new VersionConvertor_10_50();
|
||||
}
|
||||
|
||||
@Override
|
||||
|
@ -510,7 +552,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
}
|
||||
|
||||
@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<>();
|
||||
for (StructureDefinition next : myWrap.allStructures()) {
|
||||
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) {
|
||||
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) {
|
||||
ValueSet convertedSource = null;
|
||||
try {
|
||||
convertedSource = new VersionConvertor_10_50(myAdvisor).convertValueSet(source);
|
||||
convertedSource = convertValueSet(source);
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -596,7 +638,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
org.hl7.fhir.r5.model.ValueSet convertedResult = null;
|
||||
if (expanded.getValueset() != null) {
|
||||
try {
|
||||
convertedResult = new VersionConvertor_10_50(myAdvisor).convertValueSet(expanded.getValueset());
|
||||
convertedResult = convertValueSet(expanded.getValueset());
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -618,7 +660,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
ValueSet.ConceptSetComponent convertedInc = null;
|
||||
if (inc != null) {
|
||||
try {
|
||||
convertedInc = new VersionConvertor_10_50(myAdvisor).convertConceptSetComponent(inc);
|
||||
convertedInc = convertConceptSetComponent(inc);
|
||||
} catch (FHIRException 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;
|
||||
if (expansion != null) {
|
||||
try {
|
||||
valueSetExpansionComponent = new VersionConvertor_10_50(myAdvisor).convertValueSetExpansionComponent(expansion);
|
||||
valueSetExpansionComponent = convertValueSetExpansionComponent(expansion);
|
||||
} catch (FHIRException 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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void setUcumService(UcumService ucumService) {
|
||||
throw new UnsupportedOperationException();
|
||||
|
@ -825,7 +872,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
|
||||
try {
|
||||
if (vs != null) {
|
||||
convertedVs = new VersionConvertor_10_50(myAdvisor).convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -840,8 +887,7 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
ValueSet convertedVs = null;
|
||||
try {
|
||||
if (vs != null) {
|
||||
VersionConvertorAdvisor50 advisor50 = new NullVersionConverterAdvisor50();
|
||||
convertedVs = new VersionConvertor_10_50(advisor50).convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -858,10 +904,10 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
|
||||
try {
|
||||
if (code != null) {
|
||||
convertedCode = new VersionConvertor_10_50(myAdvisor).convertCoding(code);
|
||||
convertedCode = convertCoding(code);
|
||||
}
|
||||
if (vs != null) {
|
||||
convertedVs = new VersionConvertor_10_50(myAdvisor).convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -878,10 +924,10 @@ public class FhirInstanceValidator extends BaseValidatorBridge implements IInsta
|
|||
|
||||
try {
|
||||
if (code != null) {
|
||||
convertedCode = new VersionConvertor_10_50(myAdvisor).convertCodeableConcept(code);
|
||||
convertedCode = VersionConvertor_10_50.convertCodeableConcept(code);
|
||||
}
|
||||
if (vs != null) {
|
||||
convertedVs = new VersionConvertor_10_50(myAdvisor).convertValueSet(vs);
|
||||
convertedVs = convertValueSet(vs);
|
||||
}
|
||||
} catch (FHIRException e) {
|
||||
throw new InternalErrorException(e);
|
||||
|
|
|
@ -199,7 +199,7 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
|||
nextSystem = nextComposeConceptSet.getSystem();
|
||||
}
|
||||
|
||||
if (StringUtils.equals(nextSystem, nextComposeConceptSet.getSystem())) {
|
||||
if (Constants.codeSystemNotNeeded(theSystem) || StringUtils.equals(nextSystem, nextComposeConceptSet.getSystem())) {
|
||||
for (ConceptReferenceComponent nextComposeCode : nextComposeConceptSet.getConcept()) {
|
||||
ConceptDefinitionComponent conceptDef = new ConceptDefinitionComponent();
|
||||
conceptDef.setCode(nextComposeCode.getCode());
|
||||
|
@ -211,7 +211,13 @@ public final class HapiWorkerContext implements IWorkerContext, ValueSetExpander
|
|||
}
|
||||
|
||||
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()){
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -59,7 +59,8 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
|||
private IValidationSupport myValidationSupport;
|
||||
private boolean noTerminologyChecks = false;
|
||||
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
||||
|
||||
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||
private boolean assumeValidRestReferences;
|
||||
private boolean errorForUnknownProfiles;
|
||||
private List<String> extensionDomains = Collections.emptyList();
|
||||
|
||||
|
@ -225,13 +226,32 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
|||
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
||||
.setExtensionDomains(getExtensionDomains())
|
||||
.setNoTerminologyChecks(isNoTerminologyChecks())
|
||||
.setValidatorResourceFetcher(getValidatorResourceFetcher())
|
||||
.setAssumeValidRestReferences(isAssumeValidRestReferences())
|
||||
.validate(wrappedWorkerContext, theValidationCtx);
|
||||
}
|
||||
|
||||
public IResourceValidator.IValidatorResourceFetcher getValidatorResourceFetcher() {
|
||||
return validatorResourceFetcher;
|
||||
}
|
||||
|
||||
public void setValidatorResourceFetcher(IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher) {
|
||||
this.validatorResourceFetcher = validatorResourceFetcher;
|
||||
}
|
||||
|
||||
|
||||
private List<String> getExtensionDomains() {
|
||||
return extensionDomains;
|
||||
}
|
||||
|
||||
public boolean isAssumeValidRestReferences() {
|
||||
return assumeValidRestReferences;
|
||||
}
|
||||
|
||||
public void setAssumeValidRestReferences(boolean assumeValidRestReferences) {
|
||||
this.assumeValidRestReferences = assumeValidRestReferences;
|
||||
}
|
||||
|
||||
|
||||
private static class WorkerContextWrapper implements IWorkerContext {
|
||||
private final HapiWorkerContext myWrap;
|
||||
|
@ -317,7 +337,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
|||
retVal = new ArrayList<>();
|
||||
for (StructureDefinition next : myWrap.allStructures()) {
|
||||
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) {
|
||||
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;
|
||||
if (theResult.asConceptDefinition() != null) {
|
||||
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) {
|
||||
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) {
|
||||
ValueSet convertedSource;
|
||||
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) {
|
||||
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;
|
||||
if (expanded.getValueset() != null) {
|
||||
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) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -398,7 +418,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
|||
ValueSet.ConceptSetComponent convertedInc = null;
|
||||
if (inc != null) {
|
||||
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) {
|
||||
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;
|
||||
if (expansion != null) {
|
||||
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) {
|
||||
throw new InternalErrorException(e);
|
||||
}
|
||||
|
@ -424,7 +444,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
|||
return null;
|
||||
}
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public org.hl7.fhir.r5.model.StructureDefinition fetchRawProfile(String url) {
|
||||
return fetchResource(org.hl7.fhir.r5.model.StructureDefinition.class, url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTypeNames() {
|
||||
return myWrap.getTypeNames();
|
||||
|
@ -605,7 +630,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
|||
|
||||
try {
|
||||
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) {
|
||||
throw new InternalErrorException(e);
|
||||
|
@ -620,7 +645,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r4.hapi.validation.BaseV
|
|||
ValueSet convertedVs = null;
|
||||
try {
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
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) {
|
||||
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);
|
||||
}
|
||||
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) {
|
||||
throw new InternalErrorException(e);
|
||||
|
|
|
@ -54,7 +54,9 @@ public class FhirInstanceValidator extends org.hl7.fhir.r5.hapi.validation.BaseV
|
|||
private boolean noTerminologyChecks = false;
|
||||
private volatile WorkerContextWrapper myWrappedWorkerContext;
|
||||
private boolean errorForUnknownProfiles;
|
||||
private boolean assumeValidRestReferences;
|
||||
private List<String> myExtensionDomains = Collections.emptyList();
|
||||
private IResourceValidator.IValidatorResourceFetcher validatorResourceFetcher;
|
||||
|
||||
/**
|
||||
* Constructor
|
||||
|
@ -220,9 +222,27 @@ public class FhirInstanceValidator extends org.hl7.fhir.r5.hapi.validation.BaseV
|
|||
.setErrorForUnknownProfiles(isErrorForUnknownProfiles())
|
||||
.setExtensionDomains(getExtensionDomains())
|
||||
.setNoTerminologyChecks(isNoTerminologyChecks())
|
||||
.setValidatorResourceFetcher(getValidatorResourceFetcher())
|
||||
.setAssumeValidRestReferences(isAssumeValidRestReferences())
|
||||
.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 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);
|
||||
}
|
||||
|
||||
@Override
|
||||
public StructureDefinition fetchRawProfile(String url) {
|
||||
return myWrap.fetchRawProfile(url);
|
||||
}
|
||||
|
||||
@Override
|
||||
public List<String> getTypeNames() {
|
||||
return myWrap.getTypeNames();
|
||||
|
@ -706,7 +731,7 @@ public class FhirInstanceValidator extends org.hl7.fhir.r5.hapi.validation.BaseV
|
|||
}
|
||||
|
||||
@Override
|
||||
public Base resolveReference(Object appContext, String url) throws FHIRException {
|
||||
public Base resolveReference(Object appContext, String url, Base refContext) throws FHIRException {
|
||||
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.utils.FHIRPathEngine;
|
||||
import org.hl7.fhir.instance.model.api.IBaseResource;
|
||||
import org.hl7.fhir.r5.utils.IResourceValidator;
|
||||
import org.junit.*;
|
||||
import org.junit.rules.TestRule;
|
||||
import org.junit.rules.TestWatcher;
|
||||
import org.junit.runner.Description;
|
||||
import org.mockito.internal.matchers.Any;
|
||||
import org.mockito.invocation.InvocationOnMock;
|
||||
import org.mockito.stubbing.Answer;
|
||||
|
||||
|
@ -41,8 +43,7 @@ import static org.hamcrest.Matchers.*;
|
|||
import static org.junit.Assert.*;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Matchers.any;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.Mockito.*;
|
||||
|
||||
public class FhirInstanceValidatorDstu3Test {
|
||||
|
||||
|
@ -975,7 +976,7 @@ public class FhirInstanceValidatorDstu3Test {
|
|||
myInstanceVal.setValidationSupport(myMockSupport);
|
||||
ValidationResult output = myVal.validateWithResult(input);
|
||||
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
|
||||
|
@ -1145,6 +1146,20 @@ public class FhirInstanceValidatorDstu3Test {
|
|||
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
|
||||
public void testValueWithWhitespace() throws IOException {
|
||||
String input = IOUtils.toString(FhirInstanceValidatorDstu3Test.class.getResourceAsStream("/dstu3-rick-test.json"), Charsets.UTF_8);
|
||||
|
|
|
@ -704,7 +704,7 @@ public class QuestionnaireResponseValidatorDstu3Test {
|
|||
coding.setCode("1293");
|
||||
QuestionnaireResponseItemAnswerComponent answer = qrItem.addAnswer();
|
||||
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));
|
||||
|
||||
String reference = qr.getQuestionnaire().getReference();
|
||||
|
|
|
@ -20,6 +20,7 @@ import org.slf4j.Logger;
|
|||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.Collections;
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.hamcrest.CoreMatchers.containsString;
|
||||
import static org.junit.Assert.assertEquals;
|
||||
|
@ -71,7 +72,7 @@ public class QuestionnaireValidatorDstu3Test {
|
|||
ValidationResult errors = myVal.validateWithResult(q);
|
||||
ourLog.info(errors.toString());
|
||||
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.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.ArgumentMatchers.*;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
||||
public class FhirInstanceValidatorR4Test extends BaseTest {
|
||||
|
||||
|
@ -397,7 +398,11 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
|||
|
||||
ValidationResult output = myVal.validateWithResult(encoded);
|
||||
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
|
||||
|
@ -633,8 +638,8 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
|||
CachingValidationSupport support = new CachingValidationSupport(new ValidationSupportChain(defaultSupport, valSupport));
|
||||
|
||||
// Prepopulate SDs
|
||||
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/dstu3/myconsent-profile.xml"));
|
||||
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/dstu3/myconsent-ext.xml"));
|
||||
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/r4/myconsent-profile.xml"));
|
||||
valSupport.addStructureDefinition(loadStructureDefinition(defaultSupport, "/r4/myconsent-ext.xml"));
|
||||
|
||||
FhirValidator val = ourCtx.newValidator();
|
||||
val.registerValidatorModule(new FhirInstanceValidator(support));
|
||||
|
@ -652,6 +657,8 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
|||
.setSystem("http://terminology.hl7.org/CodeSystem/consentcategorycodes")
|
||||
.setCode("acd");
|
||||
|
||||
|
||||
|
||||
// Should pass
|
||||
ValidationResult output = val.validateWithResult(input);
|
||||
List<SingleValidationMessage> all = logResultsAndReturnErrorOnes(output);
|
||||
|
@ -1031,7 +1038,7 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
|||
myInstanceVal.setValidationSupport(myMockSupport);
|
||||
ValidationResult output = myVal.validateWithResult(input);
|
||||
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
|
||||
|
@ -1250,6 +1257,21 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
|||
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
|
||||
@Ignore
|
||||
public void testValidateStructureDefinition() throws IOException {
|
||||
|
|
|
@ -23,6 +23,8 @@ import org.junit.Test;
|
|||
import org.slf4j.Logger;
|
||||
import org.slf4j.LoggerFactory;
|
||||
|
||||
import java.util.stream.Collectors;
|
||||
|
||||
import static org.junit.Assert.assertEquals;
|
||||
import static org.junit.Assert.assertThat;
|
||||
import static org.mockito.Mockito.mock;
|
||||
|
@ -72,7 +74,7 @@ public class QuestionnaireValidatorR4Test {
|
|||
ValidationResult errors = myVal.validateWithResult(q);
|
||||
ourLog.info(errors.toString());
|
||||
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.assertThat;
|
||||
import static org.junit.Assert.assertTrue;
|
||||
import static org.mockito.ArgumentMatchers.nullable;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.when;
|
||||
import static org.mockito.ArgumentMatchers.*;
|
||||
import static org.mockito.ArgumentMatchers.anyString;
|
||||
import static org.mockito.Mockito.*;
|
||||
import static org.mockito.Mockito.times;
|
||||
|
||||
public class FhirInstanceValidatorR5Test {
|
||||
|
||||
|
@ -415,6 +416,23 @@ public class FhirInstanceValidatorR5Test {
|
|||
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
|
||||
public void testIsNoTerminologyChecks() {
|
||||
assertFalse(myInstanceVal.isNoTerminologyChecks());
|
||||
|
@ -774,7 +792,7 @@ public class FhirInstanceValidatorR5Test {
|
|||
myInstanceVal.setValidationSupport(myMockSupport);
|
||||
ValidationResult output = myVal.validateWithResult(input);
|
||||
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
|
||||
|
|
|
@ -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": "%"
|
||||
}
|
||||
}
|
||||
]
|
||||
}
|
Loading…
Reference in New Issue