1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16 package org.apache.commons.jelly.tags.core;
17
18 import org.apache.commons.jelly.JellyTagException;
19 import org.apache.commons.jelly.TagSupport;
20 import org.apache.commons.jelly.XMLOutput;
21 import org.apache.commons.jelly.expression.Expression;
22
23 /*** A tag which conditionally evaluates its body based on some condition
24 *
25 * @author <a href="mailto:jstrachan@apache.org">James Strachan</a>
26 * @version $Revision: 155420 $
27 */
28 public class WhenTag extends TagSupport {
29
30 /*** The expression to evaluate. */
31 private Expression test;
32
33 public WhenTag() {
34 }
35
36
37
38 public void doTag(XMLOutput output) throws JellyTagException {
39 ChooseTag tag = (ChooseTag) findAncestorWithClass( ChooseTag.class );
40 if ( tag == null ) {
41 throw new JellyTagException( "This tag must be enclosed inside a <choose> tag" );
42 }
43 if ( ! tag.isBlockEvaluated() && test != null ) {
44 if ( test.evaluateAsBoolean( context ) ) {
45 tag.setBlockEvaluated(true);
46 invokeBody(output);
47 }
48 }
49 }
50
51
52
53
54 /*** Sets the expression to evaluate. */
55 public void setTest(Expression test) {
56 this.test = test;
57 }
58
59 }