1   
2   
3   
4   
5   
6   
7   
8   
9   
10  
11  
12  
13  
14  
15  
16  package org.joda.time;
17  
18  
19  
20  
21  
22  
23  
24  public class IllegalFieldValueException extends IllegalArgumentException {
25      
26      
27      private static final long serialVersionUID = 6305711765985447737L;
28  
29      
30  
31  
32  
33  
34  
35  
36  
37  
38  
39      private static String createMessage(String fieldName, Number value,
40                                          Number lowerBound, Number upperBound, String explain) {
41          StringBuilder buf = new StringBuilder()
42              .append("Value ").append(value).append(" for ").append(fieldName).append(' ');
43  
44          if (lowerBound == null) {
45              if (upperBound == null) {
46                  buf.append("is not supported");
47              } else {
48                  buf.append("must not be larger than ").append(upperBound);
49              }
50          } else if (upperBound == null) {
51              buf.append("must not be smaller than ").append(lowerBound);
52          } else {
53              buf.append("must be in the range [")
54                  .append(lowerBound)
55                  .append(',')
56                  .append(upperBound)
57                  .append(']');
58          }
59          if (explain != null) {
60              buf.append(": ").append(explain);
61          }
62  
63          return buf.toString();
64      }
65  
66      
67  
68  
69  
70  
71  
72  
73      private static String createMessage(String fieldName, String value) {
74          StringBuffer buf = new StringBuffer().append("Value ");
75  
76          if (value == null) {
77              buf.append("null");
78          } else {
79              buf.append('"');
80              buf.append(value);
81              buf.append('"');
82          }
83  
84          buf.append(" for ").append(fieldName).append(' ').append("is not supported");
85          
86          return buf.toString();
87      }
88  
89      private final DateTimeFieldType iDateTimeFieldType;
90      private final DurationFieldType iDurationFieldType;
91      private final String iFieldName;
92      private final Number iNumberValue;
93      private final String iStringValue;
94      private final Number iLowerBound;
95      private final Number iUpperBound;
96      private String iMessage;
97  
98      
99  
100 
101 
102 
103 
104 
105 
106     public IllegalFieldValueException(DateTimeFieldType fieldType,
107                                       Number value, Number lowerBound, Number upperBound) {
108         super(createMessage(fieldType.getName(), value, lowerBound, upperBound, null));
109         iDateTimeFieldType = fieldType;
110         iDurationFieldType = null;
111         iFieldName = fieldType.getName();
112         iNumberValue = value;
113         iStringValue = null;
114         iLowerBound = lowerBound;
115         iUpperBound = upperBound;
116         iMessage = super.getMessage();
117     }
118 
119     
120 
121 
122 
123 
124 
125 
126 
127     public IllegalFieldValueException(DateTimeFieldType fieldType,
128                                       Number value, String explain) {
129         super(createMessage(fieldType.getName(), value, null, null, explain));
130         iDateTimeFieldType = fieldType;
131         iDurationFieldType = null;
132         iFieldName = fieldType.getName();
133         iNumberValue = value;
134         iStringValue = null;
135         iLowerBound = null;
136         iUpperBound = null;
137         iMessage = super.getMessage();
138     }
139 
140     
141 
142 
143 
144 
145 
146 
147 
148     public IllegalFieldValueException(DurationFieldType fieldType,
149                                       Number value, Number lowerBound, Number upperBound) {
150         super(createMessage(fieldType.getName(), value, lowerBound, upperBound, null));
151         iDateTimeFieldType = null;
152         iDurationFieldType = fieldType;
153         iFieldName = fieldType.getName();
154         iNumberValue = value;
155         iStringValue = null;
156         iLowerBound = lowerBound;
157         iUpperBound = upperBound;
158         iMessage = super.getMessage();
159     }
160 
161     
162 
163 
164 
165 
166 
167 
168 
169     public IllegalFieldValueException(String fieldName,
170                                       Number value, Number lowerBound, Number upperBound) {
171         super(createMessage(fieldName, value, lowerBound, upperBound, null));
172         iDateTimeFieldType = null;
173         iDurationFieldType = null;
174         iFieldName = fieldName;
175         iNumberValue = value;
176         iStringValue = null;
177         iLowerBound = lowerBound;
178         iUpperBound = upperBound;
179         iMessage = super.getMessage();
180     }
181 
182     
183 
184 
185 
186 
187 
188     public IllegalFieldValueException(DateTimeFieldType fieldType, String value) {
189         super(createMessage(fieldType.getName(), value));
190         iDateTimeFieldType = fieldType;
191         iDurationFieldType = null;
192         iFieldName = fieldType.getName();
193         iStringValue = value;
194         iNumberValue = null;
195         iLowerBound = null;
196         iUpperBound = null;
197         iMessage = super.getMessage();
198     }
199 
200     
201 
202 
203 
204 
205 
206     public IllegalFieldValueException(DurationFieldType fieldType, String value) {
207         super(createMessage(fieldType.getName(), value));
208         iDateTimeFieldType = null;
209         iDurationFieldType = fieldType;
210         iFieldName = fieldType.getName();
211         iStringValue = value;
212         iNumberValue = null;
213         iLowerBound = null;
214         iUpperBound = null;
215         iMessage = super.getMessage();
216     }
217 
218     
219 
220 
221 
222 
223 
224     public IllegalFieldValueException(String fieldName, String value) {
225         super(createMessage(fieldName, value));
226         iDateTimeFieldType = null;
227         iDurationFieldType = null;
228         iFieldName = fieldName;
229         iStringValue = value;
230         iNumberValue = null;
231         iLowerBound = null;
232         iUpperBound = null;
233         iMessage = super.getMessage();
234     }
235 
236     
237     
238 
239 
240 
241 
242     public DateTimeFieldType getDateTimeFieldType() {
243         return iDateTimeFieldType;
244     }
245 
246     
247 
248 
249 
250 
251     public DurationFieldType getDurationFieldType() {
252         return iDurationFieldType;
253     }
254 
255     
256 
257 
258 
259 
260     public String getFieldName() {
261         return iFieldName;
262     }
263 
264     
265 
266 
267 
268 
269     public Number getIllegalNumberValue() {
270         return iNumberValue;
271     }
272 
273     
274 
275 
276 
277 
278     public String getIllegalStringValue() {
279         return iStringValue;
280     }
281 
282     
283 
284 
285 
286 
287     public String getIllegalValueAsString() {
288         String value = iStringValue;
289         if (value == null) {
290             value = String.valueOf(iNumberValue);
291         }
292         return value;
293     }
294 
295     
296 
297 
298 
299 
300     public Number getLowerBound() {
301         return iLowerBound;
302     }
303 
304     
305 
306 
307 
308 
309     public Number getUpperBound() {
310         return iUpperBound;
311     }
312 
313     public String getMessage() {
314         return iMessage;
315     }
316 
317     
318 
319 
320 
321 
322     public void prependMessage(String message) {
323         if (iMessage == null) {
324             iMessage = message;
325         } else if (message != null) {
326             iMessage = message + ": " + iMessage;
327         }
328     }
329 }