package org.javalite.activejdbc.validation.length; import org.javalite.activejdbc.Model; import org.javalite.activejdbc.validation.ValidatorAdapter; import java.util.Locale; /** * Attribute length validator. */ public class AttributeLengthValidator extends ValidatorAdapter { private final String attribute; private LengthOption lengthOption; private boolean allowBlank; private AttributeLengthValidator(String attribute) { this.attribute = attribute; } public static AttributeLengthValidator on(String attribute) { return new AttributeLengthValidator(attribute); } public void validate(Model m) { Object value = m.get(this.attribute); if(allowBlank && (null == value || "".equals(value))) { return; } if(null == value) { m.addValidator(this, this.attribute); return; } if(!(value instanceof String)) { throw new IllegalArgumentException("Attribute must be a String"); } else { if(!this.lengthOption.validate((String)((String)m.get(this.attribute)))) { //somewhat confusingly this adds an error for a validator. m.addValidator(this, this.attribute); } } } public AttributeLengthValidator with(LengthOption lengthOption) { this.lengthOption = lengthOption; this.setMessage(lengthOption.getParametrizedMessage()); return this; } public AttributeLengthValidator allowBlank(boolean allowBlank) { this.allowBlank = allowBlank; return this; } public String formatMessage(Locale locale, Object... params) { return super.formatMessage(locale, this.lengthOption.getMessageParameters()); } }