| /* | |
| * 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.GWT; | |
| import com.google.gwt.core.client.JavaScriptException; | |
| import com.google.gwt.core.client.JavaScriptObject; | |
| import com.google.gwt.xml.client.Document; | |
| /** | |
| * Native implementation associated with | |
| * {@link com.google.gwt.xml.client.XMLParser}. | |
| */ | |
| public abstract class XMLParserImpl { | |
| private static XMLParserImpl impl = GWT.create(XMLParserImpl.class); | |
| public static XMLParserImpl getInstance() { | |
| return impl; | |
| } | |
| static native JavaScriptObject appendChild(JavaScriptObject jsObject, | |
| JavaScriptObject newChildJs) /*-{ | |
| return jsObject.appendChild(newChildJs); | |
| }-*/; | |
| static native void appendData(JavaScriptObject jsObject, String arg) /*-{ | |
| jsObject.appendData(arg); | |
| }-*/; | |
| static native JavaScriptObject cloneNode(JavaScriptObject jsObject, | |
| boolean deep) /*-{ | |
| return jsObject.cloneNode(deep); | |
| }-*/; | |
| static native JavaScriptObject createCDATASection(JavaScriptObject jsObject, | |
| String data) /*-{ | |
| return jsObject.createCDATASection(data); | |
| }-*/; | |
| static native JavaScriptObject createComment(JavaScriptObject jsObject, | |
| String data) /*-{ | |
| return jsObject.createComment(data); | |
| }-*/; | |
| static native JavaScriptObject createDocumentFragment( | |
| JavaScriptObject jsObject) /*-{ | |
| return jsObject.createDocumentFragment(); | |
| }-*/; | |
| static native JavaScriptObject createElement(JavaScriptObject jsObject, | |
| String tagName) /*-{ | |
| return jsObject.createElement(tagName); | |
| }-*/; | |
| static native JavaScriptObject createProcessingInstruction( | |
| JavaScriptObject jsObject, String target, String data) /*-{ | |
| return jsObject.createProcessingInstruction(target, data); | |
| }-*/; | |
| static native JavaScriptObject createTextNode(JavaScriptObject jsObject, | |
| String data) /*-{ | |
| return jsObject.createTextNode(data); | |
| }-*/; | |
| static native void deleteData(JavaScriptObject jsObject, int offset, int count) /*-{ | |
| jsObject.deleteData(offset, count); | |
| }-*/; | |
| static native String getAttribute(JavaScriptObject o, String name) /*-{ | |
| return o.getAttribute(name); | |
| }-*/; | |
| static native JavaScriptObject getAttributeNode(JavaScriptObject o, | |
| String name) /*-{ | |
| return o.getAttributeNode(name); | |
| }-*/; | |
| static native JavaScriptObject getAttributes(JavaScriptObject t) /*-{ | |
| return t.attributes; | |
| }-*/; | |
| static native JavaScriptObject getChildNodes(JavaScriptObject t) /*-{ | |
| return t.childNodes; | |
| }-*/; | |
| static native String getData(JavaScriptObject o) /*-{ | |
| return o.data; | |
| }-*/; | |
| static native JavaScriptObject getDocumentElement(JavaScriptObject o) /*-{ | |
| return o.documentElement; | |
| }-*/; | |
| static JavaScriptObject getElementById(JavaScriptObject document, String id) { | |
| return impl.getElementByIdImpl(document, id); | |
| } | |
| static JavaScriptObject getElementsByTagName(JavaScriptObject o, | |
| String tagName) { | |
| return impl.getElementsByTagNameImpl(o, tagName); | |
| } | |
| static native int getLength(JavaScriptObject o) /*-{ | |
| return o.length; | |
| }-*/; | |
| static native String getName(JavaScriptObject o) /*-{ | |
| return o.name; | |
| }-*/; | |
| static native JavaScriptObject getNamedItem(JavaScriptObject t, String name) /*-{ | |
| return t.getNamedItem(name); | |
| }-*/; | |
| static native String getNamespaceURI(JavaScriptObject jsObject) /*-{ | |
| return jsObject.namespaceURI; | |
| }-*/; | |
| static native JavaScriptObject getNextSibling(JavaScriptObject o) /*-{ | |
| return o.nextSibling; | |
| }-*/; | |
| static native String getNodeName(JavaScriptObject o) /*-{ | |
| return o.nodeName; | |
| }-*/; | |
| static native short getNodeType(JavaScriptObject jsObject) /*-{ | |
| var out = jsObject.nodeType; | |
| return (out == null) ? -1 : out; | |
| }-*/; | |
| static native String getNodeValue(JavaScriptObject o) /*-{ | |
| return o.nodeValue; | |
| }-*/; | |
| static native JavaScriptObject getOwnerDocument(JavaScriptObject o) /*-{ | |
| return o.ownerDocument; | |
| }-*/; | |
| static native JavaScriptObject getParentNode(JavaScriptObject o) /*-{ | |
| return o.parentNode; | |
| }-*/; | |
| static String getPrefix(JavaScriptObject jsObject) { | |
| return impl.getPrefixImpl(jsObject); | |
| } | |
| static native JavaScriptObject getPreviousSibling(JavaScriptObject o) /*-{ | |
| return o.previousSibling; | |
| }-*/; | |
| static native boolean getSpecified(JavaScriptObject o) /*-{ | |
| return o.specified; | |
| }-*/; | |
| static native String getTagName(JavaScriptObject o) /*-{ | |
| return o.tagName; | |
| }-*/; | |
| static native String getTarget(JavaScriptObject o) /*-{ | |
| return o.target; | |
| }-*/; | |
| static native String getValue(JavaScriptObject o) /*-{ | |
| return o.value; | |
| }-*/; | |
| static native boolean hasAttributes(JavaScriptObject jsObject) /*-{ | |
| return jsObject.attributes.length != 0; | |
| }-*/; | |
| static native boolean hasChildNodes(JavaScriptObject jsObject) /*-{ | |
| return jsObject.hasChildNodes(); | |
| }-*/; | |
| static JavaScriptObject importNode(JavaScriptObject jsObject, | |
| JavaScriptObject importedNode, boolean deep) { | |
| return impl.importNodeImpl(jsObject, importedNode, deep); | |
| } | |
| static native JavaScriptObject insertBefore(JavaScriptObject jsObject, | |
| JavaScriptObject newChildJs, JavaScriptObject refChildJs) /*-{ | |
| return jsObject.insertBefore(newChildJs, refChildJs); | |
| }-*/; | |
| static native void insertData(JavaScriptObject jsObject, int offset, | |
| String arg) /*-{ | |
| jsObject.insertData(offset, arg); | |
| }-*/; | |
| static native JavaScriptObject item(JavaScriptObject t, int index) /*-{ | |
| if (index >= t.length) { | |
| return null; | |
| } | |
| return t.item(index); | |
| }-*/; | |
| static native void normalize(JavaScriptObject jsObject) /*-{ | |
| jsObject.normalize(); | |
| }-*/; | |
| static native void removeAttribute(JavaScriptObject jsObject, String name) /*-{ | |
| jsObject.removeAttribute(name); | |
| }-*/; | |
| static native JavaScriptObject removeChild(JavaScriptObject jsObject, | |
| JavaScriptObject oldChildJs) /*-{ | |
| return jsObject.removeChild(oldChildJs); | |
| }-*/; | |
| static native JavaScriptObject removeNamedItem(JavaScriptObject jsObject, | |
| String name) /*-{ | |
| return jsObject.removeNamedItem(name); | |
| }-*/; | |
| static native JavaScriptObject replaceChild(JavaScriptObject jsObject, | |
| JavaScriptObject newChildJs, JavaScriptObject oldChildJs) /*-{ | |
| return jsObject.replaceChild(newChildJs, oldChildJs); | |
| }-*/; | |
| static native void replaceData(JavaScriptObject jsObject, int offset, | |
| int count, String arg) /*-{ | |
| jsObject.replaceData(offset, count, arg); | |
| }-*/; | |
| static native void setAttribute(JavaScriptObject jsObject, String name, | |
| String value) /*-{ | |
| jsObject.setAttribute(name, value); | |
| }-*/; | |
| static native void setData(JavaScriptObject jsObject, String data) /*-{ | |
| jsObject.data = data; | |
| }-*/; | |
| static native JavaScriptObject setNamedItem(JavaScriptObject jsObject, | |
| JavaScriptObject arg) /*-{ | |
| return jsObject.setNamedItem(arg); | |
| }-*/; | |
| static native void setNodeValue(JavaScriptObject jsObject, String nodeValue) /*-{ | |
| jsObject.nodeValue = nodeValue; | |
| }-*/; | |
| static native JavaScriptObject splitText(JavaScriptObject jsObject, int offset) /*-{ | |
| return jsObject.splitText(offset); | |
| }-*/; | |
| static native String substringData(JavaScriptObject o, int offset, int count) /*-{ | |
| return o.substringData(offset, count); | |
| }-*/; | |
| /** | |
| * Not globally instantable. | |
| */ | |
| XMLParserImpl() { | |
| } | |
| public final Document createDocument() { | |
| return (Document) NodeImpl.build(createDocumentImpl()); | |
| } | |
| public final Document parse(String contents) { | |
| try { | |
| return (Document) NodeImpl.build(parseImpl(contents)); | |
| } catch (JavaScriptException e) { | |
| throw new DOMParseException(contents, e); | |
| } | |
| } | |
| protected abstract JavaScriptObject createDocumentImpl(); | |
| protected abstract JavaScriptObject getElementByIdImpl( | |
| JavaScriptObject document, String id); | |
| protected abstract JavaScriptObject getElementsByTagNameImpl( | |
| JavaScriptObject o, String tagName); | |
| protected abstract String getPrefixImpl(JavaScriptObject jsObject); | |
| protected abstract JavaScriptObject importNodeImpl(JavaScriptObject jsObject, | |
| JavaScriptObject importedNode, boolean deep); | |
| protected abstract JavaScriptObject parseImpl(String contents); | |
| abstract String toStringImpl(ProcessingInstructionImpl node); | |
| abstract String toStringImpl(NodeImpl node); | |
| } |