1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 package org.springmodules.validation.bean.conf.loader.xml.handler;
18
19 import org.springframework.util.StringUtils;
20 import org.springmodules.validation.bean.conf.ValidationConfigurationException;
21 import org.springmodules.validation.bean.rule.AbstractValidationRule;
22 import org.springmodules.validation.bean.rule.ExpressionValidationRule;
23 import org.w3c.dom.Element;
24
25
26
27
28
29
30
31 public class ExpressionPropertyValidationElementHandler extends AbstractPropertyValidationElementHandler {
32
33 private static final String ELEMENT_NAME = "expression";
34
35 private static final String CONDITION_ATTR = "condition";
36
37 private static final String SCOPE_ATTR = "scope";
38
39 private static final String PROPERTY_SCOPE_VALUE = "property";
40
41 private static final String GLOBAL_SCOPE_VALUE = "global";
42
43
44
45
46 public ExpressionPropertyValidationElementHandler(String namespaceUri) {
47 super(ELEMENT_NAME, namespaceUri);
48 }
49
50 protected AbstractValidationRule createValidationRule(Element element) {
51 String expression = element.getAttribute(CONDITION_ATTR);
52 if (!StringUtils.hasText(expression)) {
53 throw new ValidationConfigurationException("Element '" + ELEMENT_NAME + "' must have a '" + CONDITION_ATTR + "' attribute");
54 }
55 return new ExpressionValidationRule(getConditionExpressionParser(), expression);
56 }
57
58 public boolean isConditionGloballyScoped(Element element) {
59 if (!element.hasAttribute(SCOPE_ATTR)) {
60 return true;
61 }
62 String value = element.getAttribute(SCOPE_ATTR);
63 if (GLOBAL_SCOPE_VALUE.equals(value)) {
64 return true;
65 }
66 if (PROPERTY_SCOPE_VALUE.equals(value)) {
67 return false;
68 }
69 throw new ValidationConfigurationException("Unknown value '" + value + "' for attribute '" + SCOPE_ATTR + "'");
70 }
71
72 }