Author: veithen Date: Fri Oct 2 19:15:45 2015 New Revision: 1706469 URL: http://svn.apache.org/viewvc?rev=1706469&view=rev Log: Rewrite some FOM code using the core model API.
Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AbstractNodeIterator.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNodeSupport.aj webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMElement.java webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMPerson.java webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMSource.java webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMWorkspace.java Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AbstractNodeIterator.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AbstractNodeIterator.java?rev=1706469&r1=1706468&r2=1706469&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AbstractNodeIterator.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AbstractNodeIterator.java Fri Oct 2 19:15:45 2015 @@ -139,10 +139,8 @@ public abstract class AbstractNodeIterat } public final void replace(CoreChildNode newNode) throws CoreModelException { - // TODO - throw new UnsupportedOperationException(); -// // Move to next node before replacing the current one -// hasNext(); -// ((CoreChildNode)currentNode).coreReplaceWith(newNode); + // Move to next node before replacing the current one + hasNext(); + ((CoreChildNode)currentNode).coreReplaceWith(newNode, detachPolicy); } } 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=1706469&r1=1706468&r2=1706469&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 Fri Oct 2 19:15:45 2015 @@ -203,21 +203,20 @@ public aspect CoreChildNodeSupport { CoreParentNode parent = coreGetParent(); if (parent != null) { beforeDetach(); - CoreDocument newOwnerDocument = newParent != null ? null : detachPolicy.getNewOwnerDocument(parent); if (previousSibling == null) { parent.getContent(true).firstChild = nextSibling; } else { previousSibling.nextSibling = nextSibling; + previousSibling = null; } if (nextSibling == null) { parent.getContent(true).lastChild = previousSibling; } else { nextSibling.previousSibling = previousSibling; + nextSibling = null; } - previousSibling = null; - nextSibling = null; if (newParent == null) { - internalUnsetParent(newOwnerDocument); + internalUnsetParent(detachPolicy.getNewOwnerDocument(parent)); } } if (newParent != null) { @@ -225,6 +224,30 @@ public aspect CoreChildNodeSupport { } } + public final void CoreChildNode.coreReplaceWith(CoreChildNode newNode, DetachPolicy detachPolicy) { + newNode.coreDetach(DetachPolicy.NEW_DOCUMENT); + CoreParentNode parent = coreGetParent(); + if (parent != null) { + beforeDetach(); + if (previousSibling == null) { + parent.getContent(true).firstChild = newNode; + } else { + previousSibling.nextSibling = newNode; + newNode.previousSibling = previousSibling; + previousSibling = null; + } + if (nextSibling == null) { + parent.getContent(true).lastChild = newNode; + } else { + nextSibling.previousSibling = newNode; + newNode.nextSibling = nextSibling; + nextSibling = null; + } + internalUnsetParent(detachPolicy.getNewOwnerDocument(parent)); + newNode.internalSetParent(parent); + } + } + public final <T> CoreNode CoreChildNode.coreClone(ClonePolicy<T> policy, T options, CoreParentNode targetParent) { return internalClone(policy, options, targetParent); } Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java?rev=1706469&r1=1706468&r2=1706469&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMCollection.java Fri Oct 2 19:15:45 2015 @@ -53,7 +53,7 @@ public class FOMCollection extends FOMEx private Text setTitle(String title, Text.Type type) { Text text = getFactory().newText(PREFIXED_TITLE, type); text.setValue(title); - this._setChild(PREFIXED_TITLE, (OMElement)text); + this._setChild(PREFIXED_TITLE, text); return text; } Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMElement.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMElement.java?rev=1706469&r1=1706468&r2=1706469&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMElement.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMElement.java Fri Oct 2 19:15:45 2015 @@ -61,6 +61,7 @@ import org.apache.abdera.writer.WriterOp import org.apache.axiom.core.CoreChildNode; import org.apache.axiom.core.CoreNSAwareElement; import org.apache.axiom.fom.AbderaElement; +import org.apache.axiom.fom.AbderaText; import org.apache.axiom.fom.FOMList; import org.apache.axiom.fom.IRIUtil; import org.apache.axiom.fom.Policies; @@ -224,15 +225,26 @@ public class FOMElement extends FOMChild return new FOMList(new FOMElementIteratorWrapper(factory, getChildrenWithName(qname))); } - protected void _setChild(QName qname, OMElement element) { - OMElement e = getFirstChildWithName(qname); + protected void _setChild(QName qname, Element element) { + AbderaElement e = null; + CoreChildNode child = coreGetFirstChild(); + while (child != null) { + if (child instanceof AbderaElement) { + AbderaElement candidate = (AbderaElement)child; + if (candidate.coreGetLocalName().equals(qname.getLocalPart()) + && candidate.coreGetNamespaceURI().equals(qname.getNamespaceURI())) { + e = candidate; + break; + } + } + child = child.coreGetNextSibling(); + } if (e == null && element != null) { - addChild(element); + coreAppendChild((AbderaElement)element, false); } else if (e != null && element != null) { - e.insertSiblingBefore(element); - e.discard(); + e.coreReplaceWith((AbderaElement)element, Policies.DETACH_POLICY); } else if (e != null && element == null) { - e.discard(); + e.coreDetach(Policies.DETACH_POLICY); } } @@ -336,7 +348,7 @@ public class FOMElement extends FOMChild } protected <T extends Text> void setTextElement(QName qname, T text, boolean many) { - _setChild(qname, (OMElement)text); + _setChild(qname, text); } public void setText(String text) { Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java?rev=1706469&r1=1706468&r2=1706469&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMEntry.java Fri Oct 2 19:15:45 2015 @@ -106,7 +106,7 @@ public class FOMEntry extends FOMExtensi } public Entry setContentElement(Content content) { - _setChild(CONTENT, (OMElement)content); + _setChild(CONTENT, content); return this; } @@ -297,7 +297,7 @@ public class FOMEntry extends FOMExtensi } public Entry setIdElement(IRIElement id) { - _setChild(ID, (OMElement)id); + _setChild(ID, id); return this; } @@ -378,7 +378,7 @@ public class FOMEntry extends FOMExtensi } public Entry setPublishedElement(DateTime dateTime) { - _setChild(PUBLISHED, (OMElement)dateTime); + _setChild(PUBLISHED, dateTime); return this; } @@ -460,7 +460,7 @@ public class FOMEntry extends FOMExtensi public Entry setSource(Source source) { if (source instanceof Feed) source = ((Feed)source).getAsSource(); - _setChild(SOURCE, (OMElement)source); + _setChild(SOURCE, source); return this; } @@ -553,7 +553,7 @@ public class FOMEntry extends FOMExtensi } public Entry setUpdatedElement(DateTime updated) { - _setChild(UPDATED, (OMElement)updated); + _setChild(UPDATED, updated); return this; } @@ -596,7 +596,7 @@ public class FOMEntry extends FOMExtensi public void setEditedElement(DateTime updated) { declareNamespace(APP_NS, "app"); _removeChildren(PRE_RFC_EDITED, false); - _setChild(EDITED, (OMElement)updated); + _setChild(EDITED, updated); } public Date getEdited() { @@ -648,7 +648,7 @@ public class FOMEntry extends FOMExtensi public Entry setControl(Control control) { _removeChildren(PRE_RFC_CONTROL, true); - _setChild(CONTROL, (OMElement)control); + _setChild(CONTROL, control); return this; } Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMPerson.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMPerson.java?rev=1706469&r1=1706468&r2=1706469&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMPerson.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMPerson.java Fri Oct 2 19:15:45 2015 @@ -26,7 +26,6 @@ import org.apache.abdera.model.Element; import org.apache.abdera.model.IRIElement; import org.apache.abdera.model.Person; import org.apache.axiom.fom.AbderaPerson; -import org.apache.axiom.om.OMElement; public class FOMPerson extends FOMExtensibleElement implements AbderaPerson { public Element getNameElement() { @@ -34,7 +33,7 @@ public class FOMPerson extends FOMExtens } public Person setNameElement(Element element) { - _setChild(NAME, (OMElement)element); + _setChild(NAME, element); return this; } @@ -46,7 +45,7 @@ public class FOMPerson extends FOMExtens } else { el = null; } - _setChild(NAME, (OMElement)el); + _setChild(NAME, el); return el; } @@ -60,7 +59,7 @@ public class FOMPerson extends FOMExtens } public Person setEmailElement(Element element) { - _setChild(EMAIL, (OMElement)element); + _setChild(EMAIL, element); return this; } @@ -72,7 +71,7 @@ public class FOMPerson extends FOMExtens } else { el = null; } - _setChild(EMAIL, (OMElement)el); + _setChild(EMAIL, el); return el; } @@ -86,7 +85,7 @@ public class FOMPerson extends FOMExtens } public Person setUriElement(IRIElement uri) { - _setChild(URI, (OMElement)uri); + _setChild(URI, uri); return this; } @@ -98,7 +97,7 @@ public class FOMPerson extends FOMExtens } else { el = null; } - _setChild(URI, (OMElement)el); + _setChild(URI, el); return el; } Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMSource.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMSource.java?rev=1706469&r1=1706468&r2=1706469&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMSource.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMSource.java Fri Oct 2 19:15:45 2015 @@ -117,7 +117,7 @@ public class FOMSource extends FOMExtens } public <T extends Source> T setIdElement(IRIElement id) { - _setChild(ID, (OMElement)id); + _setChild(ID, id); return (T)this; } @@ -324,7 +324,7 @@ public class FOMSource extends FOMExtens } public <T extends Source> T setUpdatedElement(DateTime updated) { - _setChild(UPDATED, (OMElement)updated); + _setChild(UPDATED, updated); return (T)this; } @@ -367,7 +367,7 @@ public class FOMSource extends FOMExtens } public <T extends Source> T setGenerator(Generator generator) { - _setChild(GENERATOR, (OMElement)generator); + _setChild(GENERATOR, generator); return (T)this; } @@ -387,7 +387,7 @@ public class FOMSource extends FOMExtens } public <T extends Source> T setIconElement(IRIElement iri) { - _setChild(ICON, (OMElement)iri); + _setChild(ICON, iri); return (T)this; } @@ -412,7 +412,7 @@ public class FOMSource extends FOMExtens } public <T extends Source> T setLogoElement(IRIElement iri) { - _setChild(LOGO, (OMElement)iri); + _setChild(LOGO, iri); return (T)this; } @@ -487,7 +487,7 @@ public class FOMSource extends FOMExtens public <T extends Source> T setCollection(Collection collection) { _removeChildren(PRE_RFC_COLLECTION, true); - _setChild(COLLECTION, (OMElement)collection); + _setChild(COLLECTION, collection); return (T)this; } Modified: webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMWorkspace.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMWorkspace.java?rev=1706469&r1=1706468&r2=1706469&view=diff ============================================================================== --- webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMWorkspace.java (original) +++ webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMWorkspace.java Fri Oct 2 19:15:45 2015 @@ -43,7 +43,7 @@ public class FOMWorkspace extends FOMExt private Text setTitle(String title, Text.Type type) { Text text = getFactory().newText(PREFIXED_TITLE, type); text.setValue(title); - this._setChild(PREFIXED_TITLE, (OMElement)text); + this._setChild(PREFIXED_TITLE, text); return text; }