1 15 package org.apache.tapestry.valid; 16 17 import java.text.DateFormat ; 18 import java.text.ParseException ; 19 import java.text.SimpleDateFormat ; 20 import java.util.Calendar ; 21 import java.util.Date ; 22 import java.util.GregorianCalendar ; 23 import java.util.HashMap ; 24 import java.util.Map ; 25 26 import org.apache.tapestry.IMarkupWriter; 27 import org.apache.tapestry.IRequestCycle; 28 import org.apache.tapestry.form.IFormComponent; 29 30 37 38 public class DateValidator extends BaseValidator 39 { 40 private DateFormat _format; 41 42 private String _displayFormat; 43 44 private Date _minimum; 45 46 private Date _maximum; 47 48 private Calendar _calendar; 49 50 private String _scriptPath = "/org/apache/tapestry/valid/DateValidator.script"; 51 52 private static DateFormat defaultDateFormat = new SimpleDateFormat ("MM/dd/yyyy"); 53 54 private static final String defaultDateDisplayFormat = "MM/DD/YYYY"; 55 56 private String _dateTooEarlyMessage; 57 58 private String _dateTooLateMessage; 59 60 private String _invalidDateFormatMessage; 61 62 public DateValidator() 63 { 64 65 } 66 67 72 73 public DateValidator(String initializer) 74 { 75 super(initializer); 76 } 77 78 public void setFormat(DateFormat value) 79 { 80 _format = value; 81 } 82 83 public DateFormat getFormat() 84 { 85 return _format; 86 } 87 88 93 public DateFormat getEffectiveFormat() 94 { 95 if (_format == null) 96 return defaultDateFormat; 97 98 return _format; 99 } 100 101 public String getDisplayFormat() 102 { 103 return _displayFormat; 104 } 105 106 public void setDisplayFormat(String value) 107 { 108 _displayFormat = value; 109 } 110 111 118 public String getEffectiveDisplayFormat() 119 { 120 if (_displayFormat == null) 121 { 122 DateFormat format = getEffectiveFormat(); 123 if (format instanceof SimpleDateFormat ) 124 return ((SimpleDateFormat ) format).toPattern(); 125 126 return defaultDateDisplayFormat; 127 } 128 129 return _displayFormat; 130 } 131 132 public String toString(IFormComponent file, Object value) 133 { 134 if (value == null) 135 return null; 136 137 Date date = (Date ) value; 138 139 DateFormat format = getEffectiveFormat(); 140 141 143 synchronized (format) 144 { 145 return format.format(date); 146 } 147 } 148 149 public Object toObject(IFormComponent field, String value) throws ValidatorException 150 { 151 if (checkRequired(field, value)) 152 return null; 153 154 DateFormat format = getEffectiveFormat(); 155 156 Date result; 157 158 try 159 { 160 163 synchronized (format) 164 { 165 result = format.parse(value); 166 } 167 168 if (_calendar == null) 169 _calendar = new GregorianCalendar (); 170 171 _calendar.setTime(result); 172 173 178 if (_calendar.get(Calendar.YEAR) < 1000) 179 result = null; 180 181 } 182 catch (ParseException ex) 183 { 184 result = null; 187 } 188 189 if (result == null) 190 throw new ValidatorException(buildInvalidDateFormatMessage(field), 191 ValidationConstraint.DATE_FORMAT); 192 193 195 if (_minimum != null && _minimum.compareTo(result) > 0) 196 throw new ValidatorException(buildDateTooEarlyMessage(field, format.format(_minimum)), 197 ValidationConstraint.TOO_SMALL); 198 199 if (_maximum != null && _maximum.compareTo(result) < 0) 200 throw new ValidatorException(buildDateTooLateMessage(field, format.format(_maximum)), 201 ValidationConstraint.TOO_LARGE); 202 203 return result; 204 205 } 206 207 public Date getMaximum() 208 { 209 return _maximum; 210 } 211 212 public void setMaximum(Date maximum) 213 { 214 _maximum = maximum; 215 } 216 217 public Date getMinimum() 218 { 219 return _minimum; 220 } 221 222 public void setMinimum(Date minimum) 223 { 224 _minimum = minimum; 225 } 226 227 230 231 public void renderValidatorContribution(IFormComponent field, IMarkupWriter writer, 232 IRequestCycle cycle) 233 { 234 if (!(isClientScriptingEnabled() && isRequired())) 235 return; 236 237 Map symbols = new HashMap (); 238 239 symbols.put("requiredMessage", buildRequiredMessage(field)); 240 241 processValidatorScript(_scriptPath, cycle, field, symbols); 242 } 243 244 247 248 public String getScriptPath() 249 { 250 return _scriptPath; 251 } 252 253 261 262 public void setScriptPath(String scriptPath) 263 { 264 _scriptPath = scriptPath; 265 } 266 267 268 269 public String getDateTooEarlyMessage() 270 { 271 return _dateTooEarlyMessage; 272 } 273 274 275 276 public String getDateTooLateMessage() 277 { 278 return _dateTooLateMessage; 279 } 280 281 282 283 public String getInvalidDateFormatMessage() 284 { 285 return _invalidDateFormatMessage; 286 } 287 288 289 290 protected String buildInvalidDateFormatMessage(IFormComponent field) 291 { 292 String pattern = getPattern(_invalidDateFormatMessage, "invalid-date-format", field 293 .getPage().getLocale()); 294 295 return formatString(pattern, field.getDisplayName(), getEffectiveDisplayFormat()); 296 } 297 298 299 300 protected String buildDateTooEarlyMessage(IFormComponent field, String earliestDate) 301 { 302 String pattern = getPattern(_dateTooEarlyMessage, "date-too-early", field.getPage() 303 .getLocale()); 304 305 return formatString(pattern, field.getDisplayName(), earliestDate); 306 } 307 308 309 310 protected String buildDateTooLateMessage(IFormComponent field, String latestDate) 311 { 312 String pattern = getPattern(_dateTooLateMessage, "date-too-late", field.getPage() 313 .getLocale()); 314 315 return formatString(pattern, field.getDisplayName(), latestDate); 316 } 317 318 324 325 public void setDateTooEarlyMessage(String string) 326 { 327 _dateTooEarlyMessage = string; 328 } 329 330 336 337 public void setDateTooLateMessage(String string) 338 { 339 _dateTooLateMessage = string; 340 } 341 342 348 349 public void setInvalidDateFormatMessage(String string) 350 { 351 _invalidDateFormatMessage = string; 352 } 353 354 } | Popular Tags |