/** * Check if the value is within a specified range. * * @param value The value validation is being performed on. * @param min The minimum value of the range. * @param max The maximum value of the range. * @return <code>true</code> if the value is within the * specified range. */ public boolean isInRange(Number value, Number min, Number max) { return (minValue(value, min) && maxValue(value, max)); }
/** * <p>Parse the value using the specified pattern.</p> * * @param value The value validation is being performed on. * @param pattern The pattern used to validate the value against, or the * default for the <code>Locale</code> if <code>null</code>. * @param locale The locale to use for the date format, system default if null. * @return The parsed value if valid or <code>null</code> if invalid. */ protected Object parse(String value, String pattern, Locale locale) { value = (value == null ? null : value.trim()); if (value == null || value.length() == 0) { return null; } Format formatter = getFormat(pattern, locale); return parse(value, formatter); }
/** * <p>Returns a <code>NumberFormat</code> for the specified <i>pattern</i> * and/or <code>Locale</code>.</p> * * @param pattern The pattern used to validate the value against or * <code>null</code> to use the default for the <code>Locale</code>. * @param locale The locale to use for the currency format, system default if null. * @return The <code>NumberFormat</code> to created. */ @Override protected Format getFormat(String pattern, Locale locale) { NumberFormat formatter = null; boolean usePattern = (pattern != null && pattern.length() > 0); if (!usePattern) { formatter = (NumberFormat)getFormat(locale); } else if (locale == null) { formatter = new DecimalFormat(pattern); } else { DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale); formatter = new DecimalFormat(pattern, symbols); } if (determineScale(formatter) == 0) { formatter.setParseIntegerOnly(true); } return formatter; }
/** * Test Range/Min/Max */ public void testRangeMinMax() { Number number9 = new Integer(9); Number number10 = new Integer(10); Number number11 = new Integer(11); Number number19 = new Integer(19); Number number20 = new Integer(20); Number number21 = new Integer(21); // Test isInRange() assertFalse("isInRange() < min", strictValidator.isInRange(number9 , number10, number20)); assertTrue("isInRange() = min", strictValidator.isInRange(number10 , number10, number20)); assertTrue("isInRange() in range", strictValidator.isInRange(number11 , number10, number20)); assertTrue("isInRange() = max", strictValidator.isInRange(number20 , number10, number20)); assertFalse("isInRange() > max", strictValidator.isInRange(number21 , number10, number20)); // Test minValue() assertFalse("minValue() < min", strictValidator.minValue(number9 , number10)); assertTrue("minValue() = min", strictValidator.minValue(number10 , number10)); assertTrue("minValue() > min", strictValidator.minValue(number11 , number10)); // Test minValue() assertTrue("maxValue() < max", strictValidator.maxValue(number19 , number20)); assertTrue("maxValue() = max", strictValidator.maxValue(number20 , number20)); assertFalse("maxValue() > max", strictValidator.maxValue(number21 , number20)); }
if (!isStrict()) { return -1; if (!isAllowFractions() || format.isParseIntegerOnly()) { return 0;
/** * Test Invalid, strict=false */ public void testInvalidNotStrict() { for (int i = 0; i < invalid.length; i++) { String text = "idx=["+i+"] value=[" + invalid[i] + "]"; assertNull("(A) " + text, validator.parse(invalid[i], null, Locale.US)); assertFalse("(B) " + text, validator.isValid(invalid[i], null, Locale.US)); assertNull("(C) " + text, validator.parse(invalid[i], testPattern, null)); assertFalse("(D) " + text, validator.isValid(invalid[i], testPattern, null)); } }
/** * <p>Validate using the specified <code>Locale</code>.</p> * * @param value The value validation is being performed on. * @param pattern The pattern used to validate the value against, or the * default for the <code>Locale</code> if <code>null</code>. * @param locale The locale to use for the date format, system default if null. * @return <code>true</code> if the value is valid. */ @Override public boolean isValid(String value, String pattern, Locale locale) { Object parsedValue = parse(value, pattern, locale); return (parsedValue == null ? false : true); }
/** * 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 <code>true</code> if the value is less than * or equal to the maximum. */ public boolean maxValue(Number value, Number max) { if (isAllowFractions()) { return (value.doubleValue() <= max.doubleValue()); } return (value.longValue() <= max.longValue()); }
if (!isStrict()) { return -1; if (!isAllowFractions() || format.isParseIntegerOnly()) { return 0;
/** * Test Valid, strict=false */ public void testValidNotStrict() { for (int i = 0; i < valid.length; i++) { String text = "idx=["+i+"] value=[" + validCompare[i] + "]"; assertEquals("(A) " + text, validCompare[i], validator.parse(valid[i], null, Locale.US)); assertTrue("(B) " + text, validator.isValid(valid[i], null, Locale.US)); assertEquals("(C) " + text, validCompare[i], validator.parse(valid[i], testPattern, null)); assertTrue("(D) " + text, validator.isValid(valid[i], testPattern, null)); } }
/** * Test Min/Max values allowed */ public void testValidateMinMax() { DecimalFormat fmt = new DecimalFormat("#"); if (max != null) { assertEquals("Test Max", max, validator.parse(fmt.format(max), "#", null)); assertNull("Test Max + 1", validator.parse(fmt.format(maxPlusOne), "#", null)); assertEquals("Test Min", min, validator.parse(fmt.format(min), "#", null)); assertNull("Test min - 1", validator.parse(fmt.format(minMinusOne), "#", null)); } }
/** * 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 <code>true</code> if the value is greater than * or equal to the minimum. */ public boolean minValue(Number value, Number min) { if (isAllowFractions()) { return (value.doubleValue() >= min.doubleValue()); } return (value.longValue() >= min.longValue()); }
/** * Check if the value is within a specified range. * * @param value The value validation is being performed on. * @param min The minimum value of the range. * @param max The maximum value of the range. * @return <code>true</code> if the value is within the * specified range. */ public boolean isInRange(Number value, Number min, Number max) { return (minValue(value, min) && maxValue(value, max)); }
/** * <p>Parse the value using the specified pattern.</p> * * @param value The value validation is being performed on. * @param pattern The pattern used to validate the value against, or the * default for the <code>Locale</code> if <code>null</code>. * @param locale The locale to use for the date format, system default if null. * @return The parsed value if valid or <code>null</code> if invalid. */ protected Object parse(String value, String pattern, Locale locale) { value = (value == null ? null : value.trim()); if (value == null || value.length() == 0) { return null; } Format formatter = getFormat(pattern, locale); return parse(value, formatter); }
/** * <p>Returns a <code>NumberFormat</code> for the specified <i>pattern</i> * and/or <code>Locale</code>.</p> * * @param pattern The pattern used to validate the value against or * <code>null</code> to use the default for the <code>Locale</code>. * @param locale The locale to use for the currency format, system default if null. * @return The <code>NumberFormat</code> to created. */ protected Format getFormat(String pattern, Locale locale) { NumberFormat formatter = null; boolean usePattern = (pattern != null && pattern.length() > 0); if (!usePattern) { formatter = (NumberFormat)getFormat(locale); } else if (locale == null) { formatter = new DecimalFormat(pattern); } else { DecimalFormatSymbols symbols = new DecimalFormatSymbols(locale); formatter = new DecimalFormat(pattern, symbols); } if (determineScale(formatter) == 0) { formatter.setParseIntegerOnly(true); } return formatter; }
if (!isStrict()) { return -1; if (!isAllowFractions() || format.isParseIntegerOnly()) { return 0;
/** * Test Invalid, strict=true */ public void testInvalidStrict() { for (int i = 0; i < invalidStrict.length; i++) { String text = "idx=["+i+"] value=[" + invalidStrict[i] + "]"; assertNull("(A) " + text, strictValidator.parse(invalidStrict[i], null, Locale.US)); assertFalse("(B) " + text, strictValidator.isValid(invalidStrict[i], null, Locale.US)); assertNull("(C) " + text, strictValidator.parse(invalidStrict[i], testPattern, null)); assertFalse("(D) " + text, strictValidator.isValid(invalidStrict[i], testPattern, null)); } }
/** * Test different Locale */ public void testValidateLocale() { assertEquals("US Locale, US Format", testNumber, strictValidator.parse(testStringUS, null, Locale.US)); assertNull("US Locale, DE Format", strictValidator.parse(testStringDE, null, Locale.US)); // Default German Locale assertEquals("DE Locale, DE Format", testNumber, strictValidator.parse(testStringDE, null, Locale.GERMAN)); assertNull("DE Locale, US Format", strictValidator.parse(testStringUS, null, Locale.GERMAN)); // Default Locale has been set to Locale.US in setup() assertEquals("Default Locale, US Format", testNumber, strictValidator.parse(testStringUS, null, null)); assertNull("Default Locale, DE Format", strictValidator.parse(testStringDE, null, null)); }
/** * 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 <code>true</code> if the value is greater than * or equal to the minimum. */ public boolean minValue(Number value, Number min) { if (isAllowFractions()) { return (value.doubleValue() >= min.doubleValue()); } return (value.longValue() >= min.longValue()); }
/** * Check if the value is within a specified range. * * @param value The value validation is being performed on. * @param min The minimum value of the range. * @param max The maximum value of the range. * @return <code>true</code> if the value is within the * specified range. */ public boolean isInRange(Number value, Number min, Number max) { return (minValue(value, min) && maxValue(value, max)); }