blob: db5dc4380226e5896d37e7c0fe4cf497c1e52d81 [file] [log] [blame]
/* Copyright 2004 The Apache Software Foundation
*
* 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 org.apache.xmlbeans.impl.store;
import org.apache.xmlbeans.XmlCursor;
import org.apache.xmlbeans.XmlException;
import org.apache.xmlbeans.XmlObject;
import org.apache.xmlbeans.XmlRuntimeException;
import org.apache.xmlbeans.impl.common.XMLChar;
import org.apache.xmlbeans.impl.soap.*;
import org.w3c.dom.Node;
import org.w3c.dom.Text;
import org.w3c.dom.*;
import javax.xml.namespace.QName;
import javax.xml.stream.XMLStreamReader;
import javax.xml.transform.Source;
import java.io.PrintStream;
import java.util.*;
// DOM Level 3
public final class DomImpl {
static final int ELEMENT = Node.ELEMENT_NODE;
static final int ATTR = Node.ATTRIBUTE_NODE;
static final int TEXT = Node.TEXT_NODE;
static final int CDATA = Node.CDATA_SECTION_NODE;
static final int ENTITYREF = Node.ENTITY_REFERENCE_NODE;
static final int ENTITY = Node.ENTITY_NODE;
static final int PROCINST = Node.PROCESSING_INSTRUCTION_NODE;
static final int COMMENT = Node.COMMENT_NODE;
static final int DOCUMENT = Node.DOCUMENT_NODE;
static final int DOCTYPE = Node.DOCUMENT_TYPE_NODE;
static final int DOCFRAG = Node.DOCUMENT_FRAGMENT_NODE;
static final int NOTATION = Node.NOTATION_NODE;
public interface Dom {
Locale locale();
int nodeType();
Cur tempCur();
QName getQName();
boolean nodeCanHavePrefixUri();
void dump();
void dump(PrintStream o);
void dump(PrintStream o, Object ref);
}
;
static Dom parent(Dom d) {
return node_getParentNode(d);
}
static Dom firstChild(Dom d) {
return node_getFirstChild(d);
}
static Dom nextSibling(Dom d) {
return node_getNextSibling(d);
}
static Dom prevSibling(Dom d) {
return node_getPreviousSibling(d);
}
public static Dom append(Dom n, Dom p) {
return node_insertBefore(p, n, null);
}
public static Dom insert(Dom n, Dom b) {
assert b != null;
return node_insertBefore(parent(b), n, b);
}
public static Dom remove(Dom n) {
Dom p = parent(n);
if (p != null) {
node_removeChild(p, n);
}
return n;
}
//
// Handy dandy Dom exceptions
//
static class HierarchyRequestErr extends DOMException {
HierarchyRequestErr() {
this("This node isn't allowed there");
}
HierarchyRequestErr(String message) {
super(HIERARCHY_REQUEST_ERR, message);
}
}
static class WrongDocumentErr extends DOMException {
WrongDocumentErr() {
this("Nodes do not belong to the same document");
}
WrongDocumentErr(String message) {
super(WRONG_DOCUMENT_ERR, message);
}
}
static class NotFoundErr extends DOMException {
NotFoundErr() {
this("Node not found");
}
NotFoundErr(String message) {
super(NOT_FOUND_ERR, message);
}
}
static class NamespaceErr extends DOMException {
NamespaceErr() {
this("Namespace error");
}
NamespaceErr(String message) {
super(NAMESPACE_ERR, message);
}
}
static class NoModificationAllowedErr extends DOMException {
NoModificationAllowedErr() {
this("No modification allowed error");
}
NoModificationAllowedErr(String message) {
super(NO_MODIFICATION_ALLOWED_ERR, message);
}
}
static class InuseAttributeError extends DOMException {
InuseAttributeError() {
this("Attribute currently in use error");
}
InuseAttributeError(String message) {
super(INUSE_ATTRIBUTE_ERR, message);
}
}
static class IndexSizeError extends DOMException {
IndexSizeError() {
this("Index Size Error");
}
IndexSizeError(String message) {
super(INDEX_SIZE_ERR, message);
}
}
static class NotSupportedError extends DOMException {
NotSupportedError() {
this("This operation is not supported");
}
NotSupportedError(String message) {
super(NOT_SUPPORTED_ERR, message);
}
}
static class InvalidCharacterError extends DOMException {
InvalidCharacterError() {
this("The name contains an invalid character");
}
InvalidCharacterError(String message) {
super(INVALID_CHARACTER_ERR, message);
}
}
//
// Helper fcns
//
private static final class EmptyNodeList implements NodeList {
public int getLength() {
return 0;
}
public Node item(int i) {
return null;
}
}
public static NodeList _emptyNodeList = new EmptyNodeList();
static String nodeKindName(int t) {
switch (t) {
case ATTR:
return "attribute";
case CDATA:
return "cdata section";
case COMMENT:
return "comment";
case DOCFRAG:
return "document fragment";
case DOCUMENT:
return "document";
case DOCTYPE:
return "document type";
case ELEMENT:
return "element";
case ENTITY:
return "entity";
case ENTITYREF:
return "entity reference";
case NOTATION:
return "notation";
case PROCINST:
return "processing instruction";
case TEXT:
return "text";
default:
throw new RuntimeException("Unknown node type");
}
}
private static String isValidChild(Dom parent, Dom child) {
int pk = parent.nodeType();
int ck = child.nodeType();
switch (pk) {
case DOCUMENT: {
switch (ck) {
case ELEMENT: {
if (document_getDocumentElement(parent) != null) {
return "Documents may only have a maximum of one document element";
}
return null;
}
case DOCTYPE: {
if (document_getDoctype(parent) != null) {
return "Documents may only have a maximum of one document type node";
}
return null;
}
case PROCINST:
case COMMENT:
return null;
}
break;
}
case ATTR: {
if (ck == TEXT || ck == ENTITYREF) {
return null;
}
// TODO -- traverse the entity tree, making sure that there are
// only entity refs and text nodes in it.
break;
}
case DOCFRAG:
case ELEMENT:
case ENTITY:
case ENTITYREF: {
switch (ck) {
case ELEMENT:
case ENTITYREF:
case CDATA:
case TEXT:
case COMMENT:
case PROCINST:
return null;
}
break;
}
case CDATA:
case TEXT:
case COMMENT:
case PROCINST:
case DOCTYPE:
case NOTATION:
return nodeKindName(pk) + " nodes may not have any children";
}
return
nodeKindName(pk) + " nodes may not have " +
nodeKindName(ck) + " nodes as children";
}
private static void validateNewChild(Dom parent, Dom child) {
String msg = isValidChild(parent, child);
if (msg != null) {
throw new HierarchyRequestErr(msg);
}
if (parent == child) {
throw new HierarchyRequestErr("New child and parent are the same node");
}
while ((parent = parent(parent)) != null) {
// TODO - use read only state on a node to know if it is under an
// entity ref
if (child.nodeType() == ENTITYREF) {
throw new NoModificationAllowedErr("Entity reference trees may not be modified");
}
if (child == parent) {
throw new HierarchyRequestErr("New child is an ancestor node of the parent node");
}
}
}
private static String validatePrefix(
String prefix, String uri, String local, boolean isAttr) {
validateNcName(prefix);
if (prefix == null) {
prefix = "";
}
if (uri == null) {
uri = "";
}
if (prefix.length() > 0 && uri.length() == 0) {
throw new NamespaceErr("Attempt to give a prefix for no namespace");
}
if (prefix.equals("xml") && !uri.equals(Locale._xml1998Uri)) {
throw new NamespaceErr("Invalid prefix - begins with 'xml'");
}
if (isAttr) {
if (prefix.length() > 0) {
if (local.equals("xmlns")) {
throw new NamespaceErr("Invalid namespace - attr is default namespace already");
}
if (Locale.beginsWithXml(local)) {
throw new NamespaceErr("Invalid namespace - attr prefix begins with 'xml'");
}
if (prefix.equals("xmlns") && !uri.equals(Locale._xmlnsUri)) {
throw new NamespaceErr("Invalid namespace - uri is not '" + Locale._xmlnsUri + ";");
}
} else {
if (local.equals("xmlns") && !uri.equals(Locale._xmlnsUri)) {
throw new NamespaceErr("Invalid namespace - uri is not '" + Locale._xmlnsUri + ";");
}
}
} else if (Locale.beginsWithXml(prefix)) {
throw new NamespaceErr("Invalid prefix - begins with 'xml'");
}
return prefix;
}
private static void validateName(String name) {
if (name == null) {
throw new IllegalArgumentException("Name is null");
}
if (name.length() == 0) {
throw new IllegalArgumentException("Name is empty");
}
if (!XMLChar.isValidName(name)) {
throw new InvalidCharacterError("Name has an invalid character");
}
}
private static void validateNcName(String name) {
if (name != null && name.length() > 0 && !XMLChar.isValidNCName(name)) {
throw new InvalidCharacterError();
}
}
private static void validateQualifiedName(String name, String uri, boolean isAttr) {
assert name != null;
if (uri == null) {
uri = "";
}
int i = name.indexOf(':');
String local;
if (i < 0) {
validateNcName(local = name);
if (isAttr && local.equals("xmlns") && !uri.equals(Locale._xmlnsUri)) {
throw
new NamespaceErr(
"Default xmlns attribute does not have namespace: " + Locale._xmlnsUri);
}
} else {
if (i == 0) {
throw new NamespaceErr("Invalid qualified name, no prefix specified");
}
String prefix = name.substring(0, i);
validateNcName(prefix);
if (uri.length() == 0) {
throw new NamespaceErr("Attempt to give a prefix for no namespace");
}
local = name.substring(i + 1);
if (local.indexOf(':') >= 0) {
throw new NamespaceErr("Invalid qualified name, more than one colon");
}
validateNcName(local);
if (prefix.equals("xml") && !uri.equals(Locale._xml1998Uri)) {
throw new NamespaceErr("Invalid prefix - begins with 'xml'");
}
}
if (local.length() == 0) {
throw new NamespaceErr("Invalid qualified name, no local part specified");
}
}
private static void removeNode(Dom n) {
assert n.nodeType() != TEXT && n.nodeType() != CDATA;
Cur cFrom = n.tempCur();
cFrom.toEnd();
// Move any char nodes which ater after the node to remove to be before it. The call to
// Next here does two things, it tells me if I can get after the move to remove (all nodes
// but the root) and it positions me at the place where there are char nodes after.
if (cFrom.next()) {
CharNode fromNodes = cFrom.getCharNodes();
if (fromNodes != null) {
cFrom.setCharNodes(null);
Cur cTo = n.tempCur();
cTo.setCharNodes(CharNode.appendNodes(cTo.getCharNodes(), fromNodes));
cTo.release();
}
}
cFrom.release();
Cur.moveNode((Xobj) n, null);
}
private abstract static class ElementsNodeList implements NodeList {
ElementsNodeList(Dom root) {
assert root.nodeType() == DOCUMENT || root.nodeType() == ELEMENT;
_root = root;
_locale = _root.locale();
_version = 0;
}
public int getLength() {
ensureElements();
return _elements.size();
}
public Node item(int i) {
ensureElements();
return i < 0 || i >= _elements.size() ? (Node) null : (Node) _elements.get(i);
}
private void ensureElements() {
if (_version == _locale.version()) {
return;
}
_version = _locale.version();
_elements = new ArrayList();
Locale l = _locale;
if (l.noSync()) {
l.enter();
try {
addElements(_root);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
addElements(_root);
} finally {
l.exit();
}
}
}
}
private void addElements(Dom node) {
for (Dom c = firstChild(node); c != null; c = nextSibling(c)) {
if (c.nodeType() == ELEMENT) {
if (match(c)) {
_elements.add(c);
}
addElements(c);
}
}
}
protected abstract boolean match(Dom element);
private Dom _root;
private Locale _locale;
private long _version;
private ArrayList _elements;
}
private static class ElementsByTagNameNodeList extends ElementsNodeList {
ElementsByTagNameNodeList(Dom root, String name) {
super(root);
_name = name;
}
protected boolean match(Dom element) {
return _name.equals("*") ? true : _node_getNodeName(element).equals(_name);
}
private String _name;
}
private static class ElementsByTagNameNSNodeList extends ElementsNodeList {
ElementsByTagNameNSNodeList(Dom root, String uri, String local) {
super(root);
_uri = uri == null ? "" : uri;
_local = local;
}
protected boolean match(Dom element) {
if (!(_uri.equals("*") ? true : _node_getNamespaceURI(element).equals(_uri))) {
return false;
}
return _local.equals("*") ? true : _node_getLocalName(element).equals(_local);
}
private String _uri;
private String _local;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Document _domImplementation_createDocument(
Locale l, String u, String n, DocumentType t) {
Document d;
if (l.noSync()) {
l.enter();
try {
return domImplementation_createDocument(l, u, n, t);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return domImplementation_createDocument(l, u, n, t);
} finally {
l.exit();
}
}
}
}
public static Document domImplementation_createDocument(
Locale l, String namespaceURI, String qualifiedName, DocumentType doctype) {
validateQualifiedName(qualifiedName, namespaceURI, false);
Cur c = l.tempCur();
c.createDomDocumentRoot();
Document doc = (Document) c.getDom();
c.next();
c.createElement(l.makeQualifiedQName(namespaceURI, qualifiedName));
if (doctype != null) {
throw new RuntimeException("Not impl");
}
c.toParent();
try {
Locale.autoTypeDocument(c, null, null);
} catch (XmlException e) {
throw new XmlRuntimeException(e);
}
c.release();
return doc;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _domImplementation_hasFeature(Locale l, String feature, String version) {
if (feature == null) {
return false;
}
if (version != null && version.length() > 0 &&
!version.equals("1.0") && !version.equals("2.0")) {
return false;
}
if (feature.equalsIgnoreCase("core")) {
return true;
}
if (feature.equalsIgnoreCase("xml")) {
return true;
}
return false;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Element _document_getDocumentElement(Dom d) {
Locale l = d.locale();
Dom e;
if (l.noSync()) {
l.enter();
try {
e = document_getDocumentElement(d);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
e = document_getDocumentElement(d);
} finally {
l.exit();
}
}
}
return (Element) e;
}
public static Dom document_getDocumentElement(Dom d) {
for (d = firstChild(d); d != null; d = nextSibling(d)) {
if (d.nodeType() == ELEMENT) {
return d;
}
}
return null;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static DocumentFragment _document_createDocumentFragment(Dom d) {
Locale l = d.locale();
Dom f;
if (l.noSync()) {
l.enter();
try {
f = document_createDocumentFragment(d);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
f = document_createDocumentFragment(d);
} finally {
l.exit();
}
}
}
return (DocumentFragment) f;
}
public static Dom document_createDocumentFragment(Dom d) {
Cur c = d.locale().tempCur();
c.createDomDocFragRoot();
Dom f = c.getDom();
c.release();
return f;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Element _document_createElement(Dom d, String name) {
Locale l = d.locale();
Dom e;
if (l.noSync()) {
l.enter();
try {
e = document_createElement(d, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
e = document_createElement(d, name);
} finally {
l.exit();
}
}
}
return (Element) e;
}
public static Dom document_createElement(Dom d, String name) {
validateName(name);
Locale l = d.locale();
Cur c = l.tempCur();
c.createElement(l.makeQualifiedQName("", name));
Dom e = c.getDom();
c.release();
((ElementXobj) e)._canHavePrefixUri = false;
return e;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Element _document_createElementNS(Dom d, String uri, String qname) {
Locale l = d.locale();
Dom e;
if (l.noSync()) {
l.enter();
try {
e = document_createElementNS(d, uri, qname);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
e = document_createElementNS(d, uri, qname);
} finally {
l.exit();
}
}
}
return (Element) e;
}
public static Dom document_createElementNS(Dom d, String uri, String qname) {
validateQualifiedName(qname, uri, false);
Locale l = d.locale();
Cur c = l.tempCur();
c.createElement(l.makeQualifiedQName(uri, qname));
Dom e = c.getDom();
c.release();
return e;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Attr _document_createAttribute(Dom d, String name) {
Locale l = d.locale();
Dom a;
if (l.noSync()) {
l.enter();
try {
a = document_createAttribute(d, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
a = document_createAttribute(d, name);
} finally {
l.exit();
}
}
}
return (Attr) a;
}
public static Dom document_createAttribute(Dom d, String name) {
validateName(name);
Locale l = d.locale();
Cur c = l.tempCur();
c.createAttr(l.makeQualifiedQName("", name));
Dom e = c.getDom();
c.release();
((AttrXobj) e)._canHavePrefixUri = false;
return e;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Attr _document_createAttributeNS(Dom d, String uri, String qname) {
Locale l = d.locale();
Dom a;
if (l.noSync()) {
l.enter();
try {
a = document_createAttributeNS(d, uri, qname);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
a = document_createAttributeNS(d, uri, qname);
} finally {
l.exit();
}
}
}
return (Attr) a;
}
public static Dom document_createAttributeNS(Dom d, String uri, String qname) {
validateQualifiedName(qname, uri, true);
Locale l = d.locale();
Cur c = l.tempCur();
c.createAttr(l.makeQualifiedQName(uri, qname));
Dom e = c.getDom();
c.release();
return e;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Comment _document_createComment(Dom d, String data) {
Locale l = d.locale();
Dom c;
if (l.noSync()) {
l.enter();
try {
c = document_createComment(d, data);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
c = document_createComment(d, data);
} finally {
l.exit();
}
}
}
return (Comment) c;
}
public static Dom document_createComment(Dom d, String data) {
Locale l = d.locale();
Cur c = l.tempCur();
c.createComment();
Dom comment = c.getDom();
if (data != null) {
c.next();
c.insertString(data);
}
c.release();
return comment;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static ProcessingInstruction _document_createProcessingInstruction(Dom d, String target, String data) {
Locale l = d.locale();
Dom pi;
if (l.noSync()) {
l.enter();
try {
pi = document_createProcessingInstruction(d, target, data);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
pi = document_createProcessingInstruction(d, target, data);
} finally {
l.exit();
}
}
}
return (ProcessingInstruction) pi;
}
public static Dom document_createProcessingInstruction(Dom d, String target, String data) {
if (target == null) {
throw new IllegalArgumentException("Target is null");
}
if (target.length() == 0) {
throw new IllegalArgumentException("Target is empty");
}
if (!XMLChar.isValidName(target)) {
throw new InvalidCharacterError("Target has an invalid character");
}
if (Locale.beginsWithXml(target) && target.length() == 3) {
throw new InvalidCharacterError("Invalid target - is 'xml'");
}
Locale l = d.locale();
Cur c = l.tempCur();
c.createProcinst(target);
Dom pi = c.getDom();
if (data != null) {
c.next();
c.insertString(data);
}
c.release();
return pi;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static CDATASection _document_createCDATASection(Dom d, String data) {
return (CDATASection) document_createCDATASection(d, data);
}
public static Dom document_createCDATASection(Dom d, String data) {
TextNode t = d.locale().createCdataNode();
if (data == null) {
data = "";
}
t.setChars(data, 0, data.length());
return t;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Text _document_createTextNode(Dom d, String data) {
return (Text) document_createTextNode(d, data);
}
public static CharNode document_createTextNode(Dom d, String data) {
TextNode t = d.locale().createTextNode();
if (data == null) {
data = "";
}
t.setChars(data, 0, data.length());
return t;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static EntityReference _document_createEntityReference(Dom d, String name) {
throw new RuntimeException("Not implemented");
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Element _document_getElementById(Dom d, String elementId) {
throw new RuntimeException("Not implemented");
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static NodeList _document_getElementsByTagName(Dom d, String name) {
Locale l = d.locale();
if (l.noSync()) {
l.enter();
try {
return document_getElementsByTagName(d, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return document_getElementsByTagName(d, name);
} finally {
l.exit();
}
}
}
}
public static NodeList document_getElementsByTagName(Dom d, String name) {
return new ElementsByTagNameNodeList(d, name);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static NodeList _document_getElementsByTagNameNS(Dom d, String uri, String local) {
Locale l = d.locale();
if (l.noSync()) {
l.enter();
try {
return document_getElementsByTagNameNS(d, uri, local);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return document_getElementsByTagNameNS(d, uri, local);
} finally {
l.exit();
}
}
}
}
public static NodeList document_getElementsByTagNameNS(Dom d, String uri, String local) {
return new ElementsByTagNameNSNodeList(d, uri, local);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static DOMImplementation _document_getImplementation(Dom d) {
return (DOMImplementation) d.locale();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _document_importNode(Dom d, Node n, boolean deep) {
Locale l = d.locale();
Dom i;
// // TODO - need to wrap this in sync ..
// if (n instanceof Dom)
// i = node_cloneNode( (Dom) n, deep, m );
// else
// TODO -- I'm importing my own nodes through DOM methods! -- make this faster
{
if (l.noSync()) {
l.enter();
try {
i = document_importNode(d, n, deep);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
i = document_importNode(d, n, deep);
} finally {
l.exit();
}
}
}
}
return (Node) i;
}
public static Dom document_importNode(Dom d, Node n, boolean deep) {
if (n == null) {
return null;
}
Dom i;
boolean copyChildren = false;
switch (n.getNodeType()) {
case DOCUMENT:
throw new NotSupportedError("Document nodes may not be imported");
case DOCTYPE:
throw new NotSupportedError("Document type nodes may not be imported");
case ELEMENT: {
String local = n.getLocalName();
if (local == null || local.length() == 0) {
i = document_createElement(d, n.getNodeName());
} else {
String prefix = n.getPrefix();
String name = prefix == null || prefix.length() == 0 ? local : prefix + ":" + local;
String uri = n.getNamespaceURI();
if (uri == null || uri.length() == 0) {
i = document_createElement(d, name);
} else {
i = document_createElementNS(d, uri, name);
}
}
NamedNodeMap attrs = n.getAttributes();
for (int a = 0; a < attrs.getLength(); a++) {
attributes_setNamedItem(i, document_importNode(d, attrs.item(a), true));
}
copyChildren = deep;
break;
}
case ATTR: {
String local = n.getLocalName();
if (local == null || local.length() == 0) {
i = document_createAttribute(d, n.getNodeName());
} else {
String prefix = n.getPrefix();
String name = prefix == null || prefix.length() == 0 ? local : prefix + ":" + local;
String uri = n.getNamespaceURI();
if (uri == null || uri.length() == 0) {
i = document_createAttribute(d, name);
} else {
i = document_createAttributeNS(d, uri, name);
}
}
copyChildren = true;
break;
}
case DOCFRAG: {
i = document_createDocumentFragment(d);
copyChildren = deep;
break;
}
case PROCINST: {
i = document_createProcessingInstruction(d, n.getNodeName(), n.getNodeValue());
break;
}
case COMMENT: {
i = document_createComment(d, n.getNodeValue());
break;
}
case TEXT: {
i = document_createTextNode(d, n.getNodeValue());
break;
}
case CDATA: {
i = document_createCDATASection(d, n.getNodeValue());
break;
}
case ENTITYREF:
case ENTITY:
case NOTATION:
throw new RuntimeException("Not impl");
default:
throw new RuntimeException("Unknown kind");
}
if (copyChildren) {
NodeList children = n.getChildNodes();
for (int c = 0; c < children.getLength(); c++) {
node_insertBefore(i, document_importNode(d, children.item(c), true), null);
}
}
return i;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static DocumentType _document_getDoctype(Dom d) {
Locale l = d.locale();
Dom dt;
if (l.noSync()) {
l.enter();
try {
dt = document_getDoctype(d);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
dt = document_getDoctype(d);
} finally {
l.exit();
}
}
}
return (DocumentType) dt;
}
public static Dom document_getDoctype(Dom d) {
return null;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Document _node_getOwnerDocument(Dom n) {
Locale l = n.locale();
Dom d;
if (l.noSync()) {
l.enter();
try {
d = node_getOwnerDocument(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
d = node_getOwnerDocument(n);
} finally {
l.exit();
}
}
}
return (Document) d;
}
public static Dom node_getOwnerDocument(Dom n) {
if (n.nodeType() == DOCUMENT) {
return null;
}
Locale l = n.locale();
if (l._ownerDoc == null) {
Cur c = l.tempCur();
c.createDomDocumentRoot();
l._ownerDoc = c.getDom();
c.release();
}
return l._ownerDoc;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_getParentNode(Dom n) {
Locale l = n.locale();
Dom p;
if (l.noSync()) {
l.enter();
try {
p = node_getParentNode(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
p = node_getParentNode(n);
} finally {
l.exit();
}
}
}
return (Node) p;
}
public static Dom node_getParentNode(Dom n) {
Cur c = null;
switch (n.nodeType()) {
case DOCUMENT:
case DOCFRAG:
case ATTR:
break;
case PROCINST:
case COMMENT:
case ELEMENT: {
if (!(c = n.tempCur()).toParentRaw()) {
c.release();
c = null;
}
break;
}
case TEXT:
case CDATA: {
if ((c = n.tempCur()) != null) {
c.toParent();
}
break;
}
case ENTITYREF:
throw new RuntimeException("Not impl");
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
default:
throw new RuntimeException("Unknown kind");
}
if (c == null) {
return null;
}
Dom d = c.getDom();
c.release();
return d;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_getFirstChild(Dom n) {
Locale l = n.locale();
Dom fc;
assert n instanceof Xobj;
Xobj node = (Xobj) n;
if (!node.isVacant()) {
if (node.isFirstChildPtrDomUsable()) {
return (Node) node._firstChild;
}
Xobj lastAttr = node.lastAttr();
if (lastAttr != null &&
lastAttr.isNextSiblingPtrDomUsable()) {
return (NodeXobj) lastAttr._nextSibling;
}
if (node.isExistingCharNodesValueUsable()) {
return node._charNodesValue;
}
}
if (l.noSync()) {
fc = node_getFirstChild(n);
} else {
synchronized (l) {
fc = node_getFirstChild(n);
}
}
return (Node) fc;
}
public static Dom node_getFirstChild(Dom n) {
Dom fc = null;
switch (n.nodeType()) {
case TEXT:
case CDATA:
case PROCINST:
case COMMENT:
break;
case ENTITYREF:
throw new RuntimeException("Not impl");
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
case ELEMENT:
case DOCUMENT:
case DOCFRAG:
case ATTR: {
Xobj node = (Xobj) n;
node.ensureOccupancy();
if (node.isFirstChildPtrDomUsable()) {
return (NodeXobj) node._firstChild;
}
Xobj lastAttr = node.lastAttr();
if (lastAttr != null) {
if (lastAttr.isNextSiblingPtrDomUsable()) {
return (NodeXobj) lastAttr._nextSibling;
} else if (lastAttr.isCharNodesAfterUsable()) {
return (CharNode) lastAttr._charNodesAfter;
}
}
if (node.isCharNodesValueUsable()) {
return node._charNodesValue;
}
break;
}
}
// TODO - handle entity refs here ...
return fc;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_getLastChild(Dom n) {
Locale l = n.locale();
Dom lc;
if (l.noSync()) {
l.enter();
try {
lc = node_getLastChild(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
lc = node_getLastChild(n);
} finally {
l.exit();
}
}
}
return (Node) lc;
}
public static Dom node_getLastChild(Dom n) {
switch (n.nodeType()) {
case TEXT:
case CDATA:
case PROCINST:
case COMMENT:
return null;
case ENTITYREF:
throw new RuntimeException("Not impl");
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
case ELEMENT:
case DOCUMENT:
case DOCFRAG:
case ATTR:
break;
}
Dom lc = null;
CharNode nodes;
Cur c = n.tempCur();
if (c.toLastChild()) {
lc = c.getDom();
c.skip();
if ((nodes = c.getCharNodes()) != null) {
lc = null;
}
} else {
c.next();
nodes = c.getCharNodes();
}
if (lc == null && nodes != null) {
while (nodes._next != null) {
nodes = nodes._next;
}
lc = nodes;
}
c.release();
// TODO - handle entity refs here ...
return lc;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_getNextSibling(Dom n) {
Locale l = n.locale();
Dom ns;
if (l.noSync()) {
ns = node_getNextSibling(n);
} else {
synchronized (l) {
ns = node_getNextSibling(n);
}
}
return (Node) ns;
}
public static Dom node_getNextSibling(Dom n) {
Dom ns = null;
switch (n.nodeType()) {
case DOCUMENT:
case DOCFRAG:
case ATTR:
break;
case TEXT:
case CDATA: {
CharNode cn = (CharNode) n;
//if src is attr & next is null , ret null;
//if src is container and
// a) this node is aftertext && src._nextSib = null; ret null
// b) this node is value && src._fc = null; ret null
if (!(cn.getObject() instanceof Xobj)) {
return null;
}
Xobj src = (Xobj) cn.getObject();
//if src is attr this node is always value and
// next is always the next ptr of the attr
src._charNodesAfter =
Cur.updateCharNodes(src._locale, src, src._charNodesAfter, src._cchAfter);
src._charNodesValue =
Cur.updateCharNodes(src._locale, src, src._charNodesValue, src._cchValue);
if (cn._next != null) {
ns = cn._next;
break;
}
boolean isThisNodeAfterText = cn.isNodeAftertext();
if (isThisNodeAfterText) {
ns = (NodeXobj) src._nextSibling;
} else //srcValue or attribute source
{
ns = (NodeXobj) src._firstChild;
}
break;
}
case PROCINST:
case COMMENT:
case ELEMENT: {
assert n instanceof Xobj : "PI, Comments and Elements always backed up by Xobj";
Xobj node = (Xobj) n;
node.ensureOccupancy();
if (node.isNextSiblingPtrDomUsable()) {
return
(NodeXobj) node._nextSibling;
}
if (node.isCharNodesAfterUsable()) {
return node._charNodesAfter;
}
break;
}
case ENTITY:
case NOTATION:
case ENTITYREF:
case DOCTYPE:
throw new RuntimeException("Not implemented");
}
// TODO - handle entity refs here ...
return ns;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_getPreviousSibling(Dom n) {
Locale l = n.locale();
Dom ps;
if (l.noSync()) {
ps = node_getPreviousSibling(n);
} else {
synchronized (l) {
ps = node_getPreviousSibling(n);
}
}
return (Node) ps;
}
public static Dom node_getPreviousSibling(Dom n) {
Dom prev;
switch (n.nodeType()) {
case TEXT:
case CDATA: {
assert n instanceof CharNode : "Text/CData should be a CharNode";
CharNode node = (CharNode) n;
if (!(node.getObject() instanceof Xobj)) {
return null;
}
Xobj src = (Xobj) node.getObject();
src.ensureOccupancy();
boolean isThisNodeAfterText = node.isNodeAftertext();
prev = node._prev;
if (prev == null) {
prev = isThisNodeAfterText ? (Dom) src :
src._charNodesValue;
}
break;
}
default: {
assert n instanceof Xobj;
Xobj node = (Xobj) n;
prev = (Dom) node._prevSibling;
if ((prev == null || !(node instanceof AttrXobj) && prev instanceof AttrXobj) &&
node._parent != null) {
prev = node_getFirstChild((Dom) node._parent);
}
}
}
Dom temp = prev;
while (temp != null && (temp = node_getNextSibling(temp)) != n) {
prev = temp;
}
return prev;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _node_hasAttributes(Dom n) {
Locale l = n.locale();
if (l.noSync()) {
l.enter();
try {
return node_hasAttributes(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return node_hasAttributes(n);
} finally {
l.exit();
}
}
}
}
public static boolean node_hasAttributes(Dom n) {
boolean hasAttrs = false;
if (n.nodeType() == ELEMENT) {
Cur c = n.tempCur();
hasAttrs = c.hasAttrs();
c.release();
}
return hasAttrs;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _node_isSupported(Dom n, String feature, String version) {
return _domImplementation_hasFeature(n.locale(), feature, version);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _node_normalize(Dom n) {
Locale l = n.locale();
if (l.noSync()) {
l.enter();
try {
node_normalize(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
node_normalize(n);
} finally {
l.exit();
}
}
}
}
public static void node_normalize(Dom n) {
switch (n.nodeType()) {
case TEXT:
case CDATA:
case PROCINST:
case COMMENT:
return;
case ENTITYREF:
throw new RuntimeException("Not impl");
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
case ELEMENT:
case DOCUMENT:
case DOCFRAG:
case ATTR:
break;
}
Cur c = n.tempCur();
c.push();
do {
c.nextWithAttrs();
CharNode cn = c.getCharNodes();
if (cn != null) {
if (!c.isText()) {
while (cn != null) {
cn.setChars(null, 0, 0);
cn = CharNode.remove(cn, cn);
}
} else if (cn._next != null) {
while (cn._next != null) {
cn.setChars(null, 0, 0);
cn = CharNode.remove(cn, cn._next);
}
cn._cch = Integer.MAX_VALUE;
}
c.setCharNodes(cn);
}
}
while (!c.isAtEndOfLastPush());
c.release();
n.locale().invalidateDomCaches(n);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _node_hasChildNodes(Dom n) {
// TODO - make this faster
return n instanceof Xobj && _node_getFirstChild(n) != null;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_appendChild(Dom p, Node newChild) {
return _node_insertBefore(p, newChild, null);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_replaceChild(Dom p, Node newChild, Node oldChild) {
Locale l = p.locale();
if (newChild == null) {
throw new IllegalArgumentException("Child to add is null");
}
if (oldChild == null) {
throw new NotFoundErr("Child to replace is null");
}
Dom nc;
if (!(newChild instanceof Dom) || (nc = (Dom) newChild).locale() != l) {
throw new WrongDocumentErr("Child to add is from another document");
}
Dom oc = null;
if (!(oldChild instanceof Dom) || (oc = (Dom) oldChild).locale() != l) {
throw new WrongDocumentErr("Child to replace is from another document");
}
Dom d;
if (l.noSync()) {
l.enter();
try {
d = node_replaceChild(p, nc, oc);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
d = node_replaceChild(p, nc, oc);
} finally {
l.exit();
}
}
}
return (Node) d;
}
public static Dom node_replaceChild(Dom p, Dom newChild, Dom oldChild) {
// Remove the old child firest to avoid a dom exception raised
// when inserting two document elements
Dom nextNode = node_getNextSibling(oldChild);
node_removeChild(p, oldChild);
try {
node_insertBefore(p, newChild, nextNode);
} catch (DOMException e) {
node_insertBefore(p, oldChild, nextNode);
throw e;
}
return oldChild;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_insertBefore(Dom p, Node newChild, Node refChild) {
Locale l = p.locale();
if (newChild == null) {
throw new IllegalArgumentException("Child to add is null");
}
Dom nc;
if (!(newChild instanceof Dom) || (nc = (Dom) newChild).locale() != l) {
throw new WrongDocumentErr("Child to add is from another document");
}
Dom rc = null;
if (refChild != null) {
if (!(refChild instanceof Dom) || (rc = (Dom) refChild).locale() != l) {
throw new WrongDocumentErr("Reference child is from another document");
}
}
Dom d;
if (l.noSync()) {
l.enter();
try {
d = node_insertBefore(p, nc, rc);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
d = node_insertBefore(p, nc, rc);
} finally {
l.exit();
}
}
}
return (Node) d;
}
public static Dom node_insertBefore(Dom p, Dom nc, Dom rc) {
assert nc != null;
// Inserting self before self is a no-op
if (nc == rc) {
return nc;
}
if (rc != null && parent(rc) != p) {
throw new NotFoundErr("RefChild is not a child of this node");
}
// TODO - obey readonly status of a substree
int nck = nc.nodeType();
if (nck == DOCFRAG) {
for (Dom c = firstChild(nc); c != null; c = nextSibling(c)) {
validateNewChild(p, c);
}
for (Dom c = firstChild(nc); c != null; ) {
Dom n = nextSibling(c);
if (rc == null) {
append(c, p);
} else {
insert(c, rc);
}
c = n;
}
return nc;
}
//
// Make sure the new child is allowed here
//
validateNewChild(p, nc);
//
// Orphan the child before establishing a new parent
//
remove(nc);
int pk = p.nodeType();
// Only these nodes can be modifiable parents
assert pk == ATTR || pk == DOCFRAG || pk == DOCUMENT || pk == ELEMENT;
switch (nck) {
case ELEMENT:
case COMMENT:
case PROCINST: {
if (rc == null) {
Cur cTo = p.tempCur();
cTo.toEnd();
Cur.moveNode((Xobj) nc, cTo);
cTo.release();
} else {
int rck = rc.nodeType();
if (rck == TEXT || rck == CDATA) {
// Quick and dirty impl....
ArrayList charNodes = new ArrayList();
while (rc != null && (rc.nodeType() == TEXT || rc.nodeType() == CDATA)) {
Dom next = nextSibling(rc);
charNodes.add(remove(rc));
rc = next;
}
if (rc == null) {
append(nc, p);
} else {
insert(nc, rc);
}
rc = nextSibling(nc);
for (int i = 0; i < charNodes.size(); i++) {
Dom n = (Dom) charNodes.get(i);
if (rc == null) {
append(n, p);
} else {
insert(n, rc);
}
}
} else if (rck == ENTITYREF) {
throw new RuntimeException("Not implemented");
} else {
assert rck == ELEMENT || rck == PROCINST || rck == COMMENT;
Cur cTo = rc.tempCur();
Cur.moveNode((Xobj) nc, cTo);
cTo.release();
}
}
break;
}
case TEXT:
case CDATA: {
CharNode n = (CharNode) nc;
assert n._prev == null && n._next == null;
CharNode refCharNode = null;
Cur c = p.tempCur();
if (rc == null) {
c.toEnd();
} else {
int rck = rc.nodeType();
if (rck == TEXT || rck == CDATA) {
c.moveToCharNode(refCharNode = (CharNode) rc);
} else if (rck == ENTITYREF) {
throw new RuntimeException("Not implemented");
} else {
c.moveToDom(rc);
}
}
CharNode nodes = c.getCharNodes();
nodes = CharNode.insertNode(nodes, n, refCharNode);
c.insertChars(n.getObject(), n._off, n._cch);
c.setCharNodes(nodes);
c.release();
break;
}
case ENTITYREF: {
throw new RuntimeException("Not implemented");
}
case DOCTYPE: {
// TODO - don't actually insert this here, associate it with the
// doc?? Hmm .. Perhaps I should disallow insertion into the tree
// at all.
throw new RuntimeException("Not implemented");
}
default:
throw new RuntimeException("Unexpected child node type");
}
return nc;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_removeChild(Dom p, Node child) {
Locale l = p.locale();
if (child == null) {
throw new NotFoundErr("Child to remove is null");
}
Dom c;
if (!(child instanceof Dom) || (c = (Dom) child).locale() != l) {
throw new WrongDocumentErr("Child to remove is from another document");
}
Dom d;
if (l.noSync()) {
l.enter();
try {
d = node_removeChild(p, c);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
d = node_removeChild(p, c);
} finally {
l.exit();
}
}
}
return (Node) d;
}
public static Dom node_removeChild(Dom parent, Dom child) {
if (parent(child) != parent) {
throw new NotFoundErr("Child to remove is not a child of given parent");
}
switch (child.nodeType()) {
case DOCUMENT:
case DOCFRAG:
case ATTR:
throw new IllegalStateException();
case ELEMENT:
case PROCINST:
case COMMENT:
removeNode(child);
break;
case TEXT:
case CDATA: {
Cur c = child.tempCur();
CharNode nodes = c.getCharNodes();
CharNode cn = (CharNode) child;
assert (cn.getDom() != null);
cn.setChars(c.moveChars(null, cn._cch), c._offSrc, c._cchSrc);
c.setCharNodes(CharNode.remove(nodes, cn));
c.release();
break;
}
case ENTITYREF:
throw new RuntimeException("Not impl");
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
default:
throw new RuntimeException("Unknown kind");
}
return child;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _node_cloneNode(Dom n, boolean deep) {
Locale l = n.locale();
Dom c;
if (l.noSync()) {
l.enter();
try {
c = node_cloneNode(n, deep);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
c = node_cloneNode(n, deep);
} finally {
l.exit();
}
}
}
return (Node) c;
}
public static Dom node_cloneNode(Dom n, boolean deep) {
Locale l = n.locale();
Dom clone = null;
if (!deep) {
Cur shallow = null;
switch (n.nodeType()) {
case DOCUMENT:
shallow = l.tempCur();
shallow.createDomDocumentRoot();
break;
case DOCFRAG:
shallow = l.tempCur();
shallow.createDomDocFragRoot();
break;
case ELEMENT: {
shallow = l.tempCur();
shallow.createElement(n.getQName());
Element elem = (Element) shallow.getDom();
NamedNodeMap attrs = ((Element) n).getAttributes();
for (int i = 0; i < attrs.getLength(); i++) {
elem.setAttributeNodeNS((Attr) attrs.item(i).cloneNode(true));
}
break;
}
case ATTR:
shallow = l.tempCur();
shallow.createAttr(n.getQName());
break;
case PROCINST:
case COMMENT:
case TEXT:
case CDATA:
case ENTITYREF:
case ENTITY:
case DOCTYPE:
case NOTATION:
break;
}
if (shallow != null) {
clone = shallow.getDom();
shallow.release();
}
}
if (clone == null) {
switch (n.nodeType()) {
case DOCUMENT:
case DOCFRAG:
case ATTR:
case ELEMENT:
case PROCINST:
case COMMENT: {
Cur cClone = l.tempCur();
Cur cSrc = n.tempCur();
cSrc.copyNode(cClone);
clone = cClone.getDom();
cClone.release();
cSrc.release();
break;
}
case TEXT:
case CDATA: {
Cur c = n.tempCur();
CharNode cn = n.nodeType() == TEXT ? l.createTextNode() : l.createCdataNode();
cn.setChars(c.getChars(((CharNode) n)._cch), c._offSrc, c._cchSrc);
clone = cn;
c.release();
break;
}
case ENTITYREF:
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
default:
throw new RuntimeException("Unknown kind");
}
}
return clone;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_getLocalName(Dom n) {
if (!n.nodeCanHavePrefixUri()) {
return null;
}
QName name = n.getQName();
return name == null ? "" : name.getLocalPart();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_getNamespaceURI(Dom n) {
if (!n.nodeCanHavePrefixUri()) {
return null;
}
QName name = n.getQName();
// TODO - should return the correct namespace for xmlns ...
return name == null ? "" :
//name.getNamespaceURI().equals("")? null:
name.getNamespaceURI();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _node_setPrefix(Dom n, String prefix) {
Locale l = n.locale();
if (l.noSync()) {
l.enter();
try {
node_setPrefix(n, prefix);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
node_setPrefix(n, prefix);
} finally {
l.exit();
}
}
}
}
public static void node_setPrefix(Dom n, String prefix) {
// TODO - make it possible to set the prefix of an xmlns
// TODO - test to make use prefix: xml maps to the predefined namespace
// if set???? hmmm ... perhaps I should not allow the setting of any
// prefixes which start with xml unless the namespace is the predefined
// one and the prefix is 'xml' all other prefixes which start with
// 'xml' should fail.
if (n.nodeType() == ELEMENT || n.nodeType() == ATTR) {
Cur c = n.tempCur();
QName name = c.getName();
String uri = name.getNamespaceURI();
String local = name.getLocalPart();
prefix = validatePrefix(prefix, uri, local, n.nodeType() == ATTR);
c.setName(n.locale().makeQName(uri, local, prefix));
c.release();
} else {
validatePrefix(prefix, "", "", false);
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_getPrefix(Dom n) {
if (!n.nodeCanHavePrefixUri()) {
return null;
}
QName name = n.getQName();
return name == null ? "" :
name.getPrefix();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_getNodeName(Dom n) {
switch (n.nodeType()) {
case CDATA:
return "#cdata-section";
case COMMENT:
return "#comment";
case DOCFRAG:
return "#document-fragment";
case DOCUMENT:
return "#document";
case PROCINST:
return n.getQName().getLocalPart();
case TEXT:
return "#text";
case ATTR:
case ELEMENT: {
QName name = n.getQName();
String prefix = name.getPrefix();
return prefix.length() == 0 ? name.getLocalPart() : prefix + ":" + name.getLocalPart();
}
case DOCTYPE:
case ENTITY:
case ENTITYREF:
case NOTATION:
throw new RuntimeException("Not impl");
default:
throw new RuntimeException("Unknown node type");
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static short _node_getNodeType(Dom n) {
return (short) n.nodeType();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _node_setNodeValue(Dom n, String nodeValue) {
Locale l = n.locale();
if (l.noSync()) {
l.enter();
try {
node_setNodeValue(n, nodeValue);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
node_setNodeValue(n, nodeValue);
} finally {
l.exit();
}
}
}
}
public static void node_setNodeValue(Dom n, String nodeValue) {
if (nodeValue == null) {
nodeValue = "";
}
switch (n.nodeType()) {
case TEXT:
case CDATA: {
CharNode cn = (CharNode) n;
Cur c;
if ((c = cn.tempCur()) != null) {
c.moveChars(null, cn._cch);
cn._cch = nodeValue.length();
c.insertString(nodeValue);
c.release();
} else {
cn.setChars(nodeValue, 0, nodeValue.length());
}
break;
}
case ATTR: {
// Try to set an exisiting text node to contain the new value
NodeList children = ((Node) n).getChildNodes();
while (children.getLength() > 1) {
node_removeChild(n, (Dom) children.item(1));
}
if (children.getLength() == 0) {
TextNode tn = n.locale().createTextNode();
tn.setChars(nodeValue, 0, nodeValue.length());
node_insertBefore(n, tn, null);
} else {
assert children.getLength() == 1;
children.item(0).setNodeValue(nodeValue);
}
if (((AttrXobj) n).isId()) {
Dom d = DomImpl.node_getOwnerDocument(n);
String val = node_getNodeValue(n);
if (d instanceof DocumentXobj) {
((DocumentXobj) d).removeIdElement(val);
((DocumentXobj) d).addIdElement(nodeValue,
attr_getOwnerElement(n));
}
}
break;
}
case PROCINST:
case COMMENT: {
Cur c = n.tempCur();
c.next();
c.getChars(-1);
c.moveChars(null, c._cchSrc);
c.insertString(nodeValue);
c.release();
break;
}
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_getNodeValue(Dom n) {
Locale l = n.locale();
if (l.noSync()) {
return node_getNodeValue(n);
} else {
synchronized (l) {
return node_getNodeValue(n);
}
}
}
public static String node_getNodeValue(Dom n) {
String s = null;
switch (n.nodeType()) {
case ATTR:
case PROCINST:
case COMMENT: {
s = ((Xobj) n).getValueAsString();
break;
}
case TEXT:
case CDATA: {
assert n instanceof CharNode : "Text/CData should be a CharNode";
CharNode node = (CharNode) n;
if (!(node.getObject() instanceof Xobj)) {
s = CharUtil.getString(node.getObject(), node._off, node._cch);
} else {
Xobj src = (Xobj) node.getObject();
src.ensureOccupancy();
boolean isThisNodeAfterText = node.isNodeAftertext();
if (isThisNodeAfterText) {
src._charNodesAfter =
Cur.updateCharNodes(src._locale, src, src._charNodesAfter, src._cchAfter);
s = src.getCharsAfterAsString(node._off, node._cch);
} else {
src._charNodesValue =
Cur.updateCharNodes(src._locale, src, src._charNodesValue, src._cchValue);
s = src.getCharsValueAsString(node._off, node._cch);
}
}
break;
}
}
return s;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Object _node_getUserData(Dom n, String key) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Object _node_setUserData(Dom n, String key, Object data, UserDataHandler handler) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Object _node_getFeature(Dom n, String feature, String version) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _node_isEqualNode(Dom n, Node arg) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _node_isSameNode(Dom n, Node arg) {
// TODO: check if relying on object identity is ok
boolean ret;
if (n instanceof CharNode) {
// ret = ((CharNode)n).getDom().equals(arg);
ret = n.equals(arg);
} else if (n instanceof NodeXobj) {
ret = ((NodeXobj) n).getDom().equals(arg);
} else {
throw new DomLevel3NotImplemented();
}
return ret;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_lookupNamespaceURI(Dom n, String prefix) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _node_isDefaultNamespace(Dom n, String namespaceURI) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_lookupPrefix(Dom n, String namespaceURI) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _node_setTextContent(Dom n, String textContent) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_getTextContent(Dom n) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static short _node_compareDocumentPosition(Dom n, Node other) {
// TODO: find a faster way to compare, may be based on the locale / cursor elements inside the nodes
if (!(n instanceof Node)) {
return Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC;
}
Iterator<Node> nAncIter = ancestorAndSelf((Node) n).iterator();
Iterator<Node> oAncIter = ancestorAndSelf(other).iterator();
Node nAnc, oAnc;
boolean isFirst = true, isEqual;
do {
nAnc = nAncIter.next();
oAnc = oAncIter.next();
isEqual = Objects.equals(nAnc, oAnc);
if (isFirst && !isEqual) {
// if root node differ, the elements are from different documents
return Node.DOCUMENT_POSITION_DISCONNECTED;
}
isFirst = false;
} while (isEqual && nAncIter.hasNext() && oAncIter.hasNext());
if (isEqual) {
return nAncIter.hasNext()
? Node.DOCUMENT_POSITION_CONTAINS | Node.DOCUMENT_POSITION_PRECEDING
: (oAncIter.hasNext()
? Node.DOCUMENT_POSITION_CONTAINED_BY | Node.DOCUMENT_POSITION_FOLLOWING
: Node.DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
);
} else {
Node prevSib = nAnc;
while ((prevSib = prevSib.getPreviousSibling()) != null) {
if (Objects.equals(prevSib, oAnc)) {
return Node.DOCUMENT_POSITION_PRECEDING;
}
}
return Node.DOCUMENT_POSITION_FOLLOWING;
}
}
private static List<Node> ancestorAndSelf(Node node) {
LinkedList<Node> nodes = new LinkedList<>();
Node n = node;
do {
nodes.addFirst(n);
n = n.getParentNode();
} while (n != null);
return nodes;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _node_getBaseURI(Dom n) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _childNodes_item(Dom n, int i) {
Locale l = n.locale();
Dom d;
if (i == 0) {
return _node_getFirstChild(n);
}
if (l.noSync()) {
d = childNodes_item(n, i);
} else {
synchronized (l) {
d = childNodes_item(n, i);
}
}
return (Node) d;
}
public static Dom childNodes_item(Dom n, int i) {
if (i < 0) {
return null;
}
switch (n.nodeType()) {
case TEXT:
case CDATA:
case PROCINST:
case COMMENT:
return null;
case ENTITYREF:
throw new RuntimeException("Not impl");
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
case ELEMENT:
case DOCUMENT:
case DOCFRAG:
case ATTR:
break;
}
if (i == 0) {
return node_getFirstChild(n);
}
return n.locale().findDomNthChild(n, i);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static int _childNodes_getLength(Dom n) {
Locale l = n.locale();
assert n instanceof Xobj;
int count;
Xobj node = (Xobj) n;
if (!node.isVacant() &&
(count = node.getDomZeroOneChildren()) < 2) {
return count;
}
if (l.noSync()) {
return childNodes_getLength(n);
} else {
synchronized (l) {
return childNodes_getLength(n);
}
}
}
public static int childNodes_getLength(Dom n) {
switch (n.nodeType()) {
case TEXT:
case CDATA:
case PROCINST:
case COMMENT:
return 0;
case ENTITYREF:
throw new RuntimeException("Not impl");
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
case ELEMENT:
case DOCUMENT:
case DOCFRAG:
case ATTR:
break;
}
int count;
assert n instanceof Xobj;
Xobj node = (Xobj) n;
node.ensureOccupancy();
if ((count = node.getDomZeroOneChildren()) < 2) {
return count;
}
return n.locale().domLength(n);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _element_getTagName(Dom e) {
return _node_getNodeName(e);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Attr _element_getAttributeNode(Dom e, String name) {
return (Attr) _attributes_getNamedItem(e, name);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Attr _element_getAttributeNodeNS(Dom e, String uri, String local) {
return (Attr) _attributes_getNamedItemNS(e, uri, local);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Attr _element_setAttributeNode(Dom e, Attr newAttr) {
return (Attr) _attributes_setNamedItem(e, newAttr);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Attr _element_setAttributeNodeNS(Dom e, Attr newAttr) {
return (Attr) _attributes_setNamedItemNS(e, newAttr);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _element_getAttribute(Dom e, String name) {
Node a = _attributes_getNamedItem(e, name);
return a == null ? "" : a.getNodeValue();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _element_getAttributeNS(Dom e, String uri, String local) {
Node a = _attributes_getNamedItemNS(e, uri, local);
return a == null ? "" : a.getNodeValue();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _element_hasAttribute(Dom e, String name) {
return _attributes_getNamedItem(e, name) != null;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _element_hasAttributeNS(Dom e, String uri, String local) {
return _attributes_getNamedItemNS(e, uri, local) != null;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _element_removeAttribute(Dom e, String name) {
try {
_attributes_removeNamedItem(e, name);
} catch (NotFoundErr ex) {
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _element_removeAttributeNS(Dom e, String uri, String local) {
try {
_attributes_removeNamedItemNS(e, uri, local);
} catch (NotFoundErr ex) {
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Attr _element_removeAttributeNode(Dom e, Attr oldAttr) {
if (oldAttr == null) {
throw new NotFoundErr("Attribute to remove is null");
}
if (oldAttr.getOwnerElement() != e) {
throw new NotFoundErr("Attribute to remove does not belong to this element");
}
return (Attr) _attributes_removeNamedItem(e, oldAttr.getNodeName());
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _element_setAttribute(Dom e, String name, String value) {
// TODO - validate all attr/element names in all apprpraite
// methdos
Locale l = e.locale();
if (l.noSync()) {
l.enter();
try {
element_setAttribute(e, name, value);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
element_setAttribute(e, name, value);
} finally {
l.exit();
}
}
}
}
public static void element_setAttribute(Dom e, String name, String value) {
Dom a = attributes_getNamedItem(e, name);
if (a == null) {
a = document_createAttribute(node_getOwnerDocument(e), name);
attributes_setNamedItem(e, a);
}
node_setNodeValue(a, value);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _element_setAttributeNS(Dom e, String uri, String qname, String value) {
Locale l = e.locale();
if (l.noSync()) {
l.enter();
try {
element_setAttributeNS(e, uri, qname, value);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
element_setAttributeNS(e, uri, qname, value);
} finally {
l.exit();
}
}
}
}
public static void element_setAttributeNS(Dom e, String uri, String qname, String value) {
validateQualifiedName(qname, uri, true);
QName name = e.locale().makeQualifiedQName(uri, qname);
String local = name.getLocalPart();
String prefix = validatePrefix(name.getPrefix(), uri, local, true);
Dom a = attributes_getNamedItemNS(e, uri, local);
if (a == null) {
a = document_createAttributeNS(node_getOwnerDocument(e), uri, local);
attributes_setNamedItemNS(e, a);
}
node_setPrefix(a, prefix);
node_setNodeValue(a, value);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static NodeList _element_getElementsByTagName(Dom e, String name) {
Locale l = e.locale();
if (l.noSync()) {
l.enter();
try {
return element_getElementsByTagName(e, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return element_getElementsByTagName(e, name);
} finally {
l.exit();
}
}
}
}
public static NodeList element_getElementsByTagName(Dom e, String name) {
return new ElementsByTagNameNodeList(e, name);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static NodeList _element_getElementsByTagNameNS(Dom e, String uri, String local) {
Locale l = e.locale();
if (l.noSync()) {
l.enter();
try {
return element_getElementsByTagNameNS(e, uri, local);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return element_getElementsByTagNameNS(e, uri, local);
} finally {
l.exit();
}
}
}
}
public static NodeList element_getElementsByTagNameNS(Dom e, String uri, String local) {
return new ElementsByTagNameNSNodeList(e, uri, local);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static int _attributes_getLength(Dom e) {
Locale l = e.locale();
if (l.noSync()) {
l.enter();
try {
return attributes_getLength(e);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return attributes_getLength(e);
} finally {
l.exit();
}
}
}
}
public static int attributes_getLength(Dom e) {
int n = 0;
Cur c = e.tempCur();
while (c.toNextAttr()) {
n++;
}
c.release();
return n;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _attributes_setNamedItem(Dom e, Node attr) {
Locale l = e.locale();
if (attr == null) {
throw new IllegalArgumentException("Attr to set is null");
}
Dom a;
if (!(attr instanceof Dom) || (a = (Dom) attr).locale() != l) {
throw new WrongDocumentErr("Attr to set is from another document");
}
Dom oldA;
if (l.noSync()) {
l.enter();
try {
oldA = attributes_setNamedItem(e, a);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
oldA = attributes_setNamedItem(e, a);
} finally {
l.exit();
}
}
}
return (Node) oldA;
}
public static Dom attributes_setNamedItem(Dom e, Dom a) {
if (attr_getOwnerElement(a) != null) {
throw new InuseAttributeError();
}
if (a.nodeType() != ATTR) {
throw new HierarchyRequestErr("Node is not an attribute");
}
String name = _node_getNodeName(a);
Dom oldAttr = null;
Cur c = e.tempCur();
while (c.toNextAttr()) {
Dom aa = c.getDom();
if (_node_getNodeName(aa).equals(name)) {
if (oldAttr == null) {
oldAttr = aa;
} else {
removeNode(aa);
c.toPrevAttr();
}
}
}
if (oldAttr == null) {
c.moveToDom(e);
c.next();
Cur.moveNode((Xobj) a, c);
} else {
c.moveToDom(oldAttr);
Cur.moveNode((Xobj) a, c);
removeNode(oldAttr);
}
c.release();
return oldAttr;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _attributes_getNamedItem(Dom e, String name) {
Locale l = e.locale();
Dom n;
if (l.noSync()) {
l.enter();
try {
n = attributes_getNamedItem(e, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
n = attributes_getNamedItem(e, name);
} finally {
l.exit();
}
}
}
return (Node) n;
}
public static Dom attributes_getNamedItem(Dom e, String name) {
Dom a = null;
Cur c = e.tempCur();
while (c.toNextAttr()) {
Dom d = c.getDom();
if (_node_getNodeName(d).equals(name)) {
a = d;
break;
}
}
c.release();
return a;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _attributes_getNamedItemNS(Dom e, String uri, String local) {
Locale l = e.locale();
Dom n;
if (l.noSync()) {
l.enter();
try {
n = attributes_getNamedItemNS(e, uri, local);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
n = attributes_getNamedItemNS(e, uri, local);
} finally {
l.exit();
}
}
}
return (Node) n;
}
public static Dom attributes_getNamedItemNS(Dom e, String uri, String local) {
if (uri == null) {
uri = "";
}
Dom a = null;
Cur c = e.tempCur();
while (c.toNextAttr()) {
Dom d = c.getDom();
QName n = d.getQName();
if (n.getNamespaceURI().equals(uri) && n.getLocalPart().equals(local)) {
a = d;
break;
}
}
c.release();
return a;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _attributes_removeNamedItem(Dom e, String name) {
Locale l = e.locale();
Dom n;
if (l.noSync()) {
l.enter();
try {
n = attributes_removeNamedItem(e, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
n = attributes_removeNamedItem(e, name);
} finally {
l.exit();
}
}
}
return (Node) n;
}
public static Dom attributes_removeNamedItem(Dom e, String name) {
Dom oldAttr = null;
Cur c = e.tempCur();
while (c.toNextAttr()) {
Dom aa = c.getDom();
if (_node_getNodeName(aa).equals(name)) {
if (oldAttr == null) {
oldAttr = aa;
}
if (((AttrXobj) aa).isId()) {
Dom d = DomImpl.node_getOwnerDocument(aa);
String val = node_getNodeValue(aa);
if (d instanceof DocumentXobj) {
((DocumentXobj) d).removeIdElement(val);
}
}
removeNode(aa);
c.toPrevAttr();
}
}
c.release();
if (oldAttr == null) {
throw new NotFoundErr("Named item not found: " + name);
}
return oldAttr;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _attributes_removeNamedItemNS(Dom e, String uri, String local) {
Locale l = e.locale();
Dom n;
if (l.noSync()) {
l.enter();
try {
n = attributes_removeNamedItemNS(e, uri, local);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
n = attributes_removeNamedItemNS(e, uri, local);
} finally {
l.exit();
}
}
}
return (Node) n;
}
public static Dom attributes_removeNamedItemNS(Dom e, String uri, String local) {
if (uri == null) {
uri = "";
}
Dom oldAttr = null;
Cur c = e.tempCur();
while (c.toNextAttr()) {
Dom aa = c.getDom();
QName qn = aa.getQName();
if (qn.getNamespaceURI().equals(uri) && qn.getLocalPart().equals(local)) {
if (oldAttr == null) {
oldAttr = aa;
}
if (((AttrXobj) aa).isId()) {
Dom d = DomImpl.node_getOwnerDocument(aa);
String val = node_getNodeValue(aa);
if (d instanceof DocumentXobj) {
((DocumentXobj) d).removeIdElement(val);
}
}
removeNode(aa);
c.toPrevAttr();
}
}
c.release();
if (oldAttr == null) {
throw new NotFoundErr("Named item not found: uri=" + uri + ", local=" + local);
}
return oldAttr;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _attributes_setNamedItemNS(Dom e, Node attr) {
Locale l = e.locale();
if (attr == null) {
throw new IllegalArgumentException("Attr to set is null");
}
Dom a;
if (!(attr instanceof Dom) || (a = (Dom) attr).locale() != l) {
throw new WrongDocumentErr("Attr to set is from another document");
}
Dom oldA;
if (l.noSync()) {
l.enter();
try {
oldA = attributes_setNamedItemNS(e, a);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
oldA = attributes_setNamedItemNS(e, a);
} finally {
l.exit();
}
}
}
return (Node) oldA;
}
public static Dom attributes_setNamedItemNS(Dom e, Dom a) {
Dom owner = attr_getOwnerElement(a);
if (owner == e) {
return a;
}
if (owner != null) {
throw new InuseAttributeError();
}
if (a.nodeType() != ATTR) {
throw new HierarchyRequestErr("Node is not an attribute");
}
QName name = a.getQName();
Dom oldAttr = null;
Cur c = e.tempCur();
while (c.toNextAttr()) {
Dom aa = c.getDom();
if (aa.getQName().equals(name)) {
if (oldAttr == null) {
oldAttr = aa;
} else {
removeNode(aa);
c.toPrevAttr();
}
}
}
if (oldAttr == null) {
c.moveToDom(e);
c.next();
Cur.moveNode((Xobj) a, c);
} else {
c.moveToDom(oldAttr);
Cur.moveNode((Xobj) a, c);
removeNode(oldAttr);
}
c.release();
return oldAttr;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Node _attributes_item(Dom e, int index) {
Locale l = e.locale();
Dom a;
if (l.noSync()) {
l.enter();
try {
a = attributes_item(e, index);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
a = attributes_item(e, index);
} finally {
l.exit();
}
}
}
return (Node) a;
}
public static Dom attributes_item(Dom e, int index) {
if (index < 0) {
return null;
}
Cur c = e.tempCur();
Dom a = null;
while (c.toNextAttr()) {
if (index-- == 0) {
a = c.getDom();
break;
}
}
c.release();
return a;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _processingInstruction_getData(Dom p) {
return _node_getNodeValue(p);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _processingInstruction_getTarget(Dom p) {
return _node_getNodeName(p);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _processingInstruction_setData(Dom p, String data) {
_node_setNodeValue(p, data);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _attr_getSpecified(Dom a) {
// Can't tell the difference
return true;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Element _attr_getOwnerElement(Dom a) {
Locale l = a.locale();
Dom e;
if (l.noSync()) {
l.enter();
try {
e = attr_getOwnerElement(a);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
e = attr_getOwnerElement(a);
} finally {
l.exit();
}
}
}
return (Element) e;
}
public static Dom attr_getOwnerElement(Dom n) {
Cur c = n.tempCur();
if (!c.toParentRaw()) {
c.release();
return null;
}
Dom p = c.getDom();
c.release();
return p;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _characterData_appendData(Dom cd, String arg) {
// TODO - fix this *really* cheesy/bad/lousy perf impl
// also fix all the funcitons which follow
if (arg != null && arg.length() != 0) {
_node_setNodeValue(cd, _node_getNodeValue(cd) + arg);
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _characterData_deleteData(Dom c, int offset, int count) {
String s = _characterData_getData(c);
if (offset < 0 || offset > s.length() || count < 0) {
throw new IndexSizeError();
}
if (offset + count > s.length()) {
count = s.length() - offset;
}
if (count > 0) {
_characterData_setData(c, s.substring(0, offset) + s.substring(offset + count));
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _characterData_getData(Dom c) {
return _node_getNodeValue(c);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static int _characterData_getLength(Dom c) {
return _characterData_getData(c).length();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _characterData_insertData(Dom c, int offset, String arg) {
String s = _characterData_getData(c);
if (offset < 0 || offset > s.length()) {
throw new IndexSizeError();
}
if (arg != null && arg.length() > 0) {
_characterData_setData(c, s.substring(0, offset) + arg + s.substring(offset));
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _characterData_replaceData(Dom c, int offset, int count, String arg) {
String s = _characterData_getData(c);
if (offset < 0 || offset > s.length() || count < 0) {
throw new IndexSizeError();
}
if (offset + count > s.length()) {
count = s.length() - offset;
}
if (count > 0) {
_characterData_setData(
c, s.substring(0, offset) + (arg == null ? "" : arg)
+ s.substring(offset + count));
}
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static void _characterData_setData(Dom c, String data) {
_node_setNodeValue(c, data);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _characterData_substringData(Dom c, int offset, int count) {
String s = _characterData_getData(c);
if (offset < 0 || offset > s.length() || count < 0) {
throw new IndexSizeError();
}
if (offset + count > s.length()) {
count = s.length() - offset;
}
return s.substring(offset, offset + count);
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Text _text_splitText(Dom t, int offset) {
assert t.nodeType() == TEXT;
String s = _characterData_getData(t);
if (offset < 0 || offset > s.length()) {
throw new IndexSizeError();
}
_characterData_deleteData(t, offset, s.length() - offset);
// Don't need to pass a doc here, any node will do..
Dom t2 = (Dom) _document_createTextNode(t, s.substring(offset));
Dom p = (Dom) _node_getParentNode(t);
if (p != null) {
_node_insertBefore(p, (Text) t2, _node_getNextSibling(t));
t.locale().invalidateDomCaches(p);
}
return (Text) t2;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static String _text_getWholeText(Dom t) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static boolean _text_isElementContentWhitespace(Dom t) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static Text _text_replaceWholeText(Dom t, String content) {
throw new DomLevel3NotImplemented();
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static XMLStreamReader _getXmlStreamReader(Dom n) {
Locale l = n.locale();
if (l.noSync()) {
l.enter();
try {
return getXmlStreamReader(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return getXmlStreamReader(n);
} finally {
l.exit();
}
}
}
}
public static XMLStreamReader getXmlStreamReader(Dom n) {
XMLStreamReader xs;
switch (n.nodeType()) {
case DOCUMENT:
case DOCFRAG:
case ATTR:
case ELEMENT:
case PROCINST:
case COMMENT: {
Cur c = n.tempCur();
xs = Jsr173.newXmlStreamReader(c, null);
c.release();
break;
}
case TEXT:
case CDATA: {
CharNode cn = (CharNode) n;
Cur c;
if ((c = cn.tempCur()) == null) {
c = n.locale().tempCur();
xs = Jsr173.newXmlStreamReader(c, cn.getObject(), cn._off, cn._cch);
} else {
xs =
Jsr173.newXmlStreamReader(
c, c.getChars(cn._cch), c._offSrc, c._cchSrc);
}
c.release();
break;
}
case ENTITYREF:
case ENTITY:
case DOCTYPE:
case NOTATION:
throw new RuntimeException("Not impl");
default:
throw new RuntimeException("Unknown kind");
}
return xs;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static XmlCursor _getXmlCursor(Dom n) {
Locale l = n.locale();
if (l.noSync()) {
l.enter();
try {
return getXmlCursor(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return getXmlCursor(n);
} finally {
l.exit();
}
}
}
}
public static XmlCursor getXmlCursor(Dom n) {
Cur c = n.tempCur();
Cursor xc = new Cursor(c);
c.release();
return xc;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
public static XmlObject _getXmlObject(Dom n) {
Locale l = n.locale();
if (l.noSync()) {
l.enter();
try {
return getXmlObject(n);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return getXmlObject(n);
} finally {
l.exit();
}
}
}
}
public static XmlObject getXmlObject(Dom n) {
Cur c = n.tempCur();
XmlObject x = c.getObject();
c.release();
return x;
}
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//////////////////////////////////////////////////////////////////////////////////////
//
// Soap Text Node
//
public static boolean _soapText_isComment(Dom n) {
Locale l = n.locale();
org.apache.xmlbeans.impl.soap.Text text = (org.apache.xmlbeans.impl.soap.Text) n;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapText_isComment(text);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapText_isComment(text);
} finally {
l.exit();
}
}
}
}
//
// Soap Node
//
public static void _soapNode_detachNode(Dom n) {
Locale l = n.locale();
org.apache.xmlbeans.impl.soap.Node node = (org.apache.xmlbeans.impl.soap.Node) n;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapNode_detachNode(node);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapNode_detachNode(node);
} finally {
l.exit();
}
}
}
}
public static void _soapNode_recycleNode(Dom n) {
Locale l = n.locale();
org.apache.xmlbeans.impl.soap.Node node = (org.apache.xmlbeans.impl.soap.Node) n;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapNode_recycleNode(node);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapNode_recycleNode(node);
} finally {
l.exit();
}
}
}
}
public static String _soapNode_getValue(Dom n) {
Locale l = n.locale();
org.apache.xmlbeans.impl.soap.Node node = (org.apache.xmlbeans.impl.soap.Node) n;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapNode_getValue(node);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapNode_getValue(node);
} finally {
l.exit();
}
}
}
}
public static void _soapNode_setValue(Dom n, String value) {
Locale l = n.locale();
org.apache.xmlbeans.impl.soap.Node node = (org.apache.xmlbeans.impl.soap.Node) n;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapNode_setValue(node, value);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapNode_setValue(node, value);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapNode_getParentElement(Dom n) {
Locale l = n.locale();
org.apache.xmlbeans.impl.soap.Node node = (org.apache.xmlbeans.impl.soap.Node) n;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapNode_getParentElement(node);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapNode_getParentElement(node);
} finally {
l.exit();
}
}
}
}
public static void _soapNode_setParentElement(Dom n, SOAPElement p) {
Locale l = n.locale();
org.apache.xmlbeans.impl.soap.Node node = (org.apache.xmlbeans.impl.soap.Node) n;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapNode_setParentElement(node, p);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapNode_setParentElement(node, p);
} finally {
l.exit();
}
}
}
}
//
// Soap Element
//
public static void _soapElement_removeContents(Dom d) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapElement_removeContents(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapElement_removeContents(se);
} finally {
l.exit();
}
}
}
}
public static String _soapElement_getEncodingStyle(Dom d) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getEncodingStyle(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getEncodingStyle(se);
} finally {
l.exit();
}
}
}
}
public static void _soapElement_setEncodingStyle(Dom d, String encodingStyle) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapElement_setEncodingStyle(se, encodingStyle);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapElement_setEncodingStyle(se, encodingStyle);
} finally {
l.exit();
}
}
}
}
public static boolean _soapElement_removeNamespaceDeclaration(Dom d, String prefix) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_removeNamespaceDeclaration(se, prefix);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_removeNamespaceDeclaration(se, prefix);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapElement_getAllAttributes(Dom d) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getAllAttributes(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getAllAttributes(se);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapElement_getChildElements(Dom d) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getChildElements(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getChildElements(se);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapElement_getNamespacePrefixes(Dom d) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getNamespacePrefixes(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getNamespacePrefixes(se);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addAttribute(Dom d, Name name, String value) throws SOAPException {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addAttribute(se, name, value);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addAttribute(se, name, value);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addChildElement(Dom d, SOAPElement oldChild) throws SOAPException {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, oldChild);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, oldChild);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addChildElement(Dom d, Name name) throws SOAPException {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, name);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addChildElement(Dom d, String localName) throws SOAPException {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, localName);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, localName);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addChildElement(Dom d, String localName, String prefix) throws SOAPException {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, localName, prefix);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, localName, prefix);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addChildElement(Dom d, String localName, String prefix, String uri) throws SOAPException {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, localName, prefix, uri);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addChildElement(se, localName, prefix, uri);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addNamespaceDeclaration(Dom d, String prefix, String uri) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addNamespaceDeclaration(se, prefix, uri);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addNamespaceDeclaration(se, prefix, uri);
} finally {
l.exit();
}
}
}
}
public static SOAPElement _soapElement_addTextNode(Dom d, String data) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_addTextNode(se, data);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_addTextNode(se, data);
} finally {
l.exit();
}
}
}
}
public static String _soapElement_getAttributeValue(Dom d, Name name) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getAttributeValue(se, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getAttributeValue(se, name);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapElement_getChildElements(Dom d, Name name) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getChildElements(se, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getChildElements(se, name);
} finally {
l.exit();
}
}
}
}
public static Name _soapElement_getElementName(Dom d) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getElementName(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getElementName(se);
} finally {
l.exit();
}
}
}
}
public static String _soapElement_getNamespaceURI(Dom d, String prefix) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getNamespaceURI(se, prefix);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getNamespaceURI(se, prefix);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapElement_getVisibleNamespacePrefixes(Dom d) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_getVisibleNamespacePrefixes(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_getVisibleNamespacePrefixes(se);
} finally {
l.exit();
}
}
}
}
public static boolean _soapElement_removeAttribute(Dom d, Name name) {
Locale l = d.locale();
SOAPElement se = (SOAPElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapElement_removeAttribute(se, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapElement_removeAttribute(se, name);
} finally {
l.exit();
}
}
}
}
//
// Soap Envelope
//
public static SOAPBody _soapEnvelope_addBody(Dom d) throws SOAPException {
Locale l = d.locale();
SOAPEnvelope se = (SOAPEnvelope) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapEnvelope_addBody(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapEnvelope_addBody(se);
} finally {
l.exit();
}
}
}
}
public static SOAPBody _soapEnvelope_getBody(Dom d) throws SOAPException {
Locale l = d.locale();
SOAPEnvelope se = (SOAPEnvelope) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapEnvelope_getBody(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapEnvelope_getBody(se);
} finally {
l.exit();
}
}
}
}
public static SOAPHeader _soapEnvelope_getHeader(Dom d) throws SOAPException {
Locale l = d.locale();
SOAPEnvelope se = (SOAPEnvelope) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapEnvelope_getHeader(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapEnvelope_getHeader(se);
} finally {
l.exit();
}
}
}
}
public static SOAPHeader _soapEnvelope_addHeader(Dom d) throws SOAPException {
Locale l = d.locale();
SOAPEnvelope se = (SOAPEnvelope) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapEnvelope_addHeader(se);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapEnvelope_addHeader(se);
} finally {
l.exit();
}
}
}
}
public static Name _soapEnvelope_createName(Dom d, String localName) {
Locale l = d.locale();
SOAPEnvelope se = (SOAPEnvelope) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapEnvelope_createName(se, localName);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapEnvelope_createName(se, localName);
} finally {
l.exit();
}
}
}
}
public static Name _soapEnvelope_createName(Dom d, String localName, String prefix, String namespaceURI) {
Locale l = d.locale();
SOAPEnvelope se = (SOAPEnvelope) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapEnvelope_createName(se, localName, prefix, namespaceURI);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapEnvelope_createName(se, localName, prefix, namespaceURI);
} finally {
l.exit();
}
}
}
}
//
// Soap Header
//
public static Iterator soapHeader_examineAllHeaderElements(Dom d) {
Locale l = d.locale();
SOAPHeader sh = (SOAPHeader) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeader_examineAllHeaderElements(sh);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeader_examineAllHeaderElements(sh);
} finally {
l.exit();
}
}
}
}
public static Iterator soapHeader_extractAllHeaderElements(Dom d) {
Locale l = d.locale();
SOAPHeader sh = (SOAPHeader) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeader_extractAllHeaderElements(sh);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeader_extractAllHeaderElements(sh);
} finally {
l.exit();
}
}
}
}
public static Iterator soapHeader_examineHeaderElements(Dom d, String actor) {
Locale l = d.locale();
SOAPHeader sh = (SOAPHeader) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeader_examineHeaderElements(sh, actor);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeader_examineHeaderElements(sh, actor);
} finally {
l.exit();
}
}
}
}
public static Iterator soapHeader_examineMustUnderstandHeaderElements(Dom d, String mustUnderstandString) {
Locale l = d.locale();
SOAPHeader sh = (SOAPHeader) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeader_examineMustUnderstandHeaderElements(sh, mustUnderstandString);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeader_examineMustUnderstandHeaderElements(sh, mustUnderstandString);
} finally {
l.exit();
}
}
}
}
public static Iterator soapHeader_extractHeaderElements(Dom d, String actor) {
Locale l = d.locale();
SOAPHeader sh = (SOAPHeader) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeader_extractHeaderElements(sh, actor);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeader_extractHeaderElements(sh, actor);
} finally {
l.exit();
}
}
}
}
public static SOAPHeaderElement soapHeader_addHeaderElement(Dom d, Name name) {
Locale l = d.locale();
SOAPHeader sh = (SOAPHeader) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeader_addHeaderElement(sh, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeader_addHeaderElement(sh, name);
} finally {
l.exit();
}
}
}
}
//
// Soap Body
//
public static boolean soapBody_hasFault(Dom d) {
Locale l = d.locale();
SOAPBody sb = (SOAPBody) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapBody_hasFault(sb);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapBody_hasFault(sb);
} finally {
l.exit();
}
}
}
}
public static SOAPFault soapBody_addFault(Dom d) throws SOAPException {
Locale l = d.locale();
SOAPBody sb = (SOAPBody) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapBody_addFault(sb);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapBody_addFault(sb);
} finally {
l.exit();
}
}
}
}
public static SOAPFault soapBody_getFault(Dom d) {
Locale l = d.locale();
SOAPBody sb = (SOAPBody) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapBody_getFault(sb);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapBody_getFault(sb);
} finally {
l.exit();
}
}
}
}
public static SOAPBodyElement soapBody_addBodyElement(Dom d, Name name) {
Locale l = d.locale();
SOAPBody sb = (SOAPBody) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapBody_addBodyElement(sb, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapBody_addBodyElement(sb, name);
} finally {
l.exit();
}
}
}
}
public static SOAPBodyElement soapBody_addDocument(Dom d, Document document) {
Locale l = d.locale();
SOAPBody sb = (SOAPBody) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapBody_addDocument(sb, document);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapBody_addDocument(sb, document);
} finally {
l.exit();
}
}
}
}
public static SOAPFault soapBody_addFault(Dom d, Name name, String s) throws SOAPException {
Locale l = d.locale();
SOAPBody sb = (SOAPBody) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapBody_addFault(sb, name, s);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapBody_addFault(sb, name, s);
} finally {
l.exit();
}
}
}
}
public static SOAPFault soapBody_addFault(Dom d, Name faultCode, String faultString, java.util.Locale locale) throws SOAPException {
Locale l = d.locale();
SOAPBody sb = (SOAPBody) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapBody_addFault(sb, faultCode, faultString, locale);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapBody_addFault(sb, faultCode, faultString, locale);
} finally {
l.exit();
}
}
}
}
//
// Soap Fault
//
public static void soapFault_setFaultString(Dom d, String faultString) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapFault_setFaultString(sf, faultString);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapFault_setFaultString(sf, faultString);
} finally {
l.exit();
}
}
}
}
public static void soapFault_setFaultString(Dom d, String faultString, java.util.Locale locale) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapFault_setFaultString(sf, faultString, locale);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapFault_setFaultString(sf, faultString, locale);
} finally {
l.exit();
}
}
}
}
public static void soapFault_setFaultCode(Dom d, Name faultCodeName) throws SOAPException {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapFault_setFaultCode(sf, faultCodeName);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapFault_setFaultCode(sf, faultCodeName);
} finally {
l.exit();
}
}
}
}
public static void soapFault_setFaultActor(Dom d, String faultActorString) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapFault_setFaultActor(sf, faultActorString);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapFault_setFaultActor(sf, faultActorString);
} finally {
l.exit();
}
}
}
}
public static String soapFault_getFaultActor(Dom d) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapFault_getFaultActor(sf);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapFault_getFaultActor(sf);
} finally {
l.exit();
}
}
}
}
public static String soapFault_getFaultCode(Dom d) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapFault_getFaultCode(sf);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapFault_getFaultCode(sf);
} finally {
l.exit();
}
}
}
}
public static void soapFault_setFaultCode(Dom d, String faultCode) throws SOAPException {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapFault_setFaultCode(sf, faultCode);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapFault_setFaultCode(sf, faultCode);
} finally {
l.exit();
}
}
}
}
public static java.util.Locale soapFault_getFaultStringLocale(Dom d) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapFault_getFaultStringLocale(sf);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapFault_getFaultStringLocale(sf);
} finally {
l.exit();
}
}
}
}
public static Name soapFault_getFaultCodeAsName(Dom d) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapFault_getFaultCodeAsName(sf);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapFault_getFaultCodeAsName(sf);
} finally {
l.exit();
}
}
}
}
public static String soapFault_getFaultString(Dom d) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapFault_getFaultString(sf);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapFault_getFaultString(sf);
} finally {
l.exit();
}
}
}
}
public static Detail soapFault_addDetail(Dom d) throws SOAPException {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapFault_addDetail(sf);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapFault_addDetail(sf);
} finally {
l.exit();
}
}
}
}
public static Detail soapFault_getDetail(Dom d) {
Locale l = d.locale();
SOAPFault sf = (SOAPFault) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapFault_getDetail(sf);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapFault_getDetail(sf);
} finally {
l.exit();
}
}
}
}
//
// Soap Header Element
//
public static void soapHeaderElement_setMustUnderstand(Dom d, boolean mustUnderstand) {
Locale l = d.locale();
SOAPHeaderElement she = (SOAPHeaderElement) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapHeaderElement_setMustUnderstand(she, mustUnderstand);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapHeaderElement_setMustUnderstand(she, mustUnderstand);
} finally {
l.exit();
}
}
}
}
public static boolean soapHeaderElement_getMustUnderstand(Dom d) {
Locale l = d.locale();
SOAPHeaderElement she = (SOAPHeaderElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeaderElement_getMustUnderstand(she);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeaderElement_getMustUnderstand(she);
} finally {
l.exit();
}
}
}
}
public static void soapHeaderElement_setActor(Dom d, String actor) {
Locale l = d.locale();
SOAPHeaderElement she = (SOAPHeaderElement) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapHeaderElement_setActor(she, actor);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapHeaderElement_setActor(she, actor);
} finally {
l.exit();
}
}
}
}
public static String soapHeaderElement_getActor(Dom d) {
Locale l = d.locale();
SOAPHeaderElement she = (SOAPHeaderElement) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapHeaderElement_getActor(she);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapHeaderElement_getActor(she);
} finally {
l.exit();
}
}
}
}
//
// Soap Header Element
//
public static DetailEntry detail_addDetailEntry(Dom d, Name name) {
Locale l = d.locale();
Detail detail = (Detail) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.detail_addDetailEntry(detail, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.detail_addDetailEntry(detail, name);
} finally {
l.exit();
}
}
}
}
public static Iterator detail_getDetailEntries(Dom d) {
Locale l = d.locale();
Detail detail = (Detail) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.detail_getDetailEntries(detail);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.detail_getDetailEntries(detail);
} finally {
l.exit();
}
}
}
}
//
// Soap Header Element
//
public static void _soapPart_removeAllMimeHeaders(Dom d) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapPart_removeAllMimeHeaders(sp);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapPart_removeAllMimeHeaders(sp);
} finally {
l.exit();
}
}
}
}
public static void _soapPart_removeMimeHeader(Dom d, String name) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapPart_removeMimeHeader(sp, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapPart_removeMimeHeader(sp, name);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapPart_getAllMimeHeaders(Dom d) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapPart_getAllMimeHeaders(sp);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapPart_getAllMimeHeaders(sp);
} finally {
l.exit();
}
}
}
}
public static SOAPEnvelope _soapPart_getEnvelope(Dom d) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapPart_getEnvelope(sp);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapPart_getEnvelope(sp);
} finally {
l.exit();
}
}
}
}
public static Source _soapPart_getContent(Dom d) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapPart_getContent(sp);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapPart_getContent(sp);
} finally {
l.exit();
}
}
}
}
public static void _soapPart_setContent(Dom d, Source source) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapPart_setContent(sp, source);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapPart_setContent(sp, source);
} finally {
l.exit();
}
}
}
}
public static String[] _soapPart_getMimeHeader(Dom d, String name) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapPart_getMimeHeader(sp, name);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapPart_getMimeHeader(sp, name);
} finally {
l.exit();
}
}
}
}
public static void _soapPart_addMimeHeader(Dom d, String name, String value) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapPart_addMimeHeader(sp, name, value);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapPart_addMimeHeader(sp, name, value);
} finally {
l.exit();
}
}
}
}
public static void _soapPart_setMimeHeader(Dom d, String name, String value) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
l._saaj.soapPart_setMimeHeader(sp, name, value);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
l._saaj.soapPart_setMimeHeader(sp, name, value);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapPart_getMatchingMimeHeaders(Dom d, String[] names) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapPart_getMatchingMimeHeaders(sp, names);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapPart_getMatchingMimeHeaders(sp, names);
} finally {
l.exit();
}
}
}
}
public static Iterator _soapPart_getNonMatchingMimeHeaders(Dom d, String[] names) {
Locale l = d.locale();
SOAPPart sp = (SOAPPart) d;
if (l.noSync()) {
l.enter();
try {
return l._saaj.soapPart_getNonMatchingMimeHeaders(sp, names);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return l._saaj.soapPart_getNonMatchingMimeHeaders(sp, names);
} finally {
l.exit();
}
}
}
}
//
// Saaj callback
//
private static class SaajData {
Object _obj;
}
public static void saajCallback_setSaajData(Dom d, Object o) {
Locale l = d.locale();
if (l.noSync()) {
l.enter();
try {
impl_saajCallback_setSaajData(d, o);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
impl_saajCallback_setSaajData(d, o);
} finally {
l.exit();
}
}
}
}
public static void impl_saajCallback_setSaajData(Dom d, Object o) {
Locale l = d.locale();
Cur c = l.tempCur();
c.moveToDom(d);
SaajData sd = null;
if (o != null) {
sd = (SaajData) c.getBookmark(SaajData.class);
if (sd == null) {
sd = new SaajData();
}
sd._obj = o;
}
c.setBookmark(SaajData.class, sd);
c.release();
}
public static Object saajCallback_getSaajData(Dom d) {
Locale l = d.locale();
if (l.noSync()) {
l.enter();
try {
return impl_saajCallback_getSaajData(d);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return impl_saajCallback_getSaajData(d);
} finally {
l.exit();
}
}
}
}
public static Object impl_saajCallback_getSaajData(Dom d) {
Locale l = d.locale();
Cur c = l.tempCur();
c.moveToDom(d);
SaajData sd = (SaajData) c.getBookmark(SaajData.class);
Object o = sd == null ? null : sd._obj;
c.release();
return o;
}
public static Element saajCallback_createSoapElement(Dom d, QName name, QName parentName) {
Locale l = d.locale();
Dom e;
if (l.noSync()) {
l.enter();
try {
e = impl_saajCallback_createSoapElement(d, name, parentName);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
e = impl_saajCallback_createSoapElement(d, name, parentName);
} finally {
l.exit();
}
}
}
return (Element) e;
}
public static Dom impl_saajCallback_createSoapElement(Dom d, QName name, QName parentName) {
Cur c = d.locale().tempCur();
c.createElement(name, parentName);
Dom e = c.getDom();
c.release();
return e;
}
public static Element saajCallback_importSoapElement(
Dom d, Element elem, boolean deep, QName parentName) {
Locale l = d.locale();
Dom e;
if (l.noSync()) {
l.enter();
try {
e = impl_saajCallback_importSoapElement(d, elem, deep, parentName);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
e = impl_saajCallback_importSoapElement(d, elem, deep, parentName);
} finally {
l.exit();
}
}
}
return (Element) e;
}
public static Dom impl_saajCallback_importSoapElement(
Dom d, Element elem, boolean deep, QName parentName) {
// TODO -- need to rewrite DomImpl.document_importNode to use an Xcur
// to create the new tree. Then, I can pass the parentName to the new
// fcn and use it to create the correct root parent
throw new RuntimeException("Not impl");
}
public static Text saajCallback_ensureSoapTextNode(Dom d) {
Locale l = d.locale();
if (l.noSync()) {
l.enter();
try {
return impl_saajCallback_ensureSoapTextNode(d);
} finally {
l.exit();
}
} else {
synchronized (l) {
l.enter();
try {
return impl_saajCallback_ensureSoapTextNode(d);
} finally {
l.exit();
}
}
}
}
public static Text impl_saajCallback_ensureSoapTextNode(Dom d) {
// if (!(d instanceof Text))
// {
// Xcur x = d.tempCur();
//
// x.moveTo
//
// x.release();
// }
//
// return (Text) d;
return null;
}
public static class DomLevel3NotImplemented extends RuntimeException {
DomLevel3NotImplemented() {
super("DOM Level 3 Not implemented");
}
}
}