1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.time;
17
18 import java.io.Serializable;
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39 public abstract class DurationFieldType implements Serializable {
40
41
42 private static final long serialVersionUID = 8765135187319L;
43
44
45 static final byte
46 ERAS = 1,
47 CENTURIES = 2,
48 WEEKYEARS = 3,
49 YEARS = 4,
50 MONTHS = 5,
51 WEEKS = 6,
52 DAYS = 7,
53 HALFDAYS = 8,
54 HOURS = 9,
55 MINUTES = 10,
56 SECONDS = 11,
57 MILLIS = 12;
58
59
60 static final DurationFieldType ERAS_TYPE = new StandardDurationFieldType("eras", ERAS);
61
62 static final DurationFieldType CENTURIES_TYPE = new StandardDurationFieldType("centuries", CENTURIES);
63
64 static final DurationFieldType WEEKYEARS_TYPE = new StandardDurationFieldType("weekyears", WEEKYEARS);
65
66 static final DurationFieldType YEARS_TYPE = new StandardDurationFieldType("years", YEARS);
67
68 static final DurationFieldType MONTHS_TYPE = new StandardDurationFieldType("months", MONTHS);
69
70 static final DurationFieldType WEEKS_TYPE = new StandardDurationFieldType("weeks", WEEKS);
71
72 static final DurationFieldType DAYS_TYPE = new StandardDurationFieldType("days", DAYS);
73
74 static final DurationFieldType HALFDAYS_TYPE = new StandardDurationFieldType("halfdays", HALFDAYS);
75
76 static final DurationFieldType HOURS_TYPE = new StandardDurationFieldType("hours", HOURS);
77
78 static final DurationFieldType MINUTES_TYPE = new StandardDurationFieldType("minutes", MINUTES);
79
80 static final DurationFieldType SECONDS_TYPE = new StandardDurationFieldType("seconds", SECONDS);
81
82 static final DurationFieldType MILLIS_TYPE = new StandardDurationFieldType("millis", MILLIS);
83
84
85 private final String iName;
86
87
88
89
90
91
92
93 protected DurationFieldType(String name) {
94 super();
95 iName = name;
96 }
97
98
99
100
101
102
103
104 public static DurationFieldType millis() {
105 return MILLIS_TYPE;
106 }
107
108
109
110
111
112
113 public static DurationFieldType seconds() {
114 return SECONDS_TYPE;
115 }
116
117
118
119
120
121
122 public static DurationFieldType minutes() {
123 return MINUTES_TYPE;
124 }
125
126
127
128
129
130
131 public static DurationFieldType hours() {
132 return HOURS_TYPE;
133 }
134
135
136
137
138
139
140 public static DurationFieldType halfdays() {
141 return HALFDAYS_TYPE;
142 }
143
144
145
146
147
148
149
150 public static DurationFieldType days() {
151 return DAYS_TYPE;
152 }
153
154
155
156
157
158
159 public static DurationFieldType weeks() {
160 return WEEKS_TYPE;
161 }
162
163
164
165
166
167
168 public static DurationFieldType weekyears() {
169 return WEEKYEARS_TYPE;
170 }
171
172
173
174
175
176
177 public static DurationFieldType months() {
178 return MONTHS_TYPE;
179 }
180
181
182
183
184
185
186 public static DurationFieldType years() {
187 return YEARS_TYPE;
188 }
189
190
191
192
193
194
195 public static DurationFieldType centuries() {
196 return CENTURIES_TYPE;
197 }
198
199
200
201
202
203
204 public static DurationFieldType eras() {
205 return ERAS_TYPE;
206 }
207
208
209
210
211
212
213
214
215 public String getName() {
216 return iName;
217 }
218
219
220
221
222
223
224
225 public abstract DurationField getField(Chronology chronology);
226
227
228
229
230
231
232
233 public boolean isSupported(Chronology chronology) {
234 return getField(chronology).isSupported();
235 }
236
237
238
239
240
241
242 public String toString() {
243 return getName();
244 }
245
246 private static class StandardDurationFieldType extends DurationFieldType {
247
248 private static final long serialVersionUID = 31156755687123L;
249
250
251 private final byte iOrdinal;
252
253
254
255
256
257
258 StandardDurationFieldType(String name, byte ordinal) {
259 super(name);
260 iOrdinal = ordinal;
261 }
262
263
264 @Override
265 public boolean equals(Object obj) {
266 if (this == obj) {
267 return true;
268 }
269 if (obj instanceof StandardDurationFieldType) {
270 return iOrdinal == ((StandardDurationFieldType) obj).iOrdinal;
271 }
272 return false;
273 }
274
275
276 @Override
277 public int hashCode() {
278 return (1 << iOrdinal);
279 }
280
281 public DurationField getField(Chronology chronology) {
282 chronology = DateTimeUtils.getChronology(chronology);
283
284 switch (iOrdinal) {
285 case ERAS:
286 return chronology.eras();
287 case CENTURIES:
288 return chronology.centuries();
289 case WEEKYEARS:
290 return chronology.weekyears();
291 case YEARS:
292 return chronology.years();
293 case MONTHS:
294 return chronology.months();
295 case WEEKS:
296 return chronology.weeks();
297 case DAYS:
298 return chronology.days();
299 case HALFDAYS:
300 return chronology.halfdays();
301 case HOURS:
302 return chronology.hours();
303 case MINUTES:
304 return chronology.minutes();
305 case SECONDS:
306 return chronology.seconds();
307 case MILLIS:
308 return chronology.millis();
309 default:
310
311 throw new InternalError();
312 }
313 }
314
315
316
317
318
319
320 private Object readResolve() {
321 switch (iOrdinal) {
322 case ERAS:
323 return ERAS_TYPE;
324 case CENTURIES:
325 return CENTURIES_TYPE;
326 case WEEKYEARS:
327 return WEEKYEARS_TYPE;
328 case YEARS:
329 return YEARS_TYPE;
330 case MONTHS:
331 return MONTHS_TYPE;
332 case WEEKS:
333 return WEEKS_TYPE;
334 case DAYS:
335 return DAYS_TYPE;
336 case HALFDAYS:
337 return HALFDAYS_TYPE;
338 case HOURS:
339 return HOURS_TYPE;
340 case MINUTES:
341 return MINUTES_TYPE;
342 case SECONDS:
343 return SECONDS_TYPE;
344 case MILLIS:
345 return MILLIS_TYPE;
346 default:
347
348 return this;
349 }
350 }
351 }
352 }