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


Reply via email to