introduced _list fix (#5664)
* introduced fix * Add value * Added backing tests * Ignore _list as _has is done
This commit is contained in:
parent
cbd733c340
commit
bc955b8539
|
@ -151,6 +151,7 @@ import java.util.Collection;
|
|||
import java.util.Date;
|
||||
import java.util.HashSet;
|
||||
import java.util.List;
|
||||
import java.util.Map;
|
||||
import java.util.Objects;
|
||||
import java.util.Optional;
|
||||
import java.util.Set;
|
||||
|
@ -1985,8 +1986,11 @@ public abstract class BaseHapiFhirResourceDao<T extends IBaseResource> extends B
|
|||
|
||||
private void translateListSearchParams(SearchParameterMap theParams) {
|
||||
|
||||
Set<Map.Entry<String, List<List<IQueryParameterType>>>> entryHashSet = new HashSet<>(theParams.entrySet());
|
||||
|
||||
// Translate _list=42 to _has=List:item:_id=42
|
||||
for (String key : theParams.keySet()) {
|
||||
for (Map.Entry<String, List<List<IQueryParameterType>>> stringListEntry : entryHashSet) {
|
||||
String key = stringListEntry.getKey();
|
||||
if (Constants.PARAM_LIST.equals((key))) {
|
||||
List<List<IQueryParameterType>> andOrValues = theParams.get(key);
|
||||
theParams.remove(key);
|
||||
|
|
|
@ -0,0 +1,74 @@
|
|||
package ca.uhn.fhir.jpa.provider.r4;
|
||||
|
||||
import ca.uhn.fhir.jpa.provider.BaseResourceProviderR4Test;
|
||||
import org.hl7.fhir.instance.model.api.IIdType;
|
||||
import org.hl7.fhir.r4.model.Bundle;
|
||||
import org.hl7.fhir.r4.model.ListResource;
|
||||
import org.hl7.fhir.r4.model.Organization;
|
||||
import org.hl7.fhir.r4.model.Practitioner;
|
||||
import org.hl7.fhir.r4.model.Reference;
|
||||
import org.junit.jupiter.api.BeforeEach;
|
||||
import org.junit.jupiter.api.Test;
|
||||
|
||||
import java.util.Collections;
|
||||
|
||||
import static org.junit.jupiter.api.Assertions.assertEquals;
|
||||
|
||||
public class ListR4Test extends BaseResourceProviderR4Test {
|
||||
|
||||
|
||||
private IIdType orgInList;
|
||||
private IIdType practitionerInList;
|
||||
private IIdType list;
|
||||
private String identifierSystem = "http://example123.com/identifier";
|
||||
|
||||
|
||||
@BeforeEach
|
||||
@Override
|
||||
public void before() throws Exception {
|
||||
super.before();
|
||||
|
||||
orgInList = createOrganization(withActiveTrue(), withIdentifier(identifierSystem, "B"));
|
||||
practitionerInList = createPractitioner(withActiveTrue());
|
||||
ListResource testList = new ListResource()
|
||||
.addEntry(new ListResource.ListEntryComponent().setItem(new Reference(orgInList.toUnqualifiedVersionless().getValue())))
|
||||
.addEntry(new ListResource.ListEntryComponent().setItem(new Reference(practitionerInList.toUnqualifiedVersionless().getValue())));
|
||||
|
||||
list = doCreateResource(testList);
|
||||
|
||||
}
|
||||
|
||||
@Test
|
||||
public void organizationSearchUsingListReturnsOnlyOrgInList() {
|
||||
Bundle results = (Bundle) myClient.search()
|
||||
.forResource(Organization.class)
|
||||
.whereMap(Collections.singletonMap("_list", Collections.singletonList(list.getIdPart())))
|
||||
.execute();
|
||||
|
||||
assertEquals(1, results.getEntry().size());
|
||||
assertEquals(orgInList.toUnqualifiedVersionless().getValue(), results.getEntryFirstRep().getResource().getIdElement().toUnqualifiedVersionless().getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void organizationSearchUsingListWorksWithAnotherParameter() {
|
||||
Bundle results = (Bundle) myClient.search()
|
||||
.forResource(Organization.class)
|
||||
.whereMap(Collections.singletonMap("_list", Collections.singletonList(list.getIdPart())))
|
||||
.and(Organization.IDENTIFIER.hasSystemWithAnyCode(identifierSystem))
|
||||
.execute();
|
||||
|
||||
assertEquals(1, results.getEntry().size());
|
||||
assertEquals(orgInList.toUnqualifiedVersionless().getValue(), results.getEntryFirstRep().getResource().getIdElement().toUnqualifiedVersionless().getValue());
|
||||
}
|
||||
|
||||
@Test
|
||||
public void practitionerSearchUsingListReturnsOnlyPractitionerInList() {
|
||||
Bundle results = (Bundle) myClient.search()
|
||||
.forResource(Practitioner.class)
|
||||
.whereMap(Collections.singletonMap("_list", Collections.singletonList(list.getIdPart())))
|
||||
.execute();
|
||||
|
||||
assertEquals(1, results.getEntry().size());
|
||||
assertEquals(practitionerInList.toUnqualifiedVersionless().getValue(), results.getEntryFirstRep().getResource().getIdElement().toUnqualifiedVersionless().getValue());
|
||||
}
|
||||
}
|
|
@ -346,7 +346,7 @@ public class ServerCapabilityStatementProviderJpaR4Test extends BaseResourceProv
|
|||
CapabilityStatement cs = myClient.capabilities().ofType(CapabilityStatement.class).execute();
|
||||
for (CapabilityStatement.CapabilityStatementRestResourceComponent nextResource : cs.getRestFirstRep().getResource()) {
|
||||
for (CapabilityStatement.CapabilityStatementRestResourceSearchParamComponent nextSp : nextResource.getSearchParam()) {
|
||||
if (nextSp.getName().equals("_has")) {
|
||||
if (nextSp.getName().equals("_has") || nextSp.getName().equals("_list")) {
|
||||
if (nextSp.getDefinition() == null) {
|
||||
continue;
|
||||
}
|
||||
|
|
|
@ -69,6 +69,10 @@ public class ${className}ResourceProvider extends
|
|||
@OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_PROFILE)
|
||||
UriAndListParam theSearchForProfile,
|
||||
|
||||
@Description(shortDefinition="Search the contents of the resource's data using a list")
|
||||
@OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_LIST)
|
||||
StringAndListParam theList,
|
||||
|
||||
@Description(shortDefinition="Search for resources which have the given source value (Resource.meta.source)")
|
||||
@OptionalParam(name=ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE)
|
||||
UriAndListParam theSearchForSource,
|
||||
|
@ -149,6 +153,7 @@ public class ${className}ResourceProvider extends
|
|||
paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SECURITY, theSearchForSecurity);
|
||||
paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_PROFILE, theSearchForProfile);
|
||||
paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_SOURCE, theSearchForSource);
|
||||
paramMap.add(ca.uhn.fhir.rest.api.Constants.PARAM_LIST, theList);
|
||||
paramMap.add("_has", theHas);
|
||||
#foreach ( $param in $searchParams )
|
||||
paramMap.add("${param.name}", the${param.nameCapitalized});
|
||||
|
|
Loading…
Reference in New Issue