Rework pid translator to accept non-forced-ids

This commit is contained in:
Tadgh 2021-03-10 13:34:04 -05:00
parent 5323486d28
commit 420c4f8378
3 changed files with 21 additions and 7 deletions

View File

@ -76,8 +76,6 @@ public class GroupBulkItemReader extends BaseBulkItemReader implements ItemReade
@Autowired @Autowired
private IMdmLinkDao myMdmLinkDao; private IMdmLinkDao myMdmLinkDao;
private RuntimeSearchParam myPatientSearchParam;
@Override @Override
Iterator<ResourcePersistentId> getResourcePidIterator() { Iterator<ResourcePersistentId> getResourcePidIterator() {
Set<ResourcePersistentId> myReadPids = new HashSet<>(); Set<ResourcePersistentId> myReadPids = new HashSet<>();
@ -112,7 +110,6 @@ public class GroupBulkItemReader extends BaseBulkItemReader implements ItemReade
*/ */
private Iterator<ResourcePersistentId> getExpandedPatientIterator() { private Iterator<ResourcePersistentId> getExpandedPatientIterator() {
Set<Long> patientPidsToExport = new HashSet<>(); Set<Long> patientPidsToExport = new HashSet<>();
//This gets all member pids
List<String> members = getMembers(); List<String> members = getMembers();
List<IIdType> ids = members.stream().map(member -> new IdDt("Patient/" + member)).collect(Collectors.toList()); List<IIdType> ids = members.stream().map(member -> new IdDt("Patient/" + member)).collect(Collectors.toList());
List<Long> pidsOrThrowException = myIdHelperService.getPidsOrThrowException(ids); List<Long> pidsOrThrowException = myIdHelperService.getPidsOrThrowException(ids);
@ -161,8 +158,15 @@ public class GroupBulkItemReader extends BaseBulkItemReader implements ItemReade
//Now lets translate these pids into resource IDs //Now lets translate these pids into resource IDs
Set<Long> uniquePids = new HashSet<>(); Set<Long> uniquePids = new HashSet<>();
goldenPidTargetPidTuple.forEach(uniquePids::addAll); goldenPidTargetPidTuple.forEach(uniquePids::addAll);
Map<Long, Optional<String>> longOptionalMap = myIdHelperService.translatePidsToForcedIds(uniquePids);
expandedIds = longOptionalMap.values().stream().map(Optional::get).collect(Collectors.toSet()); Map<Long, Optional<String>> pidToForcedIdMap = myIdHelperService.translatePidsToForcedIds(uniquePids);
//If the result of the translation is an empty optional, it means there is no forced id, and we can use the PID as the resource ID.
Set<String> resolvedResourceIds = pidToForcedIdMap.entrySet().stream()
.map(entry -> entry.getValue().isPresent() ? entry.getValue().get() : entry.getKey().toString())
.collect(Collectors.toSet());
expandedIds.addAll(resolvedResourceIds);
} }
//Now manually add the members of the group (its possible even with mdm expansion that some members dont have MDM matches, //Now manually add the members of the group (its possible even with mdm expansion that some members dont have MDM matches,

View File

@ -43,6 +43,7 @@ import org.hl7.fhir.instance.model.api.IBaseOperationOutcome;
import org.hl7.fhir.instance.model.api.IIdType; import org.hl7.fhir.instance.model.api.IIdType;
import org.hl7.fhir.instance.model.api.IPrimitiveType; import org.hl7.fhir.instance.model.api.IPrimitiveType;
import org.hl7.fhir.r4.model.InstantType; import org.hl7.fhir.r4.model.InstantType;
import org.slf4j.Logger;
import org.springframework.beans.factory.annotation.Autowired; import org.springframework.beans.factory.annotation.Autowired;
import javax.servlet.http.HttpServletResponse; import javax.servlet.http.HttpServletResponse;
@ -54,9 +55,12 @@ import java.util.List;
import java.util.Set; import java.util.Set;
import java.util.stream.Collectors; import java.util.stream.Collectors;
import static org.slf4j.LoggerFactory.getLogger;
public class BulkDataExportProvider { public class BulkDataExportProvider {
public static final String FARM_TO_TABLE_TYPE_FILTER_REGEX = "(?:,)(?=[A-Z][a-z]+\\?)"; public static final String FARM_TO_TABLE_TYPE_FILTER_REGEX = "(?:,)(?=[A-Z][a-z]+\\?)";
private static final Logger ourLog = getLogger(BulkDataExportProvider.class);
@Autowired @Autowired
private IBulkDataExportSvc myBulkDataExportSvc; private IBulkDataExportSvc myBulkDataExportSvc;
@ -90,8 +94,6 @@ public class BulkDataExportProvider {
writePollingLocationToResponseHeaders(theRequestDetails, outcome); writePollingLocationToResponseHeaders(theRequestDetails, outcome);
} }
private String getServerBase(ServletRequestDetails theRequestDetails) { private String getServerBase(ServletRequestDetails theRequestDetails) {
return StringUtils.removeEnd(theRequestDetails.getServerBaseForRequest(), "/"); return StringUtils.removeEnd(theRequestDetails.getServerBaseForRequest(), "/");
} }
@ -109,6 +111,13 @@ public class BulkDataExportProvider {
@OperationParam(name = JpaConstants.PARAM_EXPORT_MDM, min = 0, max = 1, typeName = "boolean") IPrimitiveType<Boolean> theMdm, @OperationParam(name = JpaConstants.PARAM_EXPORT_MDM, min = 0, max = 1, typeName = "boolean") IPrimitiveType<Boolean> theMdm,
ServletRequestDetails theRequestDetails ServletRequestDetails theRequestDetails
) { ) {
ourLog.debug("Received Group Bulk Export Request for Group {}", theIdParam);
ourLog.debug("_type={}", theIdParam);
ourLog.debug("_since={}", theSince);
ourLog.debug("_typeFilter={}", theTypeFilter);
ourLog.debug("_mdm=", theMdm);
validatePreferAsyncHeader(theRequestDetails); validatePreferAsyncHeader(theRequestDetails);
BulkDataExportOptions bulkDataExportOptions = buildGroupBulkExportOptions(theOutputFormat, theType, theSince, theTypeFilter, theIdParam, theMdm); BulkDataExportOptions bulkDataExportOptions = buildGroupBulkExportOptions(theOutputFormat, theType, theSince, theTypeFilter, theIdParam, theMdm);
validateResourceTypesAllContainPatientSearchParams(bulkDataExportOptions.getResourceTypes()); validateResourceTypesAllContainPatientSearchParams(bulkDataExportOptions.getResourceTypes());

View File

@ -1015,6 +1015,7 @@ public class BulkDataExportSvcImplR4Test extends BaseJpaR4Test {
createImmunizationWithIndex(i, patId); createImmunizationWithIndex(i, patId);
createCareTeamWithIndex(i, patId); createCareTeamWithIndex(i, patId);
} }
myPatientGroupId = myGroupDao.update(group).getId(); myPatientGroupId = myGroupDao.update(group).getId();
//Manually create another golden record //Manually create another golden record