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 }

http://dive4elements.wald.intevation.org