package org.springmodules.validation.bean.rule; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; import org.springmodules.validation.util.condition.AbstractCondition; import org.springmodules.validation.util.condition.Condition; import org.springmodules.validation.util.condition.ConditionException; /** * @author Uri Boness */ public class ValidationMethodValidationRule extends AbstractValidationRule { private MethodCondition condition; public ValidationMethodValidationRule(Method method) { super(method.getName() + "()"); condition = new MethodCondition(method); } public Condition getCondition() { return condition; } private class MethodCondition extends AbstractCondition { private Method method; public MethodCondition(Method method) { this.method = method; } public boolean doCheck(Object object) { try { boolean originalAccessiblity = method.isAccessible(); method.setAccessible(true); Boolean valid = (Boolean) method.invoke(object, new Object[0]); method.setAccessible(originalAccessiblity); return valid.booleanValue(); } catch (IllegalAccessException iae) { throw new ConditionException("Could not validate object using validation method '" + method.getName() + "'", iae); } catch (InvocationTargetException ite) { throw new ConditionException("Could not validate object using validation method '" + method.getName() + "'", ite); } } } }