1 package ca.uhn.fhir.rest.param.binder;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23 import static org.apache.commons.lang3.StringUtils.isBlank;
24
25 import java.util.Collections;
26 import java.util.List;
27
28 import ca.uhn.fhir.context.FhirContext;
29 import ca.uhn.fhir.model.api.IQueryParameterOr;
30 import ca.uhn.fhir.rest.api.QualifiedParamList;
31 import ca.uhn.fhir.rest.param.*;
32 import ca.uhn.fhir.rest.server.exceptions.InternalErrorException;
33 import ca.uhn.fhir.rest.server.exceptions.InvalidRequestException;
34
35 abstract class BaseJavaPrimitiveBinder<T>implements IParamBinder<T> {
36
37 public BaseJavaPrimitiveBinder() {
38 super();
39 }
40
41 protected abstract String doEncode(T theString);
42
43 protected abstract T doParse(String theString);
44
45 @SuppressWarnings("unchecked")
46 @Override
47 public List<IQueryParameterOr<?>> encode(FhirContext theContext, T theString) throws InternalErrorException {
48 String retVal = doEncode(theString);
49 if (isBlank(retVal)) {
50 return Collections.emptyList();
51 }
52 List<?> retValList = Collections.singletonList(ParameterUtil.singleton(new StringParam(retVal), null));
53 return (List<IQueryParameterOr<?>>) retValList;
54 }
55
56 @Override
57 public T parse(FhirContext theContext, String theName, List<QualifiedParamList> theParams) throws InternalErrorException, InvalidRequestException {
58 if (theParams.size() == 0 || theParams.get(0).size() == 0) {
59 return null;
60 }
61 if (theParams.size() > 1 || theParams.get(0).size() > 1) {
62 throw new InvalidRequestException("Multiple values detected for non-repeatable parameter '" + theName + "'. This server is not configured to allow multiple (AND) values for this param.");
63 }
64
65 T value = doParse(theParams.get(0).get(0));
66 return value;
67 }
68
69 }