Rework pid translator to accept non-forced-ids
This commit is contained in:
parent
5323486d28
commit
420c4f8378
|
@ -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,
|
||||||
|
|
|
@ -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());
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in New Issue