post CDR review fixes
This commit is contained in:
parent
4b53ef3920
commit
f8c1591d21
|
@ -81,14 +81,14 @@ public class MdmControllerSvcImpl implements IMdmControllerSvc {
|
|||
}
|
||||
|
||||
@Override
|
||||
public IAnyResource updateLink(String theGoldenResourceId, String theSourceResourceId, IAnyResource theManuallyMergedGoldenResource, String theMatchResult, MdmTransactionContext theMdmTransactionContext) {
|
||||
public IAnyResource updateLink(String theGoldenResourceId, String theSourceResourceId, String theMatchResult, MdmTransactionContext theMdmTransactionContext) {
|
||||
MdmMatchResultEnum matchResult = MdmControllerUtil.extractMatchResultOrNull(theMatchResult);
|
||||
IAnyResource goldenResource = myMdmControllerHelper.getLatestGoldenResourceFromIdOrThrowException(ProviderConstants.MDM_UPDATE_LINK_GOLDEN_RESOURCE_ID, theGoldenResourceId);
|
||||
IAnyResource source = myMdmControllerHelper.getLatestSourceFromIdOrThrowException(ProviderConstants.MDM_UPDATE_LINK_RESOURCE_ID, theSourceResourceId);
|
||||
myMdmControllerHelper.validateSameVersion(goldenResource, theGoldenResourceId);
|
||||
myMdmControllerHelper.validateSameVersion(source, theSourceResourceId);
|
||||
|
||||
return myIMdmLinkUpdaterSvc.updateLink(goldenResource, source, theManuallyMergedGoldenResource, matchResult, theMdmTransactionContext);
|
||||
return myIMdmLinkUpdaterSvc.updateLink(goldenResource, source, matchResult, theMdmTransactionContext);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -69,8 +69,7 @@ public class MdmLinkUpdaterSvcImpl implements IMdmLinkUpdaterSvc {
|
|||
|
||||
@Transactional
|
||||
@Override
|
||||
public IAnyResource updateLink(IAnyResource theGoldenResource, IAnyResource theSourceResource, IAnyResource theManuallyMergedGoldenResource,
|
||||
MdmMatchResultEnum theMatchResult, MdmTransactionContext theMdmContext) {
|
||||
public IAnyResource updateLink(IAnyResource theGoldenResource, IAnyResource theSourceResource, MdmMatchResultEnum theMatchResult, MdmTransactionContext theMdmContext) {
|
||||
String sourceType = myFhirContext.getResourceType(theSourceResource);
|
||||
|
||||
validateUpdateLinkRequest(theGoldenResource, theSourceResource, theMatchResult, sourceType);
|
||||
|
|
|
@ -36,5 +36,5 @@ public interface IMdmControllerSvc {
|
|||
|
||||
IAnyResource mergeGoldenResources(String theFromGoldenResourceId, String theToGoldenResourceId, IAnyResource theManuallyMergedGoldenResource, MdmTransactionContext theMdmTransactionContext);
|
||||
|
||||
IAnyResource updateLink(String theGoldenResourceId, String theSourceResourceId, IAnyResource theManuallyMergedGoldenResource, String theMatchResult, MdmTransactionContext theMdmTransactionContext);
|
||||
IAnyResource updateLink(String theGoldenResourceId, String theSourceResourceId, String theMatchResult, MdmTransactionContext theMdmTransactionContext);
|
||||
}
|
||||
|
|
|
@ -24,6 +24,6 @@ import ca.uhn.fhir.mdm.model.MdmTransactionContext;
|
|||
import org.hl7.fhir.instance.model.api.IAnyResource;
|
||||
|
||||
public interface IMdmLinkUpdaterSvc {
|
||||
IAnyResource updateLink(IAnyResource theGoldenResource, IAnyResource theSourceResource, IAnyResource theManuallyMergedGoldenResource, MdmMatchResultEnum theMatchResult, MdmTransactionContext theMdmContext);
|
||||
IAnyResource updateLink(IAnyResource theGoldenResource, IAnyResource theSourceResource, MdmMatchResultEnum theMatchResult, MdmTransactionContext theMdmContext);
|
||||
void notDuplicateGoldenResource(IAnyResource theGoldenResource, IAnyResource theTargetGoldenResource, MdmTransactionContext theMdmContext);
|
||||
}
|
||||
|
|
|
@ -161,7 +161,7 @@ public class MdmProviderDstu3Plus extends BaseMdmProvider {
|
|||
@OperationParam(name = ProviderConstants.MDM_UPDATE_LINK_MATCH_RESULT, min = 1, max = 1) IPrimitiveType<String> theMatchResult,
|
||||
ServletRequestDetails theRequestDetails) {
|
||||
validateUpdateLinkParameters(theGoldenResourceId, theResourceId, theMatchResult);
|
||||
return myMdmControllerSvc.updateLink(theGoldenResourceId.getValueAsString(), theResourceId.getValue(), null,
|
||||
return myMdmControllerSvc.updateLink(theGoldenResourceId.getValueAsString(), theResourceId.getValue(),
|
||||
theMatchResult.getValue(), createMdmContext(theRequestDetails, MdmTransactionContext.OperationType.UPDATE_LINK,
|
||||
getResourceType(ProviderConstants.MDM_UPDATE_LINK_GOLDEN_RESOURCE_ID, theGoldenResourceId))
|
||||
);
|
||||
|
|
|
@ -185,12 +185,13 @@ public final class TerserUtil {
|
|||
}
|
||||
}
|
||||
|
||||
public static void replaceField(FhirContext theFhirContext, FhirTerser theTerser, String theFieldName, IBaseResource theFrom, IBaseResource theTo) {
|
||||
FhirTerser terser = theFhirContext.newTerser();
|
||||
public static boolean fieldExists(FhirContext theFhirContext, String theFieldName, IBaseResource theInstance) {
|
||||
RuntimeResourceDefinition definition = theFhirContext.getResourceDefinition(theInstance);
|
||||
return definition.getChildByName(theFieldName) != null;
|
||||
}
|
||||
|
||||
RuntimeResourceDefinition definition = theFhirContext.getResourceDefinition(theFrom);
|
||||
BaseRuntimeChildDefinition childDefinition = definition.getChildByName(theFieldName);
|
||||
replaceField(theFrom, theTo, childDefinition);
|
||||
public static void replaceField(FhirContext theFhirContext, FhirTerser theTerser, String theFieldName, IBaseResource theFrom, IBaseResource theTo) {
|
||||
replaceField(theFrom, theTo, getBaseRuntimeChildDefinition(theFhirContext, theFieldName, theFrom));
|
||||
}
|
||||
|
||||
private static void replaceField(IBaseResource theFrom, IBaseResource theTo, BaseRuntimeChildDefinition childDefinition) {
|
||||
|
@ -231,8 +232,7 @@ public final class TerserUtil {
|
|||
* @param theTo
|
||||
*/
|
||||
public static void mergeField(FhirContext theFhirContext, FhirTerser theTerser, String theFieldName, IBaseResource theFrom, IBaseResource theTo) {
|
||||
RuntimeResourceDefinition definition = theFhirContext.getResourceDefinition(theFrom);
|
||||
BaseRuntimeChildDefinition childDefinition = definition.getChildByName(theFieldName);
|
||||
BaseRuntimeChildDefinition childDefinition = getBaseRuntimeChildDefinition(theFhirContext, theFieldName, theFrom);
|
||||
|
||||
List<IBase> theFromFieldValues = childDefinition.getAccessor().getValues(theFrom);
|
||||
List<IBase> theToFieldValues = childDefinition.getAccessor().getValues(theTo);
|
||||
|
@ -240,6 +240,15 @@ public final class TerserUtil {
|
|||
mergeFields(theTerser, theTo, childDefinition, theFromFieldValues, theToFieldValues);
|
||||
}
|
||||
|
||||
private static BaseRuntimeChildDefinition getBaseRuntimeChildDefinition(FhirContext theFhirContext, String theFieldName, IBaseResource theFrom) {
|
||||
RuntimeResourceDefinition definition = theFhirContext.getResourceDefinition(theFrom);
|
||||
BaseRuntimeChildDefinition childDefinition = definition.getChildByName(theFieldName);
|
||||
if (childDefinition == null) {
|
||||
throw new IllegalStateException(String.format("Field %s does not exist", theFieldName));
|
||||
}
|
||||
return childDefinition;
|
||||
}
|
||||
|
||||
private static void mergeFields(FhirTerser theTerser, IBaseResource theTo, BaseRuntimeChildDefinition childDefinition, List<IBase> theFromFieldValues, List<IBase> theToFieldValues) {
|
||||
for (IBase theFromFieldValue : theFromFieldValues) {
|
||||
if (contains(theFromFieldValue, theToFieldValues)) {
|
||||
|
|
|
@ -8,9 +8,7 @@ import org.junit.jupiter.api.Test;
|
|||
|
||||
import static org.hamcrest.MatcherAssert.assertThat;
|
||||
import static org.hamcrest.Matchers.hasSize;
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
import static org.junit.jupiter.api.Assertions.assertNull;
|
||||
import static org.junit.jupiter.api.Assertions.assertTrue;
|
||||
import static org.junit.jupiter.api.Assertions.*;
|
||||
|
||||
class TerserUtilTest extends BaseR4Test {
|
||||
|
||||
|
@ -30,6 +28,12 @@ class TerserUtilTest extends BaseR4Test {
|
|||
assertEquals(p1.getIdentifier().get(0).getValue(), p2.getIdentifier().get(0).getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
void testFieldExists() {
|
||||
assertTrue(TerserUtil.fieldExists(ourFhirContext, "identifier", new Patient()));
|
||||
assertFalse(TerserUtil.fieldExists(ourFhirContext, "randomFieldName", new Patient()));
|
||||
}
|
||||
|
||||
@Test
|
||||
void testCloneFields() {
|
||||
Patient p1 = buildJohny();
|
||||
|
|
Loading…
Reference in New Issue