PrecisionValidator

public class PrecisionValidator extends BaseValidator {
    
    private PrecisionValidator() {
        
    }
    
    public static final int ORACLE_NUMBER_PRECISION_RANGE_MIN = 1;
    public static final int ORACLE_NUMBER_PRECISION_RANGE_MAX = 38;
    public static final int ORACLE_NUMBER_SCALE_RANGE_MIN = -84;
    public static final int ORACLE_NUMBER_SCALE_RANGE_MAX = 127;
    
    
    /**
     * Validation Rule: A number can be stored in an oracle NUMBER column by specified precision and scale
     * @param precision          The total number of digits
     * @param scale              The number of digits to the right of the decimal point
     * @param inputText          Input string text
     * @return boolean           Return true when input string is valid number can be stored in an oracle NUMBER column 
     *                           by specified precision and scale, otherwise return false.                        
     */
    public static boolean validateNumberPrecision(int precision, int scale, String inputText) {
        boolean isValid = false;
        
        if (Util.isEmpty(inputText)) {
            isValid = true;
        }
        
        if (!Util.isEmpty(inputText) && NumericValidator.isNumeric(inputText)) {

            if (precision > PrecisionValidator.ORACLE_NUMBER_PRECISION_RANGE_MAX) {
                precision = PrecisionValidator.ORACLE_NUMBER_PRECISION_RANGE_MAX;
            }
            
            if (precision < PrecisionValidator.ORACLE_NUMBER_PRECISION_RANGE_MIN) {
                precision = PrecisionValidator.ORACLE_NUMBER_PRECISION_RANGE_MIN;
            }
            
            if (scale > PrecisionValidator.ORACLE_NUMBER_SCALE_RANGE_MAX) {
                scale = PrecisionValidator.ORACLE_NUMBER_SCALE_RANGE_MAX;
            }
            
            if (scale < PrecisionValidator.ORACLE_NUMBER_SCALE_RANGE_MIN) {
                scale = PrecisionValidator.ORACLE_NUMBER_SCALE_RANGE_MIN;
            }
            
            int lastDecimalIndex = inputText.lastIndexOf('.');
            int currentPrecision = 0;
            int currentScale = 0;
            boolean isValidPrecision = false;
            boolean isValidScale = false;
            
            if (lastDecimalIndex > 0) {
                currentPrecision = lastDecimalIndex;
                currentScale = inputText.length() - lastDecimalIndex - 1;
            } else {
                currentPrecision = inputText.length();
                currentScale = 0;
            }
            
            if (currentPrecision <= precision) {
                isValidPrecision = true;
            }
            
            if (scale >= 0 && currentScale <= scale) {
                isValidScale = true;
            }
            
            if (scale < 0) {
                isValidScale = true;
            }
            
            if (isValidPrecision && isValidScale) {
                isValid = true;
            }
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number can be stored in an oracle NUMBER column by specified precision and scale
     * @param precision          The total number of digits
     * @param scale              The number of digits to the right of the decimal point
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param fieldErrorMessage  Field error message
     * @return boolean           Return true when input string is valid number can be stored in an oracle NUMBER column 
     *                           by specified precision and scale, otherwise return false.                        
     */
    public static boolean validateNumberPrecision(int precision, int scale, String inputText, String fieldErrorParam, String fieldErrorMessage) {
        boolean isValid = PrecisionValidator.validateNumberPrecision(precision, scale, inputText);
        
        if (!isValid) {
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number can be stored in an oracle NUMBER column by specified precision and scale
     * @param precision          The total number of digits
     * @param scale              The number of digits to the right of the decimal point
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param bundle             Language property file id
     * @param key                Message key
     * @param defaultMessage     Default message
     * @param arguments          The arguments of message
     * @return boolean           Return true when input string is valid number can be stored in an oracle NUMBER column 
     *                           by specified precision and scale, otherwise return false.                        
     */
    public static boolean validateNumberPrecision(int precision, int scale, String inputText, String fieldErrorParam, 
            String bundle, String key, String defaultMessage, String[] arguments) {
        boolean isValid = PrecisionValidator.validateNumberPrecision(precision, scale, inputText);
        
        if (!isValid) {
            String fieldErrorMessage = MessageUtil.getText(bundle, key, defaultMessage, arguments);
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    
    /**
     * Validation Rule: A number is integer and the value is between -2147483648 and 2147483647
     * @param inputText          Input string text
     * @return boolean           Return true when input string is an integer and the value is between -2147483648 and 2147483647,
     *                           otherwise return false.                        
     */
    public static boolean validateIntegerPrecision(String inputText) {
        boolean isValid = false;
        
        if (Util.isEmpty(inputText)) {
            isValid = true;
        }
        
        if (!Util.isEmpty(inputText) && IntegerValidator.isInteger(inputText)) {
            try {
                Integer.parseInt(inputText);
                isValid = true;
            } catch (Exception e) {
                isValid = false;
            }
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is integer and the value is between -2147483648 and 2147483647
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param fieldErrorMessage  Field error message
     * @return boolean           Return true when input string is an integer and the value is between -2147483648 and 2147483647,
     *                           otherwise return false.                        
     */
    public static boolean validateIntegerPrecision(String inputText, String fieldErrorParam, String fieldErrorMessage) {
        boolean isValid = PrecisionValidator.validateIntegerPrecision(inputText);
        
        if (!isValid) {
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is integer and the value is between -2147483648 and 2147483647
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param bundle             Language property file id
     * @param key                Message key
     * @param defaultMessage     Default message
     * @param arguments          The arguments of message
     * @return boolean           Return true when input string is an integer and the value is between -2147483648 and 2147483647,
     *                           otherwise return false.                        
     */
    public static boolean validateIntegerPrecision(String inputText, String fieldErrorParam, 
            String bundle, String key, String defaultMessage, String[] arguments) {
        boolean isValid = PrecisionValidator.validateIntegerPrecision(inputText);
        
        if (!isValid) {
            String fieldErrorMessage = MessageUtil.getText(bundle, key, defaultMessage, arguments);
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    
    /**
     * Validation Rule: A number is type long and the value is between -9223372036854775808L and 9223372036854775807L
     * @param inputText          Input string text
     * @return boolean           Return true when input string is type long number and the value is between -9223372036854775808L and 9223372036854775807L,
     *                           otherwise return false.                        
     */
    public static boolean validateLongPrecision(String inputText) {
        boolean isValid = false;
        
        if (Util.isEmpty(inputText)) {
            isValid = true;
        }
        
        if (!Util.isEmpty(inputText) && IntegerValidator.isInteger(inputText)) {
            try {
                Long.parseLong(inputText);
                isValid = true;
            } catch (Exception e) {
                isValid = false;
            }
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is type long and the value is between -9223372036854775808L and 9223372036854775807L
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param fieldErrorMessage  Field error message
     * @return boolean           Return true when input string is type long number and the value is between -9223372036854775808L and 9223372036854775807L,
     *                           otherwise return false.                        
     */
    public static boolean validateLongPrecision(String inputText, String fieldErrorParam, String fieldErrorMessage) {
        boolean isValid = PrecisionValidator.validateLongPrecision(inputText);
        
        if (!isValid) {
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is type long and the value is between -9223372036854775808L and 9223372036854775807L
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param bundle             Language property file id
     * @param key                Message key
     * @param defaultMessage     Default message
     * @param arguments          The arguments of message
     * @return boolean           Return true when input string is type long number and the value is between -9223372036854775808L and 9223372036854775807L,
     *                           otherwise return false.                        
     */
    public static boolean validateLongPrecision(String inputText, String fieldErrorParam, 
            String bundle, String key, String defaultMessage, String[] arguments) {
        boolean isValid = PrecisionValidator.validateLongPrecision(inputText);
        
        if (!isValid) {
            String fieldErrorMessage = MessageUtil.getText(bundle, key, defaultMessage, arguments);
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    
    /**
     * Validation Rule: A number is type float and the value is between 1.401298464324817E-45f and 3.4028234663852886E38f
     * @param inputText          Input string text
     * @return boolean           Return true when input string is type float number and the value is between 1.401298464324817E-45f and 3.4028234663852886E38f,
     *                           otherwise return false.                        
     */
    public static boolean validateFloatPrecision(String inputText) {
        boolean isValid = false;
        
        if (Util.isEmpty(inputText)) {
            isValid = true;
        }
        
        if (!Util.isEmpty(inputText) && NumericValidator.isNumeric(inputText)) {
            try {
                Float.parseFloat(inputText);
                isValid = true;
            } catch (Exception e) {
                isValid = false;
            }
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is type float and the value is between 1.401298464324817E-45f and 3.4028234663852886E38f
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param fieldErrorMessage  Field error message
     * @return boolean           Return true when input string is type float number and the value is between 1.401298464324817E-45f and 3.4028234663852886E38f,
     *                           otherwise return false.                        
     */
    public static boolean validateFloatPrecision(String inputText, String fieldErrorParam, String fieldErrorMessage) {
        boolean isValid = PrecisionValidator.validateFloatPrecision(inputText);
        
        if (!isValid) {
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is type float and the value is between 1.401298464324817E-45f and 3.4028234663852886E38f
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param bundle             Language property file id
     * @param key                Message key
     * @param defaultMessage     Default message
     * @param arguments          The arguments of message
     * @return boolean           Return true when input string is type float number and the value is between 1.401298464324817E-45f and 3.4028234663852886E38f,
     *                           otherwise return false.                        
     */
    public static boolean validateFloatPrecision(String inputText, String fieldErrorParam, 
            String bundle, String key, String defaultMessage, String[] arguments) {
        boolean isValid = PrecisionValidator.validateFloatPrecision(inputText);
        
        if (!isValid) {
            String fieldErrorMessage = MessageUtil.getText(bundle, key, defaultMessage, arguments);
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    
    /**
     * Validation Rule: A number is type double and the value is between 4.9E-324 and 1.7976931348623157E308
     * @param inputText          Input string text
     * @return boolean           Return true when input string is type double number and the value is between 4.9E-324 and 1.7976931348623157E308,
     *                           otherwise return false.                        
     */
    public static boolean validateDoublePrecision(String inputText) {
        boolean isValid = false;
        
        if (Util.isEmpty(inputText)) {
            isValid = true;
        }
        
        if (!Util.isEmpty(inputText) && NumericValidator.isNumeric(inputText)) {
            try {
                Double.parseDouble(inputText);
                isValid = true;
            } catch (Exception e) {
                isValid = false;
            }
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is type double and the value is between 4.9E-324 and 1.7976931348623157E308
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param fieldErrorMessage  Field error message
     * @return boolean           Return true when input string is type double number and the value is between 4.9E-324 and 1.7976931348623157E308,
     *                           otherwise return false.                        
     */
    public static boolean validateDoublePrecision(String inputText, String fieldErrorParam, String fieldErrorMessage) {
        boolean isValid = PrecisionValidator.validateDoublePrecision(inputText);
        
        if (!isValid) {
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }
    
    /**
     * Validation Rule: A number is type double and the value is between 4.9E-324 and 1.7976931348623157E308
     * @param inputText          Input string text
     * @param fieldErrorParam    Field error tag parameter
     * @param bundle             Language property file id
     * @param key                Message key
     * @param defaultMessage     Default message
     * @param arguments          The arguments of message
     * @return boolean           Return true when input string is type double number and the value is between 4.9E-324 and 1.7976931348623157E308,
     *                           otherwise return false.                        
     */
    public static boolean validateDoublePrecision(String inputText, String fieldErrorParam, 
            String bundle, String key, String defaultMessage, String[] arguments) {
        boolean isValid = PrecisionValidator.validateDoublePrecision(inputText);
        
        if (!isValid) {
            String fieldErrorMessage = MessageUtil.getText(bundle, key, defaultMessage, arguments);
            addFieldErrorMessage(fieldErrorParam, fieldErrorMessage);
        }
        
        return isValid;
    }

}

 

你可能感兴趣的:(PrecisionValidator)