package org.jboss.seam.wicket;
import java.util.Set;
import javax.validation.ConstraintViolation;
import org.apache.wicket.model.PropertyModel;
import org.apache.wicket.validation.IValidatable;
import org.apache.wicket.validation.IValidationError;
import org.apache.wicket.validation.IValidator;
import org.apache.wicket.validation.ValidationError;
import org.jboss.seam.core.ClassValidator;
import org.jboss.seam.core.Validators;
/**
*
* Allows Hibernate Model Validation to be used in Wicket
*
* @author Pete Muir
*
*/
public class ModelValidator implements IValidator
{
private Class clazz;
private String property;
/**
* Create a ModelValidator which will validate the specified property
*/
public ModelValidator(Class clazz, String property)
{
this.clazz = clazz;
this.property = property;
}
/**
* Create a model validator that will validate the property specified by the
* PropertyModel
*/
public ModelValidator(PropertyModel propertyModel)
{
this(propertyModel.getTarget().getClass(), propertyModel.getPropertyExpression());
}
/**
* Do the validation, normally called by Wicket
*/
public void validate(IValidatable validatable)
{
ClassValidator classValidator = Validators.instance().getValidator(clazz);
Set<ConstraintViolation<Object>> invalidValues = classValidator.getPotentialInvalidValues(property, validatable.getValue());
if (invalidValues.size() > 0)
{
String message = invalidValues.iterator().next().getMessage();
IValidationError validationError = new ValidationError().setMessage(message);
validatable.error(validationError);
}
}
}