Mercurial > hg > orthanc-java
annotate Samples/FHIR/src/main/java/FhirRequestHandler.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 | 1c407ba1d311 |
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 ca.uhn.fhir.rest.server.RestfulServer; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
26 import be.uclouvain.orthanc.Callbacks; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
27 import be.uclouvain.orthanc.RestOutput; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
28 import be.uclouvain.orthanc.HttpMethod; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
29 import org.springframework.mock.web.MockHttpServletRequest; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
30 import org.springframework.mock.web.MockHttpServletResponse; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
31 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
32 import javax.servlet.ServletException; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
33 import java.io.IOException; |
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 FhirRequestHandler implements Callbacks.OnRestRequest { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
37 private static RestfulServer server; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
38 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
39 FhirRequestHandler(RestfulServer server) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
40 this.server = server; |
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 @Override |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
44 public void call(RestOutput output, |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
45 HttpMethod method, |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
46 String uri, |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
47 String[] regularExpressionGroups, |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
48 Map<String, String> headers, |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
49 Map<String, String> getParameters, byte[] body) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
50 MockHttpServletRequest request = new MockHttpServletRequest(); |
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 if (regularExpressionGroups.length == 0) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
53 request.setRequestURI("/"); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
54 } else { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
55 request.setRequestURI(regularExpressionGroups[0]); |
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 request.setContent(body); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
58 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
59 switch (method) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
60 case GET: |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
61 request.setMethod("GET"); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
62 break; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
63 case POST: |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
64 request.setMethod("POST"); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
65 break; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
66 case PUT: |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
67 request.setMethod("PUT"); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
68 break; |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
69 case DELETE: |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
70 request.setMethod("DELETE"); |
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 default: |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
73 throw new IllegalArgumentException("Unknown HTTP method"); |
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 for (Map.Entry<String, String> entry : headers.entrySet()) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
77 request.addHeader(entry.getKey(), entry.getValue()); |
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 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
80 for (Map.Entry<String, String> entry : getParameters.entrySet()) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
81 request.setParameter(entry.getKey(), entry.getValue()); |
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 try { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
85 MockHttpServletResponse response = new MockHttpServletResponse(); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
86 server.service(request, response); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
87 |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
88 for (String header : response.getHeaderNames()) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
89 if (header != "Content-Type") { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
90 output.setHttpHeader(header, response.getHeader(header)); |
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 } |
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 output.answerBuffer(response.getContentAsByteArray(), response.getContentType()); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
95 } catch (IOException e) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
96 output.sendHttpStatusCode((short) 500); |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
97 } catch (ServletException e) { |
8d876a4f541b
added sample FHIR server
Sebastien Jodogne <s.jodogne@gmail.com>
parents:
diff
changeset
|
98 output.sendHttpStatusCode((short) 500); |
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 } |