View Javadoc

1   /*
2    * Copyright 2002,2004 The Apache Software Foundation.
3    *
4    * Licensed under the Apache License, Version 2.0 (the "License");
5    * you may not use this file except in compliance with the License.
6    * You may obtain a copy of the License at
7    *
8    *      http://www.apache.org/licenses/LICENSE-2.0
9    *
10   * Unless required by applicable law or agreed to in writing, software
11   * distributed under the License is distributed on an "AS IS" BASIS,
12   * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13   * See the License for the specific language governing permissions and
14   * limitations under the License.
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      // Tag interface
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      // Properties
58      //-------------------------------------------------------------------------
59  
60      /*** Sets the XPath expression to evaluate. */
61      public void setSelect(XPath select) {
62          this.select = select;
63      }
64  
65      // Implementation methods
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  }