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 org.openehealth.ipf.commons.ihe.xds.core.ebxml.EbXMLAdhocQueryRequest;
19 import org.openehealth.ipf.commons.ihe.xds.core.metadata.AssociationType;
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 org.openehealth.ipf.commons.ihe.xds.core.validate.XDSMetaDataException;
23
24 import java.util.List;
25 import java.util.regex.Pattern;
26
27 import static org.apache.commons.lang3.Validate.notNull;
28 import static org.openehealth.ipf.commons.ihe.xds.core.validate.ValidationMessage.*;
29 import static org.openehealth.ipf.commons.ihe.xds.core.validate.ValidatorAssertions.metaDataAssert;
30
31
32
33
34
35 public class AssociationValidation implements QueryParameterValidation {
36 private static final Pattern PATTERN =
37 Pattern.compile("\\s*\\(\\s*'.*'(\\s*,\\s*'.*')*\\s*\\)\\s*");
38
39 private final QueryParameter param;
40
41
42
43
44
45
46 public AssociationValidation(QueryParameter param) {
47 notNull(param, "param cannot be null");
48 this.param = param;
49 }
50
51 @Override
52 public void validate(EbXMLAdhocQueryRequest request) throws XDSMetaDataException {
53 List<String> slotValues = request.getSlotValues(param.getSlotName());
54 metaDataAssert(!slotValues.isEmpty(), MISSING_REQUIRED_QUERY_PARAMETER, param);
55 for (String slotValue : slotValues) {
56 metaDataAssert(slotValue != null, MISSING_REQUIRED_QUERY_PARAMETER, param);
57 metaDataAssert(PATTERN.matcher(slotValue).matches(),
58 PARAMETER_VALUE_NOT_STRING_LIST, param);
59 }
60
61 QuerySlotHelper slots = new QuerySlotHelper(request);
62 List<AssociationType> associationTypes = slots.toAssociationType(param);
63
64 if (associationTypes != null) {
65 for (AssociationType type : associationTypes) {
66 metaDataAssert(type != null, INVALID_QUERY_PARAMETER_VALUE, param);
67 }
68 } else {
69 throw new XDSMetaDataException(INVALID_ASSOCIATION_TYPE);
70 }
71 }
72 }