You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@myfaces.apache.org by mm...@apache.org on 2006/09/21 13:08:00 UTC
svn commit: r448511 - in
/myfaces/core/trunk/api/src/main/java/javax/faces/validator:
DoubleRangeValidator.java LengthValidator.java LongRangeValidator.java
NumberRangeValidator.java
Author: mmarinschek
Date: Thu Sep 21 04:07:59 2006
New Revision: 448511
URL: http://svn.apache.org/viewvc?view=rev&rev=448511
Log:
fix for [MYFACES-1418] : javax.faces.validator - DoubleRangeValidator, LengthValidator, LongRangeValidator are very similar, refactor common behaviour. Thanks to Nikolay Petrov.
Added:
myfaces/core/trunk/api/src/main/java/javax/faces/validator/NumberRangeValidator.java
Modified:
myfaces/core/trunk/api/src/main/java/javax/faces/validator/DoubleRangeValidator.java
myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthValidator.java
myfaces/core/trunk/api/src/main/java/javax/faces/validator/LongRangeValidator.java
Modified: myfaces/core/trunk/api/src/main/java/javax/faces/validator/DoubleRangeValidator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/validator/DoubleRangeValidator.java?view=diff&rev=448511&r1=448510&r2=448511
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/validator/DoubleRangeValidator.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/validator/DoubleRangeValidator.java Thu Sep 21 04:07:59 2006
@@ -15,172 +15,79 @@
*/
package javax.faces.validator;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
/**
* see Javadoc of <a href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/api/index.html">JSF Specification</a>
- *
+ *
* @author Manfred Geiler (latest modification by $Author$)
* @author Thomas Spiegl
* @version $Revision$ $Date$
*/
-public class DoubleRangeValidator
- implements Validator, StateHolder
-{
- // FIELDS
- public static final String VALIDATOR_ID = "javax.faces.DoubleRange";
- public static final String MAXIMUM_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.MAXIMUM";
- public static final String MINIMUM_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.MINIMUM";
- public static final String TYPE_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.TYPE";
-
- private Double _minimum = null;
- private Double _maximum = null;
- private boolean _transient = false;
-
- // CONSTRUCTORS
- public DoubleRangeValidator()
- {
- }
-
- public DoubleRangeValidator(double maximum)
- {
- _maximum = new Double(maximum);
- }
-
- public DoubleRangeValidator(double maximum,
- double minimum)
- {
- _maximum = new Double(maximum);
- _minimum = new Double(minimum);
- }
-
- // VALIDATE
- public void validate(FacesContext facesContext,
- UIComponent uiComponent,
- Object value)
- throws ValidatorException
- {
- if (facesContext == null) throw new NullPointerException("facesContext");
- if (uiComponent == null) throw new NullPointerException("uiComponent");
-
- if (value == null)
- {
- return;
- }
-
- double dvalue = parseDoubleValue(facesContext, uiComponent,value);
- if (_minimum != null && _maximum != null)
- {
- if (dvalue < _minimum.doubleValue() ||
- dvalue > _maximum.doubleValue())
- {
- Object[] args = {_minimum, _maximum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, NOT_IN_RANGE_MESSAGE_ID, args));
- }
- }
- else if (_minimum != null)
- {
- if (dvalue < _minimum.doubleValue())
- {
- Object[] args = {_minimum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MINIMUM_MESSAGE_ID, args));
- }
- }
- else if (_maximum != null)
- {
- if (dvalue > _maximum.doubleValue())
- {
- Object[] args = {_maximum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MAXIMUM_MESSAGE_ID, args));
- }
- }
- }
-
- private double parseDoubleValue(FacesContext facesContext, UIComponent uiComponent, Object value)
- throws ValidatorException
- {
- if (value instanceof Number)
- {
- return ((Number)value).doubleValue();
- }
- else
- {
- try
- {
- return Double.parseDouble(value.toString());
- }
- catch (NumberFormatException e)
- {
- Object[] args = {uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, TYPE_MESSAGE_ID, args));
- }
- }
- }
-
-
- // GETTER & SETTER
- public double getMaximum()
- {
- return _maximum != null ? _maximum.doubleValue() : Double.MAX_VALUE;
- }
-
- public void setMaximum(double maximum)
- {
- _maximum = new Double(maximum);
- }
-
- public double getMinimum()
- {
- return _minimum != null ? _minimum.doubleValue() : Double.MIN_VALUE;
- }
-
- public void setMinimum(double minimum)
- {
- _minimum = new Double(minimum);
- }
-
-
- // RESTORE/SAVE STATE
- public Object saveState(FacesContext context)
- {
- Object values[] = new Object[2];
- values[0] = _maximum;
- values[1] = _minimum;
- return values;
- }
-
- public void restoreState(FacesContext context,
- Object state)
- {
- Object values[] = (Object[])state;
- _maximum = (Double)values[0];
- _minimum = (Double)values[1];
- }
-
- public boolean isTransient()
- {
- return _transient;
- }
-
- public void setTransient(boolean transientValue)
- {
- _transient = transientValue;
- }
-
- // MISC
- public boolean equals(Object o)
- {
- if (this == o) return true;
- if (!(o instanceof DoubleRangeValidator)) return false;
-
- final DoubleRangeValidator doubleRangeValidator = (DoubleRangeValidator)o;
-
- if (_maximum != null ? !_maximum.equals(doubleRangeValidator._maximum) : doubleRangeValidator._maximum != null) return false;
- if (_minimum != null ? !_minimum.equals(doubleRangeValidator._minimum) : doubleRangeValidator._minimum != null) return false;
-
- return true;
- }
-
+public class DoubleRangeValidator extends NumberRangeValidator {
+ // FIELDS
+ public static final String VALIDATOR_ID = "javax.faces.DoubleRange";
+ public static final String MAXIMUM_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.MAXIMUM";
+ public static final String MINIMUM_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.MINIMUM";
+ public static final String TYPE_MESSAGE_ID = "javax.faces.validator.DoubleRangeValidator.TYPE";
+
+ // CONSTRUCTORS
+ public DoubleRangeValidator() {
+ super(null, null);
+ }
+
+ public DoubleRangeValidator(double maximum) {
+ super(null, new Double(maximum));
+ }
+
+ public DoubleRangeValidator(double maximum, double minimum) {
+ super(new Double(minimum), new Double(maximum));
+ }
+
+ // Abstract methods implementation
+ protected Comparable getValue(Number number) {
+ if(number instanceof Double) {
+ return (Double) number;
+ }
+ return new Double(number.longValue());
+ }
+
+ protected Comparable getValue(String str) throws NumberFormatException {
+ return new Double(str);
+ }
+
+ protected String getMaximumMessageId() {
+ return MAXIMUM_MESSAGE_ID;
+ }
+
+ protected String getMinimumMessageId() {
+ return MINIMUM_MESSAGE_ID;
+ }
+
+ protected String getTypeMessageId() {
+ return TYPE_MESSAGE_ID;
+ }
+
+ // GETTER & SETTER
+ public double getMaximum() {
+ return _maximum != null ? _maximum.doubleValue() : Double.MAX_VALUE;
+ }
+
+ public void setMaximum(double maximum) {
+ _maximum = new Double(maximum);
+ }
+
+ public double getMinimum() {
+ return _minimum != null ? _minimum.doubleValue() : Double.MIN_VALUE;
+ }
+
+ public void setMinimum(double minimum) {
+ _minimum = new Double(minimum);
+ }
+
+ // MISC
+ public boolean equals(Object o) {
+ if (!(o instanceof DoubleRangeValidator)) {
+ return false;
+ }
+ return super.equals(o);
+ }
}
Modified: myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthValidator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthValidator.java?view=diff&rev=448511&r1=448510&r2=448511
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthValidator.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/validator/LengthValidator.java Thu Sep 21 04:07:59 2006
@@ -15,142 +15,75 @@
*/
package javax.faces.validator;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
/**
* see Javadoc of <a href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/api/index.html">JSF Specification</a>
- *
+ *
* @author Manfred Geiler (latest modification by $Author$)
* @author Thomas Spiegl
* @version $Revision$ $Date$
*/
-public class LengthValidator
- implements Validator, StateHolder
-{
- // FIELDS
- public static final String MAXIMUM_MESSAGE_ID = "javax.faces.validator.LengthValidator.MAXIMUM";
- public static final String MINIMUM_MESSAGE_ID = "javax.faces.validator.LengthValidator.MINIMUM";
- public static final String VALIDATOR_ID = "javax.faces.Length";
-
- private Integer _minimum = null;
- private Integer _maximum = null;
- private boolean _transient = false;
-
- // CONSTRUCTORS
- public LengthValidator()
- {
- }
-
- public LengthValidator(int maximum)
- {
- _maximum = new Integer(maximum);
- }
-
- public LengthValidator(int maximum,
- int minimum)
- {
- _maximum = new Integer(maximum);
- _minimum = new Integer(minimum);
- }
-
- // VALIDATE
- public void validate(FacesContext facesContext,
- UIComponent uiComponent,
- Object value)
- throws ValidatorException
- {
- if (facesContext == null) throw new NullPointerException("facesContext");
- if (uiComponent == null) throw new NullPointerException("uiComponent");
-
- if (value == null)
- {
- return;
- }
-
- int length = value instanceof String ?
- ((String)value).length() : value.toString().length();
-
- if (_minimum != null)
- {
- if (length < _minimum.intValue())
- {
- Object[] args = {_minimum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MINIMUM_MESSAGE_ID, args));
- }
- }
-
- if (_maximum != null)
- {
- if (length > _maximum.intValue())
- {
- Object[] args = {_maximum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MAXIMUM_MESSAGE_ID, args));
- }
- }
- }
-
- // SETTER & GETTER
- public int getMaximum()
- {
- return _maximum != null ? _maximum.intValue() : Integer.MAX_VALUE;
- }
-
- public void setMaximum(int maximum)
- {
- _maximum = new Integer(maximum);
- }
-
- public int getMinimum()
- {
- return _minimum != null ? _minimum.intValue() : 0;
- }
-
- public void setMinimum(int minimum)
- {
- _minimum = new Integer(minimum);
- }
-
- public boolean isTransient()
- {
- return _transient;
- }
-
- public void setTransient(boolean transientValue)
- {
- _transient = transientValue;
- }
-
- // RESTORE & SAVE STATE
- public Object saveState(FacesContext context)
- {
- Object values[] = new Object[2];
- values[0] = _maximum;
- values[1] = _minimum;
- return values;
- }
-
- public void restoreState(FacesContext context,
- Object state)
- {
- Object values[] = (Object[])state;
- _maximum = (Integer)values[0];
- _minimum = (Integer)values[1];
- }
-
- // MISC
- public boolean equals(Object o)
- {
- if (this == o) return true;
- if (!(o instanceof LengthValidator)) return false;
-
- final LengthValidator lengthValidator = (LengthValidator)o;
-
- if (_maximum != null ? !_maximum.equals(lengthValidator._maximum) : lengthValidator._maximum != null) return false;
- if (_minimum != null ? !_minimum.equals(lengthValidator._minimum) : lengthValidator._minimum != null) return false;
-
- return true;
- }
-
+public class LengthValidator extends NumberRangeValidator {
+ // FIELDS
+ public static final String MAXIMUM_MESSAGE_ID = "javax.faces.validator.LengthValidator.MAXIMUM";
+ public static final String MINIMUM_MESSAGE_ID = "javax.faces.validator.LengthValidator.MINIMUM";
+ public static final String VALIDATOR_ID = "javax.faces.Length";
+
+ // CONSTRUCTORS
+ public LengthValidator() {
+ super(null, null, false);
+ }
+
+ public LengthValidator(int maximum) {
+ super(null, new Integer(maximum), false);
+ }
+
+ public LengthValidator(int maximum, int minimum) {
+ super(new Integer(minimum), new Integer(maximum), false);
+ }
+
+ // Abstract methods implementation
+ protected Comparable getValue(Number number) {
+ return null;
+ }
+
+ protected Comparable getValue(String str) throws NumberFormatException {
+ return new Integer(str.length());
+ }
+
+ protected String getMaximumMessageId() {
+ return MAXIMUM_MESSAGE_ID;
+ }
+
+ protected String getMinimumMessageId() {
+ return MINIMUM_MESSAGE_ID;
+ }
+
+ protected String getTypeMessageId() {
+ return null;
+ }
+
+ // SETTER & GETTER
+ public int getMaximum() {
+ return _maximum != null ? _maximum.intValue() : Integer.MAX_VALUE;
+ }
+
+ public void setMaximum(int maximum) {
+ _maximum = new Integer(maximum);
+ }
+
+ public int getMinimum() {
+ return _minimum != null ? _minimum.intValue() : 0;
+ }
+
+ public void setMinimum(int minimum) {
+ _minimum = new Integer(minimum);
+ }
+
+ // MISC
+ public boolean equals(Object o) {
+ if (!(o instanceof LengthValidator)) {
+ return false;
+ }
+ return super.equals(o);
+ }
}
Modified: myfaces/core/trunk/api/src/main/java/javax/faces/validator/LongRangeValidator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/validator/LongRangeValidator.java?view=diff&rev=448511&r1=448510&r2=448511
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/validator/LongRangeValidator.java (original)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/validator/LongRangeValidator.java Thu Sep 21 04:07:59 2006
@@ -15,171 +15,79 @@
*/
package javax.faces.validator;
-import javax.faces.component.StateHolder;
-import javax.faces.component.UIComponent;
-import javax.faces.context.FacesContext;
-
/**
* see Javadoc of <a href="http://java.sun.com/j2ee/javaserverfaces/1.1_01/docs/api/index.html">JSF Specification</a>
- *
+ *
* @author Manfred Geiler (latest modification by $Author$)
* @author Thomas Spiegl
* @version $Revision$ $Date$
*/
-public class LongRangeValidator
- implements Validator, StateHolder
-{
- // FIELDS
- public static final String MAXIMUM_MESSAGE_ID = "javax.faces.validator.LongRangeValidator.MAXIMUM";
- public static final String MINIMUM_MESSAGE_ID = "javax.faces.validator.LongRangeValidator.MINIMUM";
- public static final String TYPE_MESSAGE_ID = "javax.faces.validator.LongRangeValidator.TYPE";
- public static final String VALIDATOR_ID = "javax.faces.LongRange";
-
- private Long _minimum = null;
- private Long _maximum = null;
- private boolean _transient = false;
-
- // CONSTRUCTORS
- public LongRangeValidator()
- {
- }
-
- public LongRangeValidator(long maximum)
- {
- _maximum = new Long(maximum);
- }
-
- public LongRangeValidator(long maximum,
- long minimum)
- {
- _maximum = new Long(maximum);
- _minimum = new Long(minimum);
- }
-
- // VALIDATE
- public void validate(FacesContext facesContext,
- UIComponent uiComponent,
- Object value)
- throws ValidatorException
- {
- if (facesContext == null) throw new NullPointerException("facesContext");
- if (uiComponent == null) throw new NullPointerException("uiComponent");
-
- if (value == null)
- {
- return;
- }
-
- double dvalue = parseLongValue(facesContext, uiComponent,value);
- if (_minimum != null && _maximum != null)
- {
- if (dvalue < _minimum.longValue() ||
- dvalue > _maximum.longValue())
- {
- Object[] args = {_minimum, _maximum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, NOT_IN_RANGE_MESSAGE_ID, args));
- }
- }
- else if (_minimum != null)
- {
- if (dvalue < _minimum.longValue())
- {
- Object[] args = {_minimum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MINIMUM_MESSAGE_ID, args));
- }
- }
- else if (_maximum != null)
- {
- if (dvalue > _maximum.longValue())
- {
- Object[] args = {_maximum,uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, MAXIMUM_MESSAGE_ID, args));
- }
- }
- }
-
- private long parseLongValue(FacesContext facesContext, UIComponent uiComponent, Object value)
- throws ValidatorException
- {
- if (value instanceof Number)
- {
- return ((Number)value).longValue();
- }
- else
- {
- try
- {
- return Long.parseLong(value.toString());
- }
- catch (NumberFormatException e)
- {
- Object[] args = {uiComponent.getId()};
- throw new ValidatorException(_MessageUtils.getErrorMessage(facesContext, TYPE_MESSAGE_ID, args));
- }
- }
- }
-
-
- // GETTER & SETTER
- public long getMaximum()
- {
- return _maximum != null ? _maximum.longValue() : Long.MAX_VALUE;
- }
-
- public void setMaximum(long maximum)
- {
- _maximum = new Long(maximum);
- }
-
- public long getMinimum()
- {
- return _minimum != null ? _minimum.longValue() : Long.MIN_VALUE;
- }
-
- public void setMinimum(long minimum)
- {
- _minimum = new Long(minimum);
- }
-
- public boolean isTransient()
- {
- return _transient;
- }
-
- public void setTransient(boolean transientValue)
- {
- _transient = transientValue;
- }
-
- // RESTORE & SAVE STATE
- public Object saveState(FacesContext context)
- {
- Object values[] = new Object[2];
- values[0] = _maximum;
- values[1] = _minimum;
- return values;
- }
-
- public void restoreState(FacesContext context,
- Object state)
- {
- Object values[] = (Object[])state;
- _maximum = (Long)values[0];
- _minimum = (Long)values[1];
- }
-
- // MISC
- public boolean equals(Object o)
- {
- if (this == o) return true;
- if (!(o instanceof LongRangeValidator)) return false;
-
- final LongRangeValidator longRangeValidator = (LongRangeValidator)o;
-
- if (_maximum != null ? !_maximum.equals(longRangeValidator._maximum) : longRangeValidator._maximum != null) return false;
- if (_minimum != null ? !_minimum.equals(longRangeValidator._minimum) : longRangeValidator._minimum != null) return false;
-
- return true;
- }
-
+public class LongRangeValidator extends NumberRangeValidator {
+ // FIELDS
+ public static final String MAXIMUM_MESSAGE_ID = "javax.faces.validator.LongRangeValidator.MAXIMUM";
+ public static final String MINIMUM_MESSAGE_ID = "javax.faces.validator.LongRangeValidator.MINIMUM";
+ public static final String TYPE_MESSAGE_ID = "javax.faces.validator.LongRangeValidator.TYPE";
+ public static final String VALIDATOR_ID = "javax.faces.LongRange";
+
+ // CONSTRUCTORS
+ public LongRangeValidator() {
+ super(null, null);
+ }
+
+ public LongRangeValidator(long maximum) {
+ super(null, new Long(maximum));
+ }
+
+ public LongRangeValidator(long maximum, long minimum) {
+ super(new Long(minimum), new Long(maximum));
+ }
+
+ protected Comparable getValue(Number number) {
+ if(number instanceof Long) {
+ return (Long) number;
+ }
+ return new Long(number.longValue());
+ }
+
+ // Abstract methods implementation
+ protected Comparable getValue(String str) throws NumberFormatException {
+ return new Long(str);
+ }
+
+ protected String getMaximumMessageId() {
+ return MAXIMUM_MESSAGE_ID;
+ }
+
+ protected String getMinimumMessageId() {
+ return MINIMUM_MESSAGE_ID;
+ }
+
+ protected String getTypeMessageId() {
+ return TYPE_MESSAGE_ID;
+ }
+
+ // GETTER & SETTER
+ public long getMaximum() {
+ return _maximum != null ? _maximum.longValue() : Long.MAX_VALUE;
+ }
+
+ public void setMaximum(long maximum) {
+ _maximum = new Long(maximum);
+ }
+
+ public long getMinimum() {
+ return _minimum != null ? _minimum.longValue() : Long.MIN_VALUE;
+ }
+
+ public void setMinimum(long minimum) {
+ _minimum = new Long(minimum);
+ }
+
+ // MISC
+ public boolean equals(Object o) {
+ if (!(o instanceof LongRangeValidator)) {
+ return false;
+ }
+ return super.equals(o);
+ }
}
Added: myfaces/core/trunk/api/src/main/java/javax/faces/validator/NumberRangeValidator.java
URL: http://svn.apache.org/viewvc/myfaces/core/trunk/api/src/main/java/javax/faces/validator/NumberRangeValidator.java?view=auto&rev=448511
==============================================================================
--- myfaces/core/trunk/api/src/main/java/javax/faces/validator/NumberRangeValidator.java (added)
+++ myfaces/core/trunk/api/src/main/java/javax/faces/validator/NumberRangeValidator.java Thu Sep 21 04:07:59 2006
@@ -0,0 +1,147 @@
+/*
+ * Copyright 2004 The Apache Software Foundation.
+ *
+ * Licensed under the Apache License, Version 2.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+package javax.faces.validator;
+
+import javax.faces.component.StateHolder;
+import javax.faces.component.UIComponent;
+import javax.faces.context.FacesContext;
+
+/**
+ * An abstract base class for all number range validators including LengthValidator
+ *
+ * @author Nikolay Petrov
+ * @version $Revision$ $Date$
+ */
+abstract class NumberRangeValidator implements Validator, StateHolder {
+
+ protected Number _minimum;
+ protected Number _maximum;
+ private boolean _transient = false;
+
+ private boolean _checkRange;
+
+ public NumberRangeValidator(Number minimum, Number maximum) {
+ this(minimum, maximum, true);
+ }
+
+ public NumberRangeValidator(Number minimum, Number maximum, boolean checkRange) {
+ this._minimum = minimum;
+ this._maximum = maximum;
+ this._checkRange = checkRange;
+ }
+
+ public void validate(FacesContext context, UIComponent component, Object value) throws ValidatorException {
+ if (context == null) {
+ throw new NullPointerException("facesContext");
+ }
+ if (component == null) {
+ throw new NullPointerException("uiComponent");
+ }
+
+ if (value == null) {
+ return;
+ }
+
+ Comparable compValue = parseValue(context, component, value);
+ if (_checkRange && _minimum != null && _maximum != null && isNotInRange(compValue, _minimum, _maximum)) {
+ Object[] args = { _minimum, _maximum, component.getId()};
+ throw new ValidatorException(_MessageUtils.getErrorMessage(context, NOT_IN_RANGE_MESSAGE_ID, args));
+ } else if (_minimum != null && isSmaller(compValue, _minimum)) {
+ Object[] args = { _minimum, component.getId() };
+ throw new ValidatorException(_MessageUtils.getErrorMessage(context, getMinimumMessageId(), args));
+ } else if (_maximum != null && isBigger(compValue, _maximum)) {
+ Object[] args = { _minimum, component.getId() };
+ throw new ValidatorException(_MessageUtils.getErrorMessage(context, getMaximumMessageId(), args));
+ }
+ }
+
+ protected Comparable parseValue(FacesContext context, UIComponent component, Object value)
+ throws ValidatorException {
+ if (value instanceof Number) {
+ return getValue((Number) value);
+ }
+
+ try {
+ return getValue(value.toString());
+ } catch (NumberFormatException e) {
+ Object[] args = { component.getId() };
+ throw new ValidatorException(_MessageUtils.getErrorMessage(context, getTypeMessageId(), args));
+ }
+ }
+
+ protected abstract Comparable getValue(Number number);
+
+ protected abstract Comparable getValue(String str) throws NumberFormatException;
+
+ protected abstract String getMinimumMessageId();
+
+ protected abstract String getMaximumMessageId();
+
+ protected abstract String getTypeMessageId();
+
+ public boolean isTransient() {
+ return _transient;
+ }
+
+ public void setTransient(boolean newTransientValue) {
+ this._transient = newTransientValue;
+ }
+
+ public Object saveState(FacesContext context) {
+ Object values[] = new Object[2];
+ values[0] = _maximum;
+ values[1] = _minimum;
+ return values;
+ }
+
+ public void restoreState(FacesContext context, Object state) {
+ Object values[] = (Object[]) state;
+ _maximum = (Number) values[0];
+ _minimum = (Number) values[1];
+ }
+
+ public boolean equals(Object obj) {
+ if (this == obj) {
+ return true;
+ }
+
+ if (!(obj instanceof NumberRangeValidator)) {
+ return false;
+ }
+
+ NumberRangeValidator other = (NumberRangeValidator) obj;
+ if (_maximum != null ? !_maximum.equals(other._maximum) : other._maximum != null) {
+ return false;
+ }
+ if (_minimum != null ? !_minimum.equals(other._minimum) : other._minimum != null) {
+ return false;
+ }
+
+ return true;
+ }
+
+ private boolean isNotInRange(Comparable compValue, Number minValue, Number maxValue) {
+ return isSmaller(compValue, minValue) || isBigger(compValue, maxValue);
+ }
+
+ private boolean isSmaller(Comparable compValue, Number other) {
+ return compValue.compareTo(other) < 0;
+ }
+
+ private boolean isBigger(Comparable compValue, Number other) {
+ return compValue.compareTo(other) > 0;
+ }
+}