1. /*
  2. * $Id: PINode.java,v 1.1.1.1 2000/11/23 01:53:35 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.tree;
  59. import java.io.Writer;
  60. import java.io.IOException;
  61. import org.w3c.dom.*;
  62. /**
  63. * Node representing an XML processing instruction.
  64. *
  65. * <P> <em>Functionality to restore in some other way: </em>
  66. *
  67. * As a convenience function, the instruction data may optionally
  68. * be parsed as element attributes are parsed. There is no requirement
  69. * to use this particular syntax for instruction data.
  70. *
  71. * @author David Brownell
  72. * @version $Revision: 1.1.1.1 $
  73. */
  74. final
  75. //public
  76. class PINode extends NodeBase implements ProcessingInstruction
  77. {
  78. private String target;
  79. private char data [];
  80. /** Constructs a processing instruction node. */
  81. public PINode () { }
  82. /** Constructs a processing instruction node. */
  83. public PINode (String target, String text)
  84. {
  85. data = text.toCharArray ();
  86. this.target = target;
  87. }
  88. PINode (String target, char buf [], int offset, int len)
  89. {
  90. data = new char [len];
  91. System.arraycopy (buf, offset, data, 0, len);
  92. this.target = target;
  93. }
  94. /** DOM: Returns the PROCESSING_INSTRUCTION_NODE node type. */
  95. public short getNodeType () { return PROCESSING_INSTRUCTION_NODE; }
  96. /** DOM: Returns the processor the instruction is directed to. */
  97. public String getTarget () { return target; }
  98. /** DOM: Assigns the processor the instruction is directed to. */
  99. public void setTarget (String target) { this.target = target; }
  100. /** DOM: Returns the text data as a string. */
  101. public String getData () { return new String (data); }
  102. /** DOM: Assigns the text data. */
  103. public void setData (String data) {
  104. if (isReadonly ())
  105. throw new DomEx (DomEx.NO_MODIFICATION_ALLOWED_ERR);
  106. this.data = data.toCharArray ();
  107. }
  108. /** DOM: Returns the text data as a string. */
  109. public String getNodeValue () { return getData (); }
  110. /** DOM: Assigns the text data. */
  111. public void setNodeValue (String data) { setData (data); }
  112. /**
  113. * Writes the processing instruction as well formed XML text.
  114. *
  115. * <P> <em> Doesn't currently check for the <b>?></b> substrings
  116. * in PI data, which are illegal </em>
  117. */
  118. public void writeXml (XmlWriteContext context) throws IOException
  119. {
  120. Writer out = context.getWriter ();
  121. out.write ("<?");
  122. out.write (target);
  123. if (data != null) {
  124. out.write (' ');
  125. out.write (data);
  126. }
  127. out.write ("?>");
  128. }
  129. /** Returns a new processing instruction with the same content as this. */
  130. public Node cloneNode (boolean deep) {
  131. PINode retval = new PINode (target, data, 0, data.length);
  132. retval.setOwnerDocument ((XmlDocument) this.getOwnerDocument ());
  133. return retval;
  134. }
  135. /** Returns the PI target name. */
  136. public String getNodeName () { return target; }
  137. }