Multi-version supported for ConceptMap $translate operation
This commit is contained in:
parent
d019dee786
commit
5410042643
|
@ -125,6 +125,8 @@ ca.uhn.fhir.jpa.dao.dstu3.FhirResourceDaoConceptMapDstu3.matchesFound=Matches fo
|
||||||
ca.uhn.fhir.jpa.dao.dstu3.FhirResourceDaoConceptMapDstu3.noMatchesFound=No matches found!
|
ca.uhn.fhir.jpa.dao.dstu3.FhirResourceDaoConceptMapDstu3.noMatchesFound=No matches found!
|
||||||
ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoConceptMapR4.matchesFound=Matches found!
|
ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoConceptMapR4.matchesFound=Matches found!
|
||||||
ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoConceptMapR4.noMatchesFound=No matches found!
|
ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoConceptMapR4.noMatchesFound=No matches found!
|
||||||
|
ca.uhn.fhir.jpa.dao.r5.FhirResourceDaoConceptMapR5.matchesFound=Matches found!
|
||||||
|
ca.uhn.fhir.jpa.dao.r5.FhirResourceDaoConceptMapR5.noMatchesFound=No matches found!
|
||||||
ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSearchParameterR4.invalidSearchParamExpression=The expression "{0}" can not be evaluated and may be invalid: {1}
|
ca.uhn.fhir.jpa.dao.r4.FhirResourceDaoSearchParameterR4.invalidSearchParamExpression=The expression "{0}" can not be evaluated and may be invalid: {1}
|
||||||
|
|
||||||
ca.uhn.fhir.jpa.dao.predicate.PredicateBuilderToken.textModifierDisabledForSearchParam=The :text modifier is disabled for this search parameter
|
ca.uhn.fhir.jpa.dao.predicate.PredicateBuilderToken.textModifierDisabledForSearchParam=The :text modifier is disabled for this search parameter
|
||||||
|
|
|
@ -54,6 +54,8 @@ public class BaseJpaResourceProviderConceptMapDstu3 extends JpaResourceProviderD
|
||||||
public Parameters translate(
|
public Parameters translate(
|
||||||
HttpServletRequest theServletRequest,
|
HttpServletRequest theServletRequest,
|
||||||
@IdParam(optional = true) IdType theId,
|
@IdParam(optional = true) IdType theId,
|
||||||
|
@OperationParam(name = "url", min = 0, max = 1) UriType theUrl,
|
||||||
|
@OperationParam(name = "conceptMapVersion", min = 0, max = 1) StringType theConceptMapVersion,
|
||||||
@OperationParam(name = "code", min = 0, max = 1) CodeType theSourceCode,
|
@OperationParam(name = "code", min = 0, max = 1) CodeType theSourceCode,
|
||||||
@OperationParam(name = "system", min = 0, max = 1) UriType theSourceCodeSystem,
|
@OperationParam(name = "system", min = 0, max = 1) UriType theSourceCodeSystem,
|
||||||
@OperationParam(name = "version", min = 0, max = 1) StringType theSourceCodeSystemVersion,
|
@OperationParam(name = "version", min = 0, max = 1) StringType theSourceCodeSystemVersion,
|
||||||
|
@ -65,6 +67,10 @@ public class BaseJpaResourceProviderConceptMapDstu3 extends JpaResourceProviderD
|
||||||
@OperationParam(name = "reverse", min = 0, max = 1) BooleanType theReverse,
|
@OperationParam(name = "reverse", min = 0, max = 1) BooleanType theReverse,
|
||||||
RequestDetails theRequestDetails
|
RequestDetails theRequestDetails
|
||||||
) {
|
) {
|
||||||
|
boolean haveUrl = theUrl != null
|
||||||
|
&& theUrl.hasValue();
|
||||||
|
boolean haveConceptMapVersion = theConceptMapVersion != null
|
||||||
|
&& theConceptMapVersion.hasValue();
|
||||||
boolean haveSourceCode = theSourceCode != null
|
boolean haveSourceCode = theSourceCode != null
|
||||||
&& theSourceCode.hasValue();
|
&& theSourceCode.hasValue();
|
||||||
boolean haveSourceCodeSystem = theSourceCodeSystem != null
|
boolean haveSourceCodeSystem = theSourceCodeSystem != null
|
||||||
|
@ -93,6 +99,15 @@ public class BaseJpaResourceProviderConceptMapDstu3 extends JpaResourceProviderD
|
||||||
|
|
||||||
TranslationRequest translationRequest = new TranslationRequest();
|
TranslationRequest translationRequest = new TranslationRequest();
|
||||||
try {
|
try {
|
||||||
|
|
||||||
|
if (haveUrl) {
|
||||||
|
translationRequest.setUrl(VersionConvertor_30_40.convertUri(theUrl));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (haveConceptMapVersion) {
|
||||||
|
translationRequest.setConceptMapVersion(VersionConvertor_30_40.convertString(theConceptMapVersion));
|
||||||
|
}
|
||||||
|
|
||||||
// Convert from DSTU3 to R4
|
// Convert from DSTU3 to R4
|
||||||
if (haveSourceCode) {
|
if (haveSourceCode) {
|
||||||
translationRequest.getCodeableConcept().addCoding().setCodeElement(VersionConvertor_30_40.convertCode(theSourceCode));
|
translationRequest.getCodeableConcept().addCoding().setCodeElement(VersionConvertor_30_40.convertCode(theSourceCode));
|
||||||
|
|
|
@ -49,6 +49,8 @@ public class BaseJpaResourceProviderConceptMapR4 extends JpaResourceProviderR4<C
|
||||||
public Parameters translate(
|
public Parameters translate(
|
||||||
HttpServletRequest theServletRequest,
|
HttpServletRequest theServletRequest,
|
||||||
@IdParam(optional = true) IdType theId,
|
@IdParam(optional = true) IdType theId,
|
||||||
|
@OperationParam(name = "url", min = 0, max = 1) UriType theUrl,
|
||||||
|
@OperationParam(name = "conceptMapVersion", min = 0, max = 1) StringType theConceptMapVersion,
|
||||||
@OperationParam(name = "code", min = 0, max = 1) CodeType theSourceCode,
|
@OperationParam(name = "code", min = 0, max = 1) CodeType theSourceCode,
|
||||||
@OperationParam(name = "system", min = 0, max = 1) UriType theSourceCodeSystem,
|
@OperationParam(name = "system", min = 0, max = 1) UriType theSourceCodeSystem,
|
||||||
@OperationParam(name = "version", min = 0, max = 1) StringType theSourceCodeSystemVersion,
|
@OperationParam(name = "version", min = 0, max = 1) StringType theSourceCodeSystemVersion,
|
||||||
|
@ -60,6 +62,10 @@ public class BaseJpaResourceProviderConceptMapR4 extends JpaResourceProviderR4<C
|
||||||
@OperationParam(name = "reverse", min = 0, max = 1) BooleanType theReverse,
|
@OperationParam(name = "reverse", min = 0, max = 1) BooleanType theReverse,
|
||||||
RequestDetails theRequestDetails
|
RequestDetails theRequestDetails
|
||||||
) {
|
) {
|
||||||
|
boolean haveUrl = theUrl != null
|
||||||
|
&& theUrl.hasValue();
|
||||||
|
boolean haveConceptMapVersion = theConceptMapVersion != null
|
||||||
|
&& theConceptMapVersion.hasValue();
|
||||||
boolean haveSourceCode = theSourceCode != null
|
boolean haveSourceCode = theSourceCode != null
|
||||||
&& theSourceCode.hasCode();
|
&& theSourceCode.hasCode();
|
||||||
boolean haveSourceCodeSystem = theSourceCodeSystem != null
|
boolean haveSourceCodeSystem = theSourceCodeSystem != null
|
||||||
|
@ -88,6 +94,14 @@ public class BaseJpaResourceProviderConceptMapR4 extends JpaResourceProviderR4<C
|
||||||
|
|
||||||
TranslationRequest translationRequest = new TranslationRequest();
|
TranslationRequest translationRequest = new TranslationRequest();
|
||||||
|
|
||||||
|
if (haveUrl) {
|
||||||
|
translationRequest.setUrl(theUrl);
|
||||||
|
}
|
||||||
|
|
||||||
|
if (haveConceptMapVersion) {
|
||||||
|
translationRequest.setConceptMapVersion(theConceptMapVersion);
|
||||||
|
}
|
||||||
|
|
||||||
if (haveSourceCode) {
|
if (haveSourceCode) {
|
||||||
translationRequest.getCodeableConcept().addCoding().setCodeElement(theSourceCode);
|
translationRequest.getCodeableConcept().addCoding().setCodeElement(theSourceCode);
|
||||||
|
|
||||||
|
|
|
@ -50,6 +50,8 @@ public class BaseJpaResourceProviderConceptMapR5 extends JpaResourceProviderR5<C
|
||||||
public Parameters translate(
|
public Parameters translate(
|
||||||
HttpServletRequest theServletRequest,
|
HttpServletRequest theServletRequest,
|
||||||
@IdParam(optional = true) IdType theId,
|
@IdParam(optional = true) IdType theId,
|
||||||
|
@OperationParam(name = "url", min = 0, max = 1) UriType theUrl,
|
||||||
|
@OperationParam(name = "conceptMapVersion", min = 0, max = 1) StringType theConceptMapVersion,
|
||||||
@OperationParam(name = "code", min = 0, max = 1) CodeType theSourceCode,
|
@OperationParam(name = "code", min = 0, max = 1) CodeType theSourceCode,
|
||||||
@OperationParam(name = "system", min = 0, max = 1) UriType theSourceCodeSystem,
|
@OperationParam(name = "system", min = 0, max = 1) UriType theSourceCodeSystem,
|
||||||
@OperationParam(name = "version", min = 0, max = 1) StringType theSourceCodeSystemVersion,
|
@OperationParam(name = "version", min = 0, max = 1) StringType theSourceCodeSystemVersion,
|
||||||
|
@ -61,6 +63,10 @@ public class BaseJpaResourceProviderConceptMapR5 extends JpaResourceProviderR5<C
|
||||||
@OperationParam(name = "reverse", min = 0, max = 1) BooleanType theReverse,
|
@OperationParam(name = "reverse", min = 0, max = 1) BooleanType theReverse,
|
||||||
RequestDetails theRequestDetails
|
RequestDetails theRequestDetails
|
||||||
) {
|
) {
|
||||||
|
boolean haveUrl = theUrl != null
|
||||||
|
&& theUrl.hasValue();
|
||||||
|
boolean haveConceptMapVersion = theConceptMapVersion != null
|
||||||
|
&& theConceptMapVersion.hasValue();
|
||||||
boolean haveSourceCode = theSourceCode != null
|
boolean haveSourceCode = theSourceCode != null
|
||||||
&& theSourceCode.hasCode();
|
&& theSourceCode.hasCode();
|
||||||
boolean haveSourceCodeSystem = theSourceCodeSystem != null
|
boolean haveSourceCodeSystem = theSourceCodeSystem != null
|
||||||
|
@ -89,6 +95,14 @@ public class BaseJpaResourceProviderConceptMapR5 extends JpaResourceProviderR5<C
|
||||||
|
|
||||||
TranslationRequest translationRequest = new TranslationRequest();
|
TranslationRequest translationRequest = new TranslationRequest();
|
||||||
|
|
||||||
|
if (haveUrl) {
|
||||||
|
translationRequest.setUrl(VersionConvertor_40_50.convertUri(theUrl));
|
||||||
|
}
|
||||||
|
|
||||||
|
if (haveConceptMapVersion) {
|
||||||
|
translationRequest.setConceptMapVersion(VersionConvertor_40_50.convertString(theConceptMapVersion));
|
||||||
|
}
|
||||||
|
|
||||||
if (haveSourceCode) {
|
if (haveSourceCode) {
|
||||||
translationRequest.getCodeableConcept().addCoding().setCodeElement(VersionConvertor_40_50.convertCode(theSourceCode));
|
translationRequest.getCodeableConcept().addCoding().setCodeElement(VersionConvertor_40_50.convertCode(theSourceCode));
|
||||||
|
|
||||||
|
|
|
@ -1968,7 +1968,7 @@ public abstract class BaseTermReadSvcImpl implements ITermReadSvc {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (translationQuery.hasConceptMapVersion()) {
|
if (translationQuery.hasConceptMapVersion()) {
|
||||||
predicates.add(criteriaBuilder.equal(conceptMapJoin.get("myVerion"), translationQuery.getConceptMapVersion().getValueAsString()));
|
predicates.add(criteriaBuilder.equal(conceptMapJoin.get("myVersion"), translationQuery.getConceptMapVersion().getValueAsString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (translationQuery.hasSource()) {
|
if (translationQuery.hasSource()) {
|
||||||
|
@ -2059,7 +2059,7 @@ public abstract class BaseTermReadSvcImpl implements ITermReadSvc {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (translationQuery.hasConceptMapVersion()) {
|
if (translationQuery.hasConceptMapVersion()) {
|
||||||
predicates.add(criteriaBuilder.equal(conceptMapJoin.get("myVerion"), translationQuery.getConceptMapVersion().getValueAsString()));
|
predicates.add(criteriaBuilder.equal(conceptMapJoin.get("myVersion"), translationQuery.getConceptMapVersion().getValueAsString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
if (translationQuery.hasTargetSystem()) {
|
if (translationQuery.hasTargetSystem()) {
|
||||||
|
|
|
@ -1,18 +1,31 @@
|
||||||
package ca.uhn.fhir.jpa.provider.dstu3;
|
package ca.uhn.fhir.jpa.provider.dstu3;
|
||||||
|
|
||||||
import ca.uhn.fhir.rest.api.MethodOutcome;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
import ca.uhn.fhir.util.TestUtil;
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
import org.hl7.fhir.dstu3.model.*;
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import org.hl7.fhir.dstu3.model.BooleanType;
|
||||||
|
import org.hl7.fhir.dstu3.model.CodeType;
|
||||||
|
import org.hl7.fhir.dstu3.model.Coding;
|
||||||
|
import org.hl7.fhir.dstu3.model.ConceptMap;
|
||||||
|
import org.hl7.fhir.dstu3.model.Parameters;
|
||||||
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
|
import org.hl7.fhir.dstu3.model.Parameters.ParametersParameterComponent;
|
||||||
|
import org.hl7.fhir.dstu3.model.StringType;
|
||||||
|
import org.hl7.fhir.dstu3.model.UriType;
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
import org.junit.jupiter.api.AfterAll;
|
import org.hl7.fhir.dstu3.model.ConceptMap.ConceptMapGroupComponent;
|
||||||
|
import org.hl7.fhir.dstu3.model.ConceptMap.SourceElementComponent;
|
||||||
|
import org.hl7.fhir.dstu3.model.ConceptMap.TargetElementComponent;
|
||||||
|
import org.hl7.fhir.dstu3.model.Enumerations.ConceptMapEquivalence;
|
||||||
import org.junit.jupiter.api.BeforeEach;
|
import org.junit.jupiter.api.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import ca.uhn.fhir.rest.api.MethodOutcome;
|
||||||
|
import ca.uhn.fhir.rest.client.api.IGenericClient;
|
||||||
|
|
||||||
public class ResourceProviderDstu3ConceptMapTest extends BaseResourceProviderDstu3Test {
|
public class ResourceProviderDstu3ConceptMapTest extends BaseResourceProviderDstu3Test {
|
||||||
private static final Logger ourLog = LoggerFactory.getLogger(ResourceProviderDstu3ConceptMapTest.class);
|
private static final Logger ourLog = LoggerFactory.getLogger(ResourceProviderDstu3ConceptMapTest.class);
|
||||||
|
@ -114,4 +127,84 @@ public class ResourceProviderDstu3ConceptMapTest extends BaseResourceProviderDst
|
||||||
part = getPartByName(param, "source");
|
part = getPartByName(param, "source");
|
||||||
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTranslateWithConcaptMapUrlAndVersion() {
|
||||||
|
|
||||||
|
//- conceptMap1 v1
|
||||||
|
ConceptMap conceptMap1 = new ConceptMap();
|
||||||
|
conceptMap1.setUrl(CM_URL).setVersion("v1").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group1 = conceptMap1.addGroup();
|
||||||
|
group1.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element1 = group1.addElement();
|
||||||
|
element1.setCode("11111").setDisplay("Source Code 11111");
|
||||||
|
|
||||||
|
TargetElementComponent target1 = element1.addTarget();
|
||||||
|
target1.setCode("12222").setDisplay("Target Code 12222").setEquivalence(ConceptMapEquivalence.EQUAL);
|
||||||
|
|
||||||
|
IIdType conceptMapId1 = myConceptMapDao.create(conceptMap1, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap1 = myConceptMapDao.read(conceptMapId1);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap1));
|
||||||
|
|
||||||
|
//- conceptMap1 v2
|
||||||
|
ConceptMap conceptMap2 = new ConceptMap();
|
||||||
|
conceptMap2.setUrl(CM_URL).setVersion("v2").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group2 = conceptMap2.addGroup();
|
||||||
|
group2.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element2 = group2.addElement();
|
||||||
|
element2.setCode("11111").setDisplay("Source Code 11111");
|
||||||
|
|
||||||
|
TargetElementComponent target2 = element2.addTarget();
|
||||||
|
target2.setCode("13333").setDisplay("Target Code 13333").setEquivalence(ConceptMapEquivalence.EQUAL);
|
||||||
|
|
||||||
|
IIdType conceptMapId2 = myConceptMapDao.create(conceptMap2, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap2 = myConceptMapDao.read(conceptMapId2);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap2));
|
||||||
|
|
||||||
|
Parameters inParams = new Parameters();
|
||||||
|
inParams.addParameter().setName("url").setValue(new UriType(CM_URL));
|
||||||
|
inParams.addParameter().setName("conceptMapVersion").setValue(new StringType("v2"));
|
||||||
|
inParams.addParameter().setName("system").setValue(new UriType(CS_URL));
|
||||||
|
inParams.addParameter().setName("targetsystem").setValue(new UriType(CS_URL_2));
|
||||||
|
inParams.addParameter().setName("code").setValue(new CodeType("11111"));
|
||||||
|
|
||||||
|
ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
|
||||||
|
|
||||||
|
|
||||||
|
Parameters respParams = ourClient
|
||||||
|
.operation()
|
||||||
|
.onType(ConceptMap.class)
|
||||||
|
.named("translate")
|
||||||
|
.withParameters(inParams)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
ourLog.info("Response Parameters\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParams));
|
||||||
|
|
||||||
|
ParametersParameterComponent param = getParameterByName(respParams, "result");
|
||||||
|
assertTrue(((BooleanType) param.getValue()).booleanValue());
|
||||||
|
|
||||||
|
param = getParameterByName(respParams, "message");
|
||||||
|
assertEquals("Matches found!", ((StringType) param.getValue()).getValueAsString());
|
||||||
|
|
||||||
|
assertEquals(1, getNumberOfParametersByName(respParams, "match"));
|
||||||
|
param = getParametersByName(respParams, "match").get(0);
|
||||||
|
assertEquals(3, param.getPart().size());
|
||||||
|
ParametersParameterComponent part = getPartByName(param, "equivalence");
|
||||||
|
assertEquals("equal", ((CodeType) part.getValue()).getValueAsString());
|
||||||
|
part = getPartByName(param, "concept");
|
||||||
|
Coding coding = (Coding) part.getValue();
|
||||||
|
assertEquals("13333", coding.getCode());
|
||||||
|
assertEquals("Target Code 13333", coding.getDisplay());
|
||||||
|
assertFalse(coding.getUserSelected());
|
||||||
|
assertEquals(CS_URL_2, coding.getSystem());
|
||||||
|
assertEquals("Version 2", coding.getVersion());
|
||||||
|
part = getPartByName(param, "source");
|
||||||
|
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,16 +1,31 @@
|
||||||
package ca.uhn.fhir.jpa.provider.r4;
|
package ca.uhn.fhir.jpa.provider.r4;
|
||||||
|
|
||||||
import ca.uhn.fhir.rest.api.MethodOutcome;
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
import org.hl7.fhir.instance.model.api.IIdType;
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
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.CodeableConcept;
|
||||||
|
import org.hl7.fhir.r4.model.Coding;
|
||||||
|
import org.hl7.fhir.r4.model.ConceptMap;
|
||||||
|
import org.hl7.fhir.r4.model.ConceptMap.ConceptMapGroupComponent;
|
||||||
|
import org.hl7.fhir.r4.model.ConceptMap.SourceElementComponent;
|
||||||
|
import org.hl7.fhir.r4.model.ConceptMap.TargetElementComponent;
|
||||||
|
import org.hl7.fhir.r4.model.Enumerations.ConceptMapEquivalence;
|
||||||
|
import org.hl7.fhir.r4.model.Parameters;
|
||||||
import org.hl7.fhir.r4.model.Parameters.ParametersParameterComponent;
|
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.BeforeEach;
|
||||||
import org.junit.jupiter.api.Test;
|
import org.junit.jupiter.api.Test;
|
||||||
import org.slf4j.Logger;
|
import org.slf4j.Logger;
|
||||||
import org.slf4j.LoggerFactory;
|
import org.slf4j.LoggerFactory;
|
||||||
import org.springframework.transaction.annotation.Transactional;
|
import org.springframework.transaction.annotation.Transactional;
|
||||||
|
|
||||||
import static org.junit.jupiter.api.Assertions.*;
|
import ca.uhn.fhir.rest.api.MethodOutcome;
|
||||||
|
|
||||||
public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test {
|
public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test {
|
||||||
private static final Logger ourLog = LoggerFactory.getLogger(ResourceProviderR4ConceptMapTest.class);
|
private static final Logger ourLog = LoggerFactory.getLogger(ResourceProviderR4ConceptMapTest.class);
|
||||||
|
@ -870,6 +885,90 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
|
||||||
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTranslateWithConcaptMapUrlAndVersion() {
|
||||||
|
|
||||||
|
//- conceptMap1 v1
|
||||||
|
ConceptMap conceptMap1 = new ConceptMap();
|
||||||
|
conceptMap1.setUrl(CM_URL).setVersion("v1").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group1 = conceptMap1.addGroup();
|
||||||
|
group1.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element1 = group1.addElement();
|
||||||
|
element1.setCode("11111").setDisplay("Source Code 11111");
|
||||||
|
|
||||||
|
TargetElementComponent target1 = element1.addTarget();
|
||||||
|
target1.setCode("12222").setDisplay("Target Code 12222").setEquivalence(ConceptMapEquivalence.EQUAL);
|
||||||
|
|
||||||
|
IIdType conceptMapId1 = myConceptMapDao.create(conceptMap1, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap1 = myConceptMapDao.read(conceptMapId1);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap1));
|
||||||
|
|
||||||
|
//- conceptMap1 v2
|
||||||
|
ConceptMap conceptMap2 = new ConceptMap();
|
||||||
|
conceptMap2.setUrl(CM_URL).setVersion("v2").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group2 = conceptMap2.addGroup();
|
||||||
|
group2.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element2 = group2.addElement();
|
||||||
|
element2.setCode("11111").setDisplay("Source Code 11111");
|
||||||
|
|
||||||
|
TargetElementComponent target2 = element2.addTarget();
|
||||||
|
target2.setCode("13333").setDisplay("Target Code 13333").setEquivalence(ConceptMapEquivalence.EQUAL);
|
||||||
|
|
||||||
|
IIdType conceptMapId2 = myConceptMapDao.create(conceptMap2, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap2 = myConceptMapDao.read(conceptMapId2);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap2));
|
||||||
|
|
||||||
|
|
||||||
|
Parameters inParams = new Parameters();
|
||||||
|
inParams.addParameter().setName("url").setValue(new UriType(CM_URL));
|
||||||
|
inParams.addParameter().setName("conceptMapVersion").setValue(new StringType("v2"));
|
||||||
|
inParams.addParameter().setName("system").setValue(new UriType(CS_URL));
|
||||||
|
inParams.addParameter().setName("targetsystem").setValue(new UriType(CS_URL_2));
|
||||||
|
inParams.addParameter().setName("code").setValue(new CodeType("11111"));
|
||||||
|
|
||||||
|
ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
|
||||||
|
|
||||||
|
|
||||||
|
Parameters respParams = myClient
|
||||||
|
.operation()
|
||||||
|
.onType(ConceptMap.class)
|
||||||
|
.named("translate")
|
||||||
|
.withParameters(inParams)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
ourLog.info("Response Parameters\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParams));
|
||||||
|
|
||||||
|
|
||||||
|
ParametersParameterComponent param = getParameterByName(respParams, "result");
|
||||||
|
assertTrue(((BooleanType) param.getValue()).booleanValue());
|
||||||
|
|
||||||
|
param = getParameterByName(respParams, "message");
|
||||||
|
assertEquals("Matches found!", ((StringType) param.getValue()).getValueAsString());
|
||||||
|
|
||||||
|
assertEquals(1, getNumberOfParametersByName(respParams, "match"));
|
||||||
|
param = getParametersByName(respParams, "match").get(0);
|
||||||
|
assertEquals(3, param.getPart().size());
|
||||||
|
ParametersParameterComponent part = getPartByName(param, "equivalence");
|
||||||
|
assertEquals("equal", ((CodeType) part.getValue()).getCode());
|
||||||
|
part = getPartByName(param, "concept");
|
||||||
|
Coding coding = (Coding) part.getValue();
|
||||||
|
assertEquals("13333", coding.getCode());
|
||||||
|
assertEquals("Target Code 13333", coding.getDisplay());
|
||||||
|
assertFalse(coding.getUserSelected());
|
||||||
|
assertEquals(CS_URL_2, coding.getSystem());
|
||||||
|
assertEquals("Version 2", coding.getVersion());
|
||||||
|
part = getPartByName(param, "source");
|
||||||
|
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testTranslateWithInstance() {
|
public void testTranslateWithInstance() {
|
||||||
ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
|
ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
|
||||||
|
@ -1621,6 +1720,89 @@ public class ResourceProviderR4ConceptMapTest extends BaseResourceProviderR4Test
|
||||||
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTranslateWithReverseConcaptMapUrlAndVersion() {
|
||||||
|
|
||||||
|
//- conceptMap1 v1
|
||||||
|
ConceptMap conceptMap1 = new ConceptMap();
|
||||||
|
conceptMap1.setUrl(CM_URL).setVersion("v1").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group1 = conceptMap1.addGroup();
|
||||||
|
group1.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element1 = group1.addElement();
|
||||||
|
element1.setCode("12222").setDisplay("Source Code 12222");
|
||||||
|
|
||||||
|
TargetElementComponent target1 = element1.addTarget();
|
||||||
|
target1.setCode("11111").setDisplay("11111").setEquivalence(ConceptMapEquivalence.EQUAL);
|
||||||
|
|
||||||
|
IIdType conceptMapId1 = myConceptMapDao.create(conceptMap1, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap1 = myConceptMapDao.read(conceptMapId1);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap1));
|
||||||
|
|
||||||
|
//- conceptMap1 v2
|
||||||
|
ConceptMap conceptMap2 = new ConceptMap();
|
||||||
|
conceptMap2.setUrl(CM_URL).setVersion("v2").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group2 = conceptMap2.addGroup();
|
||||||
|
group2.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element2 = group2.addElement();
|
||||||
|
element2.setCode("13333").setDisplay("Source Code 13333");
|
||||||
|
|
||||||
|
TargetElementComponent target2 = element2.addTarget();
|
||||||
|
target2.setCode("11111").setDisplay("Target Code 11111").setEquivalence(ConceptMapEquivalence.EQUAL);
|
||||||
|
|
||||||
|
IIdType conceptMapId2 = myConceptMapDao.create(conceptMap2, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap2 = myConceptMapDao.read(conceptMapId2);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap2));
|
||||||
|
|
||||||
|
|
||||||
|
Parameters inParams = new Parameters();
|
||||||
|
inParams.addParameter().setName("url").setValue(new UriType(CM_URL));
|
||||||
|
inParams.addParameter().setName("conceptMapVersion").setValue(new StringType("v2"));
|
||||||
|
inParams.addParameter().setName("code").setValue(new CodeType("11111"));
|
||||||
|
inParams.addParameter().setName("reverse").setValue(new BooleanType(true));
|
||||||
|
|
||||||
|
ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
|
||||||
|
|
||||||
|
|
||||||
|
Parameters respParams = myClient
|
||||||
|
.operation()
|
||||||
|
.onType(ConceptMap.class)
|
||||||
|
.named("translate")
|
||||||
|
.withParameters(inParams)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
ourLog.info("Response Parameters\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParams));
|
||||||
|
|
||||||
|
|
||||||
|
ParametersParameterComponent param = getParameterByName(respParams, "result");
|
||||||
|
assertTrue(((BooleanType) param.getValue()).booleanValue());
|
||||||
|
|
||||||
|
param = getParameterByName(respParams, "message");
|
||||||
|
assertEquals("Matches found!", ((StringType) param.getValue()).getValueAsString());
|
||||||
|
|
||||||
|
assertEquals(1, getNumberOfParametersByName(respParams, "match"));
|
||||||
|
param = getParametersByName(respParams, "match").get(0);
|
||||||
|
assertEquals(3, param.getPart().size());
|
||||||
|
ParametersParameterComponent part = getPartByName(param, "equivalence");
|
||||||
|
assertEquals("equal", ((CodeType) part.getValue()).getCode());
|
||||||
|
part = getPartByName(param, "concept");
|
||||||
|
Coding coding = (Coding) part.getValue();
|
||||||
|
assertEquals("13333", coding.getCode());
|
||||||
|
assertEquals("Source Code 13333", coding.getDisplay());
|
||||||
|
assertFalse(coding.getUserSelected());
|
||||||
|
assertEquals(CS_URL, coding.getSystem());
|
||||||
|
assertEquals("Version 1", coding.getVersion());
|
||||||
|
part = getPartByName(param, "source");
|
||||||
|
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
||||||
|
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
public void testTranslateWithReverseAndInstance() {
|
public void testTranslateWithReverseAndInstance() {
|
||||||
ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
|
ConceptMap conceptMap = myConceptMapDao.read(myConceptMapId);
|
||||||
|
|
|
@ -0,0 +1,109 @@
|
||||||
|
package ca.uhn.fhir.jpa.provider.r5;
|
||||||
|
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertFalse;
|
||||||
|
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||||
|
|
||||||
|
import org.hl7.fhir.instance.model.api.IIdType;
|
||||||
|
import org.hl7.fhir.r5.model.BooleanType;
|
||||||
|
import org.hl7.fhir.r5.model.CodeType;
|
||||||
|
import org.hl7.fhir.r5.model.Coding;
|
||||||
|
import org.hl7.fhir.r5.model.ConceptMap;
|
||||||
|
import org.hl7.fhir.r5.model.ConceptMap.ConceptMapGroupComponent;
|
||||||
|
import org.hl7.fhir.r5.model.ConceptMap.SourceElementComponent;
|
||||||
|
import org.hl7.fhir.r5.model.ConceptMap.TargetElementComponent;
|
||||||
|
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.Test;
|
||||||
|
import org.slf4j.Logger;
|
||||||
|
import org.slf4j.LoggerFactory;
|
||||||
|
|
||||||
|
public class ResourceProviderR5ConceptMapTest extends BaseResourceProviderR5Test {
|
||||||
|
private static final Logger ourLog = LoggerFactory.getLogger(ResourceProviderR5ConceptMapTest.class);
|
||||||
|
|
||||||
|
@Test
|
||||||
|
public void testTranslateWithConcaptMapUrlAndVersion() {
|
||||||
|
|
||||||
|
//- conceptMap1 v1
|
||||||
|
ConceptMap conceptMap1 = new ConceptMap();
|
||||||
|
conceptMap1.setUrl(CM_URL).setVersion("v1").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group1 = conceptMap1.addGroup();
|
||||||
|
group1.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element1 = group1.addElement();
|
||||||
|
element1.setCode("11111").setDisplay("Source Code 11111");
|
||||||
|
|
||||||
|
TargetElementComponent target1 = element1.addTarget();
|
||||||
|
target1.setCode("12222").setDisplay("Target Code 12222");
|
||||||
|
|
||||||
|
IIdType conceptMapId1 = myConceptMapDao.create(conceptMap1, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap1 = myConceptMapDao.read(conceptMapId1);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap1));
|
||||||
|
|
||||||
|
//- conceptMap1 v2
|
||||||
|
ConceptMap conceptMap2 = new ConceptMap();
|
||||||
|
conceptMap2.setUrl(CM_URL).setVersion("v2").setSource(new UriType(VS_URL)).setTarget(new UriType(VS_URL_2));
|
||||||
|
|
||||||
|
ConceptMapGroupComponent group2 = conceptMap2.addGroup();
|
||||||
|
group2.setSource(CS_URL).setSourceVersion("Version 1").setTarget(CS_URL_2).setTargetVersion("Version 2");
|
||||||
|
|
||||||
|
SourceElementComponent element2 = group2.addElement();
|
||||||
|
element2.setCode("11111").setDisplay("Source Code 11111");
|
||||||
|
|
||||||
|
TargetElementComponent target2 = element2.addTarget();
|
||||||
|
target2.setCode("13333").setDisplay("Target Code 13333");
|
||||||
|
|
||||||
|
IIdType conceptMapId2 = myConceptMapDao.create(conceptMap2, mySrd).getId().toUnqualifiedVersionless();
|
||||||
|
conceptMap2 = myConceptMapDao.read(conceptMapId2);
|
||||||
|
|
||||||
|
ourLog.info("ConceptMap: 2 \n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(conceptMap2));
|
||||||
|
|
||||||
|
|
||||||
|
Parameters inParams = new Parameters();
|
||||||
|
inParams.addParameter().setName("url").setValue(new UriType(CM_URL));
|
||||||
|
inParams.addParameter().setName("conceptMapVersion").setValue(new StringType("v2"));
|
||||||
|
inParams.addParameter().setName("system").setValue(new UriType(CS_URL));
|
||||||
|
inParams.addParameter().setName("targetsystem").setValue(new UriType(CS_URL_2));
|
||||||
|
inParams.addParameter().setName("code").setValue(new CodeType("11111"));
|
||||||
|
|
||||||
|
ourLog.info("Request Parameters:\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(inParams));
|
||||||
|
|
||||||
|
|
||||||
|
Parameters respParams = myClient
|
||||||
|
.operation()
|
||||||
|
.onType(ConceptMap.class)
|
||||||
|
.named("translate")
|
||||||
|
.withParameters(inParams)
|
||||||
|
.execute();
|
||||||
|
|
||||||
|
ourLog.info("Response Parameters\n" + myFhirCtx.newJsonParser().setPrettyPrint(true).encodeResourceToString(respParams));
|
||||||
|
|
||||||
|
|
||||||
|
ParametersParameterComponent param = getParameterByName(respParams, "result");
|
||||||
|
assertTrue(((BooleanType) param.getValue()).booleanValue());
|
||||||
|
|
||||||
|
param = getParameterByName(respParams, "message");
|
||||||
|
assertEquals("Matches found!", ((StringType) param.getValue()).getValueAsString());
|
||||||
|
|
||||||
|
assertEquals(1, getNumberOfParametersByName(respParams, "match"));
|
||||||
|
param = getParametersByName(respParams, "match").get(0);
|
||||||
|
assertEquals(2, param.getPart().size());
|
||||||
|
|
||||||
|
ParametersParameterComponent part = getPartByName(param, "concept");
|
||||||
|
Coding coding = (Coding) part.getValue();
|
||||||
|
assertEquals("13333", coding.getCode());
|
||||||
|
assertEquals("Target Code 13333", coding.getDisplay());
|
||||||
|
assertFalse(coding.getUserSelected());
|
||||||
|
assertEquals(CS_URL_2, coding.getSystem());
|
||||||
|
assertEquals("Version 2", coding.getVersion());
|
||||||
|
|
||||||
|
part = getPartByName(param, "source");
|
||||||
|
assertEquals(CM_URL, ((UriType) part.getValue()).getValueAsString());
|
||||||
|
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue