You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@ws.apache.org by ve...@apache.org on 2015/08/31 15:32:04 UTC

svn commit: r1700247 - in /webservices/axiom/trunk: aspects/core-aspects/src/main/java/org/apache/axiom/core/ aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/ aspects/om-aspects/s...

Author: veithen
Date: Mon Aug 31 13:32:03 2015
New Revision: 1700247

URL: http://svn.apache.org/r1700247
Log:
Make the cloning logic converge a bit more.

Modified:
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java
    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/CoreCDATASectionSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataNodeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNode.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNodeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCommentSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentFragmentSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentTypeDeclarationSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreEntityReferenceSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreLeafNodeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareAttributeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareElementSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareAttributeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareElementSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNamespaceDeclarationSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNode.java
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNodeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNodeSupport.aj
    webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstructionSupport.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/Policies.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/TextContent.java
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj
    webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPMessageSupport.aj
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareAttribute.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareElement.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareAttribute.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareElement.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NamespaceDeclaration.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java
    webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPMessageImpl.java
    webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
    webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
    webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
    webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPMessageImpl.java

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CharacterData.java Mon Aug 31 13:32:03 2015
@@ -23,6 +23,6 @@ package org.apache.axiom.core;
  * {@link CoreCharacterDataNode} is either a {@link String} object or an instance of this interface.
  */
 public interface CharacterData {
-    CharacterData clone(ClonePolicy policy, Object options);
+    <T> CharacterData clone(ClonePolicy<T> policy, T options);
     String toString();
 }

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=1700247&r1=1700246&r2=1700247&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 13:32:03 2015
@@ -21,8 +21,9 @@ package org.apache.axiom.core;
 /**
  * Defines how an object model tree is to be cloned.
  */
-public interface ClonePolicy {
-    boolean repairNamespaces();
-    boolean cloneAttributes();
-    boolean cloneChildren(NodeType nodeType);
+public interface ClonePolicy<T> {
+    boolean preserveModel(T options);
+    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/CoreCDATASectionSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASectionSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASectionSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCDATASectionSupport.aj Mon Aug 31 13:32:03 2015
@@ -23,7 +23,7 @@ public aspect CoreCDATASectionSupport {
         return NodeType.CDATA_SECTION;
     }
     
-    public final CoreNode CoreCDATASection.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreCDATASection.shallowClone(ClonePolicy<T> policy, T options) {
         return coreGetNodeFactory().createNode(CoreCDATASection.class);
     }
 }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataNodeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataNodeSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataNodeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataNodeSupport.aj Mon Aug 31 13:32:03 2015
@@ -48,7 +48,7 @@ public aspect CoreCharacterDataNodeSuppo
         this.data = data;
     }
     
-    public final CoreNode CoreCharacterDataNode.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreCharacterDataNode.shallowClone(ClonePolicy<T> policy, T options) {
         CoreCharacterDataNode clone = coreGetNodeFactory().createNode(CoreCharacterDataNode.class);
         clone.data = data instanceof CharacterData ? ((CharacterData)data).clone(policy, options) : data;
         clone.coreSetIgnorable(coreIsIgnorable());

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNode.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNode.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNode.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreChildNode.java Mon Aug 31 13:32:03 2015
@@ -48,5 +48,5 @@ public interface CoreChildNode extends C
      *            the node to which the clone should be added; may be <code>null</code>
      * @return the clone of this node
      */
-    CoreNode coreClone(ClonePolicy policy, Object options, CoreParentNode targetParent);
+    <T> CoreNode coreClone(ClonePolicy<T> policy, T options, CoreParentNode targetParent);
 }

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=1700247&r1=1700246&r2=1700247&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 Mon Aug 31 13:32:03 2015
@@ -209,7 +209,7 @@ public aspect CoreChildNodeSupport {
         }
     }
 
