Mercurial > hg > orthanc-java
annotate Samples/FHIR/src/main/java/ImagingStudyProvider.java @ 43:678bbed285a1 default tip
improved import of JNI in cmake
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Fri, 06 Sep 2024 13:53:54 +0200 |
parents | 296798e75896 |
children |
rev | line source |
---|---|
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
1 /** |
20 | 2 * SPDX-FileCopyrightText: 2023-2024 Sebastien Jodogne, UCLouvain, Belgium |
11
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 |
20 | 8 * Copyright (C) 2023-2024 Sebastien Jodogne, UCLouvain, Belgium |
11
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 |
14
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
25 import be.uclouvain.orthanc.ResourceType; |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
26 import ca.uhn.fhir.rest.annotation.*; |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 import ca.uhn.fhir.rest.param.ReferenceParam; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 import ca.uhn.fhir.rest.param.StringParam; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 import ca.uhn.fhir.rest.server.IResourceProvider; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 import org.hl7.fhir.r5.model.IdType; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 import org.hl7.fhir.r5.model.ImagingStudy; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 import java.util.ArrayList; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 import java.util.HashMap; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
35 import java.util.List; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
36 import java.util.Map; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 public class ImagingStudyProvider implements IResourceProvider { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 private IOrthancConnection orthanc; |
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 ImagingStudyProvider(IOrthancConnection orthanc) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
42 this.orthanc = 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 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 @Override |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 public Class<ImagingStudy> getResourceType() { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 return ImagingStudy.class; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 @Read |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
51 public ImagingStudy getResourceById(@IdParam IdType theId) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
52 Map<String, String> tags = new HashMap<>(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 tags.put(Toolbox.TAG_STUDY_INSTANCE_UID, theId.getIdPart()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
54 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
55 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
|
56 if (resources.size() == 0) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
57 return null; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
58 } else if (resources.size() > 1) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 throw new RuntimeException("Too many matching resources"); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 } else { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
61 return resources.get(0).getFhirStudy(orthanc); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
62 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
63 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 @Search() |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 public List<ImagingStudy> getImagingStudies(@OptionalParam(name = ImagingStudy.SP_IDENTIFIER) StringParam theIdentifier, |
14
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
67 @OptionalParam(name = ImagingStudy.SP_SUBJECT) ReferenceParam theSubject, |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
68 @Offset Integer theOffset, |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
69 @Count Integer theCount) { |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
70 Map<String, String> tags = new HashMap<>(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
71 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
72 if (theIdentifier != null) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
73 tags.put(Toolbox.TAG_STUDY_INSTANCE_UID, theIdentifier.getValue()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
74 } |
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 if (theSubject != null) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
77 // 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
|
78 tags.put(Toolbox.TAG_PATIENT_ID, theSubject.getValue()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
79 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
80 |
14
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
81 final boolean caseSensitive = false; |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
82 |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
83 List<OrthancResource> resources; |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
84 |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
85 if (theOffset != null && |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
86 theCount != null) { |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
87 resources = OrthancResource.find(orthanc, ResourceType.STUDY, tags, caseSensitive, theOffset.intValue(), theCount.intValue()); |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
88 } else if (theCount != null) { |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
89 resources = OrthancResource.find(orthanc, ResourceType.STUDY, tags, caseSensitive, 0, theCount.intValue()); |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
90 } else { |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
91 resources = OrthancResource.find(orthanc, ResourceType.STUDY, tags, false); |
0dc05fe76bd5
implemented paging in Patient and ImagingStudy resources
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
11
diff
changeset
|
92 } |
11
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 List<ImagingStudy> studies = new ArrayList<>(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
95 for (OrthancResource resource : resources) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
96 ImagingStudy study = resource.getFhirStudy(orthanc); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
97 if (study.hasId()) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
98 studies.add(study); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
99 } |
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 return studies; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
103 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
104 } |