1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.jelly.tags.xml;
17
18 import org.apache.commons.jelly.JellyTagException;
19 import org.apache.commons.jelly.MissingAttributeException;
20 import org.apache.commons.jelly.XMLOutput;
21 import org.apache.commons.jelly.xpath.XPathTagSupport;
22 import org.jaxen.JaxenException;
23 import org.jaxen.XPath;
24
25 /***
26 * Evaluates the XPath expression to be a boolean and only evaluates the body
27 * if the expression is true.
28 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
29 * @version $Revision: 155420 $
30 */
31 public class IfTag extends XPathTagSupport {
32
33 /*** The XPath expression to evaluate. */
34 private XPath select;
35
36 public IfTag() {
37 }
38
39
40
41 public void doTag(XMLOutput output) throws MissingAttributeException, JellyTagException {
42 if (select == null) {
43 throw new MissingAttributeException( "select" );
44 }
45
46 Object xpathContext = getXPathContext();
47
48 try {
49 if ( select.booleanValueOf(xpathContext) ) {
50 invokeBody(output);
51 }
52 } catch (JaxenException e) {
53 throw new JellyTagException(e);
54 }
55 }
56
57
58
59
60 /*** Sets the XPath expression to evaluate. */
61 public void setSelect(XPath select) {
62 this.select = select;
63 }
64
65
66
67 protected Object getXPathContext() {
68 ForEachTag tag = (ForEachTag) findAncestorWithClass( ForEachTag.class );
69 if ( tag != null ) {
70 return tag.getXPathContext();
71 }
72 return null;
73 }
74
75 }