package org.jboss.seam.example.quartz; import java.math.BigDecimal; import java.math.BigInteger; import org.hibernate.validator.Validator; public class DigitsValidator implements Validator<Digits> { int integerDigits; int fractionalDigits; public void initialize(Digits configuration) { integerDigits = configuration.integerDigits(); fractionalDigits = configuration.fractionalDigits(); } public boolean isValid(Object value) { if (value==null) { return true; } String stringValue = null; if (value instanceof String) { try { stringValue = stringValue(new BigDecimal((String) value)); } catch (NumberFormatException nfe) { return false; } } else if (value instanceof BigDecimal) { stringValue = stringValue((BigDecimal) value); } else if (value instanceof BigInteger) { stringValue = stringValue((BigInteger) value); } else { return false; } int pos = stringValue.indexOf("."); int left = (pos == -1) ? stringValue.length() : pos; int right = (pos==-1) ? 0 : stringValue.length() - pos -1; if (left==1 && stringValue.charAt(0) == '0') { left--; } if (left > integerDigits || right > fractionalDigits) { return false; } return true; } private String stringValue(BigDecimal number) { return number.abs().stripTrailingZeros().toPlainString(); } private String stringValue(BigInteger number) { return number.abs().toString(); } }