1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.joda.time.field;
17
18 import org.joda.time.DateTimeField;
19 import org.joda.time.DateTimeFieldType;
20 import org.joda.time.DurationField;
21 import org.joda.time.ReadablePartial;
22
23
24
25
26
27
28
29
30
31
32
33 public final class ZeroIsMaxDateTimeField extends DecoratedDateTimeField {
34
35 private static final long serialVersionUID = 961749798233026866L;
36
37
38
39
40
41
42
43
44 public ZeroIsMaxDateTimeField(DateTimeField field, DateTimeFieldType type) {
45 super(field, type);
46 if (field.getMinimumValue() != 0) {
47 throw new IllegalArgumentException("Wrapped field's minumum value must be zero");
48 }
49 }
50
51 public int get(long instant) {
52 int value = getWrappedField().get(instant);
53 if (value == 0) {
54 value = getMaximumValue();
55 }
56 return value;
57 }
58
59 public long add(long instant, int value) {
60 return getWrappedField().add(instant, value);
61 }
62
63 public long add(long instant, long value) {
64 return getWrappedField().add(instant, value);
65 }
66
67 public long addWrapField(long instant, int value) {
68 return getWrappedField().addWrapField(instant, value);
69 }
70
71 public int[] addWrapField(ReadablePartial instant, int fieldIndex, int[] values, int valueToAdd) {
72 return getWrappedField().addWrapField(instant, fieldIndex, values, valueToAdd);
73 }
74
75 public int getDifference(long minuendInstant, long subtrahendInstant) {
76 return getWrappedField().getDifference(minuendInstant, subtrahendInstant);
77 }
78
79 public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) {
80 return getWrappedField().getDifferenceAsLong(minuendInstant, subtrahendInstant);
81 }
82
83 public long set(long instant, int value) {
84 int max = getMaximumValue();
85 FieldUtils.verifyValueBounds(this, value, 1, max);
86 if (value == max) {
87 value = 0;
88 }
89 return getWrappedField().set(instant, value);
90 }
91
92 public boolean isLeap(long instant) {
93 return getWrappedField().isLeap(instant);
94 }
95
96 public int getLeapAmount(long instant) {
97 return getWrappedField().getLeapAmount(instant);
98 }
99
100 public DurationField getLeapDurationField() {
101 return getWrappedField().getLeapDurationField();
102 }
103
104
105
106
107
108
109 public int getMinimumValue() {
110 return 1;
111 }
112
113
114
115
116
117
118 public int getMinimumValue(long instant) {
119 return 1;
120 }
121
122
123
124
125
126
127 public int getMinimumValue(ReadablePartial instant) {
128 return 1;
129 }
130
131
132
133
134
135
136 public int getMinimumValue(ReadablePartial instant, int[] values) {
137 return 1;
138 }
139
140
141
142
143
144
145
146 public int getMaximumValue() {
147 return getWrappedField().getMaximumValue() + 1;
148 }
149
150
151
152
153
154
155
156 public int getMaximumValue(long instant) {
157 return getWrappedField().getMaximumValue(instant) + 1;
158 }
159
160
161
162
163
164
165
166 public int getMaximumValue(ReadablePartial instant) {
167 return getWrappedField().getMaximumValue(instant) + 1;
168 }
169
170
171
172
173
174
175
176 public int getMaximumValue(ReadablePartial instant, int[] values) {
177 return getWrappedField().getMaximumValue(instant, values) + 1;
178 }
179
180 public long roundFloor(long instant) {
181 return getWrappedField().roundFloor(instant);
182 }
183
184 public long roundCeiling(long instant) {
185 return getWrappedField().roundCeiling(instant);
186 }
187
188 public long roundHalfFloor(long instant) {
189 return getWrappedField().roundHalfFloor(instant);
190 }
191
192 public long roundHalfCeiling(long instant) {
193 return getWrappedField().roundHalfCeiling(instant);
194 }
195
196 public long roundHalfEven(long instant) {
197 return getWrappedField().roundHalfEven(instant);
198 }
199
200 public long remainder(long instant) {
201 return getWrappedField().remainder(instant);
202 }
203
204 }