View Javadoc

1   /**
2    *
3    * Copyright 2003-2004 The Apache Software Foundation
4    *
5    *  Licensed under the Apache License, Version 2.0 (the "License");
6    *  you may not use this file except in compliance with the License.
7    *  You may obtain a copy of the License at
8    *
9    *     http://www.apache.org/licenses/LICENSE-2.0
10   *
11   *  Unless required by applicable law or agreed to in writing, software
12   *  distributed under the License is distributed on an "AS IS" BASIS,
13   *  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14   *  See the License for the specific language governing permissions and
15   *  limitations under the License.
16   */
17  
18  //
19  // This source code implements specifications defined by the Java
20  // Community Process. In order to remain compliant with the specification
21  // DO NOT add / change / or delete method signatures!
22  //
23  
24  package javax.servlet.jsp.tagext;
25  
26  import java.util.Hashtable;
27  
28  /**
29   * The (translation-time only) attribute/value information for a tag instance.
30   *
31   * <p>
32   * TagData is only used as an argument to the isValid, validate, and 
33   * getVariableInfo methods of TagExtraInfo, which are invoked at 
34   * translation time.
35   */
36  
37  public class TagData implements Cloneable {
38  
39      /**
40       * Distinguished value for an attribute to indicate its value
41       * is a request-time expression (which is not yet available because
42       * TagData instances are used at translation-time).
43       */
44  
45      public static final Object REQUEST_TIME_VALUE = new Object();
46  
47  
48      /**
49       * Constructor for TagData.
50       *
51       * <p>
52       * A typical constructor may be
53       * <pre>
54       * static final Object[][] att = {{"connection", "conn0"}, {"id", "query0"}};
55       * static final TagData td = new TagData(att);
56       * </pre>
57       *
58       * All values must be Strings except for those holding the
59       * distinguished object REQUEST_TIME_VALUE.
60  
61       * @param atts the static attribute and values.  May be null.
62       */
63      public TagData(Object[] atts[]) {
64  	if (atts == null) {
65  	    attributes = new Hashtable();
66  	} else {
67  	    attributes = new Hashtable(atts.length);
68  	}
69  
70  	if (atts != null) {
71  	    for (int i = 0; i < atts.length; i++) {
72  		attributes.put(atts[i][0], atts[i][1]);
73  	    }
74  	}
75      }
76  
77      /**
78       * Constructor for a TagData.
79       *
80       * If you already have the attributes in a hashtable, use this
81       * constructor. 
82       *
83       * @param attrs A hashtable to get the values from.
84       */
85      public TagData(Hashtable attrs) {
86          this.attributes = attrs;
87      }
88  
89      /**
90       * The value of the tag's id attribute.
91       *
92       * @return the value of the tag's id attribute, or null if no such
93       *     attribute was specified.
94       */
95  
96      public String getId() {
97  	return getAttributeString(TagAttributeInfo.ID);
98      }
99  
100     /**
101      * The value of the attribute.
102      * If a static value is specified for an attribute that accepts a
103      * request-time attribute expression then that static value is returned,
104      * even if the value is provided in the body of a <jsp:attribute> action.
105      * The distinguished object REQUEST_TIME_VALUE is only returned if
106      * the value is specified as a request-time attribute expression
107      * or via the &lt;jsp:attribute&gt; action with a body that contains
108      * dynamic _content (scriptlets, scripting expressions, EL expressions, 
109      * standard actions, or custom actions).  Returns null if the attribute 
110      * is not set. 
111      *
112      * @param attName the name of the attribute
113      * @return the attribute's value
114      */
115 
116     public Object getAttribute(String attName) {
117 	return attributes.get(attName);
118     }
119 
120     /**
121      * Set the value of an attribute.
122      *
123      * @param attName the name of the attribute
124      * @param value the value.
125      */
126     public void setAttribute(String attName,
127 			     Object value) {
128 	attributes.put(attName, value);
129     }
130 
131     /**
132      * Get the value for a given attribute.
133      *
134      * @param attName the name of the attribute
135      * @return the attribute value string
136      * @throws ClassCastException if attribute value is not a String
137      */
138 
139     public String getAttributeString(String attName) {
140 	Object o = attributes.get(attName);
141 	if (o == null) {
142 	    return null;
143 	} else {
144 	    return (String) o;
145 	}	
146     }
147 
148     /**
149      * Enumerates the attributes.
150      *
151      *@return An enumeration of the attributes in a TagData
152      */
153     public java.util.Enumeration getAttributes() {
154         return attributes.keys();
155     };
156 
157     // private data
158 
159     private Hashtable attributes;	// the tagname/value map
160 }