You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2012/03/08 22:48:20 UTC
svn commit: r1298603 - in
/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom:
ChildNode.java ElementImpl.java NodeImpl.java
Author: veithen
Date: Thu Mar 8 21:48:19 2012
New Revision: 1298603
URL: http://svn.apache.org/viewvc?rev=1298603&view=rev
Log:
AXIOM-412: Implemented rule (6) for non attribute nodes.
Modified:
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java?rev=1298603&r1=1298602&r2=1298603&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java Thu Mar 8 21:48:19 2012
@@ -43,9 +43,11 @@ public abstract class ChildNode extends
protected ChildNode nextSibling;
- private DocumentImpl ownerNode;
-
- private ParentNode parentNode;
+ /**
+ * The parent or the owner document of the node. The meaning of this attribute depends on the
+ * {@link NodeImpl#HAS_PARENT} flag.
+ */
+ private ParentNode ownerNode;
/** @param ownerDocument */
protected ChildNode(DocumentImpl ownerDocument, OMFactory factory) {
@@ -58,7 +60,15 @@ public abstract class ChildNode extends
}
DocumentImpl ownerDocument() {
- return ownerNode;
+ if (ownerNode == null) {
+ return null;
+ } else if (ownerNode instanceof DocumentImpl) {
+ // Note: the value of the HAS_PARENT flag doesn't matter here. If the ownerNode is of
+ // type Document, it must be the owner document.
+ return (DocumentImpl)ownerNode;
+ } else {
+ return ownerNode.ownerDocument();
+ }
}
/**
@@ -67,6 +77,9 @@ public abstract class ChildNode extends
* @param document
*/
void setOwnerDocument(DocumentImpl document) {
+ if (ownerNode != null) {
+ throw new IllegalStateException();
+ }
this.ownerNode = document;
}
@@ -75,7 +88,7 @@ public abstract class ChildNode extends
}
ParentNode parentNode() {
- return parentNode;
+ return hasParent() ? ownerNode : null;
}
public OMNode getNextOMSibling() throws OMException {
@@ -138,8 +151,12 @@ public abstract class ChildNode extends
}
public void setParent(OMContainer element) {
- if (element == null || element instanceof ParentNode) {
- this.parentNode = (ParentNode) element;
+ if (element == null) {
+ ownerNode = ownerDocument();
+ hasParent(false);
+ } else if (element instanceof ParentNode) {
+ ownerNode = (ParentNode) element;
+ hasParent(true);
} else {
throw new OMException("The given parent is not of the type "
+ ParentNode.class);
@@ -256,8 +273,8 @@ public abstract class ChildNode extends
newnode.previousSibling = null;
newnode.nextSibling = null;
newnode.isFirstChild(false);
- newnode.setOwnerDocument(ownerDocument());
- newnode.parentNode = null;
+ newnode.ownerNode = ownerDocument();
+ newnode.hasParent(false);
return newnode;
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java?rev=1298603&r1=1298602&r2=1298603&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java Thu Mar 8 21:48:19 2012
@@ -151,7 +151,6 @@ public class ElementImpl extends ParentN
OMXMLParserWrapper builder, OMFactory factory) {
this(tagName, ns, builder, factory);
if (parentNode != null) {
- setOwnerDocument(parentNode.ownerDocument());
parentNode.addChild(this);
}
Modified: webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
URL: http://svn.apache.org/viewvc/webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java?rev=1298603&r1=1298602&r2=1298603&view=diff
==============================================================================
--- webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java (original)
+++ webservices/commons/trunk/modules/axiom/modules/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java Thu Mar 8 21:48:19 2012
@@ -47,6 +47,14 @@ public abstract class NodeImpl implement
protected short flags;
+ /**
+ * Used by {@link ChildNode} to determine the meaning of the <code>ownerNode</code> attribute.
+ * If the flag is set, then the attribute contains the reference to the parent node. If the flag
+ * is not set, then the node has no parent and the attribute stores a reference to the owner
+ * document (which may be <code>null</code> if the owner document has not been created yet).
+ */
+ protected final static short HAS_PARENT = 0x1 << 1;
+
protected final static short FIRSTCHILD = 0x1 << 2;
protected final static short READONLY = 0x1 << 3;
@@ -266,6 +274,14 @@ public abstract class NodeImpl implement
* Flags setters and getters
*/
+ final boolean hasParent() {
+ return (flags & HAS_PARENT) != 0;
+ }
+
+ final void hasParent(boolean value) {
+ flags = (short) (value ? flags | HAS_PARENT : flags & ~HAS_PARENT);
+ }
+
final boolean isFirstChild() {
return (flags & FIRSTCHILD) != 0;
}