1 package org.apache.slide.projector.descriptor; 2 3 import java.text.DateFormat ; 4 import java.text.ParseException ; 5 import java.text.SimpleDateFormat ; 6 import java.util.ArrayList ; 7 import java.util.Date ; 8 import java.util.List ; 9 10 import org.apache.slide.projector.Context; 11 import org.apache.slide.projector.i18n.ErrorMessage; 12 import org.apache.slide.projector.value.DateValue; 13 import org.apache.slide.projector.value.Value; 14 15 public class DateValueDescriptor implements ValueDescriptor { 16 protected boolean constrained; 17 protected List allowedValues = new ArrayList (); 18 protected Date earliest, latest; 19 20 public DateValueDescriptor() { 21 this.constrained = false; 22 } 23 24 public DateValueDescriptor(Date earliest, Date latest) { 25 constrained = true; 26 this.earliest = earliest; 27 this.latest = latest; 28 } 29 30 public boolean isConstrained() { 31 return constrained; 32 } 33 34 public void setEarliest(Date earliest) { 35 this.earliest = earliest; 36 } 37 38 public void setLatest(Date latest) { 39 this.latest = latest; 40 } 41 42 public Value valueOf(Object value, Context context) throws ValueCastException { 43 Date date = null; 44 if ( value instanceof DateValue ) { 45 return (DateValue)value; 46 } else { 47 try { 48 String valueAsString = StringValueDescriptor.ANY.valueOf(value, null).toString(); 49 try { 50 date = new Date (Long.valueOf(valueAsString).longValue()); 51 } catch ( NumberFormatException exception ) { 52 try { 53 date = DateFormat.getInstance().parse(valueAsString); 54 } catch (ParseException e) { 55 try { 56 date = new SimpleDateFormat ("yyyy-MM-dd'T'HH:mm:ss'Z'").parse(valueAsString); 57 } catch (ParseException pe) { 58 throw new ValueCastException(new ErrorMessage("uncastableDateValue", new Object [] { value }), pe); 59 } 60 } 61 } 62 } catch ( ValueCastException exception ) { 63 throw new ValueCastException(new ErrorMessage("uncastableDateValue", new Object [] { value }), exception); 64 } 65 } 66 return new DateValue(date); 67 } 68 69 public void validate(Value value, Context context) throws ValidationException { 70 Date date = ((DateValue)value).getDate(); 71 if ( constrained && ( date.after(latest) || date.before(earliest) ) ) { 72 throw new ValidationException(new ErrorMessage("invalidDate", new Object [] { date, earliest, latest })); 73 } 74 } 75 } | Popular Tags |