1. /*
  2. * The Apache Software License, Version 1.1
  3. *
  4. *
  5. * Copyright (c) 1999-2002 The Apache Software Foundation. All rights
  6. * reserved.
  7. *
  8. * Redistribution and use in source and binary forms, with or without
  9. * modification, are permitted provided that the following conditions
  10. * are met:
  11. *
  12. * 1. Redistributions of source code must retain the above copyright
  13. * notice, this list of conditions and the following disclaimer.
  14. *
  15. * 2. Redistributions in binary form must reproduce the above copyright
  16. * notice, this list of conditions and the following disclaimer in
  17. * the documentation and/or other materials provided with the
  18. * distribution.
  19. *
  20. * 3. The end-user documentation included with the redistribution,
  21. * if any, must include the following acknowledgment:
  22. * "This product includes software developed by the
  23. * Apache Software Foundation (http://www.apache.org/)."
  24. * Alternately, this acknowledgment may appear in the software itself,
  25. * if and wherever such third-party acknowledgments normally appear.
  26. *
  27. * 4. The names "Xerces" and "Apache Software Foundation" must
  28. * not be used to endorse or promote products derived from this
  29. * software without prior written permission. For written
  30. * permission, please contact apache@apache.org.
  31. *
  32. * 5. Products derived from this software may not be called "Apache",
  33. * nor may "Apache" appear in their name, without prior written
  34. * permission of the Apache Software Foundation.
  35. *
  36. * THIS SOFTWARE IS PROVIDED ``AS IS'' AND ANY EXPRESSED OR IMPLIED
  37. * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES
  38. * OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE
  39. * DISCLAIMED. IN NO EVENT SHALL THE APACHE SOFTWARE FOUNDATION OR
  40. * ITS CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL,
  41. * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT
  42. * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF
  43. * USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND
  44. * ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY,
  45. * OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT
  46. * OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
  47. * SUCH DAMAGE.
  48. * ====================================================================
  49. *
  50. * This software consists of voluntary contributions made by many
  51. * individuals on behalf of the Apache Software Foundation and was
  52. * originally based on software copyright (c) 1999, International
  53. * Business Machines, Inc., http://www.apache.org. For more
  54. * information on the Apache Software Foundation, please see
  55. * <http://www.apache.org/>.
  56. */
  57. package com.sun.org.apache.xerces.internal.dom;
  58. import org.w3c.dom.DOMException;
  59. import org.w3c.dom.DOMImplementation;
  60. import org.w3c.dom.Document;
  61. import org.w3c.dom.DocumentType;
  62. import org.w3c.dom.Element;
  63. /**
  64. * The DOMImplementation class is description of a particular
  65. * implementation of the Document Object Model. As such its data is
  66. * static, shared by all instances of this implementation.
  67. * <P>
  68. * The DOM API requires that it be a real object rather than static
  69. * methods. However, there's nothing that says it can't be a singleton,
  70. * so that's how I've implemented it.
  71. *
  72. * @version $Id: PSVIDOMImplementationImpl.java,v 1.4 2004/02/10 17:25:27 elena Exp $
  73. * @since PR-DOM-Level-1-19980818.
  74. */
  75. public class PSVIDOMImplementationImpl extends CoreDOMImplementationImpl {
  76. //
  77. // Data
  78. //
  79. // static
  80. /** Dom implementation singleton. */
  81. static PSVIDOMImplementationImpl singleton = new PSVIDOMImplementationImpl();
  82. //
  83. // Public methods
  84. //
  85. /** NON-DOM: Obtain and return the single shared object */
  86. public static DOMImplementation getDOMImplementation() {
  87. return singleton;
  88. }
  89. //
  90. // DOMImplementation methods
  91. //
  92. /**
  93. * Test if the DOM implementation supports a specific "feature" --
  94. * currently meaning language and level thereof.
  95. *
  96. * @param feature The package name of the feature to test.
  97. * In Level 1, supported values are "HTML" and "XML" (case-insensitive).
  98. * At this writing, com.sun.org.apache.xerces.internal.dom supports only XML.
  99. *
  100. * @param version The version number of the feature being tested.
  101. * This is interpreted as "Version of the DOM API supported for the
  102. * specified Feature", and in Level 1 should be "1.0"
  103. *
  104. * @return true iff this implementation is compatable with the specified
  105. * feature and version.
  106. */
  107. public boolean hasFeature(String feature, String version) {
  108. return super.hasFeature(feature, version) ||
  109. feature.equalsIgnoreCase("psvi");
  110. } // hasFeature(String,String):boolean
  111. /**
  112. * Introduced in DOM Level 2. <p>
  113. *
  114. * Creates an XML Document object of the specified type with its document
  115. * element.
  116. *
  117. * @param namespaceURI The namespace URI of the document
  118. * element to create, or null.
  119. * @param qualifiedName The qualified name of the document
  120. * element to create.
  121. * @param doctype The type of document to be created or null.<p>
  122. *
  123. * When doctype is not null, its
  124. * Node.ownerDocument attribute is set to
  125. * the document being created.
  126. * @return Document A new Document object.
  127. * @throws DOMException WRONG_DOCUMENT_ERR: Raised if doctype has
  128. * already been used with a different document.
  129. * @since WD-DOM-Level-2-19990923
  130. */
  131. public Document createDocument(String namespaceURI,
  132. String qualifiedName,
  133. DocumentType doctype)
  134. throws DOMException
  135. {
  136. if (doctype != null && doctype.getOwnerDocument() != null) {
  137. throw new DOMException(DOMException.WRONG_DOCUMENT_ERR,
  138. DOMMessageFormatter.formatMessage(
  139. DOMMessageFormatter.XML_DOMAIN,
  140. "WRONG_DOCUMENT_ERR", null));
  141. }
  142. DocumentImpl doc = new PSVIDocumentImpl(doctype);
  143. Element e = doc.createElementNS( namespaceURI, qualifiedName);
  144. doc.appendChild(e);
  145. return doc;
  146. }
  147. } // class DOMImplementationImpl