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());
}
}