1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.openehealth.ipf.commons.ihe.xds.core.validate.query;
17
18 import static org.apache.commons.lang3.Validate.notNull;
19 import org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLAdhocQueryRequest;
20 import org.openehealth.ipf.commons.ihe.xds.core.transform.requests.QueryParameter;
21 import org.openehealth.ipf.commons.ihe.xds.core.transform.requests.query.QuerySlotHelper;
22 import static org.openehealth.ipf.commons.ihe.xds.core.validate.ValidationMessage.*;
23 import static org.openehealth.ipf.commons.ihe.xds.core.validate.ValidatorAssertions.metaDataAssert;
24 import org.openehealth.ipf.commons.ihe.xds.core.validate.ValueValidator;
25 import org.openehealth.ipf.commons.ihe.xds.core.validate.XDSMetaDataException;
26
27 import java.util.List;
28 import java.util.regex.Pattern;
29
30
31
32
33
34 public class StringValidation implements QueryParameterValidation {
35 private static final Pattern PATTERN = Pattern.compile("'.*'");
36
37 private final QueryParameter param;
38 private final ValueValidator validator;
39 private final boolean optional;
40
41
42
43
44
45
46
47
48
49
50 public StringValidation(QueryParameter param, ValueValidator validator, boolean optional) {
51 notNull(param, "param cannot be null");
52 notNull(validator, "validator cannot be null");
53
54 this.param = param;
55 this.validator = validator;
56 this.optional = optional;
57 }
58
59 @Override
60 public void validate(EbXMLAdhocQueryRequest request) throws XDSMetaDataException {
61 List<String> slotValues = request.getSlotValues(param.getSlotName());
62 metaDataAssert(optional || slotValues.size() >= 1, MISSING_REQUIRED_QUERY_PARAMETER, param);
63 metaDataAssert(optional || slotValues.size() == 1, TOO_MANY_VALUES_FOR_QUERY_PARAMETER, param);
64
65 if (slotValues.size() > 0) {
66 String slotValue = slotValues.get(0);
67 metaDataAssert(slotValue != null || optional, MISSING_REQUIRED_QUERY_PARAMETER, param);
68 metaDataAssert(PATTERN.matcher(slotValue).matches(), PARAMETER_VALUE_NOT_STRING, param);
69 }
70
71 QuerySlotHelper slots = new QuerySlotHelper(request);
72 String value = slots.toString(param);
73 metaDataAssert(value != null || optional, MISSING_REQUIRED_QUERY_PARAMETER, param);
74 if (value != null) {
75 validator.validate(value);
76 }
77 }
78 }