| /* | |
| * Copyright 2008 Google Inc. | |
| * | |
| * Licensed under the Apache License, Version 2.0 (the "License"); you may not | |
| * use this file except in compliance with the License. You may obtain a copy of | |
| * the License at | |
| * | |
| * http://www.apache.org/licenses/LICENSE-2.0 | |
| * | |
| * Unless required by applicable law or agreed to in writing, software | |
| * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT | |
| * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the | |
| * License for the specific language governing permissions and limitations under | |
| * the License. | |
| */ | |
| package com.google.gwt.xml.client.impl; | |
| import com.google.gwt.core.client.JavaScriptException; | |
| import com.google.gwt.core.client.JavaScriptObject; | |
| import com.google.gwt.xml.client.DOMException; | |
| import com.google.gwt.xml.client.Document; | |
| import com.google.gwt.xml.client.NamedNodeMap; | |
| import com.google.gwt.xml.client.Node; | |
| import com.google.gwt.xml.client.NodeList; | |
| /** | |
| * This class wraps the native Node object. | |
| */ | |
| class NodeImpl extends DOMItem implements Node { | |
| /** | |
| * This method creates a new node of the correct type. | |
| * | |
| * @param node - the supplied DOM JavaScript object | |
| * @return a Node object that corresponds to the DOM object | |
| */ | |
| static Node build(JavaScriptObject node) { | |
| if (node == null) { | |
| return null; | |
| } | |
| short nodeType = XMLParserImpl.getNodeType(node); | |
| switch (nodeType) { | |
| case Node.ATTRIBUTE_NODE: | |
| return new AttrImpl(node); | |
| case Node.CDATA_SECTION_NODE: | |
| return new CDATASectionImpl(node); | |
| case Node.COMMENT_NODE: | |
| return new CommentImpl(node); | |
| case Node.DOCUMENT_FRAGMENT_NODE: | |
| return new DocumentFragmentImpl(node); | |
| case Node.DOCUMENT_NODE: | |
| return new DocumentImpl(node); | |
| case Node.ELEMENT_NODE: | |
| return new ElementImpl(node); | |
| case Node.PROCESSING_INSTRUCTION_NODE: | |
| return new ProcessingInstructionImpl(node); | |
| case Node.TEXT_NODE: | |
| return new TextImpl(node); | |
| default: | |
| return new NodeImpl(node); | |
| } | |
| } | |
| /** | |
| * creates a new NodeImpl from the supplied JavaScriptObject. | |
| * | |
| * @param jso - the DOM node JavaScriptObject | |
| */ | |
| protected NodeImpl(JavaScriptObject jso) { | |
| super(jso); | |
| } | |
| /** | |
| * This function delegates to the native method <code>appendChild</code> in | |
| * XMLParserImpl. | |
| */ | |
| public Node appendChild(Node newChild) { | |
| try { | |
| final JavaScriptObject newChildJs = ((DOMItem) newChild).getJsObject(); | |
| final JavaScriptObject appendChildResults = XMLParserImpl.appendChild( | |
| this.getJsObject(), newChildJs); | |
| return NodeImpl.build(appendChildResults); | |
| } catch (JavaScriptException e) { | |
| throw new DOMNodeException(DOMException.INVALID_MODIFICATION_ERR, e, this); | |
| } | |
| } | |
| /** | |
| * This function delegates to the native method <code>cloneNode</code> in | |
| * XMLParserImpl. | |
| */ | |
| public Node cloneNode(boolean deep) { | |
| return NodeImpl.build(XMLParserImpl.cloneNode(this.getJsObject(), deep)); | |
| } | |
| public NamedNodeMap getAttributes() { | |
| return new NamedNodeMapImpl(XMLParserImpl.getAttributes(this.getJsObject())); | |
| } | |
| public NodeList getChildNodes() { | |
| return new NodeListImpl(XMLParserImpl.getChildNodes(this.getJsObject())); | |
| } | |
| public Node getFirstChild() { | |
| return getChildNodes().item(0); | |
| } | |
| public Node getLastChild() { | |
| return getChildNodes().item(getChildNodes().getLength() - 1); | |
| } | |
| /** | |
| * This function delegates to the native method <code>getNamespaceURI</code> | |
| * in XMLParserImpl. | |
| */ | |
| public String getNamespaceURI() { | |
| return XMLParserImpl.getNamespaceURI(this.getJsObject()); | |
| } | |
| public Node getNextSibling() { | |
| return NodeImpl.build(XMLParserImpl.getNextSibling(this.getJsObject())); | |
| } | |
| public String getNodeName() { | |
| return XMLParserImpl.getNodeName(this.getJsObject()); | |
| } | |
| public short getNodeType() { | |
| return XMLParserImpl.getNodeType(this.getJsObject()); | |
| } | |
| public String getNodeValue() { | |
| return XMLParserImpl.getNodeValue(this.getJsObject()); | |
| } | |
| public Document getOwnerDocument() { | |
| return (Document) NodeImpl.build(XMLParserImpl.getOwnerDocument(this.getJsObject())); | |
| } | |
| public Node getParentNode() { | |
| return NodeImpl.build(XMLParserImpl.getParentNode(this.getJsObject())); | |
| } | |
| /** | |
| * This function delegates to the native method <code>getPrefix</code> in | |
| * XMLParserImpl. | |
| */ | |
| public String getPrefix() { | |
| return XMLParserImpl.getPrefix(this.getJsObject()); | |
| } | |
| public Node getPreviousSibling() { | |
| return NodeImpl.build(XMLParserImpl.getPreviousSibling(this.getJsObject())); | |
| } | |
| /** | |
| * This function delegates to the native method <code>hasAttributes</code> | |
| * in XMLParserImpl. | |
| */ | |
| public boolean hasAttributes() { | |
| return XMLParserImpl.hasAttributes(this.getJsObject()); | |
| } | |
| /** | |
| * This function delegates to the native method <code>hasChildNodes</code> | |
| * in XMLParserImpl. | |
| */ | |
| public boolean hasChildNodes() { | |
| return XMLParserImpl.hasChildNodes(this.getJsObject()); | |
| } | |
| /** | |
| * This function delegates to the native method <code>insertBefore</code> in | |
| * XMLParserImpl. | |
| */ | |
| public Node insertBefore(Node newChild, Node refChild) { | |
| try { | |
| final JavaScriptObject newChildJs = ((DOMItem) newChild).getJsObject(); | |
| final JavaScriptObject refChildJs; | |
| if (refChild != null) { | |
| refChildJs = ((DOMItem) refChild).getJsObject(); | |
| } else { | |
| refChildJs = null; | |
| } | |
| final JavaScriptObject insertBeforeResults = XMLParserImpl.insertBefore( | |
| this.getJsObject(), newChildJs, refChildJs); | |
| return NodeImpl.build(insertBeforeResults); | |
| } catch (JavaScriptException e) { | |
| throw new DOMNodeException(DOMException.INVALID_MODIFICATION_ERR, e, this); | |
| } | |
| } | |
| /** | |
| * This function delegates to the native method <code>normalize</code> in | |
| * XMLParserImpl. | |
| */ | |
| public void normalize() { | |
| XMLParserImpl.normalize(this.getJsObject()); | |
| } | |
| /** | |
| * This function delegates to the native method <code>removeChild</code> in | |
| * XMLParserImpl. | |
| */ | |
| public Node removeChild(Node oldChild) { | |
| try { | |
| final JavaScriptObject oldChildJs = ((DOMItem) oldChild).getJsObject(); | |
| final JavaScriptObject removeChildResults = XMLParserImpl.removeChild( | |
| this.getJsObject(), oldChildJs); | |
| return NodeImpl.build(removeChildResults); | |
| } catch (JavaScriptException e) { | |
| throw new DOMNodeException(DOMException.INVALID_MODIFICATION_ERR, e, this); | |
| } | |
| } | |
| /** | |
| * This function delegates to the native method <code>replaceChild</code> in | |
| * XMLParserImpl. | |
| */ | |
| public Node replaceChild(Node newChild, Node oldChild) { | |
| try { | |
| final JavaScriptObject newChildJs = ((DOMItem) newChild).getJsObject(); | |
| final JavaScriptObject oldChildJs = ((DOMItem) oldChild).getJsObject(); | |
| final JavaScriptObject replaceChildResults = XMLParserImpl.replaceChild( | |
| this.getJsObject(), newChildJs, oldChildJs); | |
| return NodeImpl.build(replaceChildResults); | |
| } catch (JavaScriptException e) { | |
| throw new DOMNodeException(DOMException.INVALID_MODIFICATION_ERR, e, this); | |
| } | |
| } | |
| /** | |
| * This function delegates to the native method <code>setNodeValue</code> in | |
| * XMLParserImpl. | |
| */ | |
| public void setNodeValue(String nodeValue) { | |
| try { | |
| XMLParserImpl.setNodeValue(this.getJsObject(), nodeValue); | |
| } catch (JavaScriptException e) { | |
| throw new DOMNodeException(DOMException.INVALID_MODIFICATION_ERR, e, this); | |
| } | |
| } | |
| @Override | |
| public String toString() { | |
| return XMLParserImpl.getInstance().toStringImpl(this); | |
| } | |
| } |