1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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 }