1. /*
  2. * $Id: AttributesExImpl.java,v 1.1 2001/01/20 01:07:22 edwingo Exp $
  3. *
  4. * The Apache Software License, Version 1.1
  5. *
  6. *
  7. * Copyright (c) 2000 The Apache Software Foundation. All rights
  8. * reserved.
  9. *
  10. * Redistribution and use in source and binary forms, with or without
  11. * modification, are permitted provided that the following conditions
  12. * are met:
  13. *
  14. * 1. Redistributions of source code must retain the above copyright
  15. * notice, this list of conditions and the following disclaimer.
  16. *
  17. * 2. Redistributions in binary form must reproduce the above copyright
  18. * notice, this list of conditions and the following disclaimer in
  19. * the documentation and/or other materials provided with the
  20. * distribution.
  21. *
  22. * 3. The end-user documentation included with the redistribution,
  23. * if any, must include the following acknowledgment:
  24. * "This product includes software developed by the
  25. * Apache Software Foundation (http://www.apache.org/)."
  26. * Alternately, this acknowledgment may appear in the software itself,
  27. * if and wherever such third-party acknowledgments normally appear.
  28. *
  29. * 4. The names "Crimson" and "Apache Software Foundation" must
  30. * not be used to endorse or promote products derived from this
  31. * software without prior written permission. For written
  32. * permission, please contact apache@apache.org.
  33. *
  34. * 5. Products derived from this software may not be called "Apache",
  35. * nor may "Apache" appear in their name, without prior written
  36. * permission of the Apache Software Foundation.
  37. *
  38. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  39. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  40. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  41. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  42. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  43. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  44. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  45. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  46. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  47. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  48. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  49. * SUCH DAMAGE.
  50. * ====================================================================
  51. *
  52. * This software consists of voluntary contributions made by many
  53. * individuals on behalf of the Apache Software Foundation and was
  54. * originally based on software copyright (c) 1999, Sun Microsystems, Inc.,
  55. * http://www.sun.com. For more information on the Apache Software
  56. * Foundation, please see <http://www.apache.org/>.
  57. */
  58. package org.apache.crimson.parser;
  59. import java.util.Vector;
  60. import org.xml.sax.helpers.AttributesImpl;
  61. /**
  62. * Implementation of the AttributesEx interface which provides additional
  63. * features to support editor-oriented DOM features: exposing attribute
  64. * defaulting. Derived from old AttributeListImpl.java code.
  65. */
  66. final
  67. class AttributesExImpl extends AttributesImpl implements AttributesEx
  68. {
  69. // Boolean.TRUE indicates value was specified
  70. private Vector specified = new Vector ();
  71. // non-null value defines default
  72. private Vector defaults = new Vector ();
  73. // ID attribute name, as declared
  74. private String idAttributeName;
  75. AttributesExImpl()
  76. {
  77. super();
  78. }
  79. /**
  80. * Clears the attribute list so it has no members
  81. */
  82. public void clear()
  83. {
  84. super.clear();
  85. specified.removeAllElements();
  86. defaults.removeAllElements();
  87. idAttributeName = null;
  88. }
  89. /**
  90. * Add an attribute to this list
  91. */
  92. public void addAttribute(String uri, String localName, String qName,
  93. String type, String value, String defaultValue,
  94. boolean isSpecified)
  95. {
  96. super.addAttribute(uri, localName, qName, type, value);
  97. defaults.addElement(defaultValue);
  98. specified.addElement(isSpecified ? Boolean.TRUE : null);
  99. }
  100. /**
  101. * Returns true if the value was specified by a parsed document
  102. * (by position; no by-name variant).
  103. */
  104. public boolean isSpecified(int i) {
  105. Object value = specified.elementAt(i);
  106. return value == Boolean.TRUE;
  107. }
  108. /**
  109. * Return the default value of an attribute in this list (by position).
  110. */
  111. public String getDefault(int i) {
  112. try {
  113. if (i < 0)
  114. return null;
  115. return (String) defaults.elementAt(i);
  116. } catch (IndexOutOfBoundsException e) {
  117. return null;
  118. }
  119. }
  120. /**
  121. * Returns the name of the ID attribute.
  122. */
  123. public String getIdAttributeName() {
  124. return idAttributeName;
  125. }
  126. /**
  127. * Allows parser to set the name of the ID attribute.
  128. */
  129. void setIdAttributeName(String name) {
  130. idAttributeName = name;
  131. }
  132. }