1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20 package org.apache.mina.integration.beans;
21
22 import java.beans.PropertyEditor;
23 import java.text.DateFormat;
24 import java.text.ParseException;
25 import java.text.SimpleDateFormat;
26 import java.util.Date;
27 import java.util.Locale;
28 import java.util.regex.Pattern;
29
30
31
32
33
34
35
36 public class DateEditor extends AbstractPropertyEditor {
37 private static final Pattern MILLIS = Pattern.compile("[0-9][0-9]*");
38
39 private final DateFormat[] formats = new DateFormat[] {
40 new SimpleDateFormat("EEE MMM dd HH:mm:ss zzz yyyy", Locale.ENGLISH),
41 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss Z", Locale.ENGLISH),
42 new SimpleDateFormat("yyyy-MM-dd HH:mm:ss", Locale.ENGLISH),
43 new SimpleDateFormat("yyyy-MM-dd", Locale.ENGLISH),
44 new SimpleDateFormat("yyyy-MM", Locale.ENGLISH),
45 new SimpleDateFormat("yyyy", Locale.ENGLISH),
46 };
47
48 public DateEditor() {
49 for (DateFormat f: formats) {
50 f.setLenient(true);
51 }
52 }
53
54 @Override
55 protected String toText(Object value) {
56 if (value instanceof Number) {
57 long time = ((Number) value).longValue();
58 if (time <= 0) {
59 return null;
60 }
61 value = new Date(time);
62 }
63 return formats[0].format((Date) value);
64 }
65
66 @Override
67 protected Object toValue(String text) throws IllegalArgumentException {
68 if (MILLIS.matcher(text).matches()) {
69 long time = Long.parseLong(text);
70 if (time <= 0) {
71 return null;
72 }
73 return new Date(time);
74 }
75
76 for (DateFormat f: formats) {
77 try {
78 return f.parse(text);
79 } catch (ParseException e) {
80 }
81 }
82
83 throw new IllegalArgumentException("Wrong date: " + text);
84 }
85 }