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;
17
18 import static org.apache.commons.lang3.Validate.notNull;
19 import static org.openehealth.ipf.commons.ihe.xds.core.validate.ValidationMessage.*;
20 import static org.openehealth.ipf.commons.ihe.xds.core.validate.ValidatorAssertions.metaDataAssert;
21
22 import java.util.regex.Pattern;
23
24
25
26
27
28 public class TimeValidator implements ValueValidator {
29 private static final String YEAR = "[0-9]{4}";
30 private static final String MONTH = "(0[1-9]|1[012])";
31 private static final String DAY = "(0[1-9]|[12][0-9]|3[01])";
32 private static final String HOUR = "([01][0-9]|2[0123])";
33 private static final String MIN_SEC = "[0-5][0-9]";
34 private static final String REG_EX =
35 YEAR + "(" + MONTH + "(" + DAY + "(" + HOUR + "(" + MIN_SEC + "(" + MIN_SEC + ")?)?)?)?)?";
36
37 private static final Pattern TIME_PATTERN = Pattern.compile(REG_EX);
38
39 private final int minLen;
40
41
42
43
44
45
46
47 public TimeValidator(int minLen) {
48 this.minLen = minLen;
49 }
50
51
52
53
54
55 public TimeValidator() {
56 this(-1);
57 }
58
59 @Override
60 public void validate(String time) throws XDSMetaDataException {
61 notNull(time, "time cannot be null");
62 metaDataAssert(TIME_PATTERN.matcher(time).matches(), INVALID_TIME, time);
63 metaDataAssert((minLen < 0) || (time.length() >= minLen), TIME_PRECISION_TOO_LOW, time);
64 }
65 }