Author: veithen
Date: Sat Jul 19 09:19:21 2014
New Revision: 1611862

URL: http://svn.apache.org/r1611862
Log:
Move the removeChildren code to the core model.

Modified:
    
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNodeSupport.aj
    
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/OMContainerSupport.aj
    
webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
    
webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java
    
webservices/axiom/trunk/testing/dom-testsuite/src/main/java/org/apache/axiom/ts/dom/element/TestSetTextContent.java

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=1611862&r1=1611861&r2=1611862&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 19 09:19:21 2014
@@ -116,4 +116,31 @@ public aspect CoreParentNodeSupport {
         }
         lastChild = child;
     }
+
+    public final void CoreParentNode.coreRemoveChildren(CoreDocument 
newOwnerDocument) {
+        // We need to call this first because if may modify the state (applies 
to OMSourcedElements)
+        CoreChildNode child = coreGetFirstChildIfAvailable();
+        boolean updateState;
+        if (getState() == INCOMPLETE && getBuilder() != null) {
+            if (lastChild instanceof CoreParentNode) {
+                ((CoreParentNode)lastChild).build();
+            }
+            ((StAXOMBuilder)getBuilder()).discard((OMContainer)this);
+            updateState = true;
+        } else {
+            updateState = false;
+        }
+        while (child != null) {
+            CoreChildNode nextSibling = child.nextSibling;
+            child.previousSibling = null;
+            child.nextSibling = null;
+            child.internalUnsetParent(newOwnerDocument);
+            child = nextSibling;
+        }
+        firstChild = null;
+        lastChild = null;
+        if (updateState) {
+            coreSetState(COMPLETE);
+        }
+    }
 }

Modified: 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/OMContainerSupport.aj
URL: 
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/OMContainerSupport.aj?rev=1611862&r1=1611861&r2=1611862&view=diff
==============================================================================
--- 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/OMContainerSupport.aj
 (original)
+++ 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/OMContainerSupport.aj
 Sat Jul 19 09:19:21 2014
@@ -25,8 +25,6 @@ import javax.xml.stream.XMLStreamReader;
 import javax.xml.transform.sax.SAXResult;
 import javax.xml.transform.sax.SAXSource;
 
-import org.apache.axiom.core.CoreChildNode;
-import org.apache.axiom.core.CoreParentNode;
 import org.apache.axiom.om.NodeUnavailableException;
 import org.apache.axiom.om.OMContainer;
 import org.apache.axiom.om.OMElement;
@@ -38,7 +36,6 @@ import org.apache.axiom.om.OMXMLStreamRe
 import org.apache.axiom.om.OMXMLStreamReaderConfiguration;
 import org.apache.axiom.om.impl.builder.OMFactoryEx;
 import org.apache.axiom.om.impl.builder.StAXBuilder;
-import org.apache.axiom.om.impl.builder.StAXOMBuilder;
 import 
org.apache.axiom.om.impl.common.serializer.pull.OMXMLStreamReaderExAdapter;
 import org.apache.axiom.om.impl.common.serializer.pull.PullSerializer;
 import org.apache.axiom.om.impl.common.serializer.push.sax.XMLReaderImpl;
@@ -171,31 +168,7 @@ public aspect OMContainerSupport {
     }
     
     public void IContainer.removeChildren() {
-        // We need to call this first because if may modify the state (applies 
to OMSourcedElements)
-        CoreChildNode child = coreGetFirstChildIfAvailable();
-        boolean updateState;
-        if (getState() == CoreParentNode.INCOMPLETE && getBuilder() != null) {
-            CoreChildNode lastKnownChild = coreGetLastKnownChild();
-            if (lastKnownChild instanceof IContainer) {
-                ((IContainer)lastKnownChild).build();
-            }
-            ((StAXOMBuilder)getBuilder()).discard(this);
-            updateState = true;
-        } else {
-            updateState = false;
-        }
-        while (child != null) {
-            CoreChildNode nextSibling = child.coreGetNextSiblingIfAvailable();
-            child.coreSetPreviousSibling(null);
-            child.coreSetNextSibling(null);
-            child.internalUnsetParent(null); // NOTE: only valid for OM
-            child = nextSibling;
-        }
-        coreSetFirstChild(null);
-        coreSetLastChild(null);
-        if (updateState) {
-            setComplete(true);
-        }
+        coreRemoveChildren(null);
     }
     
     public Iterator OMContainer.getChildren() {

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=1611862&r1=1611861&r2=1611862&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 19 09:19:21 2014
@@ -391,14 +391,10 @@ public abstract class ParentNode extends
     
     public void setTextContent(String textContent) throws DOMException {
         // get rid of any existing children
-        // TODO: there is probably a better way to remove all children
-        Node child;
-        while ((child = getFirstChild()) != null) {
-            removeChild(child);
-        }
+        coreRemoveChildren(coreGetOwnerDocument(true));
         // create a Text node to hold the given content
         if (textContent != null && textContent.length() != 0) {
-            insertBefore((NodeImpl)getOMFactory().createOMText(textContent), 
null, false);
+            
coreAppendChild((CoreChildNode)getOMFactory().createOMText(textContent), false);
         }
     }
 }

Modified: 
webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java
URL: 
http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java?rev=1611862&r1=1611861&r2=1611862&view=diff
==============================================================================
--- 
webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java
 (original)
+++ 
webservices/axiom/trunk/implementations/axiom-dom/src/test/java/org/apache/axiom/om/impl/dom/DOMImplementationTest.java
 Sat Jul 19 09:19:21 2014
@@ -395,8 +395,6 @@ public class DOMImplementationTest exten
         builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodereplacechild39)");
         builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodereplacechild40)");
         builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodesettextcontent02)");
-        builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodesettextcontent05)");
-        builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodesettextcontent06)");
         builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodesettextcontent12)");
         builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodesetuserdata01)");
         builder.exclude(W3CTestCase.class, 
"(id=http://www.w3.org/2001/DOM-Test-Suite/level3/core/nodesetuserdata02)");

Modified: 
webservices/axiom/trunk/testing/dom-testsuite/src/main/java/org/apache/axiom/ts/dom/element/TestSetTextContent.java
URL: 
http://svn.apache.org/viewvc/webservices/axiom/trunk/testing/dom-testsuite/src/main/java/org/apache/axiom/ts/dom/element/TestSetTextContent.java?rev=1611862&r1=1611861&r2=1611862&view=diff
==============================================================================
--- 
webservices/axiom/trunk/testing/dom-testsuite/src/main/java/org/apache/axiom/ts/dom/element/TestSetTextContent.java
 (original)
+++ 
webservices/axiom/trunk/testing/dom-testsuite/src/main/java/org/apache/axiom/ts/dom/element/TestSetTextContent.java
 Sat Jul 19 09:19:21 2014
@@ -38,10 +38,13 @@ public class TestSetTextContent extends 
         Document doc = dbf.newDocumentBuilder().parse(new InputSource(
                 new StringReader("<a>1<!--c--><b>2</b>3</a>")));
         Element element = doc.getDocumentElement();
+        Node oldFirstChild = element.getFirstChild();
         element.setTextContent("test");
         Node firstChild = element.getFirstChild();
         assertTrue(firstChild instanceof Text);
         assertEquals("test", firstChild.getNodeValue());
         assertNull(firstChild.getNextSibling());
+        assertNull(oldFirstChild.getParentNode());
+        assertSame(doc, oldFirstChild.getOwnerDocument());
     }
 }


Reply via email to