org.apache.commons.validator.routines.BigDecimalValidator Maven / Gradle / Ivy
Show all versions of commons-validator Show documentation
/*
* Licensed to the Apache Software Foundation (ASF) under one or more
* contributor license agreements. See the NOTICE file distributed with
* this work for additional information regarding copyright ownership.
* The ASF licenses this file to You 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 org.apache.commons.validator.routines;
import java.math.BigDecimal;
import java.text.Format;
import java.text.NumberFormat;
import java.util.Locale;
/**
* BigDecimal Validation and Conversion routines (java.math.BigDecimal
).
*
* This validator provides a number of methods for
* validating/converting a String
value to
* a BigDecimal
using java.text.NumberFormat
* to parse either:
*
* - using the default format for the default
Locale
* - using a specified pattern with the default
Locale
* - using the default format for a specified
Locale
* - using a specified pattern with a specified
Locale
*
*
* Use one of the isValid()
methods to just validate or
* one of the validate()
methods to validate and receive a
* converted BigDecimal
value.
*
* Fraction/decimal values are automatically trimmed to the appropriate length.
*
* Once a value has been successfully converted the following
* methods can be used to perform minimum, maximum and range checks:
*
* minValue()
checks whether the value is greater
* than or equal to a specified minimum.
* maxValue()
checks whether the value is less
* than or equal to a specified maximum.
* isInRange()
checks whether the value is within
* a specified range of values.
*
*
* So that the same mechanism used for parsing an input value
* for validation can be used to format output, corresponding
* format()
methods are also provided. That is you can
* format either:
*
* - using the default format for the default
Locale
* - using a specified pattern with the default
Locale
* - using the default format for a specified
Locale
* - using a specified pattern with a specified
Locale
*
*
* @version $Revision: 1649191 $
* @since Validator 1.3.0
*/
public class BigDecimalValidator extends AbstractNumberValidator {
private static final long serialVersionUID = -670320911490506772L;
private static final BigDecimalValidator VALIDATOR = new BigDecimalValidator();
/**
* Return a singleton instance of this validator.
* @return A singleton instance of the BigDecimalValidator.
*/
public static BigDecimalValidator getInstance() {
return VALIDATOR;
}
/**
* Construct a strict instance.
*/
public BigDecimalValidator() {
this(true);
}
/**
* Construct an instance with the specified strict setting.
*
* @param strict true
if strict
* Format
parsing should be used.
*/
public BigDecimalValidator(boolean strict) {
this(strict, STANDARD_FORMAT, true);
}
/**
* Construct an instance with the specified strict setting
* and format type.
*
* The formatType
specified what type of
* NumberFormat
is created - valid types
* are:
*
* - AbstractNumberValidator.STANDARD_FORMAT -to create
* standard number formats (the default).
* - AbstractNumberValidator.CURRENCY_FORMAT -to create
* currency number formats.
* - AbstractNumberValidator.PERCENT_FORMAT -to create
* percent number formats (the default).
*
*
* @param strict true
if strict
* Format
parsing should be used.
* @param formatType The NumberFormat
type to
* create for validation, default is STANDARD_FORMAT.
* @param allowFractions true
if fractions are
* allowed or false
if integers only.
*/
protected BigDecimalValidator(boolean strict, int formatType,
boolean allowFractions) {
super(strict, formatType, allowFractions);
}
/**
* Validate/convert a BigDecimal
using the default
* Locale
.
*
* @param value The value validation is being performed on.
* @return The parsed BigDecimal
if valid or null
* if invalid.
*/
public BigDecimal validate(String value) {
return (BigDecimal)parse(value, (String)null, (Locale)null);
}
/**
*
Validate/convert a BigDecimal
using the
* specified pattern.
*
* @param value The value validation is being performed on.
* @param pattern The pattern used to validate the value against, or the
* default for the Locale
if null
.
* @return The parsed BigDecimal
if valid or null
if invalid.
*/
public BigDecimal validate(String value, String pattern) {
return (BigDecimal)parse(value, pattern, (Locale)null);
}
/**
*
Validate/convert a BigDecimal
using the
* specified Locale
.
*
* @param value The value validation is being performed on.
* @param locale The locale to use for the number format, system default if null.
* @return The parsed BigDecimal
if valid or null
if invalid.
*/
public BigDecimal validate(String value, Locale locale) {
return (BigDecimal)parse(value, (String)null, locale);
}
/**
*
Validate/convert a BigDecimal
using the
* specified pattern and/ or Locale
.
*
* @param value The value validation is being performed on.
* @param pattern The pattern used to validate the value against, or the
* default for the Locale
if null
.
* @param locale The locale to use for the date format, system default if null.
* @return The parsed BigDecimal
if valid or null
if invalid.
*/
public BigDecimal validate(String value, String pattern, Locale locale) {
return (BigDecimal)parse(value, pattern, locale);
}
/**
* Check if the value is within a specified range.
*
* @param value The Number
value to check.
* @param min The minimum value of the range.
* @param max The maximum value of the range.
* @return true
if the value is within the
* specified range.
*/
public boolean isInRange(BigDecimal value, double min, double max) {
return (value.doubleValue() >= min && value.doubleValue() <= max);
}
/**
* Check if the value is greater than or equal to a minimum.
*
* @param value The value validation is being performed on.
* @param min The minimum value.
* @return true
if the value is greater than
* or equal to the minimum.
*/
public boolean minValue(BigDecimal value, double min) {
return (value.doubleValue() >= min);
}
/**
* Check if the value is less than or equal to a maximum.
*
* @param value The value validation is being performed on.
* @param max The maximum value.
* @return true
if the value is less than
* or equal to the maximum.
*/
public boolean maxValue(BigDecimal value, double max) {
return (value.doubleValue() <= max);
}
/**
* Convert the parsed value to a BigDecimal
.
*
* @param value The parsed Number
object created.
* @param formatter The Format used to parse the value with.
* @return The parsed Number
converted to a
* BigDecimal
.
*/
protected Object processParsedValue(Object value, Format formatter) {
BigDecimal decimal = null;
if (value instanceof Long) {
decimal = BigDecimal.valueOf(((Long)value).longValue());
} else {
decimal = new BigDecimal(value.toString());
}
int scale = determineScale((NumberFormat)formatter);
if (scale >= 0) {
decimal = decimal.setScale(scale, BigDecimal.ROUND_DOWN);
}
return decimal;
}
}