1 package org.springmodules.validation.bean.rule;
2
3 import java.lang.reflect.InvocationTargetException;
4 import java.lang.reflect.Method;
5
6 import org.springmodules.validation.util.condition.AbstractCondition;
7 import org.springmodules.validation.util.condition.Condition;
8 import org.springmodules.validation.util.condition.ConditionException;
9
10 /**
11 * @author Uri Boness
12 */
13 public class ValidationMethodValidationRule extends AbstractValidationRule {
14
15 private MethodCondition condition;
16
17 public ValidationMethodValidationRule(Method method) {
18 super(method.getName() + "()");
19 condition = new MethodCondition(method);
20 }
21
22 public Condition getCondition() {
23 return condition;
24 }
25
26
27 private class MethodCondition extends AbstractCondition {
28
29 private Method method;
30
31 public MethodCondition(Method method) {
32 this.method = method;
33 }
34
35 public boolean doCheck(Object object) {
36 try {
37 boolean originalAccessiblity = method.isAccessible();
38 method.setAccessible(true);
39 Boolean valid = (Boolean) method.invoke(object, new Object[0]);
40 method.setAccessible(originalAccessiblity);
41 return valid.booleanValue();
42 } catch (IllegalAccessException iae) {
43 throw new ConditionException("Could not validate object using validation method '" +
44 method.getName() + "'", iae);
45 } catch (InvocationTargetException ite) {
46 throw new ConditionException("Could not validate object using validation method '" +
47 method.getName() + "'", ite);
48 }
49 }
50 }
51
52 }