diff --git a/cpp/example_code/medical-imaging/start_dicom_import_job.cpp b/cpp/example_code/medical-imaging/start_dicom_import_job.cpp index 72b893789cd..f22b485f60a 100644 --- a/cpp/example_code/medical-imaging/start_dicom_import_job.cpp +++ b/cpp/example_code/medical-imaging/start_dicom_import_job.cpp @@ -29,6 +29,7 @@ \param outputBucketName: The name of the S3 bucket for the output. \param outputDirectory: The directory in the S3 bucket to store the output. \param roleArn: The ARN of the IAM role with permissions for the import. + \param importConfigJson: The import configuration JSON string (optional). \param importJobId: A string to receive the import job ID. \param clientConfig: Aws client configuration. \return bool: Function succeeded. @@ -37,6 +38,7 @@ bool AwsDoc::Medical_Imaging::startDICOMImportJob( const Aws::String &dataStoreID, const Aws::String &inputBucketName, const Aws::String &inputDirectory, const Aws::String &outputBucketName, const Aws::String &outputDirectory, const Aws::String &roleArn, + const Aws::String &importConfigJson, Aws::String &importJobId, const Aws::Client::ClientConfiguration &clientConfig) { Aws::MedicalImaging::MedicalImagingClient medicalImagingClient(clientConfig); @@ -48,8 +50,20 @@ bool AwsDoc::Medical_Imaging::startDICOMImportJob( startDICOMImportJobRequest.SetInputS3Uri(inputURI); startDICOMImportJobRequest.SetOutputS3Uri(outputURI); - Aws::MedicalImaging::Model::StartDICOMImportJobOutcome startDICOMImportJobOutcome = medicalImagingClient.StartDICOMImportJob( - startDICOMImportJobRequest); + if (!importConfigJson.empty()) { + Aws::Utils::Json::JsonValue jsonValue(importConfigJson); + if (jsonValue.WasParseSuccessful()) { + startDICOMImportJobRequest.SetImportConfiguration( + Aws::MedicalImaging::Model::ImportConfiguration(jsonValue)); + } + else { + std::cerr << "Failed to parse import configuration JSON" << std::endl; + return false; + } + } + + Aws::MedicalImaging::Model::StartDICOMImportJobOutcome startDICOMImportJobOutcome = + medicalImagingClient.StartDICOMImportJob(startDICOMImportJobRequest); if (startDICOMImportJobOutcome.IsSuccess()) { importJobId = startDICOMImportJobOutcome.GetResult().GetJobId(); diff --git a/javascriptv3/example_code/medical-imaging/actions/start-dicom-import-job.js b/javascriptv3/example_code/medical-imaging/actions/start-dicom-import-job.js index 692ed3cb11e..beba224233d 100644 --- a/javascriptv3/example_code/medical-imaging/actions/start-dicom-import-job.js +++ b/javascriptv3/example_code/medical-imaging/actions/start-dicom-import-job.js @@ -13,6 +13,7 @@ import { medicalImagingClient } from "../libs/medicalImagingClient.js"; * @param {string} dataAccessRoleArn - The Amazon Resource Name (ARN) of the role that grants permission. * @param {string} inputS3Uri - The URI of the S3 bucket containing the input files. * @param {string} outputS3Uri - The URI of the S3 bucket where the output files are stored. + * @param {Object} importConfiguration - The configuration for digital pathology import. */ export const startDicomImportJob = async ( jobName = "test-1", @@ -20,6 +21,17 @@ export const startDicomImportJob = async ( dataAccessRoleArn = "arn:aws:iam::xxxxxxxxxxxx:role/ImportJobDataAccessRole", inputS3Uri = "s3://medical-imaging-dicom-input/dicom_input/", outputS3Uri = "s3://medical-imaging-output/job_output/", + importConfiguration = { + digitalPathologyImportConfiguration: { + qualityFactor: 85, + fileMetadataMappings: [ + { + imageFilePath: "image.svs", + metadataFilePath: "metadata.json", + }, + ], + }, + }, ) => { const response = await medicalImagingClient.send( new StartDICOMImportJobCommand({ @@ -28,6 +40,7 @@ export const startDicomImportJob = async ( dataAccessRoleArn: dataAccessRoleArn, inputS3Uri: inputS3Uri, outputS3Uri: outputS3Uri, + importConfiguration: importConfiguration, }), ); console.log(response); diff --git a/javav2/example_code/medicalimaging/src/main/java/com/example/medicalimaging/StartDicomImportJob.java b/javav2/example_code/medicalimaging/src/main/java/com/example/medicalimaging/StartDicomImportJob.java index a87b4c8340f..1fedda819a8 100644 --- a/javav2/example_code/medicalimaging/src/main/java/com/example/medicalimaging/StartDicomImportJob.java +++ b/javav2/example_code/medicalimaging/src/main/java/com/example/medicalimaging/StartDicomImportJob.java @@ -64,28 +64,53 @@ public static void main(String[] args) { // snippet-start:[medicalimaging.java2.start_dicom_import_job.main] public static String startDicomImportJob(MedicalImagingClient medicalImagingClient, - String jobName, - String datastoreId, - String dataAccessRoleArn, - String inputS3Uri, - String outputS3Uri) { - - try { - StartDicomImportJobRequest startDicomImportJobRequest = StartDicomImportJobRequest.builder() - .jobName(jobName) - .datastoreId(datastoreId) - .dataAccessRoleArn(dataAccessRoleArn) - .inputS3Uri(inputS3Uri) - .outputS3Uri(outputS3Uri) + String jobName, + String datastoreId, + String dataAccessRoleArn, + String inputS3Uri, + String outputS3Uri, + String importConfigJson) { + + try { + software.amazon.awssdk.utils.json.JsonNode jsonNode = + software.amazon.awssdk.utils.json.JsonFactory.jsonParser().parse(importConfigJson); + + ImportConfiguration importConfiguration = ImportConfiguration.builder() + .digitalPathologyImportConfiguration( + DigitalPathologyImportConfiguration.builder() + .qualityFactor(jsonNode.get("digitalPathologyImportConfiguration") + .get("qualityFactor").asInt()) + .fileMetadataMappings( + jsonNode.get("digitalPathologyImportConfiguration") + .get("fileMetadataMappings") + .elements() + .map(mapping -> FileMetadataMapping.builder() + .imageFilePath(mapping.get("imageFilePath").asString()) + .metadataFilePath(mapping.get("metadataFilePath").asString()) + .build()) + .collect(java.util.stream.Collectors.toList()) + ) + .build() + ) .build(); - StartDicomImportJobResponse response = medicalImagingClient.startDICOMImportJob(startDicomImportJobRequest); - return response.jobId(); - } catch (MedicalImagingException e) { - System.err.println(e.awsErrorDetails().errorMessage()); - System.exit(1); - } - return ""; - } + StartDicomImportJobRequest startDicomImportJobRequest = StartDicomImportJobRequest.builder() + .jobName(jobName) + .datastoreId(datastoreId) + .dataAccessRoleArn(dataAccessRoleArn) + .inputS3Uri(inputS3Uri) + .outputS3Uri(outputS3Uri) + .importConfiguration(importConfiguration) + .build(); + + StartDicomImportJobResponse response = medicalImagingClient.startDICOMImportJob(startDicomImportJobRequest); + return response.jobId(); + } catch (MedicalImagingException e) { + System.err.println(e.awsErrorDetails().errorMessage()); + System.exit(1); + } + + return ""; + } // snippet-end:[medicalimaging.java2.start_dicom_import_job.main] } diff --git a/python/example_code/medical-imaging/medical_imaging_basics.py b/python/example_code/medical-imaging/medical_imaging_basics.py index 2773041e1ba..9b1b0bf3f4b 100644 --- a/python/example_code/medical-imaging/medical_imaging_basics.py +++ b/python/example_code/medical-imaging/medical_imaging_basics.py @@ -123,8 +123,8 @@ def delete_datastore(self, datastore_id): # snippet-start:[python.example_code.medical-imaging.StartDICOMImportJob] def start_dicom_import_job( - self, job_name, datastore_id, role_arn, input_s3_uri, output_s3_uri - ): + self, job_name, datastore_id, role_arn, input_s3_uri, output_s3_uri, import_configuration + ): """ Start a DICOM import job. @@ -142,6 +142,7 @@ def start_dicom_import_job( dataAccessRoleArn=role_arn, inputS3Uri=input_s3_uri, outputS3Uri=output_s3_uri, + importConfiguration=import_configuration ) except ClientError as err: logger.error( @@ -152,7 +153,6 @@ def start_dicom_import_job( raise else: return job["jobId"] - # snippet-end:[python.example_code.medical-imaging.StartDICOMImportJob] # snippet-start:[python.example_code.medical-imaging.GetDICOMImportJob] @@ -709,8 +709,19 @@ def usage_demo(self, source_s3_uri, dest_s3_uri, data_access_role_arn): print(f"datastores : {datastores}") job_name = "python_usage_demo_job" + import_configuration = { + "digitalPathologyImportConfiguration": { + "qualityFactor": 85, + "fileMetadataMappings": [ + { + "imageFilePath": "image.svs", + "metadataFilePath": "metadata.json" + } + ] + } + } job_id = self.start_dicom_import_job( - job_name, data_store_id, data_access_role_arn, source_s3_uri, dest_s3_uri + job_name, data_store_id, data_access_role_arn, source_s3_uri, dest_s3_uri, import_configuration ) print(f"Started import job with id: {job_id}")