Mercurial > hg > orthanc-java
annotate Samples/FHIR/src/main/java/ImagingStudyProvider.java @ 11:8d876a4f541b
added sample FHIR server
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Sat, 21 Oct 2023 09:53:25 +0200 |
parents | |
children | 0dc05fe76bd5 |
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 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
4 */ |
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 ca.uhn.fhir.rest.annotation.IdParam; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 import ca.uhn.fhir.rest.annotation.OptionalParam; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 import ca.uhn.fhir.rest.annotation.Read; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 import ca.uhn.fhir.rest.annotation.Search; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 import ca.uhn.fhir.rest.param.ReferenceParam; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 import ca.uhn.fhir.rest.param.StringParam; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 import ca.uhn.fhir.rest.server.IResourceProvider; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 import org.hl7.fhir.r5.model.IdType; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 import org.hl7.fhir.r5.model.ImagingStudy; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 import org.hl7.fhir.r5.model.Patient; |
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 import java.util.ArrayList; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 import java.util.HashMap; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 import java.util.List; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 import java.util.Map; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
41 public class ImagingStudyProvider implements IResourceProvider { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 private IOrthancConnection orthanc; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
43 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 ImagingStudyProvider(IOrthancConnection orthanc) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 this.orthanc = orthanc; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 @Override |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 public Class<ImagingStudy> getResourceType() { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 return ImagingStudy.class; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
51 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
52 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 @Read |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
54 public ImagingStudy getResourceById(@IdParam IdType theId) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
55 Map<String, String> tags = new HashMap<>(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
56 tags.put(Toolbox.TAG_STUDY_INSTANCE_UID, theId.getIdPart()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
57 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
58 List<OrthancResource> resources = OrthancResource.find(orthanc, be.uclouvain.orthanc.ResourceType.STUDY, tags, true); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 if (resources.size() == 0) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 return null; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
61 } else if (resources.size() > 1) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
62 throw new RuntimeException("Too many matching resources"); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
63 } else { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 return resources.get(0).getFhirStudy(orthanc); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
67 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
68 @Search() |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
69 public List<ImagingStudy> getImagingStudies(@OptionalParam(name = ImagingStudy.SP_IDENTIFIER) StringParam theIdentifier, |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
70 @OptionalParam(name = ImagingStudy.SP_SUBJECT) ReferenceParam theSubject) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
71 Map<String, String> tags = new HashMap<>(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
72 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
73 if (theIdentifier != null) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
74 tags.put(Toolbox.TAG_STUDY_INSTANCE_UID, theIdentifier.getValue()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
75 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
76 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
77 if (theSubject != null) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
78 // https://hapifhir.io/hapi-fhir/docs/server_plain/rest_operations_search.html#search-parameters-resource-reference |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
79 tags.put(Toolbox.TAG_PATIENT_ID, theSubject.getValue()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
80 } |
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 List<OrthancResource> resources = OrthancResource.find(orthanc, be.uclouvain.orthanc.ResourceType.STUDY, tags, false); |
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 List<ImagingStudy> studies = new ArrayList<>(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
85 for (OrthancResource resource : resources) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
86 ImagingStudy study = resource.getFhirStudy(orthanc); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
87 if (study.hasId()) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
88 studies.add(study); |
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 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
92 return studies; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
93 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
94 } |