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; } }