1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19 package javax.faces.validator;
20
21 import javax.faces.component.StateHolder;
22 import javax.faces.component.UIComponent;
23 import javax.faces.context.FacesContext;
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45 public class DoubleRangeValidator
46 implements Validator, StateHolder
47 {
48
49 public static final String VALIDATOR_ID = "javax.faces.DoubleRange";
50 public static final String MAXIMUM_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.MAXIMUM";
51 public static final String MINIMUM_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.MINIMUM";
52 public static final String TYPE_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.TYPE";
53
54 private Double _minimum = null;
55 private Double _maximum = null;
56 private boolean _transient = false;
57
58
59 public DoubleRangeValidator()
60 {
61 }
62
63 public DoubleRangeValidator(double maximum)
64 {
65 _maximum = new Double(maximum);
66 }
67
68 public DoubleRangeValidator(double maximum,
69 double minimum)
70 {
71 _maximum = new Double(maximum);
72 _minimum = new Double(minimum);
73 }
74
75
76 public void validate(FacesContext facesContext,
77 UIComponent uiComponent,
78 Object value)
79 throws ValidatorException
80 {
81 if (facesContext == null) throw new NullPointerException("facesContext");
82 if (uiComponent == null) throw new NullPointerException("uiComponent");
83
84 if (value == null)
85 {
86 return;
87 }
88
89 double dvalue = parseDoubleValue(facesContext, uiComponent,value);
90 if (_minimum != null && _maximum != null)
91 {
92 if (dvalue < _minimum.doubleValue() ||
93 dvalue > _maximum.doubleValue())
94 {
95 Object[] args = {_minimum, _maximum,uiComponent.getId()};
96 throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, NOT_IN_RANGE_MESSAGE_ID, args));
97 }
98 }
99 else if (_minimum != null)
100 {
101 if (dvalue < _minimum.doubleValue())
102 {
103 Object[] args = {_minimum,uiComponent.getId()};
104 throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MINIMUM_MESSAGE_ID, args));
105 }
106 }
107 else if (_maximum != null)
108 {
109 if (dvalue > _maximum.doubleValue())
110 {
111 Object[] args = {_maximum,uiComponent.getId()};
112 throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MAXIMUM_MESSAGE_ID, args));
113 }
114 }
115 }
116
117 private double parseDoubleValue(FacesContext facesContext, UIComponent uiComponent, Object value)
118 throws ValidatorException
119 {
120 if (value instanceof Number)
121 {
122 return ((Number)value).doubleValue();
123 }
124 else
125 {
126 try
127 {
128 return Double.parseDouble(value.toString());
129 }
130 catch (NumberFormatException e)
131 {
132 Object[] args = {uiComponent.getId()};
133 throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, TYPE_MESSAGE_ID, args));
134 }
135 }
136 }
137
138
139
140
141
142
143
144
145
146 public double getMaximum()
147 {
148 return _maximum != null ? _maximum.doubleValue() : Double.MAX_VALUE;
149 }
150
151 public void setMaximum(double maximum)
152 {
153 _maximum = new Double(maximum);
154 }
155
156
157
158
159
160
161 public double getMinimum()
162 {
163 return _minimum != null ? _minimum.doubleValue() : Double.MIN_VALUE;
164 }
165
166 public void setMinimum(double minimum)
167 {
168 _minimum = new Double(minimum);
169 }
170
171
172
173 public Object saveState(FacesContext context)
174 {
175 Object values[] = new Object[2];
176 values[0] = _maximum;
177 values[1] = _minimum;
178 return values;
179 }
180
181 public void restoreState(FacesContext context,
182 Object state)
183 {
184 Object values[] = (Object[])state;
185 _maximum = (Double)values[0];
186 _minimum = (Double)values[1];
187 }
188
189 public boolean isTransient()
190 {
191 return _transient;
192 }
193
194 public void setTransient(boolean transientValue)
195 {
196 _transient = transientValue;
197 }
198
199
200 public boolean equals(Object o)
201 {
202 if (this == o) return true;
203 if (!(o instanceof DoubleRangeValidator)) return false;
204
205 final DoubleRangeValidator doubleRangeValidator = (DoubleRangeValidator)o;
206
207 if (_maximum != null ? !_maximum.equals(doubleRangeValidator._maximum) : doubleRangeValidator._maximum != null) return false;
208 if (_minimum != null ? !_minimum.equals(doubleRangeValidator._minimum) : doubleRangeValidator._minimum != null) return false;
209
210 return true;
211 }
212
213 }