1 package org.apache.fulcrum.intake.model;
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22 import java.text.DateFormat;
23 import java.text.ParseException;
24 import java.util.Date;
25
26 import org.apache.commons.lang3.StringUtils;
27 import org.apache.fulcrum.intake.IntakeException;
28 import org.apache.fulcrum.intake.IntakeRuntimeException;
29 import org.apache.fulcrum.intake.validator.DateStringValidator;
30 import org.apache.fulcrum.intake.validator.Validator;
31
32
33
34
35
36
37
38
39
40
41
42
43 public class DateStringField
44 extends Field<Date>
45 {
46
47 private static final long serialVersionUID = 3659498567870484883L;
48
49
50 private DateFormat df = null;
51
52
53
54
55
56
57
58
59 public DateStringField(XmlField field, Group group)
60 throws IntakeException
61 {
62 super(field, group);
63
64 Validator<?> validator = getValidator();
65 if (validator == null || !(validator instanceof DateStringValidator))
66 {
67 df = DateFormat.getInstance();
68 df.setLenient(true);
69 }
70 }
71
72
73
74
75
76
77 @Override
78 public void setDefaultValue(String prop)
79 {
80 defaultValue = null;
81
82 if (prop == null)
83 {
84 return;
85 }
86
87 try
88 {
89 defaultValue = getDate(prop);
90 }
91 catch (ParseException e)
92 {
93 throw new IntakeRuntimeException("Could not parse " + prop
94 + " into a valid Date for the default value", e);
95 }
96 }
97
98
99
100
101
102
103
104
105
106 @Override
107 public void setEmptyValue(String prop)
108 {
109 emptyValue = null;
110
111 if (prop == null)
112 {
113 return;
114 }
115
116 try
117 {
118 emptyValue = getDate(prop);
119 }
120 catch (ParseException e)
121 {
122 throw new IntakeRuntimeException("Could not parse " + prop
123 + " into a valid Date for the empty value", e);
124 }
125 }
126
127
128
129
130
131
132 @Override
133 protected String getDefaultValidator()
134 {
135 return DateStringValidator.class.getName();
136 }
137
138
139
140
141 @Override
142 protected void doSetValue()
143 {
144 if (isMultiValued())
145 {
146 String[] inputs = parser.getStrings(getKey());
147 Date[] values = new Date[inputs.length];
148 for (int i = 0; i < inputs.length; i++)
149 {
150 try
151 {
152 values[i] = StringUtils.isNotEmpty(inputs[i])
153 ? getDate(inputs[i]) : getEmptyValue();
154 }
155 catch (ParseException e)
156 {
157 values[i] = null;
158 }
159 }
160 setTestValue(values);
161 }
162 else
163 {
164 String val = parser.getString(getKey());
165 try
166 {
167 setTestValue(StringUtils.isNotEmpty(val) ? getDate(val) : getEmptyValue());
168 }
169 catch (ParseException e)
170 {
171 setTestValue(null);
172 }
173 }
174 }
175
176
177
178
179
180
181
182
183
184
185 private Date getDate(String dateString)
186 throws ParseException
187 {
188 Date date = null;
189
190 Validator<?> validator = getValidator();
191 if (validator != null && validator instanceof DateStringValidator)
192 {
193 date = ((DateStringValidator) validator).parse(dateString);
194 }
195 else
196 {
197 date = df.parse(dateString);
198 }
199 return date;
200 }
201
202
203
204
205
206
207 @Override
208 public String toString()
209 {
210 String s = null;
211 Object value = getValue();
212 Validator<?> validator = getValidator();
213 if (value == null)
214 {
215 s = "";
216 }
217 else if (value instanceof String)
218 {
219 s = (String) value;
220 }
221 else if (validator != null && validator instanceof DateStringValidator)
222 {
223 s = ((DateStringValidator) validator).format((Date) value);
224 }
225 else
226 {
227 s = df.format((Date) value);
228 }
229 return s;
230 }
231 }