1 /* 2 * Licensed to the Apache Software Foundation (ASF) under one 3 * or more contributor license agreements. See the NOTICE file 4 * distributed with this work for additional information 5 * regarding copyright ownership. The ASF licenses this file 6 * to you under the Apache License, Version 2.0 (the "License"); 7 * you may not use this file except in compliance with the License. 8 * You may obtain a copy of the License at 9 * 10 * http://www.apache.org/licenses/LICENSE-2.0 11 * 12 * Unless required by applicable law or agreed to in writing, software 13 * distributed under the License is distributed on an "AS IS" BASIS, 14 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 15 * See the License for the specific language governing permissions and 16 * limitations under the License. 17 */ 18 /* 19 * $Id: UnImplNode.java 468655 2006-10-28 07:12:06Z minchau $ 20 */ 21 package org.apache.xml.utils; 22 23 import org.apache.xml.res.XMLErrorResources; 24 import org.apache.xml.res.XMLMessages; 25 26 import org.w3c.dom.Attr; 27 import org.w3c.dom.CDATASection; 28 import org.w3c.dom.Comment; 29 import org.w3c.dom.DOMException; 30 import org.w3c.dom.DOMImplementation; 31 import org.w3c.dom.Document; 32 import org.w3c.dom.DocumentFragment; 33 import org.w3c.dom.DocumentType; 34 import org.w3c.dom.Element; 35 import org.w3c.dom.EntityReference; 36 import org.w3c.dom.NamedNodeMap; 37 import org.w3c.dom.Node; 38 import org.w3c.dom.NodeList; 39 import org.w3c.dom.ProcessingInstruction; 40 import org.w3c.dom.Text; 41 42 import org.w3c.dom.UserDataHandler; 43 import org.w3c.dom.DOMConfiguration; 44 import org.w3c.dom.TypeInfo; 45 /** 46 * To be subclassed by classes that wish to fake being nodes. 47 * @xsl.usage internal 48 */ 49 public class UnImplNode implements Node, Element, NodeList, Document 50 { 51 52 /** 53 * Constructor UnImplNode 54 * 55 */ 56 public UnImplNode(){} 57 58 /** 59 * Throw an error. 60 * 61 * @param msg Message Key for the error 62 */ 63 public void error(String msg) 64 { 65 66 System.out.println("DOM ERROR! class: " + this.getClass().getName()); 67 68 throw new RuntimeException(XMLMessages.createXMLMessage(msg, null)); 69 } 70 71 /** 72 * Throw an error. 73 * 74 * @param msg Message Key for the error 75 * @param args Array of arguments to be used in the error message 76 */ 77 public void error(String msg, Object[] args) 78 { 79 80 System.out.println("DOM ERROR! class: " + this.getClass().getName()); 81 82 throw new RuntimeException(XMLMessages.createXMLMessage(msg, args)); //"UnImplNode error: "+msg); 83 } 84 85 /** 86 * Unimplemented. See org.w3c.dom.Node 87 * 88 * @param newChild New node to append to the list of this node's children 89 * 90 * @return null 91 * 92 * @throws DOMException 93 */ 94 public Node appendChild(Node newChild) throws DOMException 95 { 96 97 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"appendChild not supported!"); 98 99 return null; 100 } 101 102 /** 103 * Unimplemented. See org.w3c.dom.Node 104 * 105 * @return false 106 */ 107 public boolean hasChildNodes() 108 { 109 110 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"hasChildNodes not supported!"); 111 112 return false; 113 } 114 115 /** 116 * Unimplemented. See org.w3c.dom.Node 117 * 118 * @return 0 119 */ 120 public short getNodeType() 121 { 122 123 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getNodeType not supported!"); 124 125 return 0; 126 } 127 128 /** 129 * Unimplemented. See org.w3c.dom.Node 130 * 131 * @return null 132 */ 133 public Node getParentNode() 134 { 135 136 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getParentNode not supported!"); 137 138 return null; 139 } 140 141 /** 142 * Unimplemented. See org.w3c.dom.Node 143 * 144 * @return null 145 */ 146 public NodeList getChildNodes() 147 { 148 149 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getChildNodes not supported!"); 150 151 return null; 152 } 153 154 /** 155 * Unimplemented. See org.w3c.dom.Node 156 * 157 * @return null 158 */ 159 public Node getFirstChild() 160 { 161 162 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getFirstChild not supported!"); 163 164 return null; 165 } 166 167 /** 168 * Unimplemented. See org.w3c.dom.Node 169 * 170 * @return null 171 */ 172 public Node getLastChild() 173 { 174 175 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getLastChild not supported!"); 176 177 return null; 178 } 179 180 /** 181 * Unimplemented. See org.w3c.dom.Node 182 * 183 * @return null 184 */ 185 public Node getNextSibling() 186 { 187 188 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getNextSibling not supported!"); 189 190 return null; 191 } 192 193 /** 194 * Unimplemented. See org.w3c.dom.NodeList 195 * 196 * @return 0 197 */ 198 public int getLength() 199 { 200 201 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getLength not supported!"); 202 203 return 0; 204 } // getLength():int 205 206 /** 207 * Unimplemented. See org.w3c.dom.NodeList 208 * 209 * @param index index of a child of this node in its list of children 210 * 211 * @return null 212 */ 213 public Node item(int index) 214 { 215 216 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"item not supported!"); 217 218 return null; 219 } // item(int):Node 220 221 /** 222 * Unimplemented. See org.w3c.dom.Node 223 * 224 * @return null 225 */ 226 public Document getOwnerDocument() 227 { 228 229 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getOwnerDocument not supported!"); 230 231 return null; 232 } 233 234 /** 235 * Unimplemented. See org.w3c.dom.Node 236 * 237 * @return null 238 */ 239 public String getTagName() 240 { 241 242 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getTagName not supported!"); 243 244 return null; 245 } 246 247 /** 248 * Unimplemented. See org.w3c.dom.Node 249 * 250 * @return null 251 */ 252 public String getNodeName() 253 { 254 255 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getNodeName not supported!"); 256 257 return null; 258 } 259 260 /** Unimplemented. See org.w3c.dom.Node */ 261 public void normalize() 262 { 263 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"normalize not supported!"); 264 } 265 266 /** 267 * Unimplemented. See org.w3c.dom.Element 268 * 269 * @param name Name of the element 270 * 271 * @return null 272 */ 273 public NodeList getElementsByTagName(String name) 274 { 275 276 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getElementsByTagName not supported!"); 277 278 return null; 279 } 280 281 /** 282 * Unimplemented. See org.w3c.dom.Element 283 * 284 * @param oldAttr Attribute to be removed from this node's list of attributes 285 * 286 * @return null 287 * 288 * @throws DOMException 289 */ 290 public Attr removeAttributeNode(Attr oldAttr) throws DOMException 291 { 292 293 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"removeAttributeNode not supported!"); 294 295 return null; 296 } 297 298 /** 299 * Unimplemented. See org.w3c.dom.Element 300 * 301 * @param newAttr Attribute node to be added to this node's list of attributes 302 * 303 * @return null 304 * 305 * @throws DOMException 306 */ 307 public Attr setAttributeNode(Attr newAttr) throws DOMException 308 { 309 310 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setAttributeNode not supported!"); 311 312 return null; 313 } 314 315 /** 316 * Unimplemented. See org.w3c.dom.Element 317 * 318 * 319 * @param name Name of an attribute 320 * 321 * @return false 322 */ 323 public boolean hasAttribute(String name) 324 { 325 326 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"hasAttribute not supported!"); 327 328 return false; 329 } 330 331 /** 332 * Unimplemented. See org.w3c.dom.Element 333 * 334 * 335 * @param name 336 * @param x 337 * 338 * @return false 339 */ 340 public boolean hasAttributeNS(String name, String x) 341 { 342 343 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"hasAttributeNS not supported!"); 344 345 return false; 346 } 347 348 /** 349 * Unimplemented. See org.w3c.dom.Element 350 * 351 * 352 * @param name Attribute node name 353 * 354 * @return null 355 */ 356 public Attr getAttributeNode(String name) 357 { 358 359 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getAttributeNode not supported!"); 360 361 return null; 362 } 363 364 /** 365 * Unimplemented. See org.w3c.dom.Element 366 * 367 * @param name Attribute node name to remove from list of attributes 368 * 369 * @throws DOMException 370 */ 371 public void removeAttribute(String name) throws DOMException 372 { 373 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"removeAttribute not supported!"); 374 } 375 376 /** 377 * Unimplemented. See org.w3c.dom.Element 378 * 379 * @param name Name of attribute to set 380 * @param value Value of attribute 381 * 382 * @throws DOMException 383 */ 384 public void setAttribute(String name, String value) throws DOMException 385 { 386 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setAttribute not supported!"); 387 } 388 389 /** 390 * Unimplemented. See org.w3c.dom.Element 391 * 392 * @param name Name of attribute to get 393 * 394 * @return null 395 */ 396 public String getAttribute(String name) 397 { 398 399 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getAttribute not supported!"); 400 401 return null; 402 } 403 404 /** 405 * Unimplemented. Introduced in DOM Level 2. 406 * 407 * @return false 408 */ 409 public boolean hasAttributes() 410 { 411 412 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"hasAttributes not supported!"); 413 414 return false; 415 } 416 417 /** 418 * Unimplemented. See org.w3c.dom.Element 419 * 420 * @param namespaceURI Namespace URI of the element 421 * @param localName Local part of qualified name of the element 422 * 423 * @return null 424 */ 425 public NodeList getElementsByTagNameNS(String namespaceURI, 426 String localName) 427 { 428 429 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getElementsByTagNameNS not supported!"); 430 431 return null; 432 } 433 434 /** 435 * Unimplemented. See org.w3c.dom.Element 436 * 437 * @param newAttr Attribute to set 438 * 439 * @return null 440 * 441 * @throws DOMException 442 */ 443 public Attr setAttributeNodeNS(Attr newAttr) throws DOMException 444 { 445 446 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setAttributeNodeNS not supported!"); 447 448 return null; 449 } 450 451 /** 452 * Unimplemented. See org.w3c.dom.Element 453 * 454 * @param namespaceURI Namespace URI of attribute node to get 455 * @param localName Local part of qualified name of attribute node to get 456 * 457 * @return null 458 */ 459 public Attr getAttributeNodeNS(String namespaceURI, String localName) 460 { 461 462 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getAttributeNodeNS not supported!"); 463 464 return null; 465 } 466 467 /** 468 * Unimplemented. See org.w3c.dom.Element 469 * 470 * @param namespaceURI Namespace URI of attribute node to remove 471 * @param localName Local part of qualified name of attribute node to remove 472 * 473 * @throws DOMException 474 */ 475 public void removeAttributeNS(String namespaceURI, String localName) 476 throws DOMException 477 { 478 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"removeAttributeNS not supported!"); 479 } 480 481 /** 482 * Unimplemented. See org.w3c.dom.Element 483 * 484 * @param namespaceURI Namespace URI of attribute node to set 485 * NEEDSDOC @param qualifiedName 486 * @param value value of attribute 487 * 488 * @throws DOMException 489 */ 490 public void setAttributeNS( 491 String namespaceURI, String qualifiedName, String value) 492 throws DOMException 493 { 494 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setAttributeNS not supported!"); 495 } 496 497 /** 498 * Unimplemented. See org.w3c.dom.Element 499 * 500 * @param namespaceURI Namespace URI of attribute node to get 501 * @param localName Local part of qualified name of attribute node to get 502 * 503 * @return null 504 */ 505 public String getAttributeNS(String namespaceURI, String localName) 506 { 507 508 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getAttributeNS not supported!"); 509 510 return null; 511 } 512 513 /** 514 * Unimplemented. See org.w3c.dom.Node 515 * 516 * @return null 517 */ 518 public Node getPreviousSibling() 519 { 520 521 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getPreviousSibling not supported!"); 522 523 return null; 524 } 525 526 /** 527 * Unimplemented. See org.w3c.dom.Node 528 * 529 * @param deep Flag indicating whether to clone deep (clone member variables) 530 * 531 * @return null 532 */ 533 public Node cloneNode(boolean deep) 534 { 535 536 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"cloneNode not supported!"); 537 538 return null; 539 } 540 541 /** 542 * Unimplemented. See org.w3c.dom.Node 543 * 544 * @return null 545 * 546 * @throws DOMException 547 */ 548 public String getNodeValue() throws DOMException 549 { 550 551 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getNodeValue not supported!"); 552 553 return null; 554 } 555 556 /** 557 * Unimplemented. See org.w3c.dom.Node 558 * 559 * @param nodeValue Value to set this node to 560 * 561 * @throws DOMException 562 */ 563 public void setNodeValue(String nodeValue) throws DOMException 564 { 565 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setNodeValue not supported!"); 566 } 567 568 /** 569 * Unimplemented. See org.w3c.dom.Node 570 * 571 * 572 * NEEDSDOC @param value 573 * @return value Node value 574 * 575 * @throws DOMException 576 */ 577 578 // public String getValue () 579 // { 580 // error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getValue not supported!"); 581 // return null; 582 // } 583 584 /** 585 * Unimplemented. See org.w3c.dom.Node 586 * 587 * @param value Value to set this node to 588 * 589 * @throws DOMException 590 */ 591 public void setValue(String value) throws DOMException 592 { 593 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setValue not supported!"); 594 } 595 596 /** 597 * Returns the name of this attribute. 598 * 599 * @return the name of this attribute. 600 */ 601 602 // public String getName() 603 // { 604 // return this.getNodeName(); 605 // } 606 607 /** 608 * Unimplemented. See org.w3c.dom.Node 609 * 610 * @return null 611 */ 612 public Element getOwnerElement() 613 { 614 615 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getOwnerElement not supported!"); 616 617 return null; 618 } 619 620 /** 621 * Unimplemented. See org.w3c.dom.Node 622 * 623 * @return False 624 */ 625 public boolean getSpecified() 626 { 627 628 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setValue not supported!"); 629 630 return false; 631 } 632 633 /** 634 * Unimplemented. See org.w3c.dom.Node 635 * 636 * @return null 637 */ 638 public NamedNodeMap getAttributes() 639 { 640 641 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getAttributes not supported!"); 642 643 return null; 644 } 645 646 /** 647 * Unimplemented. See org.w3c.dom.Node 648 * 649 * @param newChild New child node to insert 650 * @param refChild Insert in front of this child 651 * 652 * @return null 653 * 654 * @throws DOMException 655 */ 656 public Node insertBefore(Node newChild, Node refChild) throws DOMException 657 { 658 659 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"insertBefore not supported!"); 660 661 return null; 662 } 663 664 /** 665 * Unimplemented. See org.w3c.dom.Node 666 * 667 * @param newChild Replace existing child with this one 668 * @param oldChild Existing child to be replaced 669 * 670 * @return null 671 * 672 * @throws DOMException 673 */ 674 public Node replaceChild(Node newChild, Node oldChild) throws DOMException 675 { 676 677 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"replaceChild not supported!"); 678 679 return null; 680 } 681 682 /** 683 * Unimplemented. See org.w3c.dom.Node 684 * 685 * @param oldChild Child to be removed 686 * 687 * @return null 688 * 689 * @throws DOMException 690 */ 691 public Node removeChild(Node oldChild) throws DOMException 692 { 693 694 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"replaceChild not supported!"); 695 696 return null; 697 } 698 699 /** 700 * Tests whether the DOM implementation implements a specific feature and 701 * that feature is supported by this node. 702 * @param feature The name of the feature to test. This is the same name 703 * which can be passed to the method <code>hasFeature</code> on 704 * <code>DOMImplementation</code>. 705 * @param version This is the version number of the feature to test. In 706 * Level 2, version 1, this is the string "2.0". If the version is not 707 * specified, supporting any version of the feature will cause the 708 * method to return <code>true</code>. 709 * 710 * @return Returns <code>false</code> 711 * @since DOM Level 2 712 */ 713 public boolean isSupported(String feature, String version) 714 { 715 return false; 716 } 717 718 /** 719 * Unimplemented. See org.w3c.dom.Node 720 * 721 * @return null 722 */ 723 public String getNamespaceURI() 724 { 725 726 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getNamespaceURI not supported!"); 727 728 return null; 729 } 730 731 /** 732 * Unimplemented. See org.w3c.dom.Node 733 * 734 * @return null 735 */ 736 public String getPrefix() 737 { 738 739 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getPrefix not supported!"); 740 741 return null; 742 } 743 744 /** 745 * Unimplemented. See org.w3c.dom.Node 746 * 747 * @param prefix Prefix to set for this node 748 * 749 * @throws DOMException 750 */ 751 public void setPrefix(String prefix) throws DOMException 752 { 753 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"setPrefix not supported!"); 754 } 755 756 /** 757 * Unimplemented. See org.w3c.dom.Node 758 * 759 * @return null 760 */ 761 public String getLocalName() 762 { 763 764 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); //"getLocalName not supported!"); 765 766 return null; 767 } 768 769 /** 770 * Unimplemented. See org.w3c.dom.Document 771 * 772 * @return null 773 */ 774 public DocumentType getDoctype() 775 { 776 777 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 778 779 return null; 780 } 781 782 /** 783 * Unimplemented. See org.w3c.dom.Document 784 * 785 * @return null 786 */ 787 public DOMImplementation getImplementation() 788 { 789 790 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 791 792 return null; 793 } 794 795 /** 796 * Unimplemented. See org.w3c.dom.Document 797 * 798 * @return null 799 */ 800 public Element getDocumentElement() 801 { 802 803 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 804 805 return null; 806 } 807 808 /** 809 * Unimplemented. See org.w3c.dom.Document 810 * 811 * @param tagName Element tag name 812 * 813 * @return null 814 * 815 * @throws DOMException 816 */ 817 public Element createElement(String tagName) throws DOMException 818 { 819 820 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 821 822 return null; 823 } 824 825 /** 826 * Unimplemented. See org.w3c.dom.Document 827 * 828 * @return null 829 */ 830 public DocumentFragment createDocumentFragment() 831 { 832 833 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 834 835 return null; 836 } 837 838 /** 839 * Unimplemented. See org.w3c.dom.Document 840 * 841 * @param data Data for text node 842 * 843 * @return null 844 */ 845 public Text createTextNode(String data) 846 { 847 848 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 849 850 return null; 851 } 852 853 /** 854 * Unimplemented. See org.w3c.dom.Document 855 * 856 * @param data Data for comment 857 * 858 * @return null 859 */ 860 public Comment createComment(String data) 861 { 862 863 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 864 865 return null; 866 } 867 868 /** 869 * Unimplemented. See org.w3c.dom.Document 870 * 871 * @param data Data for CDATA section 872 * 873 * @return null 874 * 875 * @throws DOMException 876 */ 877 public CDATASection createCDATASection(String data) throws DOMException 878 { 879 880 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 881 882 return null; 883 } 884 885 /** 886 * Unimplemented. See org.w3c.dom.Document 887 * 888 * @param target Target for Processing instruction 889 * @param data Data for Processing instruction 890 * 891 * @return null 892 * 893 * @throws DOMException 894 */ 895 public ProcessingInstruction createProcessingInstruction( 896 String target, String data) throws DOMException 897 { 898 899 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 900 901 return null; 902 } 903 904 /** 905 * Unimplemented. See org.w3c.dom.Document 906 * 907 * @param name Attribute name 908 * 909 * @return null 910 * 911 * @throws DOMException 912 */ 913 public Attr createAttribute(String name) throws DOMException 914 { 915 916 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 917 918 return null; 919 } 920 921 /** 922 * Unimplemented. See org.w3c.dom.Document 923 * 924 * @param name Entity Reference name 925 * 926 * @return null 927 * 928 * @throws DOMException 929 */ 930 public EntityReference createEntityReference(String name) 931 throws DOMException 932 { 933 934 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 935 936 return null; 937 } 938 939 /** 940 * Unimplemented. See org.w3c.dom.Document 941 * 942 * @param importedNode The node to import. 943 * @param deep If <code>true</code>, recursively import the subtree under 944 * the specified node; if <code>false</code>, import only the node 945 * itself, as explained above. This has no effect on <code>Attr</code> 946 * , <code>EntityReference</code>, and <code>Notation</code> nodes. 947 * 948 * @return null 949 * 950 * @throws DOMException 951 */ 952 public Node importNode(Node importedNode, boolean deep) throws DOMException 953 { 954 955 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 956 957 return null; 958 } 959 960 /** 961 * Unimplemented. See org.w3c.dom.Document 962 * 963 * @param namespaceURI Namespace URI for the element 964 * @param qualifiedName Qualified name of the element 965 * 966 * @return null 967 * 968 * @throws DOMException 969 */ 970 public Element createElementNS(String namespaceURI, String qualifiedName) 971 throws DOMException 972 { 973 974 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 975 976 return null; 977 } 978 979 /** 980 * Unimplemented. See org.w3c.dom.Document 981 * 982 * @param namespaceURI Namespace URI of the attribute 983 * @param qualifiedName Qualified name of the attribute 984 * 985 * @return null 986 * 987 * @throws DOMException 988 */ 989 public Attr createAttributeNS(String namespaceURI, String qualifiedName) 990 throws DOMException 991 { 992 993 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 994 995 return null; 996 } 997 998 /** 999 * Unimplemented. See org.w3c.dom.Document 1000 * 1001 * @param elementId ID of the element to get 1002 * 1003 * @return null 1004 */ 1005 public Element getElementById(String elementId) 1006 { 1007 1008 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1009 1010 return null; 1011 } 1012 1013 /** 1014 * Set Node data 1015 * 1016 * 1017 * @param data data to set for this node 1018 * 1019 * @throws DOMException 1020 */ 1021 public void setData(String data) throws DOMException 1022 { 1023 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1024 } 1025 1026 /** 1027 * Unimplemented. 1028 * 1029 * @param offset Start offset of substring to extract. 1030 * @param count The length of the substring to extract. 1031 * 1032 * @return null 1033 * 1034 * @throws DOMException 1035 */ 1036 public String substringData(int offset, int count) throws DOMException 1037 { 1038 1039 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1040 1041 return null; 1042 } 1043 1044 /** 1045 * Unimplemented. 1046 * 1047 * @param arg String data to append 1048 * 1049 * @throws DOMException 1050 */ 1051 public void appendData(String arg) throws DOMException 1052 { 1053 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1054 } 1055 1056 /** 1057 * Unimplemented. 1058 * 1059 * @param offset Start offset of substring to insert. 1060 * NEEDSDOC @param arg 1061 * 1062 * @throws DOMException 1063 */ 1064 public void insertData(int offset, String arg) throws DOMException 1065 { 1066 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1067 } 1068 1069 /** 1070 * Unimplemented. 1071 * 1072 * @param offset Start offset of substring to delete. 1073 * @param count The length of the substring to delete. 1074 * 1075 * @throws DOMException 1076 */ 1077 public void deleteData(int offset, int count) throws DOMException 1078 { 1079 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1080 } 1081 1082 /** 1083 * Unimplemented. 1084 * 1085 * @param offset Start offset of substring to replace. 1086 * @param count The length of the substring to replace. 1087 * @param arg substring to replace with 1088 * 1089 * @throws DOMException 1090 */ 1091 public void replaceData(int offset, int count, String arg) 1092 throws DOMException 1093 { 1094 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1095 } 1096 1097 /** 1098 * Unimplemented. 1099 * 1100 * @param offset Offset into text to split 1101 * 1102 * @return null, unimplemented 1103 * 1104 * @throws DOMException 1105 */ 1106 public Text splitText(int offset) throws DOMException 1107 { 1108 1109 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1110 1111 return null; 1112 } 1113 1114 /** 1115 * NEEDSDOC Method adoptNode 1116 * 1117 * 1118 * NEEDSDOC @param source 1119 * 1120 * NEEDSDOC (adoptNode) @return 1121 * 1122 * @throws DOMException 1123 */ 1124 public Node adoptNode(Node source) throws DOMException 1125 { 1126 1127 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1128 1129 return null; 1130 } 1131 1132 /** 1133 * <p>Based on the <a 1134 * href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document 1135 * Object Model (DOM) Level 3 Core Specification of 07 April 2004.</a>. 1136 * <p> 1137 * An attribute specifying, as part of the XML declaration, the encoding 1138 * of this document. This is <code>null</code> when unspecified. 1139 * @since DOM Level 3 1140 * 1141 * NEEDSDOC ($objectName$) @return 1142 */ 1143 public String getInputEncoding() 1144 { 1145 1146 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1147 1148 return null; 1149 } 1150 1151 /** 1152 * <p>Based on the <a 1153 * href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document 1154 * Object Model (DOM) Level 3 Core Specification of 07 April 2004.</a>. 1155 * <p> 1156 * An attribute specifying, as part of the XML declaration, the encoding 1157 * of this document. This is <code>null</code> when unspecified. 1158 * @since DOM Level 3 1159 * 1160 * NEEDSDOC @param encoding 1161 */ 1162 public void setInputEncoding(String encoding) 1163 { 1164 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1165 } 1166 1167 /** 1168 * <p>Based on the <a 1169 * href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document 1170 * Object Model (DOM) Level 3 Core Specification of 07 April 2004.</a>. 1171 * <p> 1172 * An attribute specifying whether errors checking is enforced or not. 1173 * When set to <code>false</code>, the implementation is free to not 1174 * test every possible error case normally defined on DOM operations, 1175 * and not raise any <code>DOMException</code>. In case of error, the 1176 * behavior is undefined. This attribute is <code>true</code> by 1177 * defaults. 1178 * @since DOM Level 3 1179 * 1180 * NEEDSDOC ($objectName$) @return 1181 */ 1182 public boolean getStrictErrorChecking() 1183 { 1184 1185 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1186 1187 return false; 1188 } 1189 1190 /** 1191 * <p>Based on the <a 1192 * href='http://www.w3.org/TR/2004/REC-DOM-Level-3-Core-20040407'>Document 1193 * Object Model (DOM) Level 3 Core Specification of 07 April 2004.</a>. 1194 * <p> 1195 * An attribute specifying whether errors checking is enforced or not. 1196 * When set to <code>false</code>, the implementation is free to not 1197 * test every possible error case normally defined on DOM operations, 1198 * and not raise any <code>DOMException</code>. In case of error, the 1199 * behavior is undefined. This attribute is <code>true</code> by 1200 * defaults. 1201 * @since DOM Level 3 1202 * 1203 * NEEDSDOC @param strictErrorChecking 1204 */ 1205 public void setStrictErrorChecking(boolean strictErrorChecking) 1206 { 1207 error(XMLErrorResources.ER_FUNCTION_NOT_SUPPORTED); 1208 } 1209 1210 // RAMESH : Pending proper implementation of DOM Level 3 1211 public Object setUserData(String key, 1212 Object data, 1213 UserDataHandler handler) { 1214 return getOwnerDocument().setUserData( key, data, handler); 1215 } 1216 1217 /** 1218 * Retrieves the object associated to a key on a this node. The object 1219 * must first have been set to this node by calling 1220 * <code>setUserData</code> with the same key. 1221 * @param key The key the object is associated to. 1222 * @return Returns the <code>DOMObject</code> associated to the given key 1223 * on this node, or <code>null</code> if there was none. 1224 * @since DOM Level 3 1225 */ 1226 public Object getUserData(String key) { 1227 return getOwnerDocument().getUserData( key); 1228 } 1229 1230 /** 1231 * This method returns a specialized object which implements the 1232 * specialized APIs of the specified feature and version. The 1233 * specialized object may also be obtained by using binding-specific 1234 * casting methods but is not necessarily expected to, as discussed in Mixed DOM implementations. 1235 * @param feature The name of the feature requested (case-insensitive). 1236 * @param version This is the version number of the feature to test. If 1237 * the version is <code>null</code> or the empty string, supporting 1238 * any version of the feature will cause the method to return an 1239 * object that supports at least one version of the feature. 1240 * @return Returns an object which implements the specialized APIs of 1241 * the specified feature and version, if any, or <code>null</code> if 1242 * there is no object which implements interfaces associated with that 1243 * feature. If the <code>DOMObject</code> returned by this method 1244 * implements the <code>Node</code> interface, it must delegate to the 1245 * primary core <code>Node</code> and not return results inconsistent 1246 * with the primary core <code>Node</code> such as attributes, 1247 * childNodes, etc. 1248 * @since DOM Level 3 1249 */ 1250 public Object getFeature(String feature, String version) { 1251 // we don't have any alternate node, either this node does the job 1252 // or we don't have anything that does 1253 return isSupported(feature, version) ? this : null; 1254 } 1255 1256 /** 1257 * Tests whether two nodes are equal. 1258 * <br>This method tests for equality of nodes, not sameness (i.e., 1259 * whether the two nodes are references to the same object) which can be 1260 * tested with <code>Node.isSameNode</code>. All nodes that are the same 1261 * will also be equal, though the reverse may not be true. 1262 * <br>Two nodes are equal if and only if the following conditions are 1263 * satisfied: The two nodes are of the same type.The following string 1264 * attributes are equal: <code>nodeName</code>, <code>localName</code>, 1265 * <code>namespaceURI</code>, <code>prefix</code>, <code>nodeValue</code> 1266 * , <code>baseURI</code>. This is: they are both <code>null</code>, or 1267 * they have the same length and are character for character identical. 1268 * The <code>attributes</code> <code>NamedNodeMaps</code> are equal. 1269 * This is: they are both <code>null</code>, or they have the same 1270 * length and for each node that exists in one map there is a node that 1271 * exists in the other map and is equal, although not necessarily at the 1272 * same index.The <code>childNodes</code> <code>NodeLists</code> are 1273 * equal. This is: they are both <code>null</code>, or they have the 1274 * same length and contain equal nodes at the same index. This is true 1275 * for <code>Attr</code> nodes as for any other type of node. Note that 1276 * normalization can affect equality; to avoid this, nodes should be 1277 * normalized before being compared. 1278 * <br>For two <code>DocumentType</code> nodes to be equal, the following 1279 * conditions must also be satisfied: The following string attributes 1280 * are equal: <code>publicId</code>, <code>systemId</code>, 1281 * <code>internalSubset</code>.The <code>entities</code> 1282 * <code>NamedNodeMaps</code> are equal.The <code>notations</code> 1283 * <code>NamedNodeMaps</code> are equal. 1284 * <br>On the other hand, the following do not affect equality: the 1285 * <code>ownerDocument</code> attribute, the <code>specified</code> 1286 * attribute for <code>Attr</code> nodes, the 1287 * <code>isWhitespaceInElementContent</code> attribute for 1288 * <code>Text</code> nodes, as well as any user data or event listeners 1289 * registered on the nodes. 1290 * @param arg The node to compare equality with. 1291 * @param deep If <code>true</code>, recursively compare the subtrees; if 1292 * <code>false</code>, compare only the nodes themselves (and its 1293 * attributes, if it is an <code>Element</code>). 1294 * @return If the nodes, and possibly subtrees are equal, 1295 * <code>true</code> otherwise <code>false</code>. 1296 * @since DOM Level 3 1297 */ 1298 public boolean isEqualNode(Node arg) { 1299 if (arg == this) { 1300 return true; 1301 } 1302 if (arg.getNodeType() != getNodeType()) { 1303 return false; 1304 } 1305 // in theory nodeName can't be null but better be careful 1306 // who knows what other implementations may be doing?... 1307 if (getNodeName() == null) { 1308 if (arg.getNodeName() != null) { 1309 return false; 1310 } 1311 } 1312 else if (!getNodeName().equals(arg.getNodeName())) { 1313 return false; 1314 } 1315 1316 if (getLocalName() == null) { 1317 if (arg.getLocalName() != null) { 1318 return false; 1319 } 1320 } 1321 else if (!getLocalName().equals(arg.getLocalName())) { 1322 return false; 1323 } 1324 1325 if (getNamespaceURI() == null) { 1326 if (arg.getNamespaceURI() != null) { 1327 return false; 1328 } 1329 } 1330 else if (!getNamespaceURI().equals(arg.getNamespaceURI())) { 1331 return false; 1332 } 1333 1334 if (getPrefix() == null) { 1335 if (arg.getPrefix() != null) { 1336 return false; 1337 } 1338 } 1339 else if (!getPrefix().equals(arg.getPrefix())) { 1340 return false; 1341 } 1342 1343 if (getNodeValue() == null) { 1344 if (arg.getNodeValue() != null) { 1345 return false; 1346 } 1347 } 1348 else if (!getNodeValue().equals(arg.getNodeValue())) { 1349 return false; 1350 } 1351 /* 1352 if (getBaseURI() == null) { 1353 if (((NodeImpl) arg).getBaseURI() != null) { 1354 return false; 1355 } 1356 } 1357 else if (!getBaseURI().equals(((NodeImpl) arg).getBaseURI())) { 1358 return false; 1359 } 1360 */ 1361 1362 return true; 1363 } 1364 1365 /** 1366 * DOM Level 3: 1367 * Look up the namespace URI associated to the given prefix, starting from this node. 1368 * Use lookupNamespaceURI(null) to lookup the default namespace 1369 * 1370 * @param namespaceURI 1371 * @return th URI for the namespace 1372 * @since DOM Level 3 1373 */ 1374 public String lookupNamespaceURI(String specifiedPrefix) { 1375 short type = this.getNodeType(); 1376 switch (type) { 1377 case Node.ELEMENT_NODE : { 1378 1379 String namespace = this.getNamespaceURI(); 1380 String prefix = this.getPrefix(); 1381 if (namespace !=null) { 1382 // REVISIT: is it possible that prefix is empty string? 1383 if (specifiedPrefix== null && prefix==specifiedPrefix) { 1384 // looking for default namespace 1385 return namespace; 1386 } else if (prefix != null && prefix.equals(specifiedPrefix)) { 1387 // non default namespace 1388 return namespace; 1389 } 1390 } 1391 if (this.hasAttributes()) { 1392 NamedNodeMap map = this.getAttributes(); 1393 int length = map.getLength(); 1394 for (int i=0;i<length;i++) { 1395 Node attr = map.item(i); 1396 String attrPrefix = attr.getPrefix(); 1397 String value = attr.getNodeValue(); 1398 namespace = attr.getNamespaceURI(); 1399 if (namespace !=null && namespace.equals("http://www.w3.org/2000/xmlns/")) { 1400 // at this point we are dealing with DOM Level 2 nodes only 1401 if (specifiedPrefix == null && 1402 attr.getNodeName().equals("xmlns")) { 1403 // default namespace 1404 return value; 1405 } else if (attrPrefix !=null && 1406 attrPrefix.equals("xmlns") && 1407 attr.getLocalName().equals(specifiedPrefix)) { 1408 // non default namespace 1409 return value; 1410 } 1411 } 1412 } 1413 } 1414 /* 1415 NodeImpl ancestor = (NodeImpl)getElementAncestor(this); 1416 if (ancestor != null) { 1417 return ancestor.lookupNamespaceURI(specifiedPrefix); 1418 } 1419 */ 1420 1421 return null; 1422 1423 1424 } 1425 /* 1426 case Node.DOCUMENT_NODE : { 1427 return((NodeImpl)((Document)this).getDocumentElement()).lookupNamespaceURI(specifiedPrefix) ; 1428 } 1429 */ 1430 case Node.ENTITY_NODE : 1431 case Node.NOTATION_NODE: 1432 case Node.DOCUMENT_FRAGMENT_NODE: 1433 case Node.DOCUMENT_TYPE_NODE: 1434 // type is unknown 1435 return null; 1436 case Node.ATTRIBUTE_NODE:{ 1437 if (this.getOwnerElement().getNodeType() == Node.ELEMENT_NODE) { 1438 return getOwnerElement().lookupNamespaceURI(specifiedPrefix); 1439 1440 } 1441 return null; 1442 } 1443 default:{ 1444 /* 1445 NodeImpl ancestor = (NodeImpl)getElementAncestor(this); 1446 if (ancestor != null) { 1447 return ancestor.lookupNamespaceURI(specifiedPrefix); 1448 } 1449 */ 1450 return null; 1451 } 1452 1453 } 1454 } 1455 1456 /** 1457 * DOM Level 3: 1458 * This method checks if the specified <code>namespaceURI</code> is the 1459 * default namespace or not. 1460 * @param namespaceURI The namespace URI to look for. 1461 * @return <code>true</code> if the specified <code>namespaceURI</code> 1462 * is the default namespace, <code>false</code> otherwise. 1463 * @since DOM Level 3 1464 */ 1465 public boolean isDefaultNamespace(String namespaceURI){ 1466 /* 1467 // REVISIT: remove casts when DOM L3 becomes REC. 1468 short type = this.getNodeType(); 1469 switch (type) { 1470 case Node.ELEMENT_NODE: { 1471 String namespace = this.getNamespaceURI(); 1472 String prefix = this.getPrefix(); 1473 1474 // REVISIT: is it possible that prefix is empty string? 1475 if (prefix == null || prefix.length() == 0) { 1476 if (namespaceURI == null) { 1477 return (namespace == namespaceURI); 1478 } 1479 return namespaceURI.equals(namespace); 1480 } 1481 if (this.hasAttributes()) { 1482 ElementImpl elem = (ElementImpl)this; 1483 NodeImpl attr = (NodeImpl)elem.getAttributeNodeNS("http://www.w3.org/2000/xmlns/", "xmlns"); 1484 if (attr != null) { 1485 String value = attr.getNodeValue(); 1486 if (namespaceURI == null) { 1487 return (namespace == value); 1488 } 1489 return namespaceURI.equals(value); 1490 } 1491 } 1492 1493 NodeImpl ancestor = (NodeImpl)getElementAncestor(this); 1494 if (ancestor != null) { 1495 return ancestor.isDefaultNamespace(namespaceURI); 1496 } 1497 return false; 1498 } 1499 case Node.DOCUMENT_NODE:{ 1500 return((NodeImpl)((Document)this).getDocumentElement()).isDefaultNamespace(namespaceURI); 1501 } 1502 1503 case Node.ENTITY_NODE : 1504 case Node.NOTATION_NODE: 1505 case Node.DOCUMENT_FRAGMENT_NODE: 1506 case Node.DOCUMENT_TYPE_NODE: 1507 // type is unknown 1508 return false; 1509 case Node.ATTRIBUTE_NODE:{ 1510 if (this.ownerNode.getNodeType() == Node.ELEMENT_NODE) { 1511 return ownerNode.isDefaultNamespace(namespaceURI); 1512 1513 } 1514 return false; 1515 } 1516 default:{ 1517 NodeImpl ancestor = (NodeImpl)getElementAncestor(this); 1518 if (ancestor != null) { 1519 return ancestor.isDefaultNamespace(namespaceURI); 1520 } 1521 return false; 1522 } 1523 1524 } 1525 */ 1526 return false; 1527 1528 1529 } 1530 1531 /** 1532 * 1533 * DOM Level 3: 1534 * Look up the prefix associated to the given namespace URI, starting from this node. 1535 * 1536 * @param namespaceURI 1537 * @return the prefix for the namespace 1538 */ 1539 public String lookupPrefix(String namespaceURI){ 1540 1541 // REVISIT: When Namespaces 1.1 comes out this may not be true 1542 // Prefix can't be bound to null namespace 1543 if (namespaceURI == null) { 1544 return null; 1545 } 1546 1547 short type = this.getNodeType(); 1548 1549 switch (type) { 1550 /* 1551 case Node.ELEMENT_NODE: { 1552 1553 String namespace = this.getNamespaceURI(); // to flip out children 1554 return lookupNamespacePrefix(namespaceURI, (ElementImpl)this); 1555 } 1556 1557 case Node.DOCUMENT_NODE:{ 1558 return((NodeImpl)((Document)this).getDocumentElement()).lookupPrefix(namespaceURI); 1559 } 1560 */ 1561 case Node.ENTITY_NODE : 1562 case Node.NOTATION_NODE: 1563 case Node.DOCUMENT_FRAGMENT_NODE: 1564 case Node.DOCUMENT_TYPE_NODE: 1565 // type is unknown 1566 return null; 1567 case Node.ATTRIBUTE_NODE:{ 1568 if (this.getOwnerElement().getNodeType() == Node.ELEMENT_NODE) { 1569 return getOwnerElement().lookupPrefix(namespaceURI); 1570 1571 } 1572 return null; 1573 } 1574 default:{ 1575 /* 1576 NodeImpl ancestor = (NodeImpl)getElementAncestor(this); 1577 if (ancestor != null) { 1578 return ancestor.lookupPrefix(namespaceURI); 1579 } 1580 */ 1581 return null; 1582 } 1583 } 1584 } 1585 1586 /** 1587 * Returns whether this node is the same node as the given one. 1588 * <br>This method provides a way to determine whether two 1589 * <code>Node</code> references returned by the implementation reference 1590 * the same object. When two <code>Node</code> references are references 1591 * to the same object, even if through a proxy, the references may be 1592 * used completely interchangably, such that all attributes have the 1593 * same values and calling the same DOM method on either reference 1594 * always has exactly the same effect. 1595 * @param other The node to test against. 1596 * @return Returns <code>true</code> if the nodes are the same, 1597 * <code>false</code> otherwise. 1598 * @since DOM Level 3 1599 */ 1600 public boolean isSameNode(Node other) { 1601 // we do not use any wrapper so the answer is obvious 1602 return this == other; 1603 } 1604 1605 /** 1606 * This attribute returns the text content of this node and its 1607 * descendants. When it is defined to be null, setting it has no effect. 1608 * When set, any possible children this node may have are removed and 1609 * replaced by a single <code>Text</code> node containing the string 1610 * this attribute is set to. On getting, no serialization is performed, 1611 * the returned string does not contain any markup. No whitespace 1612 * normalization is performed, the returned string does not contain the 1613 * element content whitespaces . Similarly, on setting, no parsing is 1614 * performed either, the input string is taken as pure textual content. 1615 * <br>The string returned is made of the text content of this node 1616 * depending on its type, as defined below: 1617 * <table border='1'> 1618 * <tr> 1619 * <th>Node type</th> 1620 * <th>Content</th> 1621 * </tr> 1622 * <tr> 1623 * <td valign='top' rowspan='1' colspan='1'> 1624 * ELEMENT_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, 1625 * DOCUMENT_FRAGMENT_NODE</td> 1626 * <td valign='top' rowspan='1' colspan='1'>concatenation of the <code>textContent</code> 1627 * attribute value of every child node, excluding COMMENT_NODE and 1628 * PROCESSING_INSTRUCTION_NODE nodes</td> 1629 * </tr> 1630 * <tr> 1631 * <td valign='top' rowspan='1' colspan='1'>ATTRIBUTE_NODE, TEXT_NODE, 1632 * CDATA_SECTION_NODE, COMMENT_NODE, PROCESSING_INSTRUCTION_NODE</td> 1633 * <td valign='top' rowspan='1' colspan='1'> 1634 * <code>nodeValue</code></td> 1635 * </tr> 1636 * <tr> 1637 * <td valign='top' rowspan='1' colspan='1'>DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODE</td> 1638 * <td valign='top' rowspan='1' colspan='1'> 1639 * null</td> 1640 * </tr> 1641 * </table> 1642 * @exception DOMException 1643 * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly. 1644 * @exception DOMException 1645 * DOMSTRING_SIZE_ERR: Raised when it would return more characters than 1646 * fit in a <code>DOMString</code> variable on the implementation 1647 * platform. 1648 * @since DOM Level 3 1649 */ 1650 public void setTextContent(String textContent) 1651 throws DOMException { 1652 setNodeValue(textContent); 1653 } 1654 1655 /** 1656 * This attribute returns the text content of this node and its 1657 * descendants. When it is defined to be null, setting it has no effect. 1658 * When set, any possible children this node may have are removed and 1659 * replaced by a single <code>Text</code> node containing the string 1660 * this attribute is set to. On getting, no serialization is performed, 1661 * the returned string does not contain any markup. No whitespace 1662 * normalization is performed, the returned string does not contain the 1663 * element content whitespaces . Similarly, on setting, no parsing is 1664 * performed either, the input string is taken as pure textual content. 1665 * <br>The string returned is made of the text content of this node 1666 * depending on its type, as defined below: 1667 * <table border='1'> 1668 * <tr> 1669 * <th>Node type</th> 1670 * <th>Content</th> 1671 * </tr> 1672 * <tr> 1673 * <td valign='top' rowspan='1' colspan='1'> 1674 * ELEMENT_NODE, ENTITY_NODE, ENTITY_REFERENCE_NODE, 1675 * DOCUMENT_FRAGMENT_NODE</td> 1676 * <td valign='top' rowspan='1' colspan='1'>concatenation of the <code>textContent</code> 1677 * attribute value of every child node, excluding COMMENT_NODE and 1678 * PROCESSING_INSTRUCTION_NODE nodes</td> 1679 * </tr> 1680 * <tr> 1681 * <td valign='top' rowspan='1' colspan='1'>ATTRIBUTE_NODE, TEXT_NODE, 1682 * CDATA_SECTION_NODE, COMMENT_NODE, PROCESSING_INSTRUCTION_NODE</td> 1683 * <td valign='top' rowspan='1' colspan='1'> 1684 * <code>nodeValue</code></td> 1685 * </tr> 1686 * <tr> 1687 * <td valign='top' rowspan='1' colspan='1'>DOCUMENT_NODE, DOCUMENT_TYPE_NODE, NOTATION_NODE</td> 1688 * <td valign='top' rowspan='1' colspan='1'> 1689 * null</td> 1690 * </tr> 1691 * </table> 1692 * @exception DOMException 1693 * NO_MODIFICATION_ALLOWED_ERR: Raised when the node is readonly. 1694 * @exception DOMException 1695 * DOMSTRING_SIZE_ERR: Raised when it would return more characters than 1696 * fit in a <code>DOMString</code> variable on the implementation 1697 * platform. 1698 * @since DOM Level 3 1699 */ 1700 public String getTextContent() throws DOMException { 1701 return getNodeValue(); // overriden in some subclasses 1702 } 1703 1704 /** 1705 * Compares a node with this node with regard to their position in the 1706 * document. 1707 * @param other The node to compare against this node. 1708 * @return Returns how the given node is positioned relatively to this 1709 * node. 1710 * @since DOM Level 3 1711 */ 1712 public short compareDocumentPosition(Node other) throws DOMException { 1713 return 0; 1714 } 1715 1716 /** 1717 * The absolute base URI of this node or <code>null</code> if undefined. 1718 * This value is computed according to . However, when the 1719 * <code>Document</code> supports the feature "HTML" , the base URI is 1720 * computed using first the value of the href attribute of the HTML BASE 1721 * element if any, and the value of the <code>documentURI</code> 1722 * attribute from the <code>Document</code> interface otherwise. 1723 * <br> When the node is an <code>Element</code>, a <code>Document</code> 1724 * or a a <code>ProcessingInstruction</code>, this attribute represents 1725 * the properties [base URI] defined in . When the node is a 1726 * <code>Notation</code>, an <code>Entity</code>, or an 1727 * <code>EntityReference</code>, this attribute represents the 1728 * properties [declaration base URI] in the . How will this be affected 1729 * by resolution of relative namespace URIs issue?It's not.Should this 1730 * only be on Document, Element, ProcessingInstruction, Entity, and 1731 * Notation nodes, according to the infoset? If not, what is it equal to 1732 * on other nodes? Null? An empty string? I think it should be the 1733 * parent's.No.Should this be read-only and computed or and actual 1734 * read-write attribute?Read-only and computed (F2F 19 Jun 2000 and 1735 * teleconference 30 May 2001).If the base HTML element is not yet 1736 * attached to a document, does the insert change the Document.baseURI? 1737 * Yes. (F2F 26 Sep 2001) 1738 * @since DOM Level 3 1739 */ 1740 public String getBaseURI() { 1741 return null; 1742 } 1743 1744 /** 1745 * DOM Level 3 1746 * Renaming node 1747 */ 1748 public Node renameNode(Node n, 1749 String namespaceURI, 1750 String name) 1751 throws DOMException{ 1752 return n; 1753 } 1754 1755 /** 1756 * DOM Level 3 1757 * Normalize document. 1758 */ 1759 public void normalizeDocument(){ 1760 1761 } 1762 1763 /** 1764 * The configuration used when <code>Document.normalizeDocument</code> is 1765 * invoked. 1766 * @since DOM Level 3 1767 */ 1768 public DOMConfiguration getDomConfig(){ 1769 return null; 1770 } 1771 1772 1773 /** DOM Level 3 feature: documentURI */ 1774 protected String fDocumentURI; 1775 1776 /** 1777 * DOM Level 3 1778 */ 1779 public void setDocumentURI(String documentURI){ 1780 1781 fDocumentURI= documentURI; 1782 } 1783 1784 /** 1785 * DOM Level 3 1786 * The location of the document or <code>null</code> if undefined. 1787 * <br>Beware that when the <code>Document</code> supports the feature 1788 * "HTML" , the href attribute of the HTML BASE element takes precedence 1789 * over this attribute. 1790 * @since DOM Level 3 1791 */ 1792 public String getDocumentURI(){ 1793 return fDocumentURI; 1794 } 1795 1796 /** DOM Level 3 feature: Document actualEncoding */ 1797 protected String actualEncoding; 1798 1799 /** 1800 * DOM Level 3 1801 * An attribute specifying the actual encoding of this document. This is 1802 * <code>null</code> otherwise. 1803 * <br> This attribute represents the property [character encoding scheme] 1804 * defined in . 1805 * @since DOM Level 3 1806 */ 1807 public String getActualEncoding() { 1808 return actualEncoding; 1809 } 1810 1811 /** 1812 * DOM Level 3 1813 * An attribute specifying the actual encoding of this document. This is 1814 * <code>null</code> otherwise. 1815 * <br> This attribute represents the property [character encoding scheme] 1816 * defined in . 1817 * @since DOM Level 3 1818 */ 1819 public void setActualEncoding(String value) { 1820 actualEncoding = value; 1821 } 1822 1823 /** 1824 * DOM Level 3 1825 */ 1826 public Text replaceWholeText(String content) 1827 throws DOMException{ 1828 /* 1829 1830 if (needsSyncData()) { 1831 synchronizeData(); 1832 } 1833 1834 // make sure we can make the replacement 1835 if (!canModify(nextSibling)) { 1836 throw new DOMException(DOMException.NO_MODIFICATION_ALLOWED_ERR, 1837 DOMMessageFormatter.formatMessage(DOMMessageFormatter.DOM_DOMAIN, "NO_MODIFICATION_ALLOWED_ERR", null)); 1838 } 1839 1840 Node parent = this.getParentNode(); 1841 if (content == null || content.length() == 0) { 1842 // remove current node 1843 if (parent !=null) { // check if node in the tree 1844 parent.removeChild(this); 1845 return null; 1846 } 1847 } 1848 Text currentNode = null; 1849 if (isReadOnly()){ 1850 Text newNode = this.ownerDocument().createTextNode(content); 1851 if (parent !=null) { // check if node in the tree 1852 parent.insertBefore(newNode, this); 1853 parent.removeChild(this); 1854 currentNode = newNode; 1855 } else { 1856 return newNode; 1857 } 1858 } else { 1859 this.setData(content); 1860 currentNode = this; 1861 } 1862 Node sibling = currentNode.getNextSibling(); 1863 while ( sibling !=null) { 1864 parent.removeChild(sibling); 1865 sibling = currentNode.getNextSibling(); 1866 } 1867 1868 return currentNode; 1869 */ 1870 return null; //Pending 1871 } 1872 1873 /** 1874 * DOM Level 3 1875 * Returns all text of <code>Text</code> nodes logically-adjacent text 1876 * nodes to this node, concatenated in document order. 1877 * @since DOM Level 3 1878 */ 1879 public String getWholeText(){ 1880 1881 /* 1882 if (needsSyncData()) { 1883 synchronizeData(); 1884 } 1885 if (nextSibling == null) { 1886 return data; 1887 } 1888 StringBuffer buffer = new StringBuffer(); 1889 if (data != null && data.length() != 0) { 1890 buffer.append(data); 1891 } 1892 getWholeText(nextSibling, buffer); 1893 return buffer.toString(); 1894 */ 1895 return null; // PENDING 1896 1897 } 1898 1899 /** 1900 * DOM Level 3 1901 * Returns whether this text node contains whitespace in element content, 1902 * often abusively called "ignorable whitespace". 1903 */ 1904 public boolean isWhitespaceInElementContent(){ 1905 return false; 1906 } 1907 1908 /** 1909 * NON-DOM: set the type of this attribute to be ID type. 1910 * 1911 * @param id 1912 */ 1913 public void setIdAttribute(boolean id){ 1914 //PENDING 1915 } 1916 1917 /** 1918 * DOM Level 3: register the given attribute node as an ID attribute 1919 */ 1920 public void setIdAttribute(String name, boolean makeId) { 1921 //PENDING 1922 } 1923 1924 /** 1925 * DOM Level 3: register the given attribute node as an ID attribute 1926 */ 1927 public void setIdAttributeNode(Attr at, boolean makeId) { 1928 //PENDING 1929 } 1930 1931 /** 1932 * DOM Level 3: register the given attribute node as an ID attribute 1933 */ 1934 public void setIdAttributeNS(String namespaceURI, String localName, 1935 boolean makeId) { 1936 //PENDING 1937 } 1938 1939 /** 1940 * Method getSchemaTypeInfo. 1941 * @return TypeInfo 1942 */ 1943 public TypeInfo getSchemaTypeInfo(){ 1944 return null; //PENDING 1945 } 1946 1947 public boolean isId() { 1948 return false; //PENDING 1949 } 1950 1951 private String xmlEncoding; 1952 public String getXmlEncoding ( ) { 1953 return xmlEncoding; 1954 } 1955 public void setXmlEncoding ( String xmlEncoding ) { 1956 this.xmlEncoding = xmlEncoding; 1957 } 1958 1959 private boolean xmlStandalone; 1960 public boolean getXmlStandalone() { 1961 return xmlStandalone; 1962 } 1963 1964 public void setXmlStandalone(boolean xmlStandalone) throws DOMException { 1965 this.xmlStandalone = xmlStandalone; 1966 } 1967 1968 private String xmlVersion; 1969 public String getXmlVersion() { 1970 return xmlVersion; 1971 } 1972 1973 public void setXmlVersion(String xmlVersion) throws DOMException { 1974 this.xmlVersion = xmlVersion; 1975 } 1976 1977 } 1978