Impl displayLanguage for $lookup (#2908)
* Impl displayLanguage for $lookup - first cut * Added original lookupCode method * Added original lookupCode method to IFhirResourceDaoCodeSystem * Added more test cases and changelog
This commit is contained in:
parent
d34b0ff093
commit
090a8b0821
|
@ -259,6 +259,20 @@ public interface IValidationSupport {
|
|||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Look up a code using the system and code value
|
||||
*
|
||||
* @param theValidationSupportContext The validation support module will be passed in to this method. This is convenient in cases where the operation needs to make calls to
|
||||
* other method in the support chain, so that they can be passed through the entire chain. Implementations of this interface may always safely ignore this parameter.
|
||||
* @param theSystem The CodeSystem URL
|
||||
* @param theCode The code
|
||||
* @param theDisplayLanguage to filter out the designation by the display language, to return all designation, the this value to null
|
||||
*/
|
||||
@Nullable
|
||||
default LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
return null;
|
||||
}
|
||||
|
||||
/**
|
||||
* Look up a code using the system and code value
|
||||
*
|
||||
|
@ -269,7 +283,7 @@ public interface IValidationSupport {
|
|||
*/
|
||||
@Nullable
|
||||
default LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
return null;
|
||||
return lookupCode(theValidationSupportContext, theSystem, theCode, null);
|
||||
}
|
||||
|
||||
/**
|
||||
|
|
|
@ -299,7 +299,7 @@ public class ValidatorExamples {
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
// TODO: implement (or return null if your implementation does not support this function)
|
||||
return null;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,4 @@
|
|||
---
|
||||
type: add
|
||||
issue: 2905
|
||||
title: "Added displayLanguage support for CodeSystem $lookup operation to filter out designation by language."
|
|
@ -40,6 +40,9 @@ public interface IFhirResourceDaoCodeSystem<T extends IBaseResource, CD, CC> ext
|
|||
@Nonnull
|
||||
IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, CD theCoding, RequestDetails theRequestDetails);
|
||||
|
||||
@Nonnull
|
||||
IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, CD theCoding, IPrimitiveType<String> theDisplayLanguage, RequestDetails theRequestDetails);
|
||||
|
||||
SubsumesResult subsumes(IPrimitiveType<String> theCodeA, IPrimitiveType<String> theCodeB, IPrimitiveType<String> theSystem, CD theCodingA, CD theCodingB, RequestDetails theRequestDetails);
|
||||
|
||||
IValidationSupport.CodeValidationResult validateCode(IIdType theCodeSystemId, IPrimitiveType<String> theCodeSystemUrl, IPrimitiveType<String> theVersion, IPrimitiveType<String> theCode, IPrimitiveType<String> theDisplay, CD theCoding, CC theCodeableConcept, RequestDetails theRequestDetails);
|
||||
|
|
|
@ -231,6 +231,12 @@ public class FhirResourceDaoValueSetDstu2 extends BaseHapiFhirResourceDao<ValueS
|
|||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, CodingDt theCoding, RequestDetails theRequest) {
|
||||
return lookupCode(theCode, theSystem, theCoding, null, theRequest);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, CodingDt theCoding, IPrimitiveType<String> theDisplayLanguage, RequestDetails theRequest) {
|
||||
boolean haveCoding = theCoding != null && isNotBlank(theCoding.getSystem()) && isNotBlank(theCoding.getCode());
|
||||
boolean haveCode = theCode != null && theCode.isEmpty() == false;
|
||||
boolean haveSystem = theSystem != null && theSystem.isEmpty() == false;
|
||||
|
|
|
@ -87,9 +87,16 @@ public class FhirResourceDaoCodeSystemDstu3 extends BaseHapiFhirResourceDao<Code
|
|||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, Coding theCoding, RequestDetails theRequestDetails) {
|
||||
return lookupCode(theCode, theSystem, theCoding, null, theRequestDetails);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, Coding theCoding, IPrimitiveType<String> theDisplayLanguage, RequestDetails theRequestDetails) {
|
||||
boolean haveCoding = theCoding != null && isNotBlank(theCoding.getSystem()) && isNotBlank(theCoding.getCode());
|
||||
boolean haveCode = theCode != null && theCode.isEmpty() == false;
|
||||
boolean haveSystem = theSystem != null && theSystem.isEmpty() == false;
|
||||
boolean haveDisplayLanguage = theDisplayLanguage != null && theDisplayLanguage.isEmpty() == false;
|
||||
|
||||
if (!haveCoding && !(haveSystem && haveCode)) {
|
||||
throw new InvalidRequestException("No code, coding, or codeableConcept provided to validate");
|
||||
|
@ -112,11 +119,16 @@ public class FhirResourceDaoCodeSystemDstu3 extends BaseHapiFhirResourceDao<Code
|
|||
system = theSystem.getValue();
|
||||
}
|
||||
|
||||
String displayLanguage = null;
|
||||
if (haveDisplayLanguage) {
|
||||
displayLanguage = theDisplayLanguage.getValue();
|
||||
}
|
||||
|
||||
ourLog.debug("Looking up {} / {}", system, code);
|
||||
|
||||
if (myValidationSupport.isCodeSystemSupported(new ValidationSupportContext(myValidationSupport), system)) {
|
||||
ourLog.debug("Code system {} is supported", system);
|
||||
IValidationSupport.LookupCodeResult result = myValidationSupport.lookupCode(new ValidationSupportContext(myValidationSupport), system, code);
|
||||
IValidationSupport.LookupCodeResult result = myValidationSupport.lookupCode(new ValidationSupportContext(myValidationSupport), system, code, displayLanguage);
|
||||
if (result != null) {
|
||||
return result;
|
||||
}
|
||||
|
|
|
@ -82,9 +82,16 @@ public class FhirResourceDaoCodeSystemR4 extends BaseHapiFhirResourceDao<CodeSys
|
|||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, Coding theCoding, RequestDetails theRequestDetails) {
|
||||
return lookupCode(theCode, theSystem, theCoding, null, theRequestDetails);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, Coding theCoding, IPrimitiveType<String> theDisplayLanguage, RequestDetails theRequestDetails) {
|
||||
boolean haveCoding = theCoding != null && isNotBlank(theCoding.getSystem()) && isNotBlank(theCoding.getCode());
|
||||
boolean haveCode = theCode != null && theCode.isEmpty() == false;
|
||||
boolean haveSystem = theSystem != null && theSystem.isEmpty() == false;
|
||||
boolean haveDisplayLanguage = theDisplayLanguage != null && theDisplayLanguage.isEmpty() == false;
|
||||
|
||||
if (!haveCoding && !(haveSystem && haveCode)) {
|
||||
throw new InvalidRequestException("No code, coding, or codeableConcept provided to validate");
|
||||
|
@ -107,12 +114,17 @@ public class FhirResourceDaoCodeSystemR4 extends BaseHapiFhirResourceDao<CodeSys
|
|||
system = theSystem.getValue();
|
||||
}
|
||||
|
||||
String displayLanguage = null;
|
||||
if (haveDisplayLanguage) {
|
||||
displayLanguage = theDisplayLanguage.getValue();
|
||||
}
|
||||
|
||||
ourLog.debug("Looking up {} / {}", system, code);
|
||||
|
||||
if (myValidationSupport.isCodeSystemSupported(new ValidationSupportContext(myValidationSupport), system)) {
|
||||
|
||||
ourLog.debug("Code system {} is supported", system);
|
||||
IValidationSupport.LookupCodeResult retVal = myValidationSupport.lookupCode(new ValidationSupportContext(myValidationSupport), system, code);
|
||||
IValidationSupport.LookupCodeResult retVal = myValidationSupport.lookupCode(new ValidationSupportContext(myValidationSupport), system, code, displayLanguage);
|
||||
if (retVal != null) {
|
||||
return retVal;
|
||||
}
|
||||
|
|
|
@ -55,7 +55,6 @@ import java.util.List;
|
|||
import java.util.Set;
|
||||
|
||||
import static ca.uhn.fhir.jpa.dao.FhirResourceDaoValueSetDstu2.toStringOrNull;
|
||||
import static ca.uhn.fhir.jpa.dao.dstu3.FhirResourceDaoValueSetDstu3.vsValidateCodeOptions;
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
|
||||
public class FhirResourceDaoCodeSystemR5 extends BaseHapiFhirResourceDao<CodeSystem> implements IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept> {
|
||||
|
@ -87,9 +86,16 @@ public class FhirResourceDaoCodeSystemR5 extends BaseHapiFhirResourceDao<CodeSys
|
|||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, Coding theCoding, RequestDetails theRequestDetails) {
|
||||
return lookupCode(theCode, theSystem, theCoding, null, theRequestDetails);
|
||||
}
|
||||
|
||||
@Nonnull
|
||||
@Override
|
||||
public IValidationSupport.LookupCodeResult lookupCode(IPrimitiveType<String> theCode, IPrimitiveType<String> theSystem, Coding theCoding, IPrimitiveType<String> theDisplayLanguage, RequestDetails theRequestDetails) {
|
||||
boolean haveCoding = theCoding != null && isNotBlank(theCoding.getSystem()) && isNotBlank(theCoding.getCode());
|
||||
boolean haveCode = theCode != null && theCode.isEmpty() == false;
|
||||
boolean haveSystem = theSystem != null && theSystem.isEmpty() == false;
|
||||
boolean haveDisplayLanguage = theDisplayLanguage != null && theDisplayLanguage.isEmpty() == false;
|
||||
|
||||
if (!haveCoding && !(haveSystem && haveCode)) {
|
||||
throw new InvalidRequestException("No code, coding, or codeableConcept provided to validate");
|
||||
|
@ -112,12 +118,17 @@ public class FhirResourceDaoCodeSystemR5 extends BaseHapiFhirResourceDao<CodeSys
|
|||
system = theSystem.getValue();
|
||||
}
|
||||
|
||||
String displayLanguage = null;
|
||||
if (haveDisplayLanguage) {
|
||||
displayLanguage = theDisplayLanguage.getValue();
|
||||
}
|
||||
|
||||
ourLog.info("Looking up {} / {}", system, code);
|
||||
|
||||
if (myValidationSupport.isCodeSystemSupported(new ValidationSupportContext(myValidationSupport), system)) {
|
||||
|
||||
ourLog.info("Code system {} is supported", system);
|
||||
IValidationSupport.LookupCodeResult retVal = myValidationSupport.lookupCode(new ValidationSupportContext(myValidationSupport), system, code);
|
||||
IValidationSupport.LookupCodeResult retVal = myValidationSupport.lookupCode(new ValidationSupportContext(myValidationSupport), system, code, displayLanguage);
|
||||
if (retVal != null) {
|
||||
return retVal;
|
||||
}
|
||||
|
|
|
@ -112,7 +112,7 @@ public class BaseJpaResourceProviderValueSetDstu2 extends JpaResourceProviderDst
|
|||
startRequest(theServletRequest);
|
||||
try {
|
||||
IFhirResourceDaoCodeSystem<ValueSet, CodingDt, CodeableConceptDt> dao = (IFhirResourceDaoCodeSystem<ValueSet, CodingDt, CodeableConceptDt>) getDao();
|
||||
IValidationSupport.LookupCodeResult result = dao.lookupCode(theCode, theSystem, theCoding, theRequestDetails);
|
||||
IValidationSupport.LookupCodeResult result = dao.lookupCode(theCode, theSystem, theCoding, null, theRequestDetails);
|
||||
if (result.isFound() == false) {
|
||||
throw new ResourceNotFoundException("Unable to find code[" + result.getSearchedForCode() + "] in system[" + result.getSearchedForSystem() + "]");
|
||||
}
|
||||
|
|
|
@ -54,6 +54,7 @@ public class BaseJpaResourceProviderCodeSystemDstu3 extends JpaResourceProviderD
|
|||
@OperationParam(name = "system", min = 0, max = 1) UriType theSystem,
|
||||
@OperationParam(name = "coding", min = 0, max = 1) Coding theCoding,
|
||||
@OperationParam(name = "version", min=0, max=1) StringType theVersion,
|
||||
@OperationParam(name = "displayLanguage", min=0, max=1) CodeType theDisplayLanguage,
|
||||
@OperationParam(name = "property", min = 0, max = OperationParam.MAX_UNLIMITED) List<CodeType> theProperties,
|
||||
RequestDetails theRequestDetails
|
||||
) {
|
||||
|
@ -63,9 +64,9 @@ public class BaseJpaResourceProviderCodeSystemDstu3 extends JpaResourceProviderD
|
|||
IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept> dao = (IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept>) getDao();
|
||||
IValidationSupport.LookupCodeResult result;
|
||||
if (theVersion != null) {
|
||||
result = dao.lookupCode(theCode, new UriType(theSystem.getValue() + "|" + theVersion), theCoding, theRequestDetails);
|
||||
result = dao.lookupCode(theCode, new UriType(theSystem.getValue() + "|" + theVersion), theCoding, theDisplayLanguage, theRequestDetails);
|
||||
} else {
|
||||
result = dao.lookupCode(theCode, theSystem, theCoding, theRequestDetails);
|
||||
result = dao.lookupCode(theCode, theSystem, theCoding, theDisplayLanguage, theRequestDetails);
|
||||
}
|
||||
result.throwNotFoundIfAppropriate();
|
||||
return (Parameters) result.toParameters(theRequestDetails.getFhirContext(), theProperties);
|
||||
|
|
|
@ -61,6 +61,7 @@ public class BaseJpaResourceProviderCodeSystemR4 extends JpaResourceProviderR4<C
|
|||
@OperationParam(name="system", min=0, max=1) UriType theSystem,
|
||||
@OperationParam(name="coding", min=0, max=1) Coding theCoding,
|
||||
@OperationParam(name="version", min=0, max=1) StringType theVersion,
|
||||
@OperationParam(name="displayLanguage", min=0, max=1) CodeType theDisplayLanguage,
|
||||
@OperationParam(name="property", min = 0, max = OperationParam.MAX_UNLIMITED) List<CodeType> theProperties,
|
||||
RequestDetails theRequestDetails
|
||||
) {
|
||||
|
@ -70,9 +71,9 @@ public class BaseJpaResourceProviderCodeSystemR4 extends JpaResourceProviderR4<C
|
|||
IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept> dao = (IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept>) getDao();
|
||||
IValidationSupport.LookupCodeResult result;
|
||||
if (theVersion != null) {
|
||||
result = dao.lookupCode(theCode, new UriType(theSystem.getValue() + "|" + theVersion), theCoding, theRequestDetails);
|
||||
result = dao.lookupCode(theCode, new UriType(theSystem.getValue() + "|" + theVersion), theCoding, theDisplayLanguage, theRequestDetails);
|
||||
} else {
|
||||
result = dao.lookupCode(theCode, theSystem, theCoding, theRequestDetails);
|
||||
result = dao.lookupCode(theCode, theSystem, theCoding, theDisplayLanguage, theRequestDetails);
|
||||
}
|
||||
result.throwNotFoundIfAppropriate();
|
||||
return (Parameters) result.toParameters(theRequestDetails.getFhirContext(), theProperties);
|
||||
|
|
|
@ -60,6 +60,7 @@ public class BaseJpaResourceProviderCodeSystemR5 extends JpaResourceProviderR5<C
|
|||
@OperationParam(name="system", min=0, max=1) UriType theSystem,
|
||||
@OperationParam(name="coding", min=0, max=1) Coding theCoding,
|
||||
@OperationParam(name="version", min=0, max=1) StringType theVersion,
|
||||
@OperationParam(name="displayLanguage", min=0, max=1) CodeType theDisplayLanguage,
|
||||
@OperationParam(name = "property", min = 0, max = OperationParam.MAX_UNLIMITED) List<CodeType> theProperties,
|
||||
RequestDetails theRequestDetails
|
||||
) {
|
||||
|
@ -69,9 +70,9 @@ public class BaseJpaResourceProviderCodeSystemR5 extends JpaResourceProviderR5<C
|
|||
IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept> dao = (IFhirResourceDaoCodeSystem<CodeSystem, Coding, CodeableConcept>) getDao();
|
||||
IValidationSupport.LookupCodeResult result;
|
||||
if (theVersion != null) {
|
||||
result = dao.lookupCode(theCode, new UriType(theSystem.getValue() + "|" + theVersion), theCoding, theRequestDetails);
|
||||
result = dao.lookupCode(theCode, new UriType(theSystem.getValue() + "|" + theVersion), theCoding, theDisplayLanguage, theRequestDetails);
|
||||
} else {
|
||||
result = dao.lookupCode(theCode, theSystem, theCoding, theRequestDetails);
|
||||
result = dao.lookupCode(theCode, theSystem, theCoding, theDisplayLanguage, theRequestDetails);
|
||||
}
|
||||
result.throwNotFoundIfAppropriate();
|
||||
return (Parameters) result.toParameters(theRequestDetails.getFhirContext(), theProperties);
|
||||
|
|
|
@ -1989,7 +1989,7 @@ public abstract class BaseTermReadSvcImpl implements ITermReadSvc {
|
|||
|
||||
protected abstract ValueSet toCanonicalValueSet(IBaseResource theValueSet);
|
||||
|
||||
protected IValidationSupport.LookupCodeResult lookupCode(String theSystem, String theCode) {
|
||||
protected IValidationSupport.LookupCodeResult lookupCode(String theSystem, String theCode, String theDisplayLanguage) {
|
||||
TransactionTemplate txTemplate = new TransactionTemplate(myTransactionManager);
|
||||
return txTemplate.execute(t -> {
|
||||
Optional<TermConcept> codeOpt = findCode(theSystem, theCode);
|
||||
|
@ -2006,6 +2006,8 @@ public abstract class BaseTermReadSvcImpl implements ITermReadSvc {
|
|||
|
||||
for (TermConceptDesignation next : code.getDesignations()) {
|
||||
IValidationSupport.ConceptDesignation designation = new IValidationSupport.ConceptDesignation();
|
||||
// filter out the designation based on displayLanguage if any
|
||||
if (isDisplayLanguageMatch(theDisplayLanguage, next.getLanguage())) {
|
||||
designation.setLanguage(next.getLanguage());
|
||||
designation.setUseSystem(next.getUseSystem());
|
||||
designation.setUseCode(next.getUseCode());
|
||||
|
@ -2013,6 +2015,7 @@ public abstract class BaseTermReadSvcImpl implements ITermReadSvc {
|
|||
designation.setValue(next.getValue());
|
||||
result.getDesignations().add(designation);
|
||||
}
|
||||
}
|
||||
|
||||
for (TermConceptProperty next : code.getProperties()) {
|
||||
if (next.getType() == TermConceptPropertyTypeEnum.CODING) {
|
||||
|
@ -2034,6 +2037,7 @@ public abstract class BaseTermReadSvcImpl implements ITermReadSvc {
|
|||
});
|
||||
}
|
||||
|
||||
|
||||
@Nullable
|
||||
private ConceptSubsumptionOutcome testForSubsumption(SearchSession theSearchSession, TermConcept theLeft, TermConcept theRight, ConceptSubsumptionOutcome theOutput) {
|
||||
List<TermConcept> fetch = theSearchSession.search(TermConcept.class)
|
||||
|
@ -2481,4 +2485,11 @@ public abstract class BaseTermReadSvcImpl implements ITermReadSvc {
|
|||
return termConcept;
|
||||
}
|
||||
|
||||
static boolean isDisplayLanguageMatch(String theReqLang, String theStoredLang) {
|
||||
// NOTE: return the designation when one of then is not specified.
|
||||
if (theReqLang == null || theStoredLang == null)
|
||||
return true;
|
||||
|
||||
return theReqLang.equalsIgnoreCase(theStoredLang);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -145,8 +145,8 @@ public class TermReadSvcDstu3 extends BaseTermReadSvcImpl implements IValidation
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
return super.lookupCode(theSystem, theCode);
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
return super.lookupCode(theSystem, theCode, theDisplayLanguage);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -92,8 +92,8 @@ public class TermReadSvcR4 extends BaseTermReadSvcImpl implements ITermReadSvcR4
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
return super.lookupCode(theSystem, theCode);
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
return super.lookupCode(theSystem, theCode, theDisplayLanguage);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -144,8 +144,8 @@ public class TermReadSvcR5 extends BaseTermReadSvcImpl implements IValidationSup
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
return super.lookupCode(theSystem, theCode);
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
return super.lookupCode(theSystem, theCode, theDisplayLanguage);
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -0,0 +1,173 @@
|
|||
package ca.uhn.fhir.jpa.provider.dstu3;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.hl7.fhir.dstu3.model.BooleanType;
|
||||
import org.hl7.fhir.dstu3.model.CodeSystem;
|
||||
import org.hl7.fhir.dstu3.model.CodeType;
|
||||
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.dstu3.model.UriType;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
public class ResourceProviderR3CodeSystemDesignationTest extends BaseResourceProviderDstu3Test {
|
||||
|
||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderR3CodeSystemDesignationTest.class);
|
||||
|
||||
private static final String CS_ACME_URL = "http://acme.org";
|
||||
|
||||
@BeforeEach
|
||||
@Transactional
|
||||
public void before02() throws IOException {
|
||||
CodeSystem cs = loadResourceFromClasspath(CodeSystem.class, "/extensional-case-3-cs-with-designations-lang.xml");
|
||||
myCodeSystemDao.create(cs, mySrd).getId().toUnqualifiedVersionless();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupWithDisplayLanguage() {
|
||||
Parameters respParam = ourClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.andParameter("displayLanguage",new CodeType("de-AT"))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(2, designationList.size());
|
||||
|
||||
// 1. de-AT:Systolic blood pressure 12 hour minimum
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("de-AT", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("de-AT:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 2. Systolic blood pressure 12 hour minimum (no language)
|
||||
designation = designationList.get(1);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testLookupWithNonExistLanguage() {
|
||||
Parameters respParam = ourClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.andParameter("displayLanguage",new CodeType("zh-CN"))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(1, designationList.size());
|
||||
|
||||
// 1. Systolic blood pressure 12 hour minimum (no language)
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupWithoutDisplayLanguage() {
|
||||
Parameters respParam = ourClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(3, designationList.size());
|
||||
|
||||
// 1. fr-FR:Systolic blood pressure 12 hour minimum
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("fr-FR", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("fr-FR:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 2. de-AT:Systolic blood pressure 12 hour minimum
|
||||
designation = designationList.get(1);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("de-AT", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("de-AT:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 3. Systolic blood pressure 12 hour minimum (no language)
|
||||
designation = designationList.get(2);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
private List<ParametersParameterComponent> getDesignations(List<ParametersParameterComponent> parameterList) {
|
||||
|
||||
List<ParametersParameterComponent> designationList = new ArrayList<>();
|
||||
|
||||
for (ParametersParameterComponent parameter : parameterList) {
|
||||
if ("designation".equals(parameter.getName()))
|
||||
designationList.add(parameter);
|
||||
}
|
||||
return designationList;
|
||||
|
||||
}
|
||||
}
|
|
@ -1,5 +1,35 @@
|
|||
package ca.uhn.fhir.jpa.provider.r4;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.hl7.fhir.r4.model.Bundle;
|
||||
import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
|
||||
import org.hl7.fhir.r4.model.Parameters;
|
||||
import org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent;
|
||||
import org.hl7.fhir.r4.model.Patient;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.context.ContextLoader;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
||||
import org.springframework.web.context.support.GenericWebApplicationContext;
|
||||
import org.springframework.web.context.support.WebApplicationContextUtils;
|
||||
import org.springframework.web.cors.CorsConfiguration;
|
||||
import org.springframework.web.servlet.DispatcherServlet;
|
||||
|
||||
import ca.uhn.fhir.context.support.IValidationSupport;
|
||||
import ca.uhn.fhir.jpa.api.dao.DaoRegistry;
|
||||
import ca.uhn.fhir.jpa.api.svc.ISearchCoordinatorSvc;
|
||||
|
@ -26,35 +56,6 @@ import ca.uhn.fhir.rest.server.interceptor.ResponseHighlighterInterceptor;
|
|||
import ca.uhn.fhir.rest.server.provider.DeleteExpungeProvider;
|
||||
import ca.uhn.fhir.rest.server.provider.ReindexProvider;
|
||||
import ca.uhn.fhir.test.utilities.JettyUtil;
|
||||
import org.apache.http.impl.client.CloseableHttpClient;
|
||||
import org.apache.http.impl.client.HttpClientBuilder;
|
||||
import org.apache.http.impl.conn.PoolingHttpClientConnectionManager;
|
||||
import org.eclipse.jetty.server.Server;
|
||||
import org.eclipse.jetty.servlet.ServletContextHandler;
|
||||
import org.eclipse.jetty.servlet.ServletHolder;
|
||||
import org.hl7.fhir.r4.model.Bundle;
|
||||
import org.hl7.fhir.r4.model.Bundle.BundleEntryComponent;
|
||||
import org.hl7.fhir.r4.model.Parameters;
|
||||
import org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent;
|
||||
import org.hl7.fhir.r4.model.Patient;
|
||||
import org.junit.jupiter.api.AfterAll;
|
||||
import org.junit.jupiter.api.AfterEach;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.springframework.beans.factory.annotation.Autowired;
|
||||
import org.springframework.web.context.ContextLoader;
|
||||
import org.springframework.web.context.WebApplicationContext;
|
||||
import org.springframework.web.context.support.AnnotationConfigWebApplicationContext;
|
||||
import org.springframework.web.context.support.GenericWebApplicationContext;
|
||||
import org.springframework.web.context.support.WebApplicationContextUtils;
|
||||
import org.springframework.web.cors.CorsConfiguration;
|
||||
import org.springframework.web.servlet.DispatcherServlet;
|
||||
|
||||
import java.util.ArrayList;
|
||||
import java.util.Arrays;
|
||||
import java.util.List;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import static org.apache.commons.lang3.StringUtils.isNotBlank;
|
||||
|
||||
public abstract class BaseResourceProviderR4Test extends BaseJpaR4Test {
|
||||
|
||||
|
|
|
@ -0,0 +1,173 @@
|
|||
package ca.uhn.fhir.jpa.provider.r4;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.hl7.fhir.r4.model.BooleanType;
|
||||
import org.hl7.fhir.r4.model.CodeSystem;
|
||||
import org.hl7.fhir.r4.model.CodeType;
|
||||
import org.hl7.fhir.r4.model.Parameters;
|
||||
import org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent;
|
||||
import org.hl7.fhir.r4.model.StringType;
|
||||
import org.hl7.fhir.r4.model.UriType;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
public class ResourceProviderR4CodeSystemDesignationTest extends BaseResourceProviderR4Test {
|
||||
|
||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderR4CodeSystemDesignationTest.class);
|
||||
|
||||
private static final String CS_ACME_URL = "http://acme.org";
|
||||
|
||||
@BeforeEach
|
||||
@Transactional
|
||||
public void before02() throws IOException {
|
||||
CodeSystem cs = loadResourceFromClasspath(CodeSystem.class, "/extensional-case-3-cs-with-designations-lang.xml");
|
||||
myCodeSystemDao.create(cs, mySrd).getId().toUnqualifiedVersionless();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupWithDisplayLanguage() {
|
||||
Parameters respParam = myClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.andParameter("displayLanguage",new CodeType("de-AT"))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(2, designationList.size());
|
||||
|
||||
// 1. de-AT:Systolic blood pressure 12 hour minimum
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("de-AT", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("de-AT:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 2. Systolic blood pressure 12 hour minimum (no language)
|
||||
designation = designationList.get(1);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testLookupWithNonExistLanguage() {
|
||||
Parameters respParam = myClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.andParameter("displayLanguage",new CodeType("zh-CN"))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(1, designationList.size());
|
||||
|
||||
// 1. Systolic blood pressure 12 hour minimum (no language)
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupWithoutDisplayLanguage() {
|
||||
Parameters respParam = myClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(3, designationList.size());
|
||||
|
||||
// 1. fr-FR:Systolic blood pressure 12 hour minimum
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("fr-FR", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("fr-FR:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 2. de-AT:Systolic blood pressure 12 hour minimum
|
||||
designation = designationList.get(1);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("de-AT", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("de-AT:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 3. Systolic blood pressure 12 hour minimum (no language)
|
||||
designation = designationList.get(2);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
private List<ParametersParameterComponent> getDesignations(List<ParametersParameterComponent> parameterList) {
|
||||
|
||||
List<ParametersParameterComponent> designationList = new ArrayList<>();
|
||||
|
||||
for (ParametersParameterComponent parameter : parameterList) {
|
||||
if ("designation".equals(parameter.getName()))
|
||||
designationList.add(parameter);
|
||||
}
|
||||
return designationList;
|
||||
|
||||
}
|
||||
}
|
|
@ -0,0 +1,173 @@
|
|||
package ca.uhn.fhir.jpa.provider.r5;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.ArrayList;
|
||||
import java.util.List;
|
||||
|
||||
import org.hl7.fhir.r5.model.BooleanType;
|
||||
import org.hl7.fhir.r5.model.CodeSystem;
|
||||
import org.hl7.fhir.r5.model.CodeType;
|
||||
import org.hl7.fhir.r5.model.Parameters;
|
||||
import org.hl7.fhir.r5.model.Parameters.ParametersParameterComponent;
|
||||
import org.hl7.fhir.r5.model.StringType;
|
||||
import org.hl7.fhir.r5.model.UriType;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
import org.springframework.transaction.annotation.Transactional;
|
||||
|
||||
public class ResourceProviderR5CodeSystemDesignationTest extends BaseResourceProviderR5Test {
|
||||
|
||||
private static final org.slf4j.Logger ourLog = org.slf4j.LoggerFactory.getLogger(ResourceProviderR5CodeSystemDesignationTest.class);
|
||||
|
||||
private static final String CS_ACME_URL = "http://acme.org";
|
||||
|
||||
@BeforeEach
|
||||
@Transactional
|
||||
public void before02() throws IOException {
|
||||
CodeSystem cs = loadResourceFromClasspath(CodeSystem.class, "/extensional-case-3-cs-with-designations-lang.xml");
|
||||
myCodeSystemDao.create(cs, mySrd).getId().toUnqualifiedVersionless();
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupWithDisplayLanguage() {
|
||||
Parameters respParam = myClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.andParameter("displayLanguage",new CodeType("de-AT"))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(2, designationList.size());
|
||||
|
||||
// 1. de-AT:Systolic blood pressure 12 hour minimum
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("de-AT", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("de-AT:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 2. Systolic blood pressure 12 hour minimum (no language)
|
||||
designation = designationList.get(1);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
|
||||
|
||||
@Test
|
||||
public void testLookupWithNonExistLanguage() {
|
||||
Parameters respParam = myClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.andParameter("displayLanguage",new CodeType("zh-CN"))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(1, designationList.size());
|
||||
|
||||
// 1. Systolic blood pressure 12 hour minimum (no language)
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void testLookupWithoutDisplayLanguage() {
|
||||
Parameters respParam = myClient
|
||||
.operation()
|
||||
.onType(CodeSystem.class)
|
||||
.named("lookup")
|
||||
.withParameter(Parameters.class, "code", new CodeType("8494-7"))
|
||||
.andParameter("system", new UriType(CS_ACME_URL))
|
||||
.execute();
|
||||
|
||||
String resp = myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParam);
|
||||
ourLog.info(resp);
|
||||
|
||||
|
||||
List<ParametersParameterComponent> parameterList = respParam.getParameter();
|
||||
List<ParametersParameterComponent> designationList = getDesignations(parameterList);
|
||||
|
||||
assertEquals("display", respParam.getParameter().get(0).getName());
|
||||
assertEquals(("Systolic blood pressure 12 hour minimum"), ((StringType) respParam.getParameter().get(0).getValue()).getValue());
|
||||
|
||||
assertEquals("abstract", respParam.getParameter().get(1).getName());
|
||||
assertEquals(false, ((BooleanType) respParam.getParameter().get(1).getValue()).getValue());
|
||||
|
||||
//-- designationList
|
||||
assertEquals(3, designationList.size());
|
||||
|
||||
// 1. fr-FR:Systolic blood pressure 12 hour minimum
|
||||
ParametersParameterComponent designation = designationList.get(0);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("fr-FR", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("fr-FR:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 2. de-AT:Systolic blood pressure 12 hour minimum
|
||||
designation = designationList.get(1);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertEquals("de-AT", designation.getPart().get(0).getValue().toString());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("de-AT:Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
// 3. Systolic blood pressure 12 hour minimum (no language)
|
||||
designation = designationList.get(2);
|
||||
assertEquals("language", designation.getPart().get(0).getName());
|
||||
assertNull(designation.getPart().get(0).getValue());
|
||||
assertEquals("value", designation.getPart().get(2).getName());
|
||||
assertEquals("Systolic blood pressure 12 hour minimum", designation.getPart().get(2).getValue().toString());
|
||||
|
||||
}
|
||||
private List<ParametersParameterComponent> getDesignations(List<ParametersParameterComponent> parameterList) {
|
||||
|
||||
List<ParametersParameterComponent> designationList = new ArrayList<>();
|
||||
|
||||
for (ParametersParameterComponent parameter : parameterList) {
|
||||
if ("designation".equals(parameter.getName()))
|
||||
designationList.add(parameter);
|
||||
}
|
||||
return designationList;
|
||||
|
||||
}
|
||||
}
|
|
@ -369,7 +369,7 @@ public class TerminologySvcDeltaR4Test extends BaseJpaR4Test {
|
|||
assertEquals("http://foo", outcome.getUrl());
|
||||
assertEquals(CodeSystem.CodeSystemContentMode.NOTPRESENT, outcome.getContent());
|
||||
|
||||
IValidationSupport.LookupCodeResult lookup = myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "CBC");
|
||||
IValidationSupport.LookupCodeResult lookup = myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "CBC", null);
|
||||
assertEquals("Complete Blood Count", lookup.getCodeDisplay());
|
||||
}
|
||||
|
||||
|
@ -433,7 +433,7 @@ public class TerminologySvcDeltaR4Test extends BaseJpaR4Test {
|
|||
|
||||
UploadStatistics outcome = myTermCodeSystemStorageSvc.applyDeltaCodeSystemsAdd("http://foo", delta);
|
||||
assertEquals(2, outcome.getUpdatedConceptCount());
|
||||
assertEquals("CODEA0", myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "codea").getCodeDisplay());
|
||||
assertEquals("CODEA0", myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "codea", null).getCodeDisplay());
|
||||
|
||||
// Add codes again with different display
|
||||
delta = new CustomTerminologySet();
|
||||
|
@ -441,12 +441,12 @@ public class TerminologySvcDeltaR4Test extends BaseJpaR4Test {
|
|||
delta.addRootConcept("codeb", "CODEB1");
|
||||
outcome = myTermCodeSystemStorageSvc.applyDeltaCodeSystemsAdd("http://foo", delta);
|
||||
assertEquals(2, outcome.getUpdatedConceptCount());
|
||||
assertEquals("CODEA1", myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "codea").getCodeDisplay());
|
||||
assertEquals("CODEA1", myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "codea", null).getCodeDisplay());
|
||||
|
||||
// Add codes again with no changes
|
||||
outcome = myTermCodeSystemStorageSvc.applyDeltaCodeSystemsAdd("http://foo", delta);
|
||||
assertEquals(2, outcome.getUpdatedConceptCount());
|
||||
assertEquals("CODEA1", myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "codea").getCodeDisplay());
|
||||
assertEquals("CODEA1", myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo", "codea", null).getCodeDisplay());
|
||||
}
|
||||
|
||||
@Test
|
||||
|
@ -483,7 +483,7 @@ public class TerminologySvcDeltaR4Test extends BaseJpaR4Test {
|
|||
.setCode("useless_sct_code")
|
||||
.setValue(new Coding("http://snomed.info", "1234567", "Choked on large meal (finding)"));
|
||||
|
||||
IValidationSupport.LookupCodeResult result = myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo/cs", "lunch");
|
||||
IValidationSupport.LookupCodeResult result = myTermSvc.lookupCode(new ValidationSupportContext(myValidationSupport), "http://foo/cs", "lunch", null);
|
||||
assertEquals(true, result.isFound());
|
||||
assertEquals("lunch", result.getSearchedForCode());
|
||||
assertEquals("http://foo/cs", result.getSearchedForSystem());
|
||||
|
|
|
@ -0,0 +1,204 @@
|
|||
<CodeSystem xmlns="http://hl7.org/fhir">
|
||||
<url value="http://acme.org" />
|
||||
<concept>
|
||||
<code value="8450-9" />
|
||||
<display value="Systolic blood pressure--expiration" />
|
||||
<designation>
|
||||
<language value="nl"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="Systolische bloeddruk - expiratie"/>
|
||||
</designation>
|
||||
<designation>
|
||||
<language value="sv"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="Systoliskt blodtryck - utgång"/>
|
||||
</designation>
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="11378-7" />
|
||||
<display value="Systolic blood pressure at First encounter" />
|
||||
<designation>
|
||||
<language value="nl"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="NL:Systolic blood pressure at First encounter"/>
|
||||
</designation>
|
||||
<designation>
|
||||
<language value="sv"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="SV:Systolic blood pressure at First encounter"/>
|
||||
</designation>
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8493-9" />
|
||||
<display value="Systolic blood pressure 10 hour minimum" />
|
||||
<designation>
|
||||
<language value="fr-FR"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="fr-FR:Systolic blood pressure 10 hour minimum"/>
|
||||
</designation>
|
||||
<designation>
|
||||
<language value="de-AT"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="de-AT:Systolic blood pressure 10 hour minimum"/>
|
||||
</designation>
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8494-7" />
|
||||
<display value="Systolic blood pressure 12 hour minimum" />
|
||||
<designation>
|
||||
<language value="fr-FR"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="fr-FR:Systolic blood pressure 12 hour minimum"/>
|
||||
</designation>
|
||||
<designation>
|
||||
<language value="de-AT"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="de-AT:Systolic blood pressure 12 hour minimum"/>
|
||||
</designation>
|
||||
<designation>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="Systolic blood pressure 12 hour minimum"/>
|
||||
</designation>
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8495-4" />
|
||||
<display value="Systolic blood pressure 24 hour minimum" />
|
||||
<designation>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="Systolic blood pressure 12 hour minimum"/>
|
||||
</designation>
|
||||
<designation>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="de-AT:Systolic blood pressure 12 hour minimum"/>
|
||||
</designation>
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8451-7" />
|
||||
<display value="Systolic blood pressure--inspiration" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8452-5" />
|
||||
<display value="Systolic blood pressure.inspiration - expiration" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8459-0" />
|
||||
<display value="Systolic blood pressure--sitting" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8460-8" />
|
||||
<display value="Systolic blood pressure--standing" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8461-6" />
|
||||
<display value="Systolic blood pressure--supine" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8479-8" />
|
||||
<display value="Systolic blood pressure by palpation" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8480-6" />
|
||||
<display value="Systolic blood pressure" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8481-4" />
|
||||
<display value="Systolic blood pressure 1 hour maximum" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8482-2" />
|
||||
<display value="Systolic blood pressure 8 hour maximum" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8483-0" />
|
||||
<display value="Systolic blood pressure 10 hour maximum" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8484-8" />
|
||||
<display value="Systolic blood pressure 12 hour maximum" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8485-5" />
|
||||
<display value="Systolic blood pressure 24 hour maximum" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8486-3" />
|
||||
<display value="Systolic blood pressure 1 hour mean" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8487-1" />
|
||||
<display value="Systolic blood pressure 8 hour mean" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8488-9" />
|
||||
<display value="Systolic blood pressure 10 hour mean" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8489-7" />
|
||||
<display value="Systolic blood pressure 12 hour mean" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8490-5" />
|
||||
<display value="Systolic blood pressure 24 hour mean" />
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8491-3" />
|
||||
<display value="Systolic blood pressure 1 hour minimum" />
|
||||
<designation>
|
||||
<language value="nl"/>
|
||||
<use>
|
||||
<system value="http://snomed.info/sct"/>
|
||||
<code value="900000000000013009"/>
|
||||
<display value="Synonym"/>
|
||||
</use>
|
||||
<value value="Systolische bloeddruk minimaal 1 uur"/>
|
||||
</designation>
|
||||
</concept>
|
||||
<concept>
|
||||
<code value="8492-1" />
|
||||
<display value="Systolic blood pressure 8 hour minimum" />
|
||||
</concept>
|
||||
</CodeSystem>
|
|
@ -67,8 +67,8 @@ public class BaseValidationSupportWrapper extends BaseValidationSupport {
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
return myWrap.lookupCode(theValidationSupportContext, theSystem, theCode);
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
return myWrap.lookupCode(theValidationSupportContext, theSystem, theCode, theDisplayLanguage);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -111,9 +111,9 @@ public class CachingValidationSupport extends BaseValidationSupportWrapper imple
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
String key = "lookupCode " + theSystem + " " + theCode;
|
||||
return loadFromCache(myLookupCodeCache, key, t -> super.lookupCode(theValidationSupportContext, theSystem, theCode));
|
||||
return loadFromCache(myLookupCodeCache, key, t -> super.lookupCode(theValidationSupportContext, theSystem, theCode, theDisplayLanguage));
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -211,7 +211,7 @@ public class CommonCodeSystemsTerminologyService implements IValidationSupport {
|
|||
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
|
||||
Map<String, String> map;
|
||||
switch (theSystem) {
|
||||
|
|
|
@ -345,7 +345,7 @@ public class InMemoryTerminologyServerValidationSupport implements IValidationSu
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
return validateCode(theValidationSupportContext, new ConceptValidationOptions(), theSystem, theCode, null, null).asLookupCodeResult(theSystem, theCode);
|
||||
}
|
||||
|
||||
|
@ -550,7 +550,7 @@ public class InMemoryTerminologyServerValidationSupport implements IValidationSu
|
|||
|
||||
if (theWantCode != null) {
|
||||
if (theValidationSupportContext.getRootValidationSupport().isCodeSystemSupported(theValidationSupportContext, includeOrExcludeConceptSystemUrl)) {
|
||||
LookupCodeResult lookup = theValidationSupportContext.getRootValidationSupport().lookupCode(theValidationSupportContext, includeOrExcludeConceptSystemUrl, theWantCode);
|
||||
LookupCodeResult lookup = theValidationSupportContext.getRootValidationSupport().lookupCode(theValidationSupportContext, includeOrExcludeConceptSystemUrl, theWantCode, null);
|
||||
if (lookup != null && lookup.isFound()) {
|
||||
CodeSystem.ConceptDefinitionComponent conceptDefinition = new CodeSystem.ConceptDefinitionComponent()
|
||||
.addConcept()
|
||||
|
|
|
@ -296,10 +296,10 @@ public class ValidationSupportChain implements IValidationSupport {
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
for (IValidationSupport next : myChain) {
|
||||
if (next.isCodeSystemSupported(theValidationSupportContext, theSystem)) {
|
||||
return next.lookupCode(theValidationSupportContext, theSystem, theCode);
|
||||
return next.lookupCode(theValidationSupportContext, theSystem, theCode, theDisplayLanguage);
|
||||
}
|
||||
}
|
||||
return null;
|
||||
|
|
|
@ -141,9 +141,14 @@ public class ResponseTerminologyDisplayPopulationInterceptorTest {
|
|||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode, String theDisplayLanguage) {
|
||||
return null;
|
||||
}
|
||||
|
||||
@Override
|
||||
public LookupCodeResult lookupCode(ValidationSupportContext theValidationSupportContext, String theSystem, String theCode) {
|
||||
return lookupCode(theValidationSupportContext, theSystem, theCode, null);
|
||||
}
|
||||
}
|
||||
|
||||
}
|
||||
|
|
|
@ -51,7 +51,7 @@ public class CommonCodeSystemsTerminologyServiceTest {
|
|||
|
||||
@Test
|
||||
public void testUcum_LookupCode_UnknownSystem() {
|
||||
IValidationSupport.LookupCodeResult outcome = mySvc.lookupCode(newSupport(), "http://foo", "AAAAA");
|
||||
IValidationSupport.LookupCodeResult outcome = mySvc.lookupCode(newSupport(), "http://foo", "AAAAA", null);
|
||||
assertNull(outcome);
|
||||
}
|
||||
|
||||
|
|
|
@ -254,7 +254,7 @@ public class FhirInstanceValidatorR4Test extends BaseTest {
|
|||
return retVal;
|
||||
}
|
||||
});
|
||||
when(mockSupport.lookupCode(any(), any(), any())).thenAnswer(t -> {
|
||||
when(mockSupport.lookupCode(any(), any(), any(), any())).thenAnswer(t -> {
|
||||
String system = t.getArgument(1, String.class);
|
||||
String code = t.getArgument(2, String.class);
|
||||
if (myValidConcepts.contains(system + "___" + code)) {
|
||||
|
|
Loading…
Reference in New Issue