Mercurial > dive4elements > gnv-client
comparison gnv-artifacts/src/main/java/de/intevation/gnv/state/MinMaxDateState.java @ 784:7b81d563c8c0
Improved date input validation. A given date needs to be in a specific range (issue212).
gnv-artifacts/trunk@866 c6561f87-3c4e-4783-a992-168aeb5c3f6f
author | Ingo Weinzierl <ingo.weinzierl@intevation.de> |
---|---|
date | Tue, 30 Mar 2010 09:17:53 +0000 |
parents | c4156275c1e1 |
children | a5526908f92f |
comparison
equal
deleted
inserted
replaced
783:3509735619e7 | 784:7b81d563c8c0 |
---|---|
2 | 2 |
3 import de.intevation.artifacts.CallContext; | 3 import de.intevation.artifacts.CallContext; |
4 | 4 |
5 import de.intevation.gnv.artifacts.ressource.RessourceFactory; | 5 import de.intevation.gnv.artifacts.ressource.RessourceFactory; |
6 | 6 |
7 import de.intevation.gnv.geobackend.util.DateUtils; | |
8 | |
7 import de.intevation.gnv.state.describedata.DefaultMinMaxDescribeData; | 9 import de.intevation.gnv.state.describedata.DefaultMinMaxDescribeData; |
8 import de.intevation.gnv.state.describedata.DescribeData; | 10 import de.intevation.gnv.state.describedata.DescribeData; |
11 import de.intevation.gnv.state.describedata.MinMaxDescribeData; | |
9 | 12 |
10 import de.intevation.gnv.state.exception.StateException; | 13 import de.intevation.gnv.state.exception.StateException; |
11 | 14 |
12 import de.intevation.gnv.utils.InputValidator; | 15 import de.intevation.gnv.utils.InputValidator; |
13 | 16 |
17 import java.util.GregorianCalendar; | |
14 import java.util.Collection; | 18 import java.util.Collection; |
19 import java.util.Date; | |
15 import java.util.Iterator; | 20 import java.util.Iterator; |
16 import java.util.Locale; | 21 import java.util.Locale; |
17 | 22 |
18 import org.apache.log4j.Logger; | 23 import org.apache.log4j.Logger; |
19 | 24 |
28 public static final String EXCEPTION_DATE_REQUIRED = | 33 public static final String EXCEPTION_DATE_REQUIRED = |
29 "input.is.not.valid.date.required"; | 34 "input.is.not.valid.date.required"; |
30 | 35 |
31 public static final String EXCEPTION_START_AFTER_END = | 36 public static final String EXCEPTION_START_AFTER_END = |
32 "start.date.after.end.date"; | 37 "start.date.after.end.date"; |
38 | |
39 public static final String EXCEPTION_DATE_OUT_OF_RANGE = | |
40 "date.out.of.range"; | |
41 | |
42 public static final String EXCEPTION_MISSING_DATE = | |
43 "missing.data.field"; | |
33 | 44 |
34 private static Logger logger = Logger.getLogger(MinMaxDateState.class); | 45 private static Logger logger = Logger.getLogger(MinMaxDateState.class); |
35 | 46 |
36 | 47 |
37 public MinMaxDateState() { | 48 public MinMaxDateState() { |
61 } | 72 } |
62 | 73 |
63 InputValidator iv = new InputValidator(); | 74 InputValidator iv = new InputValidator(); |
64 Iterator iter = inputData.iterator(); | 75 Iterator iter = inputData.iterator(); |
65 | 76 |
66 Object min = null; | 77 MinMaxDescribeData data = |
67 Object max = null; | 78 (MinMaxDescribeData) getDescibeData(uuid).get(0); |
79 Object min = data.getMinValue(); | |
80 Object max = data.getMaxValue(); | |
81 | |
82 Object tmpMin = null; | |
83 Object tmpMax = null; | |
68 | 84 |
69 while (iter.hasNext()) { | 85 while (iter.hasNext()) { |
70 InputData tmp = (InputData) iter.next(); | 86 InputData tmp = (InputData) iter.next(); |
71 InputValue meta = inputValues.get(tmp.getName()); | 87 InputValue meta = inputValues.get(tmp.getName()); |
72 String type = meta.getType(); | 88 String type = meta.getType(); |
77 String msg = "Input data not expected here. Data will be ignored."; | 93 String msg = "Input data not expected here. Data will be ignored."; |
78 logger.warn(msg); | 94 logger.warn(msg); |
79 return feedFailure(msg); | 95 return feedFailure(msg); |
80 } | 96 } |
81 | 97 |
82 boolean valid = iv.isInputValid(value, type); | 98 if (!iv.isInputValid(value, type)) { |
83 if (!valid) { | |
84 String msg = resFactory.getRessource( | 99 String msg = resFactory.getRessource( |
85 locale, EXCEPTION_DATE_REQUIRED, EXCEPTION_DATE_REQUIRED); | 100 locale, EXCEPTION_DATE_REQUIRED, EXCEPTION_DATE_REQUIRED); |
86 logger.error(msg); | 101 logger.error(msg); |
87 return feedFailure(msg); | 102 return feedFailure(msg); |
88 } | 103 } |
89 | 104 |
105 Date lower = null; | |
106 if (min instanceof GregorianCalendar) { | |
107 lower = ((GregorianCalendar)min).getTime(); | |
108 } | |
109 | |
110 Date upper = null; | |
111 if (max instanceof GregorianCalendar) { | |
112 upper = ((GregorianCalendar)max).getTime(); | |
113 } | |
114 | |
115 Date d = null; | |
116 try { | |
117 d = DateUtils.getDateFromString(value,DateUtils.DATE_PATTERN); | |
118 } | |
119 catch (Exception e) { | |
120 logger.warn(e, e); | |
121 } | |
122 | |
123 if (d == null || lower == null || upper == null) { | |
124 String msg = resFactory.getRessource( | |
125 locale, | |
126 EXCEPTION_MISSING_DATE, | |
127 EXCEPTION_MISSING_DATE); | |
128 logger.warn(msg); | |
129 } | |
130 else { | |
131 if (logger.isDebugEnabled()) { | |
132 logger.debug("Date to validate: " + d.toString()); | |
133 logger.debug("Lower date bound: " + lower.toString()); | |
134 logger.debug("Upper date bound: " + upper.toString()); | |
135 } | |
136 | |
137 if (!iv.isDateValid(d, lower, upper)) { | |
138 String msg = resFactory.getRessource( | |
139 locale, | |
140 EXCEPTION_DATE_OUT_OF_RANGE, | |
141 EXCEPTION_DATE_OUT_OF_RANGE); | |
142 logger.error(msg); | |
143 return feedFailure(msg); | |
144 } | |
145 } | |
146 | |
90 if (name.equals(MINVALUEFIELDNAME)) { | 147 if (name.equals(MINVALUEFIELDNAME)) { |
91 min = value; | 148 tmpMin = value; |
92 } | 149 } |
93 | 150 |
94 if (name.equals(MAXVALUEFIELDNAME)) { | 151 if (name.equals(MAXVALUEFIELDNAME)) { |
95 max = value; | 152 tmpMax = value; |
96 } | 153 } |
97 | 154 |
98 if (min != null && max != null) { | 155 if (tmpMin != null && tmpMax != null) { |
99 if (!iv.isInputValid((String) min, (String) max, type)) { | 156 if (!iv.isInputValid((String) tmpMin, (String) tmpMax, type)) { |
100 String msg = resFactory.getRessource( | 157 String msg = resFactory.getRessource( |
101 locale, | 158 locale, |
102 EXCEPTION_START_AFTER_END, | 159 EXCEPTION_START_AFTER_END, |
103 EXCEPTION_START_AFTER_END); | 160 EXCEPTION_START_AFTER_END); |
104 logger.error(msg); | 161 logger.error(msg); |
106 } | 163 } |
107 } | 164 } |
108 } | 165 } |
109 | 166 |
110 DescribeData values = new DefaultMinMaxDescribeData( | 167 DescribeData values = new DefaultMinMaxDescribeData( |
111 dataName, min, max, getID()); | 168 dataName, tmpMin, tmpMax, getID()); |
112 | 169 |
113 this.inputData.put(dataName, new DefaultInputData(dataName, values)); | 170 this.inputData.put(dataName, new DefaultInputData(dataName, values)); |
114 | 171 |
115 return feedSuccess(); | 172 return feedSuccess(); |
116 } | 173 } |