1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.openehealth.ipf.commons.ihe.fhir;
18
19 import ca.uhn.fhir.rest.client.api.IGenericClient;
20 import ca.uhn.fhir.rest.gclient.IClientExecutable;
21 import ca.uhn.fhir.rest.gclient.ICriterion;
22 import ca.uhn.fhir.rest.gclient.IQuery;
23 import org.hl7.fhir.instance.model.api.IBaseBundle;
24 import org.hl7.fhir.instance.model.api.IBaseResource;
25
26 import java.util.Map;
27
28
29
30
31
32 public class QueryClientRequestFactory<T extends IBaseBundle> implements ClientRequestFactory<IQuery<T>> {
33
34 private final Class<? extends IBaseResource> type;
35 private final Class<T> bundleType;
36
37 public QueryClientRequestFactory(Class<? extends IBaseResource> type, Class<T> bundleType) {
38 this.type = type;
39 this.bundleType = bundleType;
40 }
41
42 @Override
43 public IClientExecutable<IQuery<T>, T> getClientExecutable(IGenericClient client, Object requestData, Map<String, Object> parameters) {
44 IQuery<IBaseBundle> query;
45 if (requestData instanceof ICriterion) {
46 query = client.search()
47 .forResource(type)
48 .where((ICriterion<?>) requestData);
49 } else {
50 query = client.search()
51 .byUrl(requestData.toString());
52 }
53 if (parameters.containsKey(Constants.FHIR_COUNT)) {
54 query.count(Integer.parseInt(parameters.get(Constants.FHIR_COUNT).toString()));
55 }
56 return query.returnBundle(bundleType);
57 }
58 }