Skip to content

Commit 9a06db3

Browse files
authored
Java,Javascript,Python: HealthImaging updateImageSetMetadata examples (#6337)
1 parent 289af27 commit 9a06db3

File tree

6 files changed

+307
-91
lines changed

6 files changed

+307
-91
lines changed

.doc_gen/metadata/medical-imaging_metadata.yaml

+26-2
Original file line numberDiff line numberDiff line change
@@ -685,6 +685,15 @@ medical-imaging_UpdateImageSetMetadata:
685685
The following code instantiates the MedicalImagingWrapper object.
686686
snippet_tags:
687687
- python.example_code.medical-imaging.MedicalImagingWrapper.instantiation
688+
- description: "Use case #1: Insert or update an attribute."
689+
snippet_tags:
690+
- python.example_code.medical-imaging.UpdateImageSetMetadata.insert_or_update_attributes
691+
- description: "Use case #2: Remove an attribute."
692+
snippet_tags:
693+
- python.example_code.medical-imaging.UpdateImageSetMetadata.remove_attributes
694+
- description: "Use case #3: Remove an instance."
695+
snippet_tags:
696+
- python.example_code.medical-imaging.UpdateImageSetMetadata.remove_instance
688697
JavaScript:
689698
versions:
690699
- sdk_version: 3
@@ -694,9 +703,15 @@ medical-imaging_UpdateImageSetMetadata:
694703
- description:
695704
snippet_tags:
696705
- medical-imaging.JavaScript.datastore.updateImageSetMetadataV3
697-
- description: Encode the metadata.
706+
- description: "Use case #1: Insert or update an attribute."
707+
snippet_tags:
708+
- medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.insert_or_update_attributes
709+
- description: "Use case #2: Remove an attribute."
698710
snippet_tags:
699-
- medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.main
711+
- medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.remove_attributes
712+
- description: "Use case #3: Remove an instance."
713+
snippet_tags:
714+
- medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.remove_instance
700715
Java:
701716
versions:
702717
- sdk_version: 2
@@ -706,6 +721,15 @@ medical-imaging_UpdateImageSetMetadata:
706721
- description:
707722
snippet_tags:
708723
- medicalimaging.java2.update_image_set_metadata.main
724+
- description: "Use case #1: Insert or update an attribute."
725+
snippet_tags:
726+
- medicalimaging.java2.update_image_set_metadata.insert_or_update_attributes
727+
- description: "Use case #2: Remove an attribute."
728+
snippet_tags:
729+
- medicalimaging.java2.update_image_set_metadata.remove_attributes
730+
- description: "Use case #3: Remove an instance."
731+
snippet_tags:
732+
- medicalimaging.java2.update_image_set_metadata.remove_instance
709733
services:
710734
medical-imaging: {UpdateImageSetMetadata}
711735
medical-imaging_CopyImageSet:

javascriptv3/example_code/medical-imaging/actions/update-image-set-metadata.js

+78-19
Original file line numberDiff line numberDiff line change
@@ -53,26 +53,85 @@ export const updateImageSetMetadata = async (datastoreId = "xxxxxxxxxx",
5353

5454
// Invoke the following code if this file is being run directly.
5555
if (process.argv[1] === fileURLToPath(import.meta.url)) {
56-
// snippet-start:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.main]
57-
const updatableAttributes =
58-
JSON.stringify({
59-
"SchemaVersion": 1.1,
60-
"Patient": {
61-
"DICOM": {
62-
"PatientName": "Garcia^Gloria"
63-
}
64-
}
65-
})
56+
// Add a new attribute to the image set metadata.
57+
const datastoreID = "12345678901234567890123456789012";
58+
const imageSetID = "12345678901234567890123456789012";
59+
const versionID = "1";
60+
const updateType = "insert"; // or "remove-attribute" or "remove_instance".
61+
if (updateType == "insert") {
62+
// Insert or update an attribute.
63+
// snippet-start:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.insert_or_update_attributes]
64+
const insertAttributes =
65+
JSON.stringify({
66+
"SchemaVersion": 1.1,
67+
"Study": {
68+
"DICOM": {
69+
"StudyDescription": "CT CHEST"
70+
}
71+
}
72+
});
73+
74+
const updateMetadata = {
75+
"DICOMUpdates": {
76+
"updatableAttributes":
77+
new TextEncoder().encode(insertAttributes)
78+
}
79+
};
80+
81+
await updateImageSetMetadata(datastoreID, imageSetID,
82+
versionID, updateMetadata);
83+
// snippet-end:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.insert_or_update_attributes]
84+
} else if (updateType == "remove_attribute") {
85+
// Remove an existing attribute.
86+
// snippet-start:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.remove_attributes]
87+
// Attribute key and value must match the existing attribute.
88+
const remove_attribute =
89+
JSON.stringify({
90+
"SchemaVersion": 1.1,
91+
"Study": {
92+
"DICOM": {
93+
"StudyDescription": "CT CHEST"
94+
}
95+
}
96+
});
6697

67-
const updateMetadata = {
68-
"DICOMUpdates": {
69-
"updatableAttributes":
70-
new TextEncoder().encode(updatableAttributes)
71-
}
72-
};
98+
const updateMetadata = {
99+
"DICOMUpdates": {
100+
"removableAttributes":
101+
new TextEncoder().encode(remove_attribute)
102+
}
103+
};
73104

74-
await updateImageSetMetadata("12345678901234567890123456789012", "12345678901234567890123456789012",
75-
"1", updateMetadata);
76-
// snippet-end:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.main]
105+
await updateImageSetMetadata(datastoreID, imageSetID,
106+
versionID, updateMetadata);
107+
// snippet-end:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.remove_attributes]
108+
} else if (updateType == "remove_instance") {
109+
// Remove an existing instance.
110+
// snippet-start:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.remove_instance]
111+
const remove_instance =
112+
JSON.stringify({
113+
"SchemaVersion": 1.1,
114+
"Study": {
115+
"Series": {
116+
"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": {
117+
"Instances": {
118+
"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": {}
119+
}
120+
}
121+
}
122+
}
123+
});
124+
125+
const updateMetadata = {
126+
"DICOMUpdates": {
127+
"removableAttributes":
128+
new TextEncoder().encode(remove_instance)
129+
}
130+
};
131+
132+
await updateImageSetMetadata(datastoreID, imageSetID,
133+
versionID, updateMetadata);
134+
// snippet-end:[medical-imaging.JavaScript.datastore.updateImageSetMetadataV3.remove_instance]
135+
}
77136
}
78137

javav2/example_code/medicalimaging/README.md

+1-1
Original file line numberDiff line numberDiff line change
@@ -50,7 +50,7 @@ Code excerpts that show you how to call individual service functions.
5050
- [List tags for a resource](src/main/java/com/example/medicalimaging/ListTagsForResource.java#L56) (`ListTagsForResource`)
5151
- [Remove a tag from a resource](src/main/java/com/example/medicalimaging/UntagResource.java#L54) (`UntagResource`)
5252
- [Search image sets](src/main/java/com/example/medicalimaging/SearchImageSets.java#L130) (`SearchImageSets`)
53-
- [Update image set metadata](src/main/java/com/example/medicalimaging/UpdateImageSetMetadata.java#L75) (`UpdateImageSetMetadata`)
53+
- [Update image set metadata](src/main/java/com/example/medicalimaging/UpdateImageSetMetadata.java#L144) (`UpdateImageSetMetadata`)
5454

5555
### Scenarios
5656

javav2/example_code/medicalimaging/pom.xml

+1-1
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@
88
<version>1.0-SNAPSHOT</version>
99
<properties>
1010
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
11-
<java.version>1.8</java.version>
11+
<java.version>17</java.version>
1212
<aws.java.sdk.version>2.20.132</aws.java.sdk.version>
1313
</properties>
1414
<build>

javav2/example_code/medicalimaging/src/main/java/com/example/medicalimaging/UpdateImageSetMetadata.java

+137-68
Original file line numberDiff line numberDiff line change
@@ -9,10 +9,7 @@
99
import software.amazon.awssdk.core.SdkBytes;
1010
import software.amazon.awssdk.regions.Region;
1111
import software.amazon.awssdk.services.medicalimaging.MedicalImagingClient;
12-
import software.amazon.awssdk.services.medicalimaging.model.DICOMUpdates;
13-
import software.amazon.awssdk.services.medicalimaging.model.MedicalImagingException;
14-
import software.amazon.awssdk.services.medicalimaging.model.MetadataUpdates;
15-
import software.amazon.awssdk.services.medicalimaging.model.UpdateImageSetMetadataRequest;
12+
import software.amazon.awssdk.services.medicalimaging.model.*;
1613

1714
import java.nio.ByteBuffer;
1815
import java.nio.charset.StandardCharsets;
@@ -29,71 +26,143 @@
2926
*/
3027
public class UpdateImageSetMetadata {
3128

32-
public static void main(String[] args) {
33-
final String usage = "\n" +
34-
"Usage:\n" +
35-
" <datastoreId> <imagesetId> <versionId>\n\n" +
36-
"Where:\n" +
37-
" datastoreId - The ID of the data store.\n" +
38-
" imagesetId - The ID of the image set.\n" +
39-
" versionId - The latest version ID of the image set.\n";
40-
41-
if (args.length != 3) {
42-
System.out.println(usage);
43-
System.exit(1);
44-
}
45-
46-
String datastoreId = args[0];
47-
String imagesetId = args[1];
48-
String versionid = args[2];
49-
50-
Region region = Region.US_WEST_2;
51-
MedicalImagingClient medicalImagingClient = MedicalImagingClient.builder()
52-
.region(region)
53-
.credentialsProvider(ProfileCredentialsProvider.create())
54-
.build();
55-
56-
final String updateAttributes = "{\"SchemaVersion\":1.1,\"Patient\":{\"DICOM\":{\"PatientName\":\"MX^MX\"}}}";
57-
final String removeAttributes = "{\"SchemaVersion\":1.1,\"Patient\":{\"DICOM\":{\"PatientSex\":\"X\"}}}";
58-
MetadataUpdates metadataUpdates = MetadataUpdates.builder()
59-
.dicomUpdates(DICOMUpdates.builder()
60-
.updatableAttributes(SdkBytes.fromByteBuffer(
61-
ByteBuffer.wrap(updateAttributes
62-
.getBytes(StandardCharsets.UTF_8))))
63-
.removableAttributes(SdkBytes.fromByteBuffer(
64-
ByteBuffer.wrap(removeAttributes
65-
.getBytes(StandardCharsets.UTF_8))))
66-
.build())
67-
.build();
68-
69-
updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId,
70-
versionid, metadataUpdates);
71-
72-
medicalImagingClient.close();
29+
public static void main(String[] args) {
30+
final String usage = "\n" +
31+
"Usage:\n" +
32+
" <datastoreId> <imagesetId> <versionId> <updateType>n\n" +
33+
"Where:\n" +
34+
" datastoreId - The ID of the data store.\n" +
35+
" imagesetId - The ID of the image set.\n" +
36+
" versionId - The latest version ID of the image set.\n" +
37+
" updateType - Choice of (insert | remove_attribute | remove_instance) for update type.\n";
38+
39+
if (args.length != 4) {
40+
System.out.println(usage);
41+
System.exit(1);
7342
}
7443

75-
// snippet-start:[medicalimaging.java2.update_image_set_metadata.main]
76-
public static void updateMedicalImageSetMetadata(MedicalImagingClient medicalImagingClient,
77-
String datastoreId,
78-
String imagesetId,
79-
String versionId,
80-
MetadataUpdates metadataUpdates) {
81-
try {
82-
UpdateImageSetMetadataRequest updateImageSetMetadataRequest = UpdateImageSetMetadataRequest
83-
.builder()
84-
.datastoreId(datastoreId)
85-
.imageSetId(imagesetId)
86-
.latestVersionId(versionId)
87-
.updateImageSetMetadataUpdates(metadataUpdates)
88-
.build();
89-
90-
medicalImagingClient.updateImageSetMetadata(updateImageSetMetadataRequest);
91-
92-
System.out.println("The image set metadata was updated");
93-
} catch (MedicalImagingException e) {
94-
System.err.println(e.awsErrorDetails().errorMessage());
95-
System.exit(1);
96-
}
44+
String datastoreId = args[0];
45+
String imagesetId = args[1];
46+
String versionid = args[2];
47+
String updateType = args[3];
48+
49+
50+
if (!updateType.equals("insert") && !updateType.equals("remove_attribute") && !updateType.equals("remove_instance")) {
51+
System.out.println("Invalid update type, '" + updateType + "'.");
52+
System.out.println(usage);
53+
System.exit(1);
54+
}
55+
56+
Region region = Region.US_EAST_1;
57+
MedicalImagingClient medicalImagingClient = MedicalImagingClient.builder()
58+
.region(region)
59+
.credentialsProvider(ProfileCredentialsProvider.create())
60+
.build();
61+
62+
if (updateType.equals("insert")) {
63+
// Add a new attribute or update an existing attribute.
64+
// snippet-start:[medicalimaging.java2.update_image_set_metadata.insert_or_update_attributes]
65+
final String insertAttributes = """
66+
{
67+
"SchemaVersion": 1.1,
68+
"Study": {
69+
"DICOM": {
70+
"StudyDescription": "CT CHEST"
71+
}
72+
}
73+
}
74+
""";
75+
MetadataUpdates metadataInsertUpdates = MetadataUpdates.builder()
76+
.dicomUpdates(DICOMUpdates.builder()
77+
.updatableAttributes(SdkBytes.fromByteBuffer(
78+
ByteBuffer.wrap(insertAttributes
79+
.getBytes(StandardCharsets.UTF_8))))
80+
.build())
81+
.build();
82+
83+
updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId,
84+
versionid, metadataInsertUpdates);
85+
// snippet-end:[medicalimaging.java2.update_image_set_metadata.insert_or_update_attributes]
86+
} else if (updateType.equals("remove_attribute")) {
87+
// Remove an attribute.
88+
// snippet-start:[medicalimaging.java2.update_image_set_metadata.remove_attributes]
89+
final String removeAttributes = """
90+
{
91+
"SchemaVersion": 1.1,
92+
"Study": {
93+
"DICOM": {
94+
"StudyDescription": "CT CHEST"
95+
}
96+
}
97+
}
98+
""";
99+
MetadataUpdates metadataRemoveUpdates = MetadataUpdates.builder()
100+
.dicomUpdates(DICOMUpdates.builder()
101+
.removableAttributes(SdkBytes.fromByteBuffer(
102+
ByteBuffer.wrap(removeAttributes
103+
.getBytes(StandardCharsets.UTF_8))))
104+
.build())
105+
.build();
106+
107+
updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId,
108+
versionid, metadataRemoveUpdates);
109+
// snippet-end:[medicalimaging.java2.update_image_set_metadata.remove_attributes]
110+
} else if (updateType.equals("remove_instance")) {
111+
// Remove an instance.
112+
// snippet-start:[medicalimaging.java2.update_image_set_metadata.remove_instance]
113+
final String removeInstance = """
114+
{
115+
"SchemaVersion": 1.1,
116+
"Study": {
117+
"Series": {
118+
"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": {
119+
"Instances": {
120+
"1.1.1.1.1.1.12345.123456789012.123.12345678901234.1": {}
121+
}
122+
}
123+
}
124+
}
125+
}
126+
""";
127+
MetadataUpdates metadataRemoveUpdates = MetadataUpdates.builder()
128+
.dicomUpdates(DICOMUpdates.builder()
129+
.removableAttributes(SdkBytes.fromByteBuffer(
130+
ByteBuffer.wrap(removeInstance
131+
.getBytes(StandardCharsets.UTF_8))))
132+
.build())
133+
.build();
134+
135+
updateMedicalImageSetMetadata(medicalImagingClient, datastoreId, imagesetId,
136+
versionid, metadataRemoveUpdates);
137+
// snippet-end:[medicalimaging.java2.update_image_set_metadata.remove_instance]
138+
}
139+
140+
141+
medicalImagingClient.close();
142+
}
143+
144+
// snippet-start:[medicalimaging.java2.update_image_set_metadata.main]
145+
public static void updateMedicalImageSetMetadata(MedicalImagingClient medicalImagingClient,
146+
String datastoreId,
147+
String imagesetId,
148+
String versionId,
149+
MetadataUpdates metadataUpdates) {
150+
try {
151+
UpdateImageSetMetadataRequest updateImageSetMetadataRequest = UpdateImageSetMetadataRequest
152+
.builder()
153+
.datastoreId(datastoreId)
154+
.imageSetId(imagesetId)
155+
.latestVersionId(versionId)
156+
.updateImageSetMetadataUpdates(metadataUpdates)
157+
.build();
158+
159+
UpdateImageSetMetadataResponse response = medicalImagingClient.updateImageSetMetadata(updateImageSetMetadataRequest);
160+
161+
System.out.println("The image set metadata was updated" + response);
162+
} catch (MedicalImagingException e) {
163+
System.err.println(e.awsErrorDetails().errorMessage());
164+
System.exit(1);
97165
}
98-
// snippet-end:[medicalimaging.java2.update_image_set_metadata.main]
166+
}
167+
// snippet-end:[medicalimaging.java2.update_image_set_metadata.main]
99168
}

0 commit comments

Comments
 (0)