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 StringListValidation implements QueryParameterValidation {
35 private static final Pattern PATTERN =
36 Pattern.compile("\\(\\s*'.*'(\\s*,\\s*'.*')*\\s*\\)");
37
38 private final QueryParameter param;
39 private final ValueValidator validator;
40
41
42
43
44
45
46
47
48 public StringListValidation(QueryParameter param, ValueValidator validator) {
49 notNull(param, "param cannot be null");
50 notNull(validator, "validator cannot be null");
51 this.param = param;
52 this.validator = validator;
53 }
54
55 @Override
56 public void validate(EbXMLAdhocQueryRequest request) throws XDSMetaDataException {
57 List<String> slotValues = request.getSlotValues(param.getSlotName());
58 for (String slotValue : slotValues) {
59 metaDataAssert(slotValue != null, MISSING_REQUIRED_QUERY_PARAMETER, param);
60 metaDataAssert(PATTERN.matcher(slotValue).matches(),
61 PARAMETER_VALUE_NOT_STRING_LIST, param);
62 }
63
64 QuerySlotHelper slots = new QuerySlotHelper(request);
65 List<String> list = slots.toStringList(param);
66
67 if (list != null) {
68 for (String value : list) {
69 metaDataAssert(value != null, INVALID_QUERY_PARAMETER_VALUE, param);
70 validator.validate(value);
71 }
72 }
73 }
74 }