Author: veithen Date: Sun Nov 15 13:59:31 2015 New Revision: 1714454 URL: http://svn.apache.org/viewvc?rev=1714454&view=rev Log: Introduce an interface that will group together all the API semantics (DetachPolicy, ClonePolicy, etc.).
Added: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Semantics.java (with props) webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMSemantics.java - copied, changed from r1714139, webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMSemantics.java - copied, changed from r1711547, webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/Policies.java webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomSemantics.java - copied, changed from r1714139, webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java Removed: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/Policies.java 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/AbstractNodeIterator.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeIterator.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeMatcher.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttribute.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttributeSupport.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/CoreCharacterDataSinkNode.java 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/CoreElement.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java 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/ElementMatcher.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementsIterator.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NSAwareAttributeMatcher.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NamespaceDeclarationMatcher.java webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NodeIterator.java webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMAttributeSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCDATASectionSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCommentSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentFragmentSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMElementSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMNodeSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMParentNodeSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMProcessingInstructionSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTextNodeSupport.aj webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagName.java webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagNameNS.java webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaAttributeMixin.aj webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaElementMixin.aj webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaProcessingInstructionMixin.aj webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/CategoryContainerMixin.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomAttributeSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomChildNodeSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomCommentSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomDocumentSupport.aj 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/AxiomInformationItemSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamespaceDeclarationSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomProcessingInstructionSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomTextSupport.aj webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/OMFactoryImpl.java webservices/axiom/trunk/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ParentNode.java webservices/axiom/trunk/implementations/fom-impl/src/main/java/org/apache/abdera/parser/stax/FOMElement.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=1714454&r1=1714453&r2=1714454&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 Sun Nov 15 13:59:31 2015 @@ -26,7 +26,7 @@ public abstract class AbstractNodeIterat private final Axis axis; private final Class<T> type; private final ExceptionTranslator exceptionTranslator; - private final DetachPolicy detachPolicy; + private final Semantics semantics; private CoreNode currentNode; /** @@ -38,12 +38,12 @@ public abstract class AbstractNodeIterat private boolean hasNext; private int depth; - public AbstractNodeIterator(CoreParentNode startNode, Axis axis, Class<T> type, ExceptionTranslator exceptionTranslator, DetachPolicy detachPolicy) { + public AbstractNodeIterator(CoreParentNode startNode, Axis axis, Class<T> type, ExceptionTranslator exceptionTranslator, Semantics semantics) { this.startNode = startNode; this.axis = axis; this.type = type; this.exceptionTranslator = exceptionTranslator; - this.detachPolicy = detachPolicy; + this.semantics = semantics; } protected abstract boolean matches(CoreNode node) throws CoreModelException; @@ -130,7 +130,7 @@ public abstract class AbstractNodeIterat hasNext(); if (currentNode instanceof CoreChildNode) { // try { - ((CoreChildNode)currentNode).coreDetach(detachPolicy); + ((CoreChildNode)currentNode).coreDetach(semantics); // } catch (CoreModelException ex) { // throw exceptionTranslator.toUncheckedException(ex); // } @@ -141,6 +141,6 @@ public abstract class AbstractNodeIterat public final void replace(CoreChildNode newNode) throws CoreModelException { // Move to next node before replacing the current one hasNext(); - ((CoreChildNode)currentNode).coreReplaceWith(newNode, detachPolicy); + ((CoreChildNode)currentNode).coreReplaceWith(newNode, semantics); } } Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeIterator.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeIterator.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeIterator.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeIterator.java Sun Nov 15 13:59:31 2015 @@ -25,20 +25,20 @@ import java.util.NoSuchElementException; final class AttributeIterator<T extends CoreAttribute,S> implements Iterator<S> { private final Class<T> type; private final Mapper<T,S> mapper; - private final DetachPolicy detachPolicy; + private final Semantics semantics; private CoreAttribute currentAttribute; private CoreAttribute nextAttribute; private boolean nextAttributeSet; - private AttributeIterator(CoreAttribute firstAttribute, Class<T> type, Mapper<T,S> mapper, DetachPolicy detachPolicy) { + private AttributeIterator(CoreAttribute firstAttribute, Class<T> type, Mapper<T,S> mapper, Semantics semantics) { this.type = type; this.mapper = mapper; - this.detachPolicy = detachPolicy; + this.semantics = semantics; nextAttribute = firstAttribute; nextAttributeSet = true; } - static <T extends CoreAttribute,S> Iterator<S> create(CoreElement element, Class<T> type, Mapper<T,S> mapper, DetachPolicy detachPolicy) { + static <T extends CoreAttribute,S> Iterator<S> create(CoreElement element, Class<T> type, Mapper<T,S> mapper, Semantics semantics) { CoreAttribute attribute = element.coreGetFirstAttribute(); while (attribute != null && !type.isInstance(attribute)) { attribute = attribute.coreGetNextAttribute(); @@ -46,7 +46,7 @@ final class AttributeIterator<T extends if (attribute == null) { return Collections.<S>emptyList().iterator(); } else { - return new AttributeIterator<T,S>(attribute, type, mapper, detachPolicy); + return new AttributeIterator<T,S>(attribute, type, mapper, semantics); } } @@ -80,7 +80,7 @@ final class AttributeIterator<T extends } else { // Ensure that the next attribute is known before we remove the current one. hasNext(); - currentAttribute.coreRemove(detachPolicy); + currentAttribute.coreRemove(semantics); currentAttribute = null; } } Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeMatcher.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeMatcher.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeMatcher.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/AttributeMatcher.java Sun Nov 15 13:59:31 2015 @@ -29,7 +29,7 @@ public interface AttributeMatcher { * {@link CoreElement#coreSetAttribute(AttributeMatcher, String, String, String, String)}, or * they are determined by the return values of {@link #getNamespaceURI(CoreAttribute)} and * {@link #getName(CoreAttribute)} if - * {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, DetachPolicy)} + * {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, Semantics)} * is used. It is * not required that these parameters strictly represent the namespace URI and local name of the * attribute. Their exact meaning is defined by the particular {@link AttributeMatcher} @@ -47,7 +47,7 @@ public interface AttributeMatcher { /** * Get the <tt>namespaceURI</tt> parameter for an existing attribute. This method is used by - * {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, DetachPolicy)} + * {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, Semantics)} * which passes its return value as parameter to {@link #matches(CoreAttribute, String, String)}. * * @param attr the attribute @@ -57,7 +57,7 @@ public interface AttributeMatcher { /** * Get the <tt>name</tt> parameter for an existing attribute. This method is used by - * {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, DetachPolicy)} + * {@link CoreElement#coreSetAttribute(AttributeMatcher, CoreAttribute, Semantics)} * which passes its return value as parameter to {@link #matches(CoreAttribute, String, String)}. * * @param attr the attribute Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttribute.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttribute.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttribute.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttribute.java Sun Nov 15 13:59:31 2015 @@ -36,13 +36,13 @@ public interface CoreAttribute extends N /** * Remove this attribute from its owner element. * - * @param detachPolicy - * the detach policy that determines the new owner document for the attribute + * @param semantics + * the API semantics to use; determines the new owner document for the attribute * @return <code>true</code> if the attribute had an owner element and has been removed from * that element; <code>false</code> if the attribute didn't have an owner element and no * changes have been made */ - boolean coreRemove(DetachPolicy detachPolicy); + boolean coreRemove(Semantics semantics); /** * Get the attribute immediately following the current attribute. Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttributeSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttributeSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttributeSupport.aj (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreAttributeSupport.aj Sun Nov 15 13:59:31 2015 @@ -96,11 +96,15 @@ public aspect CoreAttributeSupport { nextAttribute = attr; } - public final boolean CoreAttribute.coreRemove(DetachPolicy detachPolicy) { + public final boolean CoreAttribute.coreRemove(Semantics semantics) { + return internalRemove(semantics, null); + } + + public final boolean CoreAttribute.internalRemove(Semantics semantics, CoreElement newOwner) { if (owner instanceof CoreElement) { CoreElement ownerElement = (CoreElement)owner; CoreAttribute previousAttr = coreGetPreviousAttribute(); - owner = detachPolicy.getNewOwnerDocument(ownerElement); + owner = newOwner != null ? newOwner : semantics.getDetachPolicy().getNewOwnerDocument(ownerElement); if (previousAttr == null) { ownerElement.internalSetFirstAttribute(nextAttribute); } else { @@ -109,6 +113,9 @@ public aspect CoreAttributeSupport { nextAttribute = null; return true; } else { + if (newOwner != null) { + owner = newOwner; + } return false; } } 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=1714454&r1=1714453&r2=1714454&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 Sun Nov 15 13:59:31 2015 @@ -44,7 +44,7 @@ public aspect CoreCharacterDataNodeSuppo this.data = data; } - public final void CoreCharacterDataNode.coreSetCharacterData(Object data, DetachPolicy detachPolicy) { + public final void CoreCharacterDataNode.coreSetCharacterData(Object data, Semantics semantics) { this.data = data; } Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataSinkNode.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataSinkNode.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataSinkNode.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreCharacterDataSinkNode.java Sun Nov 15 13:59:31 2015 @@ -19,5 +19,5 @@ package org.apache.axiom.core; public interface CoreCharacterDataSinkNode { - void coreSetCharacterData(Object data, DetachPolicy detachPolicy); + void coreSetCharacterData(Object data, Semantics semantics); } 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=1714454&r1=1714453&r2=1714454&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 Sun Nov 15 13:59:31 2015 @@ -39,7 +39,7 @@ public interface CoreChildNode extends C */ CoreChildNode coreGetNextSiblingIfAvailable(); - void coreDetach(DetachPolicy detachPolicy); + void coreDetach(Semantics semantics); /** * Clone this node according to the provided policy. 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=1714454&r1=1714453&r2=1714454&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 Sun Nov 15 13:59:31 2015 @@ -195,11 +195,11 @@ public aspect CoreChildNodeSupport { void CoreChildNode.beforeDetach() {} - public final void CoreChildNode.coreDetach(DetachPolicy detachPolicy) { - internalDetach(detachPolicy, null); + public final void CoreChildNode.coreDetach(Semantics semantics) { + internalDetach(semantics, null); } - final void CoreChildNode.internalDetach(DetachPolicy detachPolicy, CoreParentNode newParent) { + final void CoreChildNode.internalDetach(Semantics semantics, CoreParentNode newParent) { CoreParentNode parent = coreGetParent(); if (parent != null) { beforeDetach(); @@ -216,7 +216,7 @@ public aspect CoreChildNodeSupport { nextSibling = null; previousSibling = null; if (newParent == null) { - internalUnsetParent(detachPolicy.getNewOwnerDocument(parent)); + internalUnsetParent(semantics.getDetachPolicy().getNewOwnerDocument(parent)); } } if (newParent != null) { @@ -224,10 +224,10 @@ public aspect CoreChildNodeSupport { } } - public final void CoreChildNode.coreReplaceWith(CoreChildNode newNode, DetachPolicy detachPolicy) { - newNode.coreDetach(DetachPolicy.NEW_DOCUMENT); + public final void CoreChildNode.coreReplaceWith(CoreChildNode newNode, Semantics semantics) { CoreParentNode parent = coreGetParent(); if (parent != null) { + newNode.internalDetach(null, parent); beforeDetach(); if (previousSibling == null) { parent.getContent(true).firstChild = newNode; @@ -243,8 +243,7 @@ public aspect CoreChildNodeSupport { newNode.nextSibling = nextSibling; nextSibling = null; } - internalUnsetParent(detachPolicy.getNewOwnerDocument(parent)); - newNode.internalSetParent(parent); + internalUnsetParent(semantics.getDetachPolicy().getNewOwnerDocument(parent)); } } Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElement.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElement.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElement.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElement.java Sun Nov 15 13:59:31 2015 @@ -86,12 +86,12 @@ public interface CoreElement extends Cor * the {@link AttributeMatcher} implementation to use * @param attr * the new attribute to add - * @param detachPolicy + * @param semantics * determines the new owner document for the replaced attribute * @return the attribute that was replaced by the new attribute, or <code>null</code> if no * matching attribute existed. */ - CoreAttribute coreSetAttribute(AttributeMatcher matcher, CoreAttribute attr, DetachPolicy detachPolicy); + CoreAttribute coreSetAttribute(AttributeMatcher matcher, CoreAttribute attr, Semantics semantics); /** * Append an attribute to this element. The attribute is simply added at the end of the list of @@ -117,9 +117,9 @@ public interface CoreElement extends Cor * @return <code>true</code> if a matching attribute was found (and has been removed), * <code>false</code> if no matching attribute was found */ - boolean coreRemoveAttribute(AttributeMatcher matcher, String namespaceURI, String name, DetachPolicy detachPolicy); + boolean coreRemoveAttribute(AttributeMatcher matcher, String namespaceURI, String name, Semantics semantics); - <T extends CoreAttribute,S> Iterator<S> coreGetAttributesByType(Class<T> type, Mapper<T,S> mapper, DetachPolicy detachPolicy); + <T extends CoreAttribute,S> Iterator<S> coreGetAttributesByType(Class<T> type, Mapper<T,S> mapper, Semantics semantics); /** * Look up the namespace URI associated to the given prefix. Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreElementSupport.aj Sun Nov 15 13:59:31 2015 @@ -57,18 +57,13 @@ public aspect CoreElementSupport { } public final void CoreElement.coreAppendAttribute(CoreAttribute attr) { - attr.coreRemove(DetachPolicy.NEW_DOCUMENT); - internalAppendAttribute(attr); - } - - private void CoreElement.internalAppendAttribute(CoreAttribute attr) { // TODO: we should probably check if the attribute is already owned by the element - attr.internalSetOwnerElement(this); + attr.internalRemove(null, this); CoreAttribute lastAttribute = coreGetLastAttribute(); if (lastAttribute == null) { firstAttribute = attr; } else { - lastAttribute.insertAttributeAfter(attr); + lastAttribute.internalSetNextAttribute(attr); } } @@ -82,7 +77,7 @@ public aspect CoreElementSupport { if (attr == null) { CoreAttribute newAttr = matcher.createAttribute(this, namespaceURI, name, prefix, value); if (previousAttr == null) { - internalAppendAttribute(newAttr); + coreAppendAttribute(newAttr); } else { previousAttr.insertAttributeAfter(newAttr); } @@ -91,12 +86,12 @@ public aspect CoreElementSupport { } } - public final CoreAttribute CoreElement.coreSetAttribute(AttributeMatcher matcher, CoreAttribute attr, DetachPolicy detachPolicy) { + public final CoreAttribute CoreElement.coreSetAttribute(AttributeMatcher matcher, CoreAttribute attr, Semantics semantics) { if (attr.coreGetOwnerElement() == this) { // TODO: document this and add assertion return attr; } - attr.coreRemove(DetachPolicy.NEW_DOCUMENT); + attr.internalRemove(null, this); String namespaceURI = matcher.getNamespaceURI(attr); String name = matcher.getName(attr); CoreAttribute existingAttr = coreGetFirstAttribute(); @@ -105,7 +100,6 @@ public aspect CoreElementSupport { previousAttr = existingAttr; existingAttr = existingAttr.coreGetNextAttribute(); } - attr.internalSetOwnerElement(this); if (existingAttr == null) { if (previousAttr == null) { firstAttribute = attr; @@ -118,25 +112,25 @@ public aspect CoreElementSupport { } else { previousAttr.internalSetNextAttribute(attr); } - existingAttr.internalUnsetOwnerElement(detachPolicy.getNewOwnerDocument(this)); + existingAttr.internalUnsetOwnerElement(semantics.getDetachPolicy().getNewOwnerDocument(this)); attr.internalSetNextAttribute(existingAttr.coreGetNextAttribute()); existingAttr.internalSetNextAttribute(null); } return existingAttr; } - public final boolean CoreElement.coreRemoveAttribute(AttributeMatcher matcher, String namespaceURI, String name, DetachPolicy detachPolicy) { + public final boolean CoreElement.coreRemoveAttribute(AttributeMatcher matcher, String namespaceURI, String name, Semantics semantics) { CoreAttribute att = coreGetAttribute(matcher, namespaceURI, name); if (att != null) { - att.coreRemove(detachPolicy); + att.coreRemove(semantics); return true; } else { return false; } } - public final <T extends CoreAttribute,S> Iterator<S> CoreElement.coreGetAttributesByType(Class<T> type, Mapper<T,S> mapper, DetachPolicy detachPolicy) { - return AttributeIterator.create(this, type, mapper, detachPolicy); + public final <T extends CoreAttribute,S> Iterator<S> CoreElement.coreGetAttributesByType(Class<T> type, Mapper<T,S> mapper, Semantics semantics) { + return AttributeIterator.create(this, type, mapper, semantics); } public abstract String CoreElement.getImplicitNamespaceURI(String prefix); @@ -215,7 +209,7 @@ public aspect CoreElementSupport { if (isExpanded()) { CoreAttribute attr = o.coreGetFirstAttribute(); while (attr != null) { - internalAppendAttribute((CoreAttribute)attr.coreClone(policy, options)); + coreAppendAttribute((CoreAttribute)attr.coreClone(policy, options)); // TODO: needed? // clonedAttr.coreSetSpecified(attr.coreGetSpecified()); attr = attr.coreGetNextAttribute(); Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/CoreParentNode.java Sun Nov 15 13:59:31 2015 @@ -35,5 +35,5 @@ public interface CoreParentNode extends void coreSetState(int state); void build(); - <T extends CoreElement> NodeIterator<T> coreGetElements(Axis axis, Class<T> type, ElementMatcher<? super T> matcher, String namespaceURI, String name, ExceptionTranslator exceptionTranslator, DetachPolicy detachPolicy); + <T extends CoreElement> NodeIterator<T> coreGetElements(Axis axis, Class<T> type, ElementMatcher<? super T> matcher, String namespaceURI, String name, ExceptionTranslator exceptionTranslator, Semantics semantics); } 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=1714454&r1=1714453&r2=1714454&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 Sun Nov 15 13:59:31 2015 @@ -186,7 +186,7 @@ public aspect CoreParentNodeSupport { fragmentContent.lastChild = null; } - public final void CoreParentNode.coreRemoveChildren(DetachPolicy detachPolicy) { + public final void CoreParentNode.coreRemoveChildren(Semantics semantics) { if (getState() == COMPACT) { coreSetState(COMPLETE); content = null; @@ -205,7 +205,7 @@ public aspect CoreParentNodeSupport { updateState = false; } if (child != null) { - CoreDocument newOwnerDocument = detachPolicy.getNewOwnerDocument(this); + CoreDocument newOwnerDocument = semantics.getDetachPolicy().getNewOwnerDocument(this); do { CoreChildNode nextSibling = child.nextSibling; child.previousSibling = null; @@ -288,16 +288,16 @@ public aspect CoreParentNodeSupport { } } - public final void CoreParentNode.coreSetCharacterData(Object data, DetachPolicy detachPolicy) { - coreRemoveChildren(detachPolicy); + public final void CoreParentNode.coreSetCharacterData(Object data, Semantics semantics) { + coreRemoveChildren(semantics); if (data != null && (data instanceof CharacterData || ((String)data).length() > 0)) { coreSetState(COMPACT); content = data; } } - public final <T> NodeIterator<T> CoreParentNode.coreGetNodes(Axis axis, Class<T> type, ExceptionTranslator exceptionTranslator, DetachPolicy detachPolicy) { - return new AbstractNodeIterator<T>(this, axis, type, exceptionTranslator, detachPolicy) { + public final <T> NodeIterator<T> CoreParentNode.coreGetNodes(Axis axis, Class<T> type, ExceptionTranslator exceptionTranslator, Semantics semantics) { + return new AbstractNodeIterator<T>(this, axis, type, exceptionTranslator, semantics) { @Override protected boolean matches(CoreNode node) throws CoreModelException { return true; @@ -305,8 +305,8 @@ public aspect CoreParentNodeSupport { }; } - public final <T extends CoreElement> NodeIterator<T> CoreParentNode.coreGetElements(Axis axis, Class<T> type, ElementMatcher<? super T> matcher, String namespaceURI, String name, ExceptionTranslator exceptionTranslator, DetachPolicy detachPolicy) { - return new ElementsIterator<T>(this, axis, type, matcher, namespaceURI, name, exceptionTranslator, detachPolicy); + public final <T extends CoreElement> NodeIterator<T> CoreParentNode.coreGetElements(Axis axis, Class<T> type, ElementMatcher<? super T> matcher, String namespaceURI, String name, ExceptionTranslator exceptionTranslator, Semantics semantics) { + return new ElementsIterator<T>(this, axis, type, matcher, namespaceURI, name, exceptionTranslator, semantics); } public final <T> void CoreParentNode.cloneChildrenIfNecessary(ClonePolicy<T> policy, T options, CoreNode clone) { Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementMatcher.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementMatcher.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementMatcher.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementMatcher.java Sun Nov 15 13:59:31 2015 @@ -101,7 +101,7 @@ public interface ElementMatcher<T extend /** * Check if the given element matches. The values of the <code>namespaceURI</code> and * <code>name</code> parameters are those passed to - * {@link CoreParentNode#coreGetElements(Axis, Class, ElementMatcher, String, String, ExceptionTranslator, DetachPolicy)}. + * {@link CoreParentNode#coreGetElements(Axis, Class, ElementMatcher, String, String, ExceptionTranslator, Semantics)}. * * @param element * the element to check Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementsIterator.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementsIterator.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementsIterator.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/ElementsIterator.java Sun Nov 15 13:59:31 2015 @@ -24,8 +24,8 @@ final class ElementsIterator<T extends C private final String namespaceURI; private final String name; - public ElementsIterator(CoreParentNode startNode, Axis axis, Class<T> type, ElementMatcher<? super T> matcher, String namespaceURI, String name, ExceptionTranslator exceptionTranslator, DetachPolicy detachPolicy) { - super(startNode, axis, type, exceptionTranslator, detachPolicy); + public ElementsIterator(CoreParentNode startNode, Axis axis, Class<T> type, ElementMatcher<? super T> matcher, String namespaceURI, String name, ExceptionTranslator exceptionTranslator, Semantics semantics) { + super(startNode, axis, type, exceptionTranslator, semantics); this.type = type; this.matcher = matcher; this.namespaceURI = namespaceURI; Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NSAwareAttributeMatcher.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NSAwareAttributeMatcher.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NSAwareAttributeMatcher.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NSAwareAttributeMatcher.java Sun Nov 15 13:59:31 2015 @@ -36,15 +36,15 @@ package org.apache.axiom.core; * {@link NamespaceDeclarationMatcher} can be used). */ public final class NSAwareAttributeMatcher implements AttributeMatcher { - private final DetachPolicy detachPolicy; + private final Semantics semantics; private final boolean matchNSUnawareAttributes; private final boolean updatePrefix; /** * Constructor. * - * @param detachPolicy - * Specifies the {@link DetachPolicy} to be used by + * @param semantics + * Specifies the {@link Semantics} to be used by * {@link #update(CoreAttribute, String, String)}. * @param matchNSUnawareAttributes * Specifies if {@link CoreNSUnawareAttribute} instances can also be matched. Only @@ -55,9 +55,9 @@ public final class NSAwareAttributeMatch * <code>prefix</code> is only used when creating new attributes and prefixes of * existing attributes are preserved (i.e. only their value is updated). */ - public NSAwareAttributeMatcher(DetachPolicy detachPolicy, boolean matchNSUnawareAttributes, + public NSAwareAttributeMatcher(Semantics semantics, boolean matchNSUnawareAttributes, boolean updatePrefix) { - this.detachPolicy = detachPolicy; + this.semantics = semantics; this.matchNSUnawareAttributes = matchNSUnawareAttributes; this.updatePrefix = updatePrefix; } @@ -92,7 +92,7 @@ public final class NSAwareAttributeMatch } public void update(CoreAttribute attr, String prefix, String value) { - attr.coreSetCharacterData(value, detachPolicy); + attr.coreSetCharacterData(value, semantics); if (updatePrefix && attr instanceof CoreNSAwareAttribute) { ((CoreNSAwareAttribute)attr).coreSetPrefix(prefix); } Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NamespaceDeclarationMatcher.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NamespaceDeclarationMatcher.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NamespaceDeclarationMatcher.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NamespaceDeclarationMatcher.java Sun Nov 15 13:59:31 2015 @@ -34,10 +34,10 @@ package org.apache.axiom.core; * </dl> */ public final class NamespaceDeclarationMatcher implements AttributeMatcher { - private final DetachPolicy detachPolicy; + private final Semantics semantics; - public NamespaceDeclarationMatcher(DetachPolicy detachPolicy) { - this.detachPolicy = detachPolicy; + public NamespaceDeclarationMatcher(Semantics semantics) { + this.semantics = semantics; } public boolean matches(CoreAttribute attr, String namespaceURI, String name) { @@ -64,6 +64,6 @@ public final class NamespaceDeclarationM } public void update(CoreAttribute attr, String prefix, String value) { - attr.coreSetCharacterData(value, detachPolicy); + attr.coreSetCharacterData(value, semantics); } } \ No newline at end of file Modified: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NodeIterator.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NodeIterator.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NodeIterator.java (original) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/NodeIterator.java Sun Nov 15 13:59:31 2015 @@ -32,7 +32,7 @@ import java.util.Iterator; * allowed to throw {@link UnsupportedOperationException}. * <li>A {@link ConcurrentModificationException} MUST be thrown when the iterator is used after the * last node returned by {@link Iterator#next()} has been removed using a method other than - * {@link Iterator#remove()} (e.g. {@link CoreChildNode#coreDetach(DetachPolicy)}). + * {@link Iterator#remove()} (e.g. {@link CoreChildNode#coreDetach(Semantics)}). * <li>If a {@link CoreModelException} occurs inside {@link Iterator#hasNext()}, * {@link Iterator#next()} or {@link Iterator#remove()}, then the implementation MUST use the * supplied {@link ExceptionTranslator} to translate that checked exception into an unchecked Added: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Semantics.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Semantics.java?rev=1714454&view=auto ============================================================================== --- webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Semantics.java (added) +++ webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Semantics.java Sun Nov 15 13:59:31 2015 @@ -0,0 +1,26 @@ +/* + * Licensed to the Apache Software Foundation (ASF) under one + * or more contributor license agreements. See the NOTICE file + * distributed with this work for additional information + * regarding copyright ownership. The ASF licenses this file + * to you under the Apache License, Version 2.0 (the + * "License"); you may not use this file except in compliance + * with the License. You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, + * software distributed under the License is distributed on an + * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + * KIND, either express or implied. See the License for the + * specific language governing permissions and limitations + * under the License. + */ +package org.apache.axiom.core; + +/** + * Defines the semantics of a particular API. + */ +public interface Semantics { + DetachPolicy getDetachPolicy(); +} Propchange: webservices/axiom/trunk/aspects/core-aspects/src/main/java/org/apache/axiom/core/Semantics.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMAttributeSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMAttributeSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMAttributeSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMAttributeSupport.aj Sun Nov 15 13:59:31 2015 @@ -66,7 +66,7 @@ public aspect DOMAttributeSupport { } public final void DOMAttribute.setValue(String value) { - coreSetCharacterData(value, Policies.DETACH_POLICY); + coreSetCharacterData(value, DOMSemantics.INSTANCE); } public final CoreElement DOMAttribute.getNamespaceContext() { Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCDATASectionSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCDATASectionSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCDATASectionSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCDATASectionSupport.aj Sun Nov 15 13:59:31 2015 @@ -30,6 +30,6 @@ public aspect DOMCDATASectionSupport { } public final void DOMCDATASection.setData(String data) { - coreSetCharacterData(data, Policies.DETACH_POLICY); + coreSetCharacterData(data, DOMSemantics.INSTANCE); } } Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCommentSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCommentSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCommentSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMCommentSupport.aj Sun Nov 15 13:59:31 2015 @@ -34,6 +34,6 @@ public aspect DOMCommentSupport { } public final void DOMComment.setData(String data) { - coreSetCharacterData(data, Policies.DETACH_POLICY); + coreSetCharacterData(data, DOMSemantics.INSTANCE); } } Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentFragmentSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentFragmentSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentFragmentSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentFragmentSupport.aj Sun Nov 15 13:59:31 2015 @@ -80,6 +80,6 @@ public aspect DOMDocumentFragmentSupport } public final void DOMDocumentFragment.setTextContent(String textContent) { - coreSetCharacterData(textContent, Policies.DETACH_POLICY); + coreSetCharacterData(textContent, DOMSemantics.INSTANCE); } } Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMDocumentSupport.aj Sun Nov 15 13:59:31 2015 @@ -146,7 +146,7 @@ public aspect DOMDocumentSupport { public final CDATASection DOMDocument.createCDATASection(String data) { DOMCDATASection cdataSection = coreGetNodeFactory().createNode(DOMCDATASection.class); cdataSection.coreSetOwnerDocument(this); - cdataSection.coreSetCharacterData(data, Policies.DETACH_POLICY); + cdataSection.coreSetCharacterData(data, DOMSemantics.INSTANCE); return cdataSection; } @@ -216,7 +216,7 @@ public aspect DOMDocumentSupport { DOMProcessingInstruction pi = coreGetNodeFactory().createNode(DOMProcessingInstruction.class); pi.coreSetOwnerDocument(this); pi.coreSetTarget(target); - pi.coreSetCharacterData(data, Policies.DETACH_POLICY); + pi.coreSetCharacterData(data, DOMSemantics.INSTANCE); return pi; } @@ -230,7 +230,7 @@ public aspect DOMDocumentSupport { public final Comment DOMDocument.createComment(String data) { DOMComment node = coreGetNodeFactory().createNode(DOMComment.class); node.coreSetOwnerDocument(this); - node.coreSetCharacterData(data, Policies.DETACH_POLICY); + node.coreSetCharacterData(data, DOMSemantics.INSTANCE); return node; } Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMElementSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMElementSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMElementSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMElementSupport.aj Sun Nov 15 13:59:31 2015 @@ -76,14 +76,14 @@ public aspect DOMElementSupport { } public final Attr DOMElement.getAttributeNode(String name) { - return (DOMAttribute)coreGetAttribute(Policies.DOM1_ATTRIBUTE_MATCHER, null, name); + return (DOMAttribute)coreGetAttribute(DOMSemantics.DOM1_ATTRIBUTE_MATCHER, null, name); } public final Attr DOMElement.getAttributeNodeNS(String namespaceURI, String localName) { if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI)) { - return (DOMAttribute)coreGetAttribute(Policies.NAMESPACE_DECLARATION_MATCHER, null, localName.equals(XMLConstants.XMLNS_ATTRIBUTE) ? "" : localName); + return (DOMAttribute)coreGetAttribute(DOMSemantics.NAMESPACE_DECLARATION_MATCHER, null, localName.equals(XMLConstants.XMLNS_ATTRIBUTE) ? "" : localName); } else { - return (DOMAttribute)coreGetAttribute(Policies.DOM2_ATTRIBUTE_MATCHER, namespaceURI == null ? "" : namespaceURI, localName); + return (DOMAttribute)coreGetAttribute(DOMSemantics.DOM2_ATTRIBUTE_MATCHER, namespaceURI == null ? "" : namespaceURI, localName); } } @@ -107,7 +107,7 @@ public aspect DOMElementSupport { public final void DOMElement.setAttribute(String name, String value) { NSUtil.validateName(name); - coreSetAttribute(Policies.DOM1_ATTRIBUTE_MATCHER, null, name, null, value); + coreSetAttribute(DOMSemantics.DOM1_ATTRIBUTE_MATCHER, null, name, null, value); } public final void DOMElement.setAttributeNS(String namespaceURI, String qualifiedName, String value) throws DOMException { @@ -122,11 +122,11 @@ public aspect DOMElementSupport { localName = qualifiedName.substring(i+1); } if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI)) { - coreSetAttribute(Policies.NAMESPACE_DECLARATION_MATCHER, null, NSUtil.getDeclaredPrefix(localName, prefix), null, value); + coreSetAttribute(DOMSemantics.NAMESPACE_DECLARATION_MATCHER, null, NSUtil.getDeclaredPrefix(localName, prefix), null, value); } else { namespaceURI = NSUtil.normalizeNamespaceURI(namespaceURI); NSUtil.validateAttributeName(namespaceURI, localName, prefix); - coreSetAttribute(Policies.DOM2_ATTRIBUTE_MATCHER, namespaceURI, localName, prefix, value); + coreSetAttribute(DOMSemantics.DOM2_ATTRIBUTE_MATCHER, namespaceURI, localName, prefix, value); } } @@ -152,14 +152,14 @@ public aspect DOMElementSupport { } AttributeMatcher matcher; if (newAttr instanceof CoreNSAwareAttribute) { - matcher = Policies.DOM2_ATTRIBUTE_MATCHER; + matcher = DOMSemantics.DOM2_ATTRIBUTE_MATCHER; } else if (newAttr instanceof CoreNamespaceDeclaration) { - matcher = Policies.NAMESPACE_DECLARATION_MATCHER; + matcher = DOMSemantics.NAMESPACE_DECLARATION_MATCHER; } else { // Must be a DOM1 (namespace unaware) attribute - matcher = Policies.DOM1_ATTRIBUTE_MATCHER; + matcher = DOMSemantics.DOM1_ATTRIBUTE_MATCHER; } - return (DOMAttribute)coreSetAttribute(matcher, newAttr, Policies.DETACH_POLICY); + return (DOMAttribute)coreSetAttribute(matcher, newAttr, DOMSemantics.INSTANCE); } } @@ -169,7 +169,7 @@ public aspect DOMElementSupport { if (attr.coreGetOwnerElement() != this) { throw DOMExceptionTranslator.newDOMException(DOMException.NOT_FOUND_ERR); } else { - attr.coreRemove(Policies.DETACH_POLICY); + attr.coreRemove(DOMSemantics.INSTANCE); } return attr; } else { @@ -179,15 +179,15 @@ public aspect DOMElementSupport { public final void DOMElement.removeAttribute(String name) throws DOMException { // Specs: "If no attribute with this name is found, this method has no effect." - coreRemoveAttribute(Policies.DOM1_ATTRIBUTE_MATCHER, null, name, Policies.DETACH_POLICY); + coreRemoveAttribute(DOMSemantics.DOM1_ATTRIBUTE_MATCHER, null, name, DOMSemantics.INSTANCE); } public final void DOMElement.removeAttributeNS(String namespaceURI, String localName) throws DOMException { // Specs: "If no attribute with this local name and namespace URI is found, this method has no effect." if (XMLConstants.XMLNS_ATTRIBUTE_NS_URI.equals(namespaceURI)) { - coreRemoveAttribute(Policies.NAMESPACE_DECLARATION_MATCHER, null, localName.equals(XMLConstants.XMLNS_ATTRIBUTE) ? "" : localName, Policies.DETACH_POLICY); + coreRemoveAttribute(DOMSemantics.NAMESPACE_DECLARATION_MATCHER, null, localName.equals(XMLConstants.XMLNS_ATTRIBUTE) ? "" : localName, DOMSemantics.INSTANCE); } else { - coreRemoveAttribute(Policies.DOM2_ATTRIBUTE_MATCHER, namespaceURI == null ? "" : namespaceURI, localName, Policies.DETACH_POLICY); + coreRemoveAttribute(DOMSemantics.DOM2_ATTRIBUTE_MATCHER, namespaceURI == null ? "" : namespaceURI, localName, DOMSemantics.INSTANCE); } } @@ -196,7 +196,7 @@ public aspect DOMElementSupport { } public final void DOMElement.setTextContent(String textContent) { - coreSetCharacterData(textContent, Policies.DETACH_POLICY); + coreSetCharacterData(textContent, DOMSemantics.INSTANCE); } public final NodeList DOMElement.getElementsByTagName(String tagname) { Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMNodeSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMNodeSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMNodeSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMNodeSupport.aj Sun Nov 15 13:59:31 2015 @@ -70,7 +70,7 @@ public aspect DOMNodeSupport { } public final Node DOMNode.cloneNode(boolean deep) { - DOMNode clone = (DOMNode)coreClone(deep ? Policies.DEEP_CLONE : Policies.SHALLOW_CLONE, null); + DOMNode clone = (DOMNode)coreClone(deep ? DOMSemantics.DEEP_CLONE : DOMSemantics.SHALLOW_CLONE, null); if (!(clone instanceof DOMDocument)) { clone.coreSetOwnerDocument(coreGetOwnerDocument(true)); } Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMParentNodeSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMParentNodeSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMParentNodeSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMParentNodeSupport.aj Sun Nov 15 13:59:31 2015 @@ -68,7 +68,7 @@ public aspect DOMParentNodeSupport { public final Node DOMParentNode.removeChild(Node oldChild) throws DOMException { if (oldChild.getParentNode() == this) { - ((CoreChildNode)oldChild).coreDetach(Policies.DETACH_POLICY); + ((CoreChildNode)oldChild).coreDetach(DOMSemantics.INSTANCE); return oldChild; } else { throw newDOMException(DOMException.NOT_FOUND_ERR); Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMProcessingInstructionSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMProcessingInstructionSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMProcessingInstructionSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMProcessingInstructionSupport.aj Sun Nov 15 13:59:31 2015 @@ -30,7 +30,7 @@ public aspect DOMProcessingInstructionSu } public final void DOMProcessingInstruction.setData(String data) { - coreSetCharacterData(data, Policies.DETACH_POLICY); + coreSetCharacterData(data, DOMSemantics.INSTANCE); } public final String DOMProcessingInstruction.getNodeName() { Copied: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMSemantics.java (from r1714139, 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/DOMSemantics.java?p2=webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMSemantics.java&p1=webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/Policies.java&r1=1714139&r2=1714454&rev=1714454&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/DOMSemantics.java Sun Nov 15 13:59:31 2015 @@ -28,11 +28,16 @@ import org.apache.axiom.core.DetachPolic import org.apache.axiom.core.NSAwareAttributeMatcher; import org.apache.axiom.core.NamespaceDeclarationMatcher; import org.apache.axiom.core.NodeType; +import org.apache.axiom.core.Semantics; -public final class Policies { - private Policies() {} +public final class DOMSemantics implements Semantics { + public static final DOMSemantics INSTANCE = new DOMSemantics(); - public static final DetachPolicy DETACH_POLICY = DetachPolicy.SAME_DOCUMENT; + private DOMSemantics() {} + + public DetachPolicy getDetachPolicy() { + return DetachPolicy.SAME_DOCUMENT; + } /** * {@link AttributeMatcher} implementation that matches attributes based on their name, i.e. @@ -74,13 +79,13 @@ public final class Policies { } public void update(CoreAttribute attr, String prefix, String value) { - attr.coreSetCharacterData(value, DETACH_POLICY); + attr.coreSetCharacterData(value, INSTANCE); } }; - public static final AttributeMatcher DOM2_ATTRIBUTE_MATCHER = new NSAwareAttributeMatcher(DETACH_POLICY, true, true); + public static final AttributeMatcher DOM2_ATTRIBUTE_MATCHER = new NSAwareAttributeMatcher(INSTANCE, true, true); - public static final AttributeMatcher NAMESPACE_DECLARATION_MATCHER = new NamespaceDeclarationMatcher(DETACH_POLICY); + public static final AttributeMatcher NAMESPACE_DECLARATION_MATCHER = new NamespaceDeclarationMatcher(INSTANCE); public static final ClonePolicy<Void> DEEP_CLONE = new ClonePolicy<Void>() { public Class<? extends CoreNode> getTargetNodeClass(Void options, CoreNode node) { Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTextNodeSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTextNodeSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTextNodeSupport.aj (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/DOMTextNodeSupport.aj Sun Nov 15 13:59:31 2015 @@ -87,7 +87,7 @@ public aspect DOMTextNodeSupport { DOMTextNode next; do { next = current == last ? null : (DOMTextNode)current.coreGetNextSibling(); - current.coreDetach(Policies.DETACH_POLICY); + current.coreDetach(DOMSemantics.INSTANCE); current = next; } while (next != null); } Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagName.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagName.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagName.java (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagName.java Sun Nov 15 13:59:31 2015 @@ -36,9 +36,9 @@ public class ElementsByTagName extends N @Override protected Iterator<? extends Node> createIterator() { if (tagname.equals("*")) { - return node.coreGetElements(Axis.DESCENDANTS, DOMElement.class, ElementMatcher.ANY, null, null, DOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return node.coreGetElements(Axis.DESCENDANTS, DOMElement.class, ElementMatcher.ANY, null, null, DOMExceptionTranslator.INSTANCE, DOMSemantics.INSTANCE); } else { - return node.coreGetElements(Axis.DESCENDANTS, DOMElement.class, ElementMatcher.BY_NAME, null, tagname, DOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return node.coreGetElements(Axis.DESCENDANTS, DOMElement.class, ElementMatcher.BY_NAME, null, tagname, DOMExceptionTranslator.INSTANCE, DOMSemantics.INSTANCE); } } } Modified: webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagNameNS.java URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagNameNS.java?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagNameNS.java (original) +++ webservices/axiom/trunk/aspects/dom-aspects/src/main/java/org/apache/axiom/dom/ElementsByTagNameNS.java Sun Nov 15 13:59:31 2015 @@ -41,13 +41,13 @@ public class ElementsByTagNameNS extends boolean localNameWildcard = localName.equals("*"); if (nsWildcard && localNameWildcard) { // TODO: there seems to be no unit test checking whether the iterator should return DOM1 elements! - return node.coreGetElements(Axis.DESCENDANTS, DOMElement.class, ElementMatcher.ANY, null, null, DOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return node.coreGetElements(Axis.DESCENDANTS, DOMElement.class, ElementMatcher.ANY, null, null, DOMExceptionTranslator.INSTANCE, DOMSemantics.INSTANCE); } else if (nsWildcard) { - return node.coreGetElements(Axis.DESCENDANTS, DOMNSAwareElement.class, ElementMatcher.BY_LOCAL_NAME, null, localName, DOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return node.coreGetElements(Axis.DESCENDANTS, DOMNSAwareElement.class, ElementMatcher.BY_LOCAL_NAME, null, localName, DOMExceptionTranslator.INSTANCE, DOMSemantics.INSTANCE); } else if (localNameWildcard) { - return node.coreGetElements(Axis.DESCENDANTS, DOMNSAwareElement.class, ElementMatcher.BY_NAMESPACE_URI, namespaceURI, null, DOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return node.coreGetElements(Axis.DESCENDANTS, DOMNSAwareElement.class, ElementMatcher.BY_NAMESPACE_URI, namespaceURI, null, DOMExceptionTranslator.INSTANCE, DOMSemantics.INSTANCE); } else { - return node.coreGetElements(Axis.DESCENDANTS, DOMNSAwareElement.class, ElementMatcher.BY_QNAME, namespaceURI, localName, DOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return node.coreGetElements(Axis.DESCENDANTS, DOMNSAwareElement.class, ElementMatcher.BY_QNAME, namespaceURI, localName, DOMExceptionTranslator.INSTANCE, DOMSemantics.INSTANCE); } } } Modified: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaAttributeMixin.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaAttributeMixin.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaAttributeMixin.aj (original) +++ webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaAttributeMixin.aj Sun Nov 15 13:59:31 2015 @@ -25,7 +25,7 @@ public aspect AbderaAttributeMixin { } public final Attribute AbderaAttribute.setText(String text) { - coreSetCharacterData(text, Policies.DETACH_POLICY); + coreSetCharacterData(text, FOMSemantics.INSTANCE); return this; } } Modified: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaElementMixin.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaElementMixin.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaElementMixin.aj (original) +++ webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaElementMixin.aj Sun Nov 15 13:59:31 2015 @@ -20,6 +20,6 @@ package org.apache.axiom.fom; public aspect AbderaElementMixin { public final void AbderaElement._removeAllChildren() { - coreRemoveChildren(Policies.DETACH_POLICY); + coreRemoveChildren(FOMSemantics.INSTANCE); } } Modified: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaProcessingInstructionMixin.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaProcessingInstructionMixin.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaProcessingInstructionMixin.aj (original) +++ webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/AbderaProcessingInstructionMixin.aj Sun Nov 15 13:59:31 2015 @@ -27,7 +27,7 @@ public aspect AbderaProcessingInstructio @SuppressWarnings("unchecked") public final <T extends ProcessingInstruction> T AbderaProcessingInstruction.setText(String text) { - coreSetCharacterData(text, Policies.DETACH_POLICY); + coreSetCharacterData(text, FOMSemantics.INSTANCE); return (T)this; } } Modified: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/CategoryContainerMixin.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/CategoryContainerMixin.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/CategoryContainerMixin.aj (original) +++ webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/CategoryContainerMixin.aj Sun Nov 15 13:59:31 2015 @@ -55,6 +55,6 @@ public aspect CategoryContainerMixin { // TODO: we should probably set detachPolicy to null return new FOMList<Category>(coreGetElements( Axis.CHILDREN, AbderaCategory.class, CATEGORY_BY_SCHEME, null, scheme, - FOMExceptionTranslator.INSTANCE, Policies.DETACH_POLICY)); + FOMExceptionTranslator.INSTANCE, FOMSemantics.INSTANCE)); } } Copied: webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMSemantics.java (from r1711547, webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/Policies.java) URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMSemantics.java?p2=webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMSemantics.java&p1=webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/Policies.java&r1=1711547&r2=1714454&rev=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/Policies.java (original) +++ webservices/axiom/trunk/aspects/fom-aspects/src/main/java/org/apache/axiom/fom/FOMSemantics.java Sun Nov 15 13:59:31 2015 @@ -19,19 +19,18 @@ package org.apache.axiom.fom; import org.apache.axiom.core.AttributeMatcher; -import org.apache.axiom.core.CoreDocument; -import org.apache.axiom.core.CoreParentNode; import org.apache.axiom.core.DetachPolicy; import org.apache.axiom.core.NSAwareAttributeMatcher; +import org.apache.axiom.core.Semantics; -public final class Policies { - private Policies() {} +public final class FOMSemantics implements Semantics { + public static final FOMSemantics INSTANCE = new FOMSemantics(); - public static final DetachPolicy DETACH_POLICY = new DetachPolicy() { - public CoreDocument getNewOwnerDocument(CoreParentNode owner) { - return null; - } - }; + private FOMSemantics() {} - public static final AttributeMatcher ATTRIBUTE_MATCHER = new NSAwareAttributeMatcher(DETACH_POLICY, false, false); + public DetachPolicy getDetachPolicy() { + return DetachPolicy.NEW_DOCUMENT; + } + + public static final AttributeMatcher ATTRIBUTE_MATCHER = new NSAwareAttributeMatcher(INSTANCE, false, false); } Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomAttributeSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomAttributeSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomAttributeSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomAttributeSupport.aj Sun Nov 15 13:59:31 2015 @@ -44,7 +44,7 @@ public aspect AxiomAttributeSupport { } public final void AxiomAttribute.setAttributeValue(String value) { - coreSetCharacterData(value, Policies.DETACH_POLICY); + coreSetCharacterData(value, AxiomSemantics.INSTANCE); } public final String AxiomAttribute.getAttributeType() { Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomChildNodeSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomChildNodeSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomChildNodeSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomChildNodeSupport.aj Sun Nov 15 13:59:31 2015 @@ -60,7 +60,7 @@ public aspect AxiomChildNodeSupport { throw new OMException( "Nodes that don't have a parent can not be detached"); } - coreDetach(Policies.DETACH_POLICY); + coreDetach(AxiomSemantics.INSTANCE); return this; } } Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomCommentSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomCommentSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomCommentSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomCommentSupport.aj Sun Nov 15 13:59:31 2015 @@ -34,7 +34,7 @@ public aspect AxiomCommentSupport { } public void AxiomComment.setValue(String text) { - coreSetCharacterData(text, Policies.DETACH_POLICY); + coreSetCharacterData(text, AxiomSemantics.INSTANCE); } public final void AxiomComment.internalSerialize(Serializer serializer, OMOutputFormat format, boolean cache) throws OutputException { Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomContainerSupport.aj Sun Nov 15 13:59:31 2015 @@ -187,11 +187,11 @@ public aspect AxiomContainerSupport { } public void AxiomContainer.removeChildren() { - coreRemoveChildren(Policies.DETACH_POLICY); + coreRemoveChildren(AxiomSemantics.INSTANCE); } public Iterator AxiomContainer.getChildren() { - return coreGetNodes(Axis.CHILDREN, OMNode.class, AxiomExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return coreGetNodes(Axis.CHILDREN, OMNode.class, AxiomExceptionTranslator.INSTANCE, AxiomSemantics.INSTANCE); } public Iterator AxiomContainer.getChildrenWithLocalName(String localName) { @@ -229,7 +229,7 @@ public aspect AxiomContainerSupport { } public Iterator AxiomContainer.getDescendants(boolean includeSelf) { - return coreGetNodes(includeSelf ? Axis.DESCENDANTS_OR_SELF : Axis.DESCENDANTS, OMSerializable.class, AxiomExceptionTranslator.INSTANCE, Policies.DETACH_POLICY); + return coreGetNodes(includeSelf ? Axis.DESCENDANTS_OR_SELF : Axis.DESCENDANTS, OMSerializable.class, AxiomExceptionTranslator.INSTANCE, AxiomSemantics.INSTANCE); } public OMElement AxiomContainer.getFirstChildWithName(QName elementQName) throws OMException { Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomDocumentSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomDocumentSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomDocumentSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomDocumentSupport.aj Sun Nov 15 13:59:31 2015 @@ -40,7 +40,7 @@ public aspect AxiomDocumentSupport { if (existingDocumentElement == null) { addChild(documentElement); } else { - existingDocumentElement.coreReplaceWith((AxiomElement)documentElement, Policies.DETACH_POLICY); + existingDocumentElement.coreReplaceWith((AxiomElement)documentElement, AxiomSemantics.INSTANCE); } } 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=1714454&r1=1714453&r2=1714454&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 Sun Nov 15 13:59:31 2015 @@ -196,7 +196,7 @@ public aspect AxiomElementSupport { // Not final because overridden in Abdera public void AxiomElement.setText(String text) { - coreSetCharacterData(text, Policies.DETACH_POLICY); + coreSetCharacterData(text, AxiomSemantics.INSTANCE); } public final void AxiomElement.setText(QName qname) { @@ -278,7 +278,7 @@ public aspect AxiomElementSupport { } public final void AxiomElement.internalAppendAttribute(OMAttribute attr) { - coreSetAttribute(Policies.ATTRIBUTE_MATCHER, (AxiomAttribute)attr, Policies.DETACH_POLICY); + coreSetAttribute(AxiomSemantics.ATTRIBUTE_MATCHER, (AxiomAttribute)attr, AxiomSemantics.INSTANCE); } public final OMAttribute AxiomElement.addAttribute(OMAttribute attr){ @@ -315,11 +315,11 @@ public aspect AxiomElementSupport { @SuppressWarnings("rawtypes") public final Iterator AxiomElement.getAllAttributes() { - return coreGetAttributesByType(AxiomAttribute.class, attributeIdentityMapper, Policies.DETACH_POLICY); + return coreGetAttributesByType(AxiomAttribute.class, attributeIdentityMapper, AxiomSemantics.INSTANCE); } public final OMAttribute AxiomElement.getAttribute(QName qname) { - return (AxiomAttribute)coreGetAttribute(Policies.ATTRIBUTE_MATCHER, qname.getNamespaceURI(), qname.getLocalPart()); + return (AxiomAttribute)coreGetAttribute(AxiomSemantics.ATTRIBUTE_MATCHER, qname.getNamespaceURI(), qname.getLocalPart()); } // TODO: overridden in fom-impl @@ -342,7 +342,7 @@ public aspect AxiomElementSupport { if (attr.getOwner() != this) { throw new OMException("The attribute is not owned by this element"); } - ((AxiomAttribute)attr).coreRemove(Policies.DETACH_POLICY); + ((AxiomAttribute)attr).coreRemove(AxiomSemantics.INSTANCE); } public final OMNamespace AxiomElement.addNamespaceDeclaration(String uri, String prefix) { @@ -356,12 +356,12 @@ public aspect AxiomElementSupport { public final void AxiomElement.addNamespaceDeclaration(OMNamespace ns) { AxiomNamespaceDeclaration decl = coreGetNodeFactory().createNode(AxiomNamespaceDeclaration.class); decl.setDeclaredNamespace(ns); - coreSetAttribute(Policies.NAMESPACE_DECLARATION_MATCHER, decl, Policies.DETACH_POLICY); + coreSetAttribute(AxiomSemantics.NAMESPACE_DECLARATION_MATCHER, decl, AxiomSemantics.INSTANCE); } @SuppressWarnings("rawtypes") public final Iterator AxiomElement.getAllDeclaredNamespaces() { - return coreGetAttributesByType(AxiomNamespaceDeclaration.class, NamespaceDeclarationMapper.INSTANCE, Policies.DETACH_POLICY); + return coreGetAttributesByType(AxiomNamespaceDeclaration.class, NamespaceDeclarationMapper.INSTANCE, AxiomSemantics.INSTANCE); } public final OMNamespace AxiomElement.declareNamespace(OMNamespace namespace) { Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomInformationItemSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomInformationItemSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomInformationItemSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomInformationItemSupport.aj Sun Nov 15 13:59:31 2015 @@ -29,6 +29,6 @@ public aspect AxiomInformationItemSuppor } public final OMInformationItem AxiomInformationItem.clone(OMCloneOptions options) { - return (OMInformationItem)coreClone(Policies.CLONE_POLICY, options); + return (OMInformationItem)coreClone(AxiomSemantics.CLONE_POLICY, options); } } Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamespaceDeclarationSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamespaceDeclarationSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamespaceDeclarationSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomNamespaceDeclarationSupport.aj Sun Nov 15 13:59:31 2015 @@ -42,6 +42,6 @@ public aspect AxiomNamespaceDeclarationS public final void AxiomNamespaceDeclaration.setDeclaredNamespace(OMNamespace declaredNamespace) { this.declaredNamespace = declaredNamespace; - coreSetCharacterData(declaredNamespace.getNamespaceURI(), Policies.DETACH_POLICY); + coreSetCharacterData(declaredNamespace.getNamespaceURI(), AxiomSemantics.INSTANCE); } } Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomProcessingInstructionSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomProcessingInstructionSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomProcessingInstructionSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomProcessingInstructionSupport.aj Sun Nov 15 13:59:31 2015 @@ -37,7 +37,7 @@ public aspect AxiomProcessingInstruction } public final void AxiomProcessingInstruction.setValue(String value) { - coreSetCharacterData(value, Policies.DETACH_POLICY); + coreSetCharacterData(value, AxiomSemantics.INSTANCE); } public final void AxiomProcessingInstruction.internalSerialize(Serializer serializer, OMOutputFormat format, boolean cache) throws OutputException { Copied: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomSemantics.java (from r1714139, 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/AxiomSemantics.java?p2=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomSemantics.java&p1=webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/Policies.java&r1=1714139&r2=1714454&rev=1714454&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/AxiomSemantics.java Sun Nov 15 13:59:31 2015 @@ -26,22 +26,27 @@ import org.apache.axiom.core.DetachPolic import org.apache.axiom.core.NSAwareAttributeMatcher; import org.apache.axiom.core.NamespaceDeclarationMatcher; import org.apache.axiom.core.NodeType; +import org.apache.axiom.core.Semantics; import org.apache.axiom.om.OMCloneOptions; import org.apache.axiom.om.impl.intf.AxiomAttribute; import org.apache.axiom.om.impl.intf.AxiomElement; import org.apache.axiom.om.impl.intf.AxiomSourcedElement; -public final class Policies { - private Policies() {} +public final class AxiomSemantics implements Semantics { + public static final AxiomSemantics INSTANCE = new AxiomSemantics(); - public static final DetachPolicy DETACH_POLICY = DetachPolicy.NEW_DOCUMENT; + private AxiomSemantics() {} + + public DetachPolicy getDetachPolicy() { + return DetachPolicy.NEW_DOCUMENT; + } public static final AttributeMatcher ATTRIBUTE_MATCHER = new NSAwareAttributeMatcher( - DETACH_POLICY, + INSTANCE, false, // Axiom doesn't support namespace unaware attributes false); - public static final AttributeMatcher NAMESPACE_DECLARATION_MATCHER = new NamespaceDeclarationMatcher(DETACH_POLICY); + public static final AttributeMatcher NAMESPACE_DECLARATION_MATCHER = new NamespaceDeclarationMatcher(INSTANCE); public static final ClonePolicy<OMCloneOptions> CLONE_POLICY = new ClonePolicy<OMCloneOptions>() { public Class<? extends CoreNode> getTargetNodeClass(OMCloneOptions options, CoreNode node) { Modified: webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomTextSupport.aj URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomTextSupport.aj?rev=1714454&r1=1714453&r2=1714454&view=diff ============================================================================== --- webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomTextSupport.aj (original) +++ webservices/axiom/trunk/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomTextSupport.aj Sun Nov 15 13:59:31 2015 @@ -38,7 +38,7 @@ public aspect AxiomTextSupport { return (TextContent)content; } else if (force) { TextContent textContent = new TextContent((String)content); - coreSetCharacterData(textContent, Policies.DETACH_POLICY); + coreSetCharacterData(textContent, AxiomSemantics.INSTANCE); return textContent; } else { return null;