package com.thaiopensource.datatype.xsd; import org.relaxng.datatype.DatatypeException; import java.math.BigDecimal; class ScaleRestrictDatatype extends ValueRestrictDatatype { private final int scale; ScaleRestrictDatatype(DatatypeBase base, int scale) { super(base); this.scale = scale; } void checkRestriction(Object obj) throws DatatypeException { int actualScale = ((BigDecimal)obj).scale(); if (actualScale > scale) { String message; switch (scale) { case 0: message = localizer().message("scale_0_violation"); break; case 1: message = localizer().message("scale_1_violation", actualScale); break; default: message = localizer().message("scale_violation", scale, actualScale); break; } throw new DatatypeException(message); } } }