package fr.openwide.core.wicket.more.markup.html.basic; import java.math.BigDecimal; import org.apache.wicket.validation.IValidatable; import org.apache.wicket.validation.ValidationError; import org.apache.wicket.validation.validator.RangeValidator; public class PercentageValidator extends RangeValidator<BigDecimal> { private static final long serialVersionUID = 715451828147101142L; private static final PercentageValidator DEFAULT_PERCENTAGE_AS_RATIO_VALIDATOR = new PercentageValidator( new BigDecimal("0"), new BigDecimal("1"), true); private static final PercentageValidator DEFAULT_PERCENTAGE_VALIDATOR = new PercentageValidator( new BigDecimal("0"), new BigDecimal("100"), true); private boolean decimal; public PercentageValidator(BigDecimal minimumValue, BigDecimal maximumValue, boolean decimal) { super(minimumValue, maximumValue); this.decimal = decimal; } @Override public void validate(IValidatable<BigDecimal> validatable) { BigDecimal percentage = validatable.getValue(); if (percentage != null) { final BigDecimal min = getMinimum(); final BigDecimal max = getMaximum(); if (!decimal && percentage.scale() != 0) { ValidationError error = new ValidationError(); error.addKey("common.validator.percentage.decimal.error"); validatable.error(error); } if (percentage.compareTo(min) < 0 || percentage.compareTo(max) > 0) { ValidationError error = new ValidationError(); error.getVariables().put("min", min); error.getVariables().put("max", max); error.addKey("common.validator.percentage.range.error"); validatable.error(error); } } } public static PercentageValidator getDefaultPercentageAsRatioValidator() { return DEFAULT_PERCENTAGE_AS_RATIO_VALIDATOR; } public static PercentageValidator getDefaultPercentageValidator() { return DEFAULT_PERCENTAGE_VALIDATOR; } }