1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27 package edu.internet2.middleware.grouperClientExt.com.thoughtworks.xstream.converters.extended;
28
29 import java.util.Calendar;
30 import java.util.GregorianCalendar;
31 import java.util.Locale;
32 import java.util.TimeZone;
33
34 import org.joda.time.DateTime;
35 import org.joda.time.DateTimeZone;
36 import org.joda.time.format.DateTimeFormatter;
37 import org.joda.time.format.ISODateTimeFormat;
38
39 import edu.internet2.middleware.grouperClientExt.com.thoughtworks.xstream.converters.ConversionException;
40 import edu.internet2.middleware.grouperClientExt.com.thoughtworks.xstream.converters.basic.AbstractSingleValueConverter;
41
42
43
44
45
46
47
48
49
50
51 public class ISO8601GregorianCalendarConverter extends AbstractSingleValueConverter {
52 private static final DateTimeFormatter[] formattersUTC = new DateTimeFormatter[]{
53 ISODateTimeFormat.dateTime(),
54 ISODateTimeFormat.dateTimeNoMillis(),
55 ISODateTimeFormat.basicDateTime(),
56 ISODateTimeFormat.basicOrdinalDateTime(),
57 ISODateTimeFormat.basicOrdinalDateTimeNoMillis(),
58 ISODateTimeFormat.basicTime(),
59 ISODateTimeFormat.basicTimeNoMillis(),
60 ISODateTimeFormat.basicTTime(),
61 ISODateTimeFormat.basicTTimeNoMillis(),
62 ISODateTimeFormat.basicWeekDateTime(),
63 ISODateTimeFormat.basicWeekDateTimeNoMillis(),
64 ISODateTimeFormat.ordinalDateTime(),
65 ISODateTimeFormat.ordinalDateTimeNoMillis(),
66 ISODateTimeFormat.time(),
67 ISODateTimeFormat.timeNoMillis(),
68 ISODateTimeFormat.tTime(),
69 ISODateTimeFormat.tTimeNoMillis(),
70 ISODateTimeFormat.weekDateTime(),
71 ISODateTimeFormat.weekDateTimeNoMillis(),};
72 private static final DateTimeFormatter[] formattersNoUTC = new DateTimeFormatter[]{
73 ISODateTimeFormat.basicDate(),
74 ISODateTimeFormat.basicOrdinalDate(),
75 ISODateTimeFormat.basicWeekDate(),
76 ISODateTimeFormat.date(),
77 ISODateTimeFormat.dateHour(),
78 ISODateTimeFormat.dateHourMinute(),
79 ISODateTimeFormat.dateHourMinuteSecond(),
80 ISODateTimeFormat.dateHourMinuteSecondFraction(),
81 ISODateTimeFormat.dateHourMinuteSecondMillis(),
82 ISODateTimeFormat.hour(),
83 ISODateTimeFormat.hourMinute(),
84 ISODateTimeFormat.hourMinuteSecond(),
85 ISODateTimeFormat.hourMinuteSecondFraction(),
86 ISODateTimeFormat.hourMinuteSecondMillis(),
87 ISODateTimeFormat.ordinalDate(),
88 ISODateTimeFormat.weekDate(),
89 ISODateTimeFormat.year(),
90 ISODateTimeFormat.yearMonth(),
91 ISODateTimeFormat.yearMonthDay(),
92 ISODateTimeFormat.weekyear(),
93 ISODateTimeFormat.weekyearWeek(),
94 ISODateTimeFormat.weekyearWeekDay(),};
95
96 public boolean canConvert(Class type) {
97 return type.equals(GregorianCalendar.class);
98 }
99
100 public Object fromString(String str) {
101 for (int i = 0; i < formattersUTC.length; i++) {
102 DateTimeFormatter formatter = formattersUTC[i];
103 try {
104 DateTime dt = formatter.parseDateTime(str);
105 Calendar calendar = dt.toCalendar(Locale.getDefault());
106 calendar.setTimeZone(TimeZone.getDefault());
107 return calendar;
108 } catch (IllegalArgumentException e) {
109
110 }
111 }
112 String timeZoneID = TimeZone.getDefault().getID();
113 for (int i = 0; i < formattersNoUTC.length; i++) {
114 try {
115 DateTimeFormatter formatter = formattersNoUTC[i].withZone(DateTimeZone.forID(timeZoneID));
116 DateTime dt = formatter.parseDateTime(str);
117 Calendar calendar = dt.toCalendar(Locale.getDefault());
118 calendar.setTimeZone(TimeZone.getDefault());
119 return calendar;
120 } catch (IllegalArgumentException e) {
121
122 }
123 }
124 throw new ConversionException("Cannot parse date " + str);
125 }
126
127 public String toString(Object obj) {
128 DateTime dt = new DateTime(obj);
129 return dt.toString(formattersUTC[0]);
130 }
131 }