Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 16 additions & 2 deletions cpp/example_code/medical-imaging/start_dicom_import_job.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -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.
Expand All @@ -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);
Expand All @@ -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();
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -13,13 +13,25 @@ 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",
datastoreId = "12345678901234567890123456789012",
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({
Expand All @@ -28,6 +40,7 @@ export const startDicomImportJob = async (
dataAccessRoleArn: dataAccessRoleArn,
inputS3Uri: inputS3Uri,
outputS3Uri: outputS3Uri,
importConfiguration: importConfiguration,
}),
);
console.log(response);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -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]
}
19 changes: 15 additions & 4 deletions python/example_code/medical-imaging/medical_imaging_basics.py
Original file line number Diff line number Diff line change
Expand Up @@ -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.

Expand All @@ -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(
Expand All @@ -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]
Expand Down Expand Up @@ -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}")

Expand Down
Loading