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 2015/07/18 13:31:10 UTC

svn commit: r1691717 - in /webservices/axiom/trunk: aspects/core-aspects/src/main/java/org/apache/axiom/core/ aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/ implementations/axio...

Author: veithen
Date: Sat Jul 18 11:31:10 2015
New Revision: 1691717

URL: http://svn.apache.org/r1691717
Log:
Also use the DetachPolicy API for coreRemoveChildren.

Modified:
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNodeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNodeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/DetachPolicy.java
    webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNodeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNodeSupport.aj?rev=1691717&r1=1691716&r2=1691717&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNodeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNodeSupport.aj Sat Jul 18 11:31:10 2015
@@ -186,7 +186,7 @@ public aspect CoreChildNodeSupport {
         CoreParentNode parent = coreGetParent();
         if (parent != null) {
             beforeDetach();
-            CoreDocument newOwnerDocument = newParent != null ? null : detachPolicy.getNewOwnerDocument(this);
+            CoreDocument newOwnerDocument = newParent != null ? null : detachPolicy.getNewOwnerDocument(parent);
             if (previousSibling == null) {
                 parent.firstChild = nextSibling;
             } else {

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNodeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNodeSupport.aj?rev=1691717&r1=1691716&r2=1691717&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNodeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNodeSupport.aj Sat Jul 18 11:31:10 2015
@@ -131,7 +131,7 @@ public aspect CoreParentNodeSupport {
         fragment.lastChild = null;
     }
 
-    public final void CoreParentNode.coreRemoveChildren(CoreDocument newOwnerDocument) {
+    public final void CoreParentNode.coreRemoveChildren(DetachPolicy detachPolicy) {
         // We need to call this first because if may modify the state (applies to OMSourcedElements)
         CoreChildNode child = coreGetFirstChildIfAvailable();
         boolean updateState;
@@ -144,12 +144,15 @@ public aspect CoreParentNodeSupport {
         } else {
             updateState = false;
         }
-        while (child != null) {
-            CoreChildNode nextSibling = child.nextSibling;
-            child.previousSibling = null;
-            child.nextSibling = null;
-            child.internalUnsetParent(newOwnerDocument);
-            child = nextSibling;
+        if (child != null) {
+            CoreDocument newOwnerDocument = detachPolicy.getNewOwnerDocument(this);
+            do {
+                CoreChildNode nextSibling = child.nextSibling;
+                child.previousSibling = null;
+                child.nextSibling = null;
+                child.internalUnsetParent(newOwnerDocument);
+                child = nextSibling;
+            } while (child != null);
         }
         firstChild = null;
         lastChild = null;

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/DetachPolicy.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/DetachPolicy.java?rev=1691717&r1=1691716&r2=1691717&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/DetachPolicy.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/DetachPolicy.java Sat Jul 18 11:31:10 2015
@@ -23,13 +23,13 @@ package org.apache.axiom.core;
  */
 public interface DetachPolicy {
     /**
-     * Get the new owner document for the given child node. This method is called before the child
-     * node is detached.
+     * Get the new owner document for the child node (or group of child nodes) to be detached. This
+     * method is called before any child node is detached.
      * 
-     * @param node
-     *            the child node
+     * @param parent
+     *            the parent of the child node (or group of child nodes) to be detached
      * @return the new owner document or <code>null</code> to (lazily) create a new owner document
-     *         for the node
+     *         for each child node
      */
-    CoreDocument getNewOwnerDocument(CoreChildNode node);
+    CoreDocument getNewOwnerDocument(CoreParentNode parent);
 }

Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java?rev=1691717&r1=1691716&r2=1691717&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java (original)
+++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java Sat Jul 18 11:31:10 2015
@@ -20,8 +20,8 @@ package org.apache.axiom.dom;
 
 import org.apache.axiom.core.AttributeMatcher;
 import org.apache.axiom.core.CoreAttribute;
-import org.apache.axiom.core.CoreChildNode;
 import org.apache.axiom.core.CoreDocument;
+import org.apache.axiom.core.CoreParentNode;
 import org.apache.axiom.core.DetachPolicy;
 import org.apache.axiom.core.NSAwareAttributeMatcher;
 import org.apache.axiom.core.NodeFactory;
@@ -85,8 +85,8 @@ public final class Policies {
     };
     
     public static final DetachPolicy DETACH_POLICY = new DetachPolicy() {
-        public CoreDocument getNewOwnerDocument(CoreChildNode node) {
-            return node.coreGetOwnerDocument(true);
+        public CoreDocument getNewOwnerDocument(CoreParentNode parent) {
+            return parent.coreGetOwnerDocument(true);
         }
     };
 }

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj?rev=1691717&r1=1691716&r2=1691717&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj Sat Jul 18 11:31:10 2015
@@ -175,7 +175,7 @@ public aspect AxiomContainerSupport {
     }
     
     public void AxiomContainer.removeChildren() {
-        coreRemoveChildren(null);
+        coreRemoveChildren(Policies.DETACH_POLICY);
     }
     
     public Iterator OMContainer.getChildren() {

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java?rev=1691717&r1=1691716&r2=1691717&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java Sat Jul 18 11:31:10 2015
@@ -19,8 +19,8 @@
 package org.apache.axiom.om.impl.common;
 
 import org.apache.axiom.core.AttributeMatcher;
-import org.apache.axiom.core.CoreChildNode;
 import org.apache.axiom.core.CoreDocument;
+import org.apache.axiom.core.CoreParentNode;
 import org.apache.axiom.core.DetachPolicy;
 import org.apache.axiom.core.NSAwareAttributeMatcher;
 import org.apache.axiom.core.NodeMigrationPolicy;
@@ -46,7 +46,7 @@ public final class Policies {
     };
     
     public static final DetachPolicy DETACH_POLICY = new DetachPolicy() {
-        public CoreDocument getNewOwnerDocument(CoreChildNode node) {
+        public CoreDocument getNewOwnerDocument(CoreParentNode parent) {
             return null;
         }
     };

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java?rev=1691717&r1=1691716&r2=1691717&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java Sat Jul 18 11:31:10 2015
@@ -174,7 +174,7 @@ public abstract class ParentNode extends
     
     public void setTextContent(String textContent) throws DOMException {
         // get rid of any existing children
-        coreRemoveChildren(coreGetOwnerDocument(true));
+        coreRemoveChildren(Policies.DETACH_POLICY);
         // create a Text node to hold the given content
         if (textContent != null && textContent.length() != 0) {
             coreAppendChild((CoreChildNode)getOMFactory().createOMText(textContent), false);