1. /*
  2. * The Apache Software License, Version 1.1
  3. *
  4. * Copyright (c) 1999 The Apache Software Foundation. All rights
  5. * reserved.
  6. *
  7. * Redistribution and use in source and binary forms, with or without
  8. * modification, are permitted provided that the following conditions
  9. * are met:
  10. *
  11. * 1. Redistributions of source code must retain the above copyright
  12. * notice, this list of conditions and the following disclaimer.
  13. *
  14. * 2. Redistributions in binary form must reproduce the above copyright
  15. * notice, this list of conditions and the following disclaimer in
  16. * the documentation and/or other materials provided with the
  17. * distribution.
  18. *
  19. * 3. The end-user documentation included with the redistribution, if
  20. * any, must include the following acknowlegement:
  21. * "This product includes software developed by the
  22. * Apache Software Foundation (http://www.apache.org/)."
  23. * Alternately, this acknowlegement may appear in the software itself,
  24. * if and wherever such third-party acknowlegements normally appear.
  25. *
  26. * 4. The names "The Jakarta Project", "Tomcat", and "Apache Software
  27. * Foundation" must not be used to endorse or promote products derived
  28. * from this software without prior written permission. For written
  29. * permission, please contact apache@apache.org.
  30. *
  31. * 5. Products derived from this software may not be called "Apache"
  32. * nor may "Apache" appear in their names without prior written
  33. * permission of the Apache Group.
  34. *
  35. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  36. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  37. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  38. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  39. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  40. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  41. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  42. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  43. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  44. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  45. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  46. * SUCH DAMAGE.
  47. * ====================================================================
  48. *
  49. * This software consists of voluntary contributions made by many
  50. * individuals on behalf of the Apache Software Foundation. For more
  51. * information on the Apache Software Foundation, please see
  52. * <http://www.apache.org/>.
  53. *
  54. */
  55. package javax.servlet.jsp.tagext;
  56. import java.util.Hashtable;
  57. /**
  58. * The (translation-time only) attribute/value information for a tag instance.
  59. *
  60. * <p>
  61. * TagData is only used as an argument to the isValid and getVariableInfo
  62. * methods of TagExtraInfo, which are invoked at translation time.
  63. */
  64. public class TagData implements Cloneable {
  65. /**
  66. * Distinguished value for an attribute to indicate its value
  67. * is a request-time expression (which is not yet available because
  68. * TagData instances are used at translation-time).
  69. */
  70. public static final Object REQUEST_TIME_VALUE = new Object();
  71. /**
  72. * Constructor for TagData.
  73. *
  74. * <p>
  75. * A typical constructor may be
  76. * <pre>
  77. * static final Object[][] att = {{"connection", "conn0"}, {"id", "query0"}};
  78. * static final TagData td = new TagData(att);
  79. * </pre>
  80. *
  81. * All values must be Strings except for those holding the
  82. * distinguished object REQUEST_TIME_VALUE.
  83. * @param atts the static attribute and values. May be null.
  84. */
  85. public TagData(Object[] atts[]) {
  86. if (atts == null) {
  87. attributes = new Hashtable();
  88. } else {
  89. attributes = new Hashtable(atts.length);
  90. }
  91. if (atts != null) {
  92. for (int i = 0; i < atts.length; i++) {
  93. attributes.put(atts[i][0], atts[i][1]);
  94. }
  95. }
  96. }
  97. /**
  98. * Constructor for a TagData.
  99. *
  100. * If you already have the attributes in a hashtable, use this
  101. * constructor.
  102. *
  103. * @param attrs A hashtable to get the values from.
  104. */
  105. public TagData(Hashtable attrs) {
  106. this.attributes = attrs;
  107. }
  108. /**
  109. * The value of the id attribute, if available.
  110. *
  111. * @return the value of the id attribute or null
  112. */
  113. public String getId() {
  114. return getAttributeString(TagAttributeInfo.ID);
  115. }
  116. /**
  117. * The value of the attribute.
  118. * Returns the distinguished object REQUEST_TIME_VALUE if
  119. * the value is request time. Returns null if the attribute is not set.
  120. *
  121. * @return the attribute's value object
  122. */
  123. public Object getAttribute(String attName) {
  124. return attributes.get(attName);
  125. }
  126. /**
  127. * Set the value of an attribute.
  128. *
  129. * @param attName the name of the attribute
  130. * @param value the value.
  131. */
  132. public void setAttribute(String attName,
  133. Object value) {
  134. attributes.put(attName, value);
  135. }
  136. /**
  137. * Get the value for a given attribute.
  138. *
  139. * @return the attribute value string
  140. * @throw ClassCastException if attribute value is not a String
  141. */
  142. public String getAttributeString(String attName) {
  143. Object o = attributes.get(attName);
  144. if (o == null) {
  145. return null;
  146. } else {
  147. return (String) o;
  148. }
  149. }
  150. /**
  151. * Enumerates the attributes.
  152. *
  153. *@return An enumeration of the attributes in a TagData
  154. */
  155. public java.util.Enumeration getAttributes() {
  156. return attributes.keys();
  157. };
  158. // private data
  159. private Hashtable attributes; // the tagname/value map
  160. }