Author: veithen
Date: Mon Aug 31 20:37:35 2015
New Revision: 1700333

URL: http://svn.apache.org/r1700333
Log:
AXIOM-471: Some initial changes to better integrate OMSourcedElement support.

Modified:
    
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ClonePolicy.java
    
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNodeSupport.aj
    
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/AxiomElementSupport.aj
    
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamedInformationItemSupport.aj
    
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java

Modified: 
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ClonePolicy.java
URL: 
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ClonePolicy.java?rev=1700333&r1=1700332&r2=1700333&view=diff
==============================================================================
--- 
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ClonePolicy.java
 (original)
+++ 
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ClonePolicy.java
 Mon Aug 31 20:37:35 2015
@@ -22,7 +22,7 @@ package org.apache.axiom.core;
  * Defines how an object model tree is to be cloned.
  */
 public interface ClonePolicy<T> {
-    boolean preserveModel(T options);
+    Class<? extends CoreNode> getTargetNodeClass(T options, CoreNode node);
     boolean repairNamespaces(T options);
     boolean cloneAttributes(T options);
     boolean cloneChildren(T options, NodeType nodeType);

Modified: 
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNodeSupport.aj
URL: 
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNodeSupport.aj?rev=1700333&r1=1700332&r2=1700333&view=diff
==============================================================================
--- 
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNodeSupport.aj
 (original)
+++ 
webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNodeSupport.aj
 Mon Aug 31 20:37:35 2015
@@ -68,8 +68,7 @@ public aspect CoreNodeSupport {
     
     // TODO: merge this into internalClone once it is no longer referenced 
elsewhere
     public final <T> CoreNode CoreNode.shallowClone(ClonePolicy<T> policy, T 
options) {
-        CoreNode clone = coreGetNodeFactory().createNode(
-                policy.preserveModel(options) ? coreGetNodeClass() : 
coreGetNodeType().getInterface());
+        CoreNode clone = 
coreGetNodeFactory().createNode(policy.getTargetNodeClass(options, this));
         clone.init(policy, options, this);
         return clone;
     }

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=1700333&r1=1700332&r2=1700333&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
 Mon Aug 31 20:37:35 2015
@@ -102,9 +102,9 @@ public final class Policies {
     };
 
     public static final ClonePolicy<Void> DEEP_CLONE = new ClonePolicy<Void>() 
{
-        public boolean preserveModel(Void options) {
+        public Class<? extends CoreNode> getTargetNodeClass(Void options, 
CoreNode node) {
             // This is not specified by the API, but it's compatible with 
versions before 1.2.14
-            return true;
+            return node.coreGetNodeClass();
         }
 
         public boolean repairNamespaces(Void options) {
@@ -124,9 +124,9 @@ public final class Policies {
     };
 
     public static final ClonePolicy<Void> SHALLOW_CLONE = new 
ClonePolicy<Void>() {
-        public boolean preserveModel(Void options) {
+        public Class<? extends CoreNode> getTargetNodeClass(Void options, 
CoreNode node) {
             // This is not specified by the API, but it's compatible with 
versions before 1.2.14
-            return true;
+            return node.coreGetNodeClass();
         }
 
         public boolean repairNamespaces(Void options) {

Modified: 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
URL: 
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj?rev=1700333&r1=1700332&r2=1700333&view=diff
==============================================================================
--- 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
 (original)
+++ 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
 Mon Aug 31 20:37:35 2015
@@ -542,7 +542,7 @@ public aspect AxiomElementSupport {
     }
 
     public final <T> AxiomElement 
AxiomElement.shallowCloneWithoutAttributes(ClonePolicy<T> policy, T options, 
CoreParentNode targetParent, boolean namespaceRepairing) {
-        AxiomElement clone = 
(AxiomElement)coreGetNodeFactory().createNode(policy.preserveModel(options) ? 
coreGetNodeClass() : AxiomElement.class);
+        AxiomElement clone = 
(AxiomElement)coreGetNodeFactory().createNode(policy.getTargetNodeClass(options,
 this));
         if (targetParent != null) {
             targetParent.coreAppendChild(clone, false);
         }

Modified: 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamedInformationItemSupport.aj
URL: 
http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamedInformationItemSupport.aj?rev=1700333&r1=1700332&r2=1700333&view=diff
==============================================================================
--- 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamedInformationItemSupport.aj
 (original)
+++ 
webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamedInformationItemSupport.aj
 Mon Aug 31 20:37:35 2015
@@ -124,9 +124,9 @@ public aspect AxiomNamedInformationItemS
 
     public final void AxiomNamedInformationItem.initName(CoreNamedNode other) {
         AxiomNamedInformationItem o = (AxiomNamedInformationItem)other;
-        localName = o.coreGetLocalName();
-        namespace = o.getNamespace();
-        qName = null;
+        localName = o.localName;
+        namespace = o.namespace;
+        qName = o.qName;
     }
     
     public void AxiomNamedInformationItem.updateLocalName() {

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=1700333&r1=1700332&r2=1700333&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
 Mon Aug 31 20:37:35 2015
@@ -61,8 +61,14 @@ public final class Policies {
     };
     
     public static final ClonePolicy<OMCloneOptions> CLONE_POLICY = new 
ClonePolicy<OMCloneOptions>() {
-        public boolean preserveModel(OMCloneOptions options) {
-            return options != null && options.isPreserveModel();
+        public Class<? extends CoreNode> getTargetNodeClass(OMCloneOptions 
options, CoreNode node) {
+            if (options != null && options.isPreserveModel()) {
+                return node.coreGetNodeClass();
+            } else if (options != null && options.isCopyOMDataSources() && 
node instanceof AxiomSourcedElement) {
+                return AxiomSourcedElement.class;
+            } else {
+                return node.coreGetNodeType().getInterface();
+            }
         }
 
         public boolean repairNamespaces(OMCloneOptions options) {


Reply via email to