Mercurial > hg > orthanc-java
annotate Samples/FHIR/src/main/java/Main.java @ 31:7579255a14f8
calling destroy() on the FHIR server at shutdown
author | Sebastien Jodogne <s.jodogne@gmail.com> |
---|---|
date | Wed, 12 Jun 2024 20:56:03 +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 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
25 import be.uclouvain.orthanc.Callbacks; |
31
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
26 import be.uclouvain.orthanc.ChangeType; |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
27 import be.uclouvain.orthanc.ResourceType; |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 import ca.uhn.fhir.context.FhirContext; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 import ca.uhn.fhir.rest.server.HardcodedServerAddressStrategy; |
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 ca.uhn.fhir.rest.server.RestfulServer; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 import org.springframework.mock.web.MockServletConfig; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
34 |
30
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
35 import java.io.IOException; |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
36 import java.io.InputStream; |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 import java.util.ArrayList; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 import java.util.List; |
30
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
39 import java.util.Properties; |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 import javax.servlet.ServletException; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
41 |
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 class Main extends RestfulServer { |
31
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
44 Main() { |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 setFhirContext(FhirContext.forR5()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 |
30
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
47 setServerName("Orthanc FHIR server"); |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
48 |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
49 try (InputStream is = Main.class.getResourceAsStream("app.properties")) { |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
50 Properties properties = new Properties(); |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
51 properties.load(is); |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
52 setServerVersion(properties.getProperty("orthanc_java.version")); |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
53 } catch (IOException e) { |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
54 // Ignore error |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
55 } |
296798e75896
publish software name and version in FHIR /metadata
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
20
diff
changeset
|
56 |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
57 FhirConfiguration configuration = new FhirConfiguration(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
58 setServerAddressStrategy(new HardcodedServerAddressStrategy(configuration.getServerBaseUrl())); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 configuration.getDicomWebBaseUrl(); |
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 IOrthancConnection connection = new OrthancPluginConnection(); |
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 List<IResourceProvider> resourceProviders = new ArrayList<IResourceProvider>(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 resourceProviders.add(new PatientProvider(connection)); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 resourceProviders.add(new ImagingStudyProvider(connection)); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
67 resourceProviders.add(new EndpointProvider(connection)); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
68 setResourceProviders(resourceProviders); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
69 } |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
70 |
31
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
71 private static Main main = new Main(); |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
72 |
31
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
73 static { |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
74 try { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
75 main.init(new MockServletConfig()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
76 } catch (ServletException e) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
77 throw new RuntimeException("Cannot start the HAPI FHIR server"); |
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 |
31
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
80 Callbacks.register(new Callbacks.OnChange() { |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
81 @Override |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
82 public void call(ChangeType changeType, ResourceType resourceType, String resourceId) { |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
83 if (changeType == ChangeType.ORTHANC_STOPPED) { |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
84 main.destroy(); |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
85 } |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
86 } |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
87 }); |
7579255a14f8
calling destroy() on the FHIR server at shutdown
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
30
diff
changeset
|
88 |
11
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
89 Callbacks.register("/fhir(/.*)", new FhirRequestHandler(main)); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
90 Callbacks.register("/fhir", new FhirRequestHandler(main)); |
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 } |