Address review comments

This commit is contained in:
Tadgh 2021-02-25 16:23:36 -05:00
parent a2a3ffb7ec
commit 1663e367a6
5 changed files with 11 additions and 8 deletions

View File

@ -2,4 +2,5 @@
type: add type: add
issue: 2401 issue: 2401
title: "Group Bulk exports are now supported. You can export all data for a Group of Patients via the title: "Group Bulk exports are now supported. You can export all data for a Group of Patients via the
`/Group/[id]/$export` endpoint for any resource type which contains a patient compartment." `/Group/[id]/$export` endpoint for any resource type which contains a patient compartment.
The _typeFilter and _since criteria are currently not supported at this level, but may eventually be"

View File

@ -59,7 +59,7 @@ public class PidToIBaseResourceProcessor implements ItemProcessor<List<ResourceP
@Override @Override
public List<IBaseResource> process(List<ResourcePersistentId> theResourcePersistentId) { public List<IBaseResource> process(List<ResourcePersistentId> theResourcePersistentId) {
String collect = theResourcePersistentId.stream().map(pid -> pid.getId().toString()).collect(Collectors.joining(",")); String collect = theResourcePersistentId.stream().map(pid -> pid.getId().toString()).collect(Collectors.joining(","));
ourLog.debug("Processing PIDs: {}" + collect); ourLog.trace("Processing PIDs: {}" + collect);
IFhirResourceDao<?> dao = myDaoRegistry.getResourceDao(myResourceType); IFhirResourceDao<?> dao = myDaoRegistry.getResourceDao(myResourceType);
Class<? extends IBaseResource> resourceTypeClass = myContext.getResourceDefinition(myResourceType).getImplementingClass(); Class<? extends IBaseResource> resourceTypeClass = myContext.getResourceDefinition(myResourceType).getImplementingClass();
@ -68,7 +68,7 @@ public class PidToIBaseResourceProcessor implements ItemProcessor<List<ResourceP
List<IBaseResource> outgoing = new ArrayList<>(); List<IBaseResource> outgoing = new ArrayList<>();
sb.loadResourcesByPid(theResourcePersistentId, Collections.emptyList(), outgoing, false, null); sb.loadResourcesByPid(theResourcePersistentId, Collections.emptyList(), outgoing, false, null);
ourLog.debug("Loaded resources: {}", outgoing.stream().map(t->t.getIdElement().getValue()).collect(Collectors.joining(", "))); ourLog.trace("Loaded resources: {}", outgoing.stream().map(t->t.getIdElement().getValue()).collect(Collectors.joining(", ")));
return outgoing; return outgoing;

View File

@ -50,6 +50,7 @@ public class BulkExportJobConfig {
public static final String READ_CHUNK_PARAMETER = "readChunkSize"; public static final String READ_CHUNK_PARAMETER = "readChunkSize";
public static final String GROUP_ID_PARAMETER = "groupId"; public static final String GROUP_ID_PARAMETER = "groupId";
public static final String RESOURCE_TYPES_PARAMETER = "resourceTypes"; public static final String RESOURCE_TYPES_PARAMETER = "resourceTypes";
public static final int CHUNK_SIZE = 100;
@Autowired @Autowired
private StepBuilderFactory myStepBuilderFactory; private StepBuilderFactory myStepBuilderFactory;
@ -114,7 +115,7 @@ public class BulkExportJobConfig {
@Bean @Bean
public Step groupBulkExportGenerateResourceFilesStep() { public Step groupBulkExportGenerateResourceFilesStep() {
return myStepBuilderFactory.get("groupBulkExportGenerateResourceFilesStep") return myStepBuilderFactory.get("groupBulkExportGenerateResourceFilesStep")
.<List<ResourcePersistentId>, List<IBaseResource>> chunk(100) //1000 resources per generated file, as the reader returns 10 resources at a time. .<List<ResourcePersistentId>, List<IBaseResource>> chunk(CHUNK_SIZE) //1000 resources per generated file, as the reader returns 10 resources at a time.
.reader(groupBulkItemReader()) .reader(groupBulkItemReader())
.processor(myPidToIBaseResourceProcessor) .processor(myPidToIBaseResourceProcessor)
.writer(resourceToFileWriter()) .writer(resourceToFileWriter())
@ -132,7 +133,7 @@ public class BulkExportJobConfig {
@Bean @Bean
public Step bulkExportGenerateResourceFilesStep() { public Step bulkExportGenerateResourceFilesStep() {
return myStepBuilderFactory.get("bulkExportGenerateResourceFilesStep") return myStepBuilderFactory.get("bulkExportGenerateResourceFilesStep")
.<List<ResourcePersistentId>, List<IBaseResource>> chunk(100) //1000 resources per generated file, as the reader returns 10 resources at a time. .<List<ResourcePersistentId>, List<IBaseResource>> chunk(CHUNK_SIZE) //1000 resources per generated file, as the reader returns 10 resources at a time.
.reader(bulkItemReader()) .reader(bulkItemReader())
.processor(myPidToIBaseResourceProcessor) .processor(myPidToIBaseResourceProcessor)
.writer(resourceToFileWriter()) .writer(resourceToFileWriter())

View File

@ -189,7 +189,6 @@ public class BulkDataExportProvider {
@IdParam IIdType theIdParam, @IdParam IIdType theIdParam,
@OperationParam(name = JpaConstants.PARAM_EXPORT_OUTPUT_FORMAT, min = 0, max = 1, typeName = "string") IPrimitiveType<String> theOutputFormat, @OperationParam(name = JpaConstants.PARAM_EXPORT_OUTPUT_FORMAT, min = 0, max = 1, typeName = "string") IPrimitiveType<String> theOutputFormat,
@OperationParam(name = JpaConstants.PARAM_EXPORT_TYPE, min = 0, max = 1, typeName = "string") IPrimitiveType<String> theType, @OperationParam(name = JpaConstants.PARAM_EXPORT_TYPE, min = 0, max = 1, typeName = "string") IPrimitiveType<String> theType,
@OperationParam(name = JpaConstants.PARAM_EXPORT_MDM, min = 0, max = 1, typeName = "boolean") IPrimitiveType<Boolean> theMdm,
ServletRequestDetails theRequestDetails ServletRequestDetails theRequestDetails
) { ) {
@ -209,8 +208,9 @@ public class BulkDataExportProvider {
//TODO GGG eventually, we will support these things. //TODO GGG eventually, we will support these things.
Set<String> filters = null; Set<String> filters = null;
Date since = null; Date since = null;
boolean theMdm = false;
IBulkDataExportSvc.JobInfo outcome = myBulkDataExportSvc.submitJob(new GroupBulkDataExportOptions(outputFormat, resourceTypes, since, filters, theIdParam, theMdm.getValue())); IBulkDataExportSvc.JobInfo outcome = myBulkDataExportSvc.submitJob(new GroupBulkDataExportOptions(outputFormat, resourceTypes, since, filters, theIdParam, theMdm));
String serverBase = getServerBase(theRequestDetails); String serverBase = getServerBase(theRequestDetails);
String pollLocation = serverBase + "/" + JpaConstants.OPERATION_EXPORT_POLL_STATUS + "?" + JpaConstants.PARAM_EXPORT_POLL_STATUS_JOB_ID + "=" + outcome.getJobId(); String pollLocation = serverBase + "/" + JpaConstants.OPERATION_EXPORT_POLL_STATUS + "?" + JpaConstants.PARAM_EXPORT_POLL_STATUS_JOB_ID + "=" + outcome.getJobId();

View File

@ -189,9 +189,10 @@ public class JpaConstants {
public static final Object PARAM_EXPORT_GROUP_ID = "_groupId"; public static final Object PARAM_EXPORT_GROUP_ID = "_groupId";
/** /**
* TODO GGG eventually we will support this.
* Whether mdm should be performed on group export items to expand the group items to linked items before performing the export * Whether mdm should be performed on group export items to expand the group items to linked items before performing the export
*/ */
public static final String PARAM_EXPORT_MDM = "_mdm"; // public static final String PARAM_EXPORT_MDM = "_mdm";
/** /**
* Parameter for delete to indicate the deleted resources should also be expunged * Parameter for delete to indicate the deleted resources should also be expunged