View Javadoc

1   /*
2       Jameleon - An automation testing tool..
3       Copyright (C) 2003-2006 Christian W. Hargraves (engrean@hotmail.com)
4       
5       This library is free software; you can redistribute it and/or
6       modify it under the terms of the GNU Lesser General Public
7       License as published by the Free Software Foundation; either
8       version 2.1 of the License, or (at your option) any later version.
9   
10      This library is distributed in the hope that it will be useful,
11      but WITHOUT ANY WARRANTY; without even the implied warranty of
12      MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
13      Lesser General Public License for more details.
14  
15      You should have received a copy of the GNU Lesser General Public
16      License along with this library; if not, write to the Free Software
17      Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
18  */
19  package net.sf.jameleon;
20  
21  import net.sf.jameleon.util.JameleonUtility;
22  
23  import org.apache.commons.jelly.JellyTagException;
24  import org.apache.commons.jelly.MissingAttributeException;
25  import org.apache.commons.jelly.TagSupport;
26  import org.apache.commons.jelly.XMLOutput;
27  
28  /***
29   * Abstract class that represents children of a ParamTag.
30   */
31  public abstract class AbstractParamElementTag extends TagSupport {
32      
33      protected String text = null;
34      protected ParamTag parentTag = null;
35      protected boolean decodeXMLToText;
36      protected String fromVariable = null;
37  
38      /***
39       * An implementation of the <code>doTag</code> method provided by the <code>TagSupport</code> class.
40       * Maps the value in the <code>fromVariable</code> over to the original variable name, <code>toVariable</code>.
41       */
42      public void doTag(XMLOutput out) throws MissingAttributeException, JellyTagException{
43          validate();
44          if (fromVariable != null) {
45              text = (String) context.getVariable(fromVariable);
46          }else{
47              text = (String)getBodyText();
48          }
49          if (decodeXMLToText) {
50              text = JameleonUtility.decodeXMLToText(text);
51          }
52          parentTag = (ParamTag)findAncestorWithClass(ParamTag.class);
53      }
54  
55      /***
56       * Used to validate everything is set up correctly.
57       * @throws MissingAttributeException - When a required attribute isn't set.
58       * @throws JellyTagException - When this tag is used out of context.
59       */
60      protected void validate()throws MissingAttributeException, JellyTagException{
61          validateParentTag();
62          validateParam();
63      }
64  
65      protected void validateParentTag() throws JellyTagException{
66          Object obj = findAncestorWithClass(ParamTag.class);
67          if ( ! (obj instanceof ParamTag) ) {
68              throw new JellyTagException("This tag can only be imbedded in a param tag.");
69          }
70      }
71  
72      protected void validateParam() throws JellyTagException{
73          if (fromVariable != null && getBodyText() != null && getBodyText().length() > 0) {
74              throw new JellyTagException("This tag can not support both a fromValue and a body");
75          }
76      }
77  
78      public void setDecodeXMLToText(boolean decodeXMLToText){
79          this.decodeXMLToText = decodeXMLToText;
80      }    
81  
82      public void setFromVariable(String fromVariable){
83          this.fromVariable = fromVariable;
84      }
85  
86  }