1
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
33 public final class ZeroIsMaxDateTimeField extends DecoratedDateTimeField {
34
35 @SuppressWarnings("unused")
36 private static final long serialVersionUID = 961749798233026866L;
37
38
45 public ZeroIsMaxDateTimeField(DateTimeField field, DateTimeFieldType type) {
46 super(field, type);
47 if (field.getMinimumValue() != 0) {
48 throw new IllegalArgumentException("Wrapped field's minumum value must be zero");
49 }
50 }
51
52 public int get(long instant) {
53 int value = getWrappedField().get(instant);
54 if (value == 0) {
55 value = getMaximumValue();
56 }
57 return value;
58 }
59
60 public long add(long instant, int value) {
61 return getWrappedField().add(instant, value);
62 }
63
64 public long add(long instant, long value) {
65 return getWrappedField().add(instant, value);
66 }
67
68 public long addWrapField(long instant, int value) {
69 return getWrappedField().addWrapField(instant, value);
70 }
71
72 public int[] addWrapField(ReadablePartial instant, int fieldIndex, int[] values, int valueToAdd) {
73 return getWrappedField().addWrapField(instant, fieldIndex, values, valueToAdd);
74 }
75
76 public int getDifference(long minuendInstant, long subtrahendInstant) {
77 return getWrappedField().getDifference(minuendInstant, subtrahendInstant);
78 }
79
80 public long getDifferenceAsLong(long minuendInstant, long subtrahendInstant) {
81 return getWrappedField().getDifferenceAsLong(minuendInstant, subtrahendInstant);
82 }
83
84 public long set(long instant, int value) {
85 int max = getMaximumValue();
86 FieldUtils.verifyValueBounds(this, value, 1, max);
87 if (value == max) {
88 value = 0;
89 }
90 return getWrappedField().set(instant, value);
91 }
92
93 public boolean isLeap(long instant) {
94 return getWrappedField().isLeap(instant);
95 }
96
97 public int getLeapAmount(long instant) {
98 return getWrappedField().getLeapAmount(instant);
99 }
100
101 public DurationField getLeapDurationField() {
102 return getWrappedField().getLeapDurationField();
103 }
104
105
110 public int getMinimumValue() {
111 return 1;
112 }
113
114
119 public int getMinimumValue(long instant) {
120 return 1;
121 }
122
123
128 public int getMinimumValue(ReadablePartial instant) {
129 return 1;
130 }
131
132
137 public int getMinimumValue(ReadablePartial instant, int[] values) {
138 return 1;
139 }
140
141
147 public int getMaximumValue() {
148 return getWrappedField().getMaximumValue() + 1;
149 }
150
151
157 public int getMaximumValue(long instant) {
158 return getWrappedField().getMaximumValue(instant) + 1;
159 }
160
161
167 public int getMaximumValue(ReadablePartial instant) {
168 return getWrappedField().getMaximumValue(instant) + 1;
169 }
170
171
177 public int getMaximumValue(ReadablePartial instant, int[] values) {
178 return getWrappedField().getMaximumValue(instant, values) + 1;
179 }
180
181 public long roundFloor(long instant) {
182 return getWrappedField().roundFloor(instant);
183 }
184
185 public long roundCeiling(long instant) {
186 return getWrappedField().roundCeiling(instant);
187 }
188
189 public long roundHalfFloor(long instant) {
190 return getWrappedField().roundHalfFloor(instant);
191 }
192
193 public long roundHalfCeiling(long instant) {
194 return getWrappedField().roundHalfCeiling(instant);
195 }
196
197 public long roundHalfEven(long instant) {
198 return getWrappedField().roundHalfEven(instant);
199 }
200
201 public long remainder(long instant) {
202 return getWrappedField().remainder(instant);
203 }
204
205 }
206