Fix error message for bad $mdm-link-history input and handle comma-delimited input (#4701)

* Fix error message for bad $mdm-link-history input and handle comma-delimited input.

* Code review feedback:  filter out null objects in the stream.
This commit is contained in:
Luke deGruchy 2023-03-30 12:51:17 -04:00 committed by GitHub
parent ee8b5b39d4
commit 1faf77dcc8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
3 changed files with 22 additions and 7 deletions

View File

@ -0,0 +1,5 @@
---
type: fix
issue: 4700
title: "When querying $mdm-link-history with no inputs, the error message is mislaeading. Also, $mdm-link-history cannot handle comma-delimited inputs.
Both issues are now fixed."

View File

@ -41,8 +41,11 @@ import org.springframework.data.domain.Page;
import javax.annotation.Nonnull; import javax.annotation.Nonnull;
import javax.annotation.Nullable; import javax.annotation.Nullable;
import java.util.Arrays;
import java.util.Collections; import java.util.Collections;
import java.util.List; import java.util.List;
import java.util.Collection;
import java.util.Objects;
import java.util.stream.Collectors; import java.util.stream.Collectors;
@ -74,7 +77,7 @@ public abstract class BaseMdmProvider {
private void validateBothCannotBeNullOrEmpty(String theFirstName, List<IPrimitiveType<String>> theFirstList, String theSecondName, List<IPrimitiveType<String>> theSecondList) { private void validateBothCannotBeNullOrEmpty(String theFirstName, List<IPrimitiveType<String>> theFirstList, String theSecondName, List<IPrimitiveType<String>> theSecondList) {
if ((theFirstList == null || theFirstList.isEmpty()) && (theSecondList == null || theSecondList.isEmpty())) { if ((theFirstList == null || theFirstList.isEmpty()) && (theSecondList == null || theSecondList.isEmpty())) {
throw new InvalidRequestException(Msg.code(2292) + "both ["+theFirstName+"] and ["+theSecondName+"] cannot be null or empty"); throw new InvalidRequestException(Msg.code(2292) + "Please include either ["+theFirstName+"]s, ["+theSecondName+"]s, or both in your search inputs.");
} }
} }
@ -123,10 +126,17 @@ public abstract class BaseMdmProvider {
} }
@Nonnull @Nonnull
protected List<String> convertToStringsIfNotNull(List<IPrimitiveType<String>> thePrimitiveTypeStrings) { protected List<String> convertToStringsIncludingCommaDelimitedIfNotNull(List<IPrimitiveType<String>> thePrimitiveTypeStrings) {
return thePrimitiveTypeStrings == null if (thePrimitiveTypeStrings == null) {
? Collections.emptyList() return Collections.emptyList();
: thePrimitiveTypeStrings.stream().map(this::extractStringOrNull).collect(Collectors.toUnmodifiableList()); }
return thePrimitiveTypeStrings.stream()
.map(this::extractStringOrNull)
.filter(Objects::nonNull)
.map(input -> Arrays.asList(input.split(",")))
.flatMap(Collection::stream)
.collect(Collectors.toUnmodifiableList());
} }
protected String extractStringOrNull(IPrimitiveType<String> theString) { protected String extractStringOrNull(IPrimitiveType<String> theString) {

View File

@ -53,8 +53,8 @@ public class MdmLinkHistoryProviderDstu3Plus extends BaseMdmProvider {
ServletRequestDetails theRequestDetails) { ServletRequestDetails theRequestDetails) {
validateMdmLinkHistoryParameters(theMdmGoldenResourceIds, theResourceIds); validateMdmLinkHistoryParameters(theMdmGoldenResourceIds, theResourceIds);
final List<String> goldenResourceIdsToUse = convertToStringsIfNotNull(theMdmGoldenResourceIds); final List<String> goldenResourceIdsToUse = convertToStringsIncludingCommaDelimitedIfNotNull(theMdmGoldenResourceIds);
final List<String> resourceIdsToUse = convertToStringsIfNotNull(theResourceIds); final List<String> resourceIdsToUse = convertToStringsIncludingCommaDelimitedIfNotNull(theResourceIds);
final IBaseParameters retVal = ParametersUtil.newInstance(myFhirContext); final IBaseParameters retVal = ParametersUtil.newInstance(myFhirContext);