annotate Samples/FHIR/src/main/java/OrthancResource.java @ 15:b69bc09e2969

fix
author Sebastien Jodogne <s.jodogne@gmail.com>
date Thu, 26 Oct 2023 13:51:32 +0200
parents 0dc05fe76bd5
children 1c407ba1d311
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
11
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
1 /**
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
2 * SPDX-FileCopyrightText: 2023 Sebastien Jodogne, UCLouvain, Belgium
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
3 * SPDX-License-Identifier: GPL-3.0-or-later
14
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
4 **/
11
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
5
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
6 /**
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
7 * Java plugin for Orthanc
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
8 * Copyright (C) 2023 Sebastien Jodogne, UCLouvain, Belgium
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
9 *
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
10 * This program is free software: you can redistribute it and/or
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
11 * modify it under the terms of the GNU General Public License as
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
12 * published by the Free Software Foundation, either version 3 of the
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
13 * License, or (at your option) any later version.
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
14 *
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
15 * This program is distributed in the hope that it will be useful, but
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
16 * WITHOUT ANY WARRANTY; without even the implied warranty of
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
18 * General Public License for more details.
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
19 *
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
20 * You should have received a copy of the GNU General Public License
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
21 * along with this program. If not, see <http://www.gnu.org/licenses/>.
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
22 **/
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
23
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
24
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
25 import be.uclouvain.orthanc.ResourceType;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
26 import org.hl7.fhir.r5.model.*;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
27 import org.json.JSONArray;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
28 import org.json.JSONObject;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
29
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
30 import java.nio.charset.StandardCharsets;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
31 import java.util.ArrayList;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
32 import java.util.HashMap;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
33 import java.util.List;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
34 import java.util.Map;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
35
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
36 public class OrthancResource {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
37 private ResourceType type;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
38 private String id;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
39 private String lastUpdate;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
40 private Map<String, String> tags;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
41 private List<String> children;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
42
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
43 public OrthancResource(JSONObject info) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
44 String s = info.getString("Type");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
45 if (s.equals("Patient")) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
46 type = ResourceType.PATIENT;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
47 } else if (s.equals("Study")) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
48 type = ResourceType.STUDY;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
49 } else if (s.equals("Series")) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
50 type = ResourceType.SERIES;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
51 } else if (s.equals("Instance")) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
52 type = ResourceType.INSTANCE;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
53 } else {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
54 throw new RuntimeException("Unknown resource type");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
55 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
56
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
57 id = info.getString("ID");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
58 lastUpdate = info.optString("LastUpdate");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
59 tags = new HashMap<>();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
60 addToDictionary(tags, info.getJSONObject("MainDicomTags"));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
61
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
62 if (type != ResourceType.INSTANCE) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
63 String childKey;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
64 switch (type) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
65 case PATIENT:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
66 childKey = "Studies";
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
67 break;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
68 case STUDY:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
69 childKey = "Series";
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
70 addToDictionary(tags, info.getJSONObject("PatientMainDicomTags"));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
71 break;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
72 case SERIES:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
73 childKey = "Instances";
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
74 break;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
75 default:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
76 throw new RuntimeException();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
77 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
78
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
79 children = new ArrayList<>();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
80 addToListOfStrings(children, info.getJSONArray(childKey));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
81 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
82 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
83
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
84 static public void addToDictionary(Map<String, String> target,
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
85 JSONObject source) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
86 for (String key : source.keySet()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
87 target.put(key, source.getString(key));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
88 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
89 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
90
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
91 static public void addToListOfStrings(List<String> target,
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
92 JSONArray source) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
93 for (int i = 0; i < source.length(); i++) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
94 target.add(source.getString(i));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
95 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
96 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
97
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
98 public ResourceType getType() {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
99 return type;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
100 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
101
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
102 public String getId() {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
103 return id;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
104 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
105
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
106 public String getLastUpdate() {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
107 return lastUpdate;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
108 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
109
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
110 public Map<String, String> getTags() {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
111 return tags;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
112 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
113
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
114 public List<String> getChildren() {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
115 if (type == ResourceType.INSTANCE) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
116 throw new RuntimeException("A DICOM instance has no child");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
117 } else {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
118 return children;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
119 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
120 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
121
14
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
122 private static List<OrthancResource> find(IOrthancConnection connection,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
123 ResourceType type,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
124 Map<String, String> tags,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
125 boolean caseSensitive,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
126 boolean hasPaging,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
127 int since,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
128 int limit) {
11
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
129 JSONObject query = new JSONObject();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
130 for (Map.Entry<String, String> entry : tags.entrySet()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
131 query.put(entry.getKey(), entry.getValue());
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
132 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
133
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
134 JSONObject request = new JSONObject();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
135 request.put("Expand", true);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
136 request.put("Query", query);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
137 request.put("Short", true);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
138 request.put("CaseSensitive", caseSensitive);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
139
14
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
140 if (hasPaging) {
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
141 request.put("Since", since);
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
142 request.put("Limit", limit);
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
143 }
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
144
11
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
145 switch (type) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
146 case PATIENT:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
147 request.put("Level", "Patient");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
148 break;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
149 case STUDY:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
150 request.put("Level", "Study");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
151 break;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
152 case SERIES:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
153 request.put("Level", "Series");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
154 break;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
155 case INSTANCE:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
156 request.put("Level", "Instance");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
157 break;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
158 default:
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
159 throw new RuntimeException();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
160 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
161
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
162 byte[] response = connection.doPost("/tools/find", request.toString().getBytes(StandardCharsets.UTF_8));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
163
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
164 JSONArray arr = new JSONArray(new String(response, StandardCharsets.UTF_8));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
165
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
166 List<OrthancResource> result = new ArrayList<>();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
167 for (int i = 0; i < arr.length(); i++) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
168 result.add(new OrthancResource(arr.getJSONObject(i)));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
169 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
170
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
171 return result;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
172 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
173
14
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
174 public static List<OrthancResource> find(IOrthancConnection connection,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
175 ResourceType type,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
176 Map<String, String> tags,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
177 boolean caseSensitive,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
178 int since,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
179 int limit) {
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
180 return find(connection, type, tags, caseSensitive, true, since, limit);
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
181 }
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
182
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
183 public static List<OrthancResource> find(IOrthancConnection connection,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
184 ResourceType type,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
185 Map<String, String> tags,
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
186 boolean caseSensitive) {
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
187 return find(connection, type, tags, caseSensitive, false, 0, 0);
0dc05fe76bd5 implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 11
diff changeset
188 }
11
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
189
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
190 public Patient getFhirPatient() {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
191 if (type != ResourceType.PATIENT) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
192 throw new RuntimeException("Not a patient");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
193 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
194
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
195 Patient patient = new Patient();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
196 patient.setId(getTags().getOrDefault(Toolbox.TAG_PATIENT_ID, ""));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
197
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
198 String birthDate = getTags().getOrDefault(Toolbox.TAG_PATIENT_BIRTH_DATE, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
199 if (birthDate != null) {
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
200 try {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
201 patient.setBirthDate(Toolbox.parseDicomDate(birthDate));
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
202 } catch (IllegalArgumentException e) {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
203 // Ignore incorrect dates
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
204 }
11
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
205 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
206
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
207 String patientName = getTags().getOrDefault(Toolbox.TAG_PATIENT_NAME, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
208 if (!patientName.isEmpty()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
209 patient.addName();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
210 HumanName name = patient.getName().get(0);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
211
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
212 String[] parts = patientName.split("\\^");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
213
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
214 // https://dicom.nema.org/medical/dicom/current/output/chtml/part19/sect_10.2.html
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
215 // https://www.hl7.org/fhir/datatypes.html#HumanName
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
216 if (parts.length > 0) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
217 name.setFamily(parts[0]);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
218 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
219 for (int i = 1; i < parts.length; i++) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
220 name.addGiven(parts[i]);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
221 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
222 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
223
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
224 String sex = getTags().getOrDefault(Toolbox.TAG_PATIENT_SEX, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
225 if (sex.equals("M")) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
226 patient.setGender(Enumerations.AdministrativeGender.MALE);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
227 } else if (sex.equals("F")) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
228 patient.setGender(Enumerations.AdministrativeGender.FEMALE);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
229 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
230
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
231 return patient;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
232 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
233
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
234 public ImagingStudy getFhirStudy(IOrthancConnection orthanc) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
235 if (type != ResourceType.STUDY) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
236 throw new RuntimeException("Not a study");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
237 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
238
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
239 boolean hasDicomWeb = IOrthancConnection.hasPluginInstalled(orthanc, "dicom-web");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
240
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
241 // https://build.fhir.org/imagingstudy-example.json.html
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
242
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
243 ImagingStudy study = new ImagingStudy();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
244 study.setId(getTags().getOrDefault(Toolbox.TAG_STUDY_INSTANCE_UID, ""));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
245 study.setStatus(ImagingStudy.ImagingStudyStatus.AVAILABLE);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
246
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
247 if (hasDicomWeb) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
248 study.addEndpoint(Toolbox.createLocalReference("Endpoint", EndpointProvider.ID));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
249 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
250
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
251 study.setSubject(Toolbox.createLocalReference("Patient", getTags().getOrDefault(Toolbox.TAG_PATIENT_ID, "")));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
252
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
253 String studyDate = getTags().getOrDefault(Toolbox.TAG_STUDY_DATE, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
254 if (!studyDate.isEmpty()) {
15
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
255 try {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
256 study.setStarted(Toolbox.parseDicomDate(studyDate));
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
257 } catch (IllegalArgumentException e) {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
258 // Ignore incorrect dates
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
259 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
260 }
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
261
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
262 String studyDescription = getTags().getOrDefault(Toolbox.TAG_STUDY_DESCRIPTION, "");
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
263 if (!studyDescription.isEmpty()) {
Sebastien Jodogne <s.jodogne@gmail.com>
parents: 14
diff changeset
264 study.setDescription(studyDescription);
11
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
265 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
266
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
267 study.addIdentifier();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
268 study.getIdentifier().get(0).setSystem("urn:dicom:uid");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
269 study.getIdentifier().get(0).setValue("urn:oid:" + study.getId());
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
270
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
271 study.setNumberOfSeries(getChildren().size());
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
272
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
273 int countInstances = 0;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
274
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
275 Map<String, String> shortTags = new HashMap<>();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
276 shortTags.put("short", "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
277
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
278 Map<String, String> expand = new HashMap<>();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
279 expand.put("expand", "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
280
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
281 for (int i = 0; i < getChildren().size(); i++) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
282 String seriesUri = "/series/" + getChildren().get(i);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
283 OrthancResource orthancSeries = new OrthancResource(IOrthancConnection.getJSONObject(orthanc, seriesUri, shortTags));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
284
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
285 ImagingStudy.ImagingStudySeriesComponent fhirSeries = study.addSeries();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
286 fhirSeries.setUid(orthancSeries.getTags().getOrDefault(Toolbox.TAG_SERIES_INSTANCE_UID, ""));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
287
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
288 String modality = orthancSeries.getTags().getOrDefault(Toolbox.TAG_MODALITY, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
289 if (!modality.isEmpty()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
290 fhirSeries.setModality(Toolbox.createDicomCodeableConcept(modality));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
291 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
292
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
293 String seriesDescription = orthancSeries.getTags().getOrDefault(Toolbox.TAG_SERIES_DESCRIPTION, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
294 if (!seriesDescription.isEmpty()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
295 fhirSeries.setDescription(seriesDescription);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
296 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
297
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
298 String seriesNumber = orthancSeries.getTags().getOrDefault(Toolbox.TAG_SERIES_NUMBER, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
299 if (!seriesNumber.isEmpty()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
300 fhirSeries.setNumber(Integer.parseInt(seriesNumber));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
301 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
302
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
303 fhirSeries.setNumberOfInstances(orthancSeries.getChildren().size());
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
304
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
305 for (int j = 0; j < orthancSeries.getChildren().size(); j++) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
306 String instanceUri = "/instances/" + orthancSeries.getChildren().get(j);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
307 OrthancResource orthancInstance = new OrthancResource(IOrthancConnection.getJSONObject(orthanc, instanceUri, shortTags));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
308
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
309 JSONObject instanceMetadata = IOrthancConnection.getJSONObject(orthanc, instanceUri + "/metadata", expand);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
310
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
311 ImagingStudy.ImagingStudySeriesInstanceComponent fhirInstance = fhirSeries.addInstance();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
312 fhirInstance.setUid(orthancInstance.getTags().getOrDefault(Toolbox.TAG_SOP_INSTANCE_UID, ""));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
313
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
314 String instanceNumber = orthancInstance.getTags().getOrDefault(Toolbox.TAG_INSTANCE_NUMBER, "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
315 if (!instanceNumber.isEmpty()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
316 fhirInstance.setNumber(Integer.parseInt(instanceNumber));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
317 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
318
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
319 String sopClassUid = instanceMetadata.optString("SopClassUid", "");
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
320 if (!sopClassUid.isEmpty()) {
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
321 fhirInstance.setSopClass(new Coding("urn:ietf:rfc:3986", "urn:oid:" + sopClassUid, ""));
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
322 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
323 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
324
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
325 countInstances += orthancSeries.getChildren().size();
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
326 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
327
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
328 study.setNumberOfInstances(countInstances);
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
329
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
330 return study;
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
331 }
8d876a4f541b added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff changeset
332 }