-    public final CoreNode CoreChildNode.coreClone(ClonePolicy policy, Object options, CoreParentNode targetParent) {
+    public final <T> CoreNode CoreChildNode.coreClone(ClonePolicy<T> policy, T options, CoreParentNode targetParent) {
         CoreChildNode clone = (CoreChildNode)shallowClone(policy, options);
         if (targetParent != null) {
             targetParent.coreAppendChild(clone, false);

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCommentSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCommentSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCommentSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCommentSupport.aj Mon Aug 31 13:32:03 2015
@@ -23,7 +23,7 @@ public aspect CoreCommentSupport {
         return NodeType.COMMENT;
     }
     
-    public final CoreNode CoreComment.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreComment.shallowClone(ClonePolicy<T> policy, T options) {
         return coreGetNodeFactory().createNode(CoreComment.class);
     }
 }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentFragmentSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentFragmentSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentFragmentSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentFragmentSupport.aj Mon Aug 31 13:32:03 2015
@@ -37,7 +37,7 @@ public aspect CoreDocumentFragmentSuppor
         ownerDocument = document;
     }
     
-    public final CoreNode CoreDocumentFragment.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreDocumentFragment.shallowClone(ClonePolicy<T> policy, T options) {
         // TODO
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentSupport.aj Mon Aug 31 13:32:03 2015
@@ -81,8 +81,13 @@ public aspect CoreDocumentSupport {
         this.standalone = standalone;
     }
     
-    public final CoreNode CoreDocument.shallowClone(ClonePolicy policy, Object options) {
-        // TODO
-        throw new UnsupportedOperationException();
+    public final <T> CoreNode CoreDocument.shallowClone(ClonePolicy<T> policy, T options) {
+        CoreDocument clone = (CoreDocument)coreGetNodeFactory().createNode(
+                policy.preserveModel(options) ? coreGetNodeClass() : coreGetNodeType().getInterface());
+        clone.coreSetXmlVersion(coreGetXmlVersion());
+        clone.coreSetXmlEncoding(coreGetXmlEncoding());
+        clone.coreSetStandalone(coreIsStandalone());
+        clone.coreSetInputEncoding(coreGetInputEncoding());
+        return clone;
     }
 }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentTypeDeclarationSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentTypeDeclarationSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentTypeDeclarationSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreDocumentTypeDeclarationSupport.aj Mon Aug 31 13:32:03 2015
@@ -60,7 +60,7 @@ public aspect CoreDocumentTypeDeclaratio
         this.internalSubset = internalSubset;
     }
     
-    public final CoreNode CoreDocumentTypeDeclaration.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreDocumentTypeDeclaration.shallowClone(ClonePolicy<T> policy, T options) {
         CoreDocumentTypeDeclaration clone = coreGetNodeFactory().createNode(CoreDocumentTypeDeclaration.class);
         clone.coreSetRootName(coreGetRootName());
         clone.coreSetPublicId(coreGetPublicId());

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreEntityReferenceSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreEntityReferenceSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreEntityReferenceSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreEntityReferenceSupport.aj Mon Aug 31 13:32:03 2015
@@ -42,7 +42,7 @@ public aspect CoreEntityReferenceSupport
         this.replacementText = replacementText;
     }
     
-    public final CoreNode CoreEntityReference.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreEntityReference.shallowClone(ClonePolicy<T> policy, T options) {
         CoreEntityReference clone = coreGetNodeFactory().createNode(CoreEntityReference.class);
         clone.coreSetName(coreGetName());
         clone.coreSetReplacementText(coreGetReplacementText());

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreLeafNodeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreLeafNodeSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreLeafNodeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreLeafNodeSupport.aj Mon Aug 31 13:32:03 2015
@@ -19,6 +19,6 @@
 package org.apache.axiom.core;
 
 public aspect CoreLeafNodeSupport {
-    public final void CoreLeafNode.cloneChildrenIfNecessary(ClonePolicy policy, Object options, CoreNode clone) {
+    public final <T> void CoreLeafNode.cloneChildrenIfNecessary(ClonePolicy<T> policy, T options, CoreNode clone) {
     }
 }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareAttributeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareAttributeSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareAttributeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareAttributeSupport.aj Mon Aug 31 13:32:03 2015
@@ -23,7 +23,7 @@ public aspect CoreNSAwareAttributeSuppor
         return NodeType.NS_AWARE_ATTRIBUTE;
     }
     
-    public final CoreNode CoreNSAwareAttribute.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreNSAwareAttribute.shallowClone(ClonePolicy<T> policy, T options) {
         CoreNSAwareAttribute clone = coreGetNodeFactory().createNode(CoreNSAwareAttribute.class);
         clone.coreSetName(this);
         clone.coreSetType(coreGetType());

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareElementSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareElementSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSAwareElementSupport.aj Mon Aug 31 13:32:03 2015
@@ -31,7 +31,7 @@ public aspect CoreNSAwareElementSupport
         return namespaceURI.equals(coreGetNamespaceURI()) ? coreGetPrefix() : null;
     }
     
-    public final CoreNode CoreNSAwareElement.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreNSAwareElement.shallowClone(ClonePolicy<T> policy, T options) {
         // TODO
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareAttributeSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareAttributeSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareAttributeSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareAttributeSupport.aj Mon Aug 31 13:32:03 2015
@@ -23,7 +23,7 @@ public aspect CoreNSUnawareAttributeSupp
         return NodeType.NS_UNAWARE_ATTRIBUTE;
     }
     
-    public final CoreNode CoreNSUnawareAttribute.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreNSUnawareAttribute.shallowClone(ClonePolicy<T> policy, T options) {
         // TODO
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareElementSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareElementSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNSUnawareElementSupport.aj Mon Aug 31 13:32:03 2015
@@ -31,7 +31,7 @@ public aspect CoreNSUnawareElementSuppor
         return null;
     }
     
-    public final CoreNode CoreNSUnawareElement.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreNSUnawareElement.shallowClone(ClonePolicy<T> policy, T options) {
         // TODO
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNamespaceDeclarationSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNamespaceDeclarationSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNamespaceDeclarationSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNamespaceDeclarationSupport.aj Mon Aug 31 13:32:03 2015
@@ -23,7 +23,7 @@ public aspect CoreNamespaceDeclarationSu
         return NodeType.NAMESPACE_DECLARATION;
     }
     
-    public final CoreNode CoreNamespaceDeclaration.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreNamespaceDeclaration.shallowClone(ClonePolicy<T> policy, T options) {
         // TODO
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNode.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNode.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNode.java (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreNode.java Mon Aug 31 13:32:03 2015
@@ -39,5 +39,8 @@ public interface CoreNode {
      *            the policy to use when cloning this node (and its children)
      * @return the clone of this node
      */
-    CoreNode coreClone(ClonePolicy policy, Object options);
+    <T> CoreNode coreClone(ClonePolicy<T> policy, T options);
+    
+    <T> CoreNode shallowClone(ClonePolicy<T> policy, T options);
+    <T> void cloneChildrenIfNecessary(ClonePolicy<T> policy, T options, CoreNode clone);
 }

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=1700247&r1=1700246&r2=1700247&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 13:32:03 2015
@@ -66,12 +66,9 @@ public aspect CoreNodeSupport {
         }
     }
     
-    public final CoreNode CoreNode.coreClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreNode.coreClone(ClonePolicy<T> policy, T options) {
         CoreNode clone = shallowClone(policy, options);
         cloneChildrenIfNecessary(policy, options, clone);
         return clone;
     }
-    
-    public abstract CoreNode CoreNode.shallowClone(ClonePolicy policy, Object options);
-    public abstract void CoreNode.cloneChildrenIfNecessary(ClonePolicy policy, Object options, CoreNode clone);
 }

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=1700247&r1=1700246&r2=1700247&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 Mon Aug 31 13:32:03 2015
@@ -292,8 +292,8 @@ public aspect CoreParentNodeSupport {
         return new ElementsIterator<T>(this, axis, type, matcher, namespaceURI, name, exceptionTranslator, detachPolicy);
     }
 
-    public final void CoreParentNode.cloneChildrenIfNecessary(ClonePolicy policy, Object options, CoreNode clone) {
-        if (policy.cloneChildren(coreGetNodeType())) {
+    public final <T> void CoreParentNode.cloneChildrenIfNecessary(ClonePolicy<T> policy, T options, CoreNode clone) {
+        if (policy.cloneChildren(options, coreGetNodeType())) {
             CoreParentNode targetParent = (CoreParentNode)clone;
             if (getState() == COMPACT) {
                 Object content = this.content;

Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstructionSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstructionSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstructionSupport.aj (original)
+++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreProcessingInstructionSupport.aj Mon Aug 31 13:32:03 2015
@@ -33,7 +33,7 @@ public aspect CoreProcessingInstructionS
         this.target = target;
     }
     
-    public final CoreNode CoreProcessingInstruction.shallowClone(ClonePolicy policy, Object options) {
+    public final <T> CoreNode CoreProcessingInstruction.shallowClone(ClonePolicy<T> policy, T options) {
         CoreProcessingInstruction clone = coreGetNodeFactory().createNode(CoreProcessingInstruction.class);
         clone.target = target;
         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=1700247&r1=1700246&r2=1700247&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 13:32:03 2015
@@ -100,30 +100,40 @@ public final class Policies {
         }
     };
 
-    public static final ClonePolicy DEEP_CLONE = new ClonePolicy() {
-        public boolean repairNamespaces() {
+    public static final ClonePolicy<Void> DEEP_CLONE = new ClonePolicy<Void>() {
+        public boolean preserveModel(Void options) {
+            // This is not specified by the API, but it's compatible with versions before 1.2.14
+            return true;
+        }
+
+        public boolean repairNamespaces(Void options) {
             return false;
         }
 
-        public boolean cloneAttributes() {
+        public boolean cloneAttributes(Void options) {
             return true;
         }
 
-        public boolean cloneChildren(NodeType nodeType) {
+        public boolean cloneChildren(Void options, NodeType nodeType) {
             return true;
         }
     };
 
-    public static final ClonePolicy SHALLOW_CLONE = new ClonePolicy() {
-        public boolean repairNamespaces() {
+    public static final ClonePolicy<Void> SHALLOW_CLONE = new ClonePolicy<Void>() {
+        public boolean preserveModel(Void options) {
+            // This is not specified by the API, but it's compatible with versions before 1.2.14
+            return true;
+        }
+
+        public boolean repairNamespaces(Void options) {
             return false;
         }
 
-        public boolean cloneAttributes() {
+        public boolean cloneAttributes(Void options) {
             return true;
         }
 
-        public boolean cloneChildren(NodeType nodeType) {
+        public boolean cloneChildren(Void options, NodeType nodeType) {
             return nodeType == NodeType.NS_UNAWARE_ATTRIBUTE || nodeType == NodeType.NS_AWARE_ATTRIBUTE;
         }
     };

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=1700247&r1=1700246&r2=1700247&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 13:32:03 2015
@@ -32,6 +32,7 @@ import javax.xml.namespace.QName;
 import javax.xml.stream.XMLStreamException;
 import javax.xml.stream.XMLStreamReader;
 
+import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.core.CoreAttribute;
 import org.apache.axiom.core.CoreParentNode;
 import org.apache.axiom.core.ElementAction;
@@ -557,17 +558,17 @@ public aspect AxiomElementSupport {
         }
     }
 
-    public final AxiomElement AxiomElement.shallowCloneWithoutAttributes(OMCloneOptions options, CoreParentNode targetParent, boolean namespaceRepairing) {
-        AxiomElement clone = (AxiomElement)coreGetNodeFactory().createNode(options.isPreserveModel() ? coreGetNodeClass() : AxiomElement.class);
+    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);
         if (targetParent != null) {
             targetParent.coreAppendChild(clone, false);
         }
         clone.initName(getLocalName(), getNamespace(), namespaceRepairing);
-        copyData(options, clone);
+        copyData(policy, options, clone);
         return clone;
     }
 
-    public void AxiomElement.copyData(OMCloneOptions options, AxiomElement clone) {
+    public <T> void AxiomElement.copyData(ClonePolicy<T> policy, T options, AxiomElement clone) {
     }
 
     public final void AxiomElement.buildWithAttachments() {

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=1700247&r1=1700246&r2=1700247&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 13:32:03 2015
@@ -27,6 +27,7 @@ import org.apache.axiom.core.NSAwareAttr
 import org.apache.axiom.core.NamespaceDeclarationMatcher;
 import org.apache.axiom.core.NodeMigrationPolicy;
 import org.apache.axiom.core.NodeType;
+import org.apache.axiom.om.OMCloneOptions;
 
 public final class Policies {
     private Policies() {}
@@ -57,16 +58,20 @@ public final class Policies {
         }
     };
     
-    public static final ClonePolicy CLONE_POLICY = new ClonePolicy() {
-        public boolean repairNamespaces() {
+    public static final ClonePolicy<OMCloneOptions> CLONE_POLICY = new ClonePolicy<OMCloneOptions>() {
+        public boolean preserveModel(OMCloneOptions options) {
+            return options.isPreserveModel();
+        }
+
+        public boolean repairNamespaces(OMCloneOptions options) {
             return true;
         }
 
-        public boolean cloneAttributes() {
+        public boolean cloneAttributes(OMCloneOptions options) {
             return true;
         }
 
-        public boolean cloneChildren(NodeType nodeType) {
+        public boolean cloneChildren(OMCloneOptions options, NodeType nodeType) {
             return true;
         }
     };

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/TextContent.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/TextContent.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/TextContent.java (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/TextContent.java Mon Aug 31 13:32:03 2015
@@ -126,7 +126,7 @@ public final class TextContent implement
         }
     }
 
-    public CharacterData clone(ClonePolicy policy, Object options) {
+    public <T> CharacterData clone(ClonePolicy<T> policy, T options) {
         if (binary && options instanceof OMCloneOptions && ((OMCloneOptions)options).isFetchDataHandlers()) {
             // Force loading of the reference to the DataHandler and ensure that its content is
             // completely fetched into memory (or temporary storage).

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPHeaderBlockSupport.aj Mon Aug 31 13:32:03 2015
@@ -20,7 +20,7 @@ package org.apache.axiom.soap.impl.commo
 
 import javax.xml.namespace.QName;
 
-import org.apache.axiom.om.OMCloneOptions;
+import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.om.OMDataSource;
 import org.apache.axiom.om.OMDataSourceExt;
 import org.apache.axiom.om.impl.common.AxiomElement;
@@ -121,7 +121,7 @@ public aspect AxiomSOAPHeaderBlockSuppor
         }
     }
 
-    public final void AxiomSOAPHeaderBlock.copyData(OMCloneOptions options, AxiomElement clone) {
+    public final <T> void AxiomSOAPHeaderBlock.copyData(ClonePolicy<T> policy, T options, AxiomElement clone) {
         // Copy the processed flag.  The other SOAPHeaderBlock information 
         // (e.g. role, mustUnderstand) are attributes on the tag and are copied elsewhere.
         Boolean processedFlag = options instanceof SOAPCloneOptions ? ((SOAPCloneOptions)options).getProcessedFlag() : null;

Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPMessageSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPMessageSupport.aj?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPMessageSupport.aj (original)
+++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/soap/impl/common/AxiomSOAPMessageSupport.aj Mon Aug 31 13:32:03 2015
@@ -18,12 +18,17 @@
  */
 package org.apache.axiom.soap.impl.common;
 
+import org.apache.axiom.core.CoreNode;
 import org.apache.axiom.om.OMOutputFormat;
 import org.apache.axiom.om.impl.common.AxiomElement;
 import org.apache.axiom.om.impl.common.serializer.push.OutputException;
 import org.apache.axiom.om.impl.common.serializer.push.Serializer;
 
 public aspect AxiomSOAPMessageSupport {
+    public Class<? extends CoreNode> AxiomSOAPMessage.coreGetNodeClass() {
+        return AxiomSOAPMessage.class;
+    }
+
     // TODO: this violates OO design principles and should disappear in a future Axiom version
     public final void AxiomSOAPMessage.internalSerialize(Serializer serializer, OMOutputFormat format,
             boolean cache, boolean includeXMLDeclaration) throws OutputException {

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ChildNode.java Mon Aug 31 13:32:03 2015
@@ -20,7 +20,6 @@ package org.apache.axiom.om.impl.dom;
 
 import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.dom.DOMChildNode;
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.impl.common.AxiomChildNode;
 
@@ -29,7 +28,7 @@ public abstract class ChildNode extends
         super(factory);
     }
 
-    final NodeImpl clone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
+    final <T> NodeImpl clone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
         return (ChildNode)coreClone(policy, options, targetParent);
     }
 }

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentFragmentImpl.java Mon Aug 31 13:32:03 2015
@@ -22,7 +22,6 @@ package org.apache.axiom.om.impl.dom;
 import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.core.NodeFactory;
 import org.apache.axiom.dom.DOMDocumentFragment;
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMFactory;
 
 public class DocumentFragmentImpl extends ParentNode implements DOMDocumentFragment {
@@ -35,7 +34,7 @@ public class DocumentFragmentImpl extend
         return (NodeFactory)getOMFactory();
     }
 
-    ParentNode shallowClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
+    <T> ParentNode shallowClone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
         return new DocumentFragmentImpl(getOMFactory());
     }
 }

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/DocumentImpl.java Mon Aug 31 13:32:03 2015
@@ -27,7 +27,6 @@ import org.apache.axiom.core.CoreModelEx
 import org.apache.axiom.core.NodeMigrationPolicy;
 import org.apache.axiom.dom.DOMDocument;
 import org.apache.axiom.dom.DOMExceptionTranslator;
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
@@ -233,24 +232,10 @@ public class DocumentImpl extends Parent
         throw new UnsupportedOperationException("TODO");
     }
 
-    ParentNode shallowClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
-        DocumentImpl clone;
-        if (options.isPreserveModel()) {
-            clone = createClone(options);
-        } else {
-            clone = new DocumentImpl(getOMFactory());
-        }
-        clone.coreSetXmlVersion(coreGetXmlVersion());
-        clone.coreSetXmlEncoding(coreGetXmlEncoding());
-        clone.coreSetStandalone(coreIsStandalone());
-        clone.coreSetInputEncoding(coreGetInputEncoding());
-        return clone;
+    <T> ParentNode shallowClone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
+        return (ParentNode)shallowClone(policy, options);
     }
 
-    protected DocumentImpl createClone(OMCloneOptions options) {
-        return new DocumentImpl(getOMFactory());
-    }
-    
     public final void build() {
         defaultBuild();
     }

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java Mon Aug 31 13:32:03 2015
@@ -63,14 +63,14 @@ public abstract class ElementImpl extend
         return prefix;
     }
 
-    final ParentNode shallowClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
+    final <T> ParentNode shallowClone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
         ElementImpl clone = createClone(options, targetParent, policy);
         NamedNodeMap attributes = getAttributes();
         for (int i=0, l=attributes.getLength(); i<l; i++) {
             AttrImpl attr = (AttrImpl)attributes.item(i);
             AttrImpl clonedAttr = (AttrImpl)attr.clone(options, null, policy);
             clonedAttr.coreSetSpecified(attr.coreGetSpecified());
-            if (policy.repairNamespaces() && attr instanceof NSAwareAttribute) {
+            if (policy.repairNamespaces(options) && attr instanceof NSAwareAttribute) {
                 NSAwareAttribute nsAwareAttr = (NSAwareAttribute)attr;
                 String namespaceURI = nsAwareAttr.coreGetNamespaceURI();
                 if (namespaceURI.length() != 0) {
@@ -86,7 +86,7 @@ public abstract class ElementImpl extend
         return clone;
     }
 
-    abstract ElementImpl createClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy);
+    abstract <T> ElementImpl createClone(T options, ParentNode targetParent, ClonePolicy<T> policy);
     
     /*
      * DOM-Level 3 methods

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareAttribute.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareAttribute.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareAttribute.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareAttribute.java Mon Aug 31 13:32:03 2015
@@ -20,7 +20,6 @@ package org.apache.axiom.om.impl.dom;
 
 import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.dom.DOMNSAwareAttribute;
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.OMAttributeEx;
@@ -40,7 +39,7 @@ public final class NSAwareAttribute exte
     }
 
     @Override
-    final ParentNode shallowClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
+    final <T> ParentNode shallowClone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
         return (ParentNode)shallowClone(policy, options);
     }
 }

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareElement.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareElement.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareElement.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSAwareElement.java Mon Aug 31 13:32:03 2015
@@ -53,8 +53,8 @@ public class NSAwareElement extends Elem
     }
 
     @Override
-    final ElementImpl createClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
-        return (ElementImpl)shallowCloneWithoutAttributes(options, targetParent, policy.repairNamespaces());
+    final <T> ElementImpl createClone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
+        return (ElementImpl)shallowCloneWithoutAttributes(policy, options, targetParent, policy.repairNamespaces(options));
     }
 
     public void setLineNumber(int lineNumber) {

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareAttribute.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareAttribute.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareAttribute.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareAttribute.java Mon Aug 31 13:32:03 2015
@@ -21,7 +21,6 @@ package org.apache.axiom.om.impl.dom;
 import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.core.NodeFactory;
 import org.apache.axiom.dom.DOMNSUnawareAttribute;
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMFactory;
 
 public class NSUnawareAttribute extends AttrImpl implements DOMNSUnawareAttribute {
@@ -34,8 +33,8 @@ public class NSUnawareAttribute extends
     }
 
     @Override
-    ParentNode shallowClone(OMCloneOptions options, ParentNode targetParent,
-            ClonePolicy policy) {
+    <T> ParentNode shallowClone(T options, ParentNode targetParent,
+            ClonePolicy<T> policy) {
         // TODO Auto-generated method stub
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareElement.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareElement.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareElement.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSUnawareElement.java Mon Aug 31 13:32:03 2015
@@ -21,7 +21,6 @@ package org.apache.axiom.om.impl.dom;
 import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.core.NodeFactory;
 import org.apache.axiom.dom.DOMNSUnawareElement;
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMFactory;
 
 public class NSUnawareElement extends ElementImpl implements DOMNSUnawareElement {
@@ -38,7 +37,7 @@ public class NSUnawareElement extends El
     }
 
     @Override
-    ElementImpl createClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
+    <T> ElementImpl createClone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
         // TODO
         throw new UnsupportedOperationException();
     }

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NamespaceDeclaration.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NamespaceDeclaration.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NamespaceDeclaration.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NamespaceDeclaration.java Mon Aug 31 13:32:03 2015
@@ -20,7 +20,6 @@ package org.apache.axiom.om.impl.dom;
 
 import org.apache.axiom.core.ClonePolicy;
 import org.apache.axiom.dom.DOMNamespaceDeclaration;
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.impl.common.AxiomNamespaceDeclaration;
 import org.apache.axiom.om.impl.common.OMNamespaceImpl;
@@ -31,7 +30,7 @@ public final class NamespaceDeclaration
     }
 
     @Override
-    final ParentNode shallowClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
+    final <T> ParentNode shallowClone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
         NamespaceDeclaration clone = new NamespaceDeclaration(getOMFactory());
         // TODO: this is ugly, but we are expected to create a shallow clone and can't copy the value;
         //       this will be fixed when the clone code is moved to om-aspects

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NodeImpl.java Mon Aug 31 13:32:03 2015
@@ -58,10 +58,7 @@ public abstract class NodeImpl implement
     }
 
     public final Node cloneNode(boolean deep) {
-        OMCloneOptions options = new OMCloneOptions();
-        // This is not specified by the API, but it's compatible with versions before 1.2.14
-        options.setPreserveModel(true);
-        NodeImpl clone = clone(options, null, deep ? Policies.DEEP_CLONE : Policies.SHALLOW_CLONE);
+        NodeImpl clone = clone(null, null, deep ? Policies.DEEP_CLONE : Policies.SHALLOW_CLONE);
         if (!(clone instanceof DocumentImpl)) {
             clone.coreSetOwnerDocument(ownerDocument());
         }
@@ -334,5 +331,5 @@ public abstract class NodeImpl implement
         return (OMInformationItem)clone(options, null, org.apache.axiom.om.impl.common.Policies.CLONE_POLICY);
     }
 
-    abstract NodeImpl clone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy);
+    abstract <T> NodeImpl clone(T options, ParentNode targetParent, ClonePolicy<T> policy);
 }

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=1700247&r1=1700246&r2=1700247&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 Mon Aug 31 13:32:03 2015
@@ -150,9 +150,9 @@ public abstract class ParentNode extends
         return false;
     }
 
-    final NodeImpl clone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy) {
+    final <T> NodeImpl clone(T options, ParentNode targetParent, ClonePolicy<T> policy) {
         ParentNode clone = shallowClone(options, targetParent, policy);
-        if (policy.cloneChildren(coreGetNodeType())) {
+        if (policy.cloneChildren(options, coreGetNodeType())) {
             for (Node child = getFirstChild(); child != null; child = child.getNextSibling()) {
                 ((NodeImpl)child).clone(options, clone, policy);
             }
@@ -160,5 +160,5 @@ public abstract class ParentNode extends
         return clone;
     }
     
-    abstract ParentNode shallowClone(OMCloneOptions options, ParentNode targetParent, ClonePolicy policy);
+    abstract <T> ParentNode shallowClone(T options, ParentNode targetParent, ClonePolicy<T> policy);
 }

Modified: webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPMessageImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPMessageImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPMessageImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/soap/impl/dom/SOAPMessageImpl.java Mon Aug 31 13:32:03 2015
@@ -19,7 +19,6 @@
 
 package org.apache.axiom.soap.impl.dom;
 
-import org.apache.axiom.om.OMCloneOptions;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
@@ -46,8 +45,4 @@ public class SOAPMessageImpl extends Doc
             throw new OMException("Child not allowed; must be a SOAPEnvelope");
         }
     }
-
-    protected DocumentImpl createClone(OMCloneOptions options) {
-        return new SOAPMessageImpl(getOMFactory());
-    }
 }

Modified: webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMDocumentImpl.java Mon Aug 31 13:32:03 2015
@@ -20,13 +20,13 @@
 package org.apache.axiom.om.impl.llom;
 
 import org.apache.axiom.om.OMCloneOptions;
-import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMInformationItem;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.impl.common.AxiomDocument;
+import org.apache.axiom.om.impl.common.Policies;
 
 import java.util.Iterator;
 
@@ -59,23 +59,10 @@ public class OMDocumentImpl extends OMSe
     }
     
     public OMInformationItem clone(OMCloneOptions options) {
-        AxiomDocument targetDocument;
-        if (options.isPreserveModel()) {
-            targetDocument = (AxiomDocument)createClone(options);
-        } else {
-            targetDocument = (AxiomDocument)getOMFactory().createOMDocument();
-        }
-        targetDocument.setXMLVersion(getXMLVersion());
-        targetDocument.setXMLEncoding(getXMLEncoding());
-        targetDocument.setCharsetEncoding(getCharsetEncoding());
-        targetDocument.setStandalone(isStandalone());
+        AxiomDocument targetDocument = (AxiomDocument)shallowClone(Policies.CLONE_POLICY, options);
         for (Iterator it = getChildren(); it.hasNext(); ) {
             ((OMNodeImpl)it.next()).clone(options, targetDocument);
         }
         return targetDocument;
     }
-
-    protected OMDocument createClone(OMCloneOptions options) {
-        return getOMFactory().createOMDocument();
-    }
 }

Modified: webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java Mon Aug 31 13:32:03 2015
@@ -29,6 +29,7 @@ import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.impl.common.AxiomContainer;
 import org.apache.axiom.om.impl.common.AxiomElement;
+import org.apache.axiom.om.impl.common.Policies;
 import org.apache.commons.logging.Log;
 import org.apache.commons.logging.LogFactory;
 
@@ -88,7 +89,7 @@ public class OMElementImpl extends OMNod
     }
     
     final OMNode defaultClone(OMCloneOptions options, AxiomContainer targetParent) {
-        AxiomElement targetElement = shallowCloneWithoutAttributes(options, targetParent, true);
+        AxiomElement targetElement = shallowCloneWithoutAttributes(Policies.CLONE_POLICY, options, targetParent, true);
         for (Iterator it = getAllDeclaredNamespaces(); it.hasNext(); ) {
             OMNamespace ns = (OMNamespace)it.next();
             targetElement.declareNamespace(ns);

Modified: webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPHeaderBlockImpl.java Mon Aug 31 13:32:03 2015
@@ -25,6 +25,7 @@ import org.apache.axiom.om.OMDataSource;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMFactory;
 import org.apache.axiom.om.OMSourcedElement;
+import org.apache.axiom.om.impl.common.Policies;
 import org.apache.axiom.om.impl.llom.OMSourcedElementImpl;
 import org.apache.axiom.soap.SOAPFactory;
 import org.apache.axiom.soap.impl.common.AxiomSOAPHeaderBlock;
@@ -47,7 +48,7 @@ public abstract class SOAPHeaderBlockImp
     
     protected OMSourcedElement createClone(OMCloneOptions options, OMDataSource ds) {
         AxiomSOAPHeaderBlock clone = (AxiomSOAPHeaderBlock)((SOAPFactory)getOMFactory()).createSOAPHeaderBlock(ds);
-        copyData(options, clone);
+        copyData(Policies.CLONE_POLICY, options, clone);
         return clone;
     }
 }

Modified: webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPMessageImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPMessageImpl.java?rev=1700247&r1=1700246&r2=1700247&view=diff
==============================================================================
--- webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPMessageImpl.java (original)
+++ webservices/axiom/trunk/implementations/axiom-impl/src/main/java/org/apache/axiom/soap/impl/llom/SOAPMessageImpl.java Mon Aug 31 13:32:03 2015
@@ -19,8 +19,6 @@
 
 package org.apache.axiom.soap.impl.llom;
 
-import org.apache.axiom.om.OMCloneOptions;
-import org.apache.axiom.om.OMDocument;
 import org.apache.axiom.om.OMElement;
 import org.apache.axiom.om.OMException;
 import org.apache.axiom.om.OMFactory;
@@ -47,10 +45,4 @@ public class SOAPMessageImpl extends OMD
             throw new OMException("Child not allowed; must be a SOAPEnvelope");
         }
     }
-
-    protected OMDocument createClone(OMCloneOptions options) {
-        // Note: we need to use getOMFactory here (instead of the factory attribute)
-        // directly because the factory for a SOAPMessage may be determined lazily.
-        return new SOAPMessageImpl(getOMFactory());
-    }
 }