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/06/15 01:04:44 UTC

svn commit: r1685484 - in /webservices/axiom/branches/attrs-aspects: aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/ aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/ implementations/axiom-dom/src/main/java/org...

Author: veithen
Date: Sun Jun 14 23:04:44 2015
New Revision: 1685484

URL: http://svn.apache.org/r1685484
Log:
Start rewriting the namespace declaration code in LLOM.

Added:
    webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceDeclarationMapper.java   (with props)
Removed:
    webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/NSDeclIterator.java
Modified:
    webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
    webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AxiomNodeFactory.java
    webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
    webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMFactory.java
    webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
    webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListImplFactory.java

Modified: webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj?rev=1685484&r1=1685483&r2=1685484&view=diff
==============================================================================
--- webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj (original)
+++ webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/AxiomElementSupport.aj Sun Jun 14 23:04:44 2015
@@ -44,6 +44,8 @@ import org.apache.axiom.om.OMNode;
 import org.apache.axiom.om.OMSourcedElement;
 import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.common.factory.AxiomNodeFactory;
+import org.apache.axiom.om.impl.util.OMSerializerUtil;
 import org.apache.axiom.util.namespace.MapBasedNamespaceContext;
 import org.apache.axiom.util.stax.XMLStreamReaderUtils;
 
@@ -319,4 +321,52 @@ public aspect AxiomElementSupport {
         }
         ((AxiomAttribute)attr).coreRemove(null);
     }
+
+    public final OMNamespace AxiomElement.addNamespaceDeclaration(String uri, String prefix) {
+        OMNamespace ns = new OMNamespaceImpl(uri, prefix);
+        addNamespaceDeclaration(ns);
+        return ns;
+    }
+    
+    public final void AxiomElement.addNamespaceDeclaration(OMNamespace ns) {
+        try {
+            coreAppendAttribute(((AxiomNodeFactory)getOMFactory()).createNamespaceDeclaration(ns), NodeMigrationPolicy.MOVE_ALWAYS);
+        } catch (NodeMigrationException ex) {
+            throw AxiomExceptionUtil.translate(ex);
+        }
+    }
+    
+    @SuppressWarnings("rawtypes")
+    public final Iterator AxiomElement.getAllDeclaredNamespaces() {
+        return coreGetAttributesByType(AxiomNamespaceDeclaration.class, NamespaceDeclarationMapper.INSTANCE);
+    }
+
+    public final OMNamespace AxiomElement.declareNamespace(OMNamespace namespace) {
+        String prefix = namespace.getPrefix();
+        if (prefix == null) {
+            prefix = OMSerializerUtil.getNextNSPrefix();
+            namespace = new OMNamespaceImpl(namespace.getNamespaceURI(), prefix);
+        }
+        if (prefix.length() > 0 && namespace.getNamespaceURI().length() == 0) {
+            throw new IllegalArgumentException("Cannot bind a prefix to the empty namespace name");
+        }
+        addNamespaceDeclaration(namespace);
+        return namespace;
+    }
+
+    public final OMNamespace AxiomElement.declareDefaultNamespace(String uri) {
+        OMNamespace elementNamespace = getNamespace();
+        if (elementNamespace == null && uri.length() > 0
+                || elementNamespace != null && elementNamespace.getPrefix().length() == 0 && !elementNamespace.getNamespaceURI().equals(uri)) {
+            throw new OMException("Attempt to add a namespace declaration that conflicts with " +
+                    "the namespace information of the element");
+        }
+        OMNamespace namespace = new OMNamespaceImpl(uri == null ? "" : uri, "");
+        addNamespaceDeclaration(namespace);
+        return namespace;
+    }
+
+    public final void AxiomElement.undeclarePrefix(String prefix) {
+        addNamespaceDeclaration(new OMNamespaceImpl("", prefix));
+    }
 }

Added: webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceDeclarationMapper.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceDeclarationMapper.java?rev=1685484&view=auto
==============================================================================
--- webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceDeclarationMapper.java (added)
+++ webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceDeclarationMapper.java Sun Jun 14 23:04:44 2015
@@ -0,0 +1,32 @@
+/*
+ * 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.om.impl.common;
+
+import org.apache.axiom.core.Mapper;
+import org.apache.axiom.om.OMNamespace;
+
+public class NamespaceDeclarationMapper implements Mapper<AxiomNamespaceDeclaration,OMNamespace> {
+    public static final NamespaceDeclarationMapper INSTANCE = new NamespaceDeclarationMapper();
+    
+    private NamespaceDeclarationMapper() {}
+    
+    public OMNamespace map(AxiomNamespaceDeclaration namespaceDeclaration) {
+        return namespaceDeclaration.getDeclaredNamespace();
+    }
+}

Propchange: webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/NamespaceDeclarationMapper.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AxiomNodeFactory.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AxiomNodeFactory.java?rev=1685484&r1=1685483&r2=1685484&view=diff
==============================================================================
--- webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AxiomNodeFactory.java (original)
+++ webservices/axiom/branches/attrs-aspects/aspects/om-aspects/src/main/java/org/apache/axiom/om/impl/common/factory/AxiomNodeFactory.java Sun Jun 14 23:04:44 2015
@@ -19,8 +19,10 @@
 package org.apache.axiom.om.impl.common.factory;
 
 import org.apache.axiom.core.NodeFactory;
+import org.apache.axiom.om.OMNamespace;
 import org.apache.axiom.om.impl.builder.OMFactoryEx;
+import org.apache.axiom.om.impl.common.AxiomNamespaceDeclaration;
 
 public interface AxiomNodeFactory extends NodeFactory, OMFactoryEx {
-
+    AxiomNamespaceDeclaration createNamespaceDeclaration(OMNamespace namespace);
 }

Modified: webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java?rev=1685484&r1=1685483&r2=1685484&view=diff
==============================================================================
--- webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java (original)
+++ webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/ElementImpl.java Sun Jun 14 23:04:44 2015
@@ -195,47 +195,6 @@ public class ElementImpl extends ParentN
         }
     }
 
-    public OMNamespace addNamespaceDeclaration(String uri, String prefix) {
-        OMNamespace ns = new OMNamespaceImpl(uri, prefix);
-        addNamespaceDeclaration(ns);
-        return ns;
-    }
-    
-    public void addNamespaceDeclaration(OMNamespace ns) {
-        try {
-            coreAppendAttribute(new NamespaceDeclaration(null, ns, getOMFactory()), NodeMigrationPolicy.MOVE_ALWAYS);
-        } catch (NodeMigrationException ex) {
-            throw DOMExceptionUtil.translate(ex);
-        }
-    }
-
-    /**
-     * Allows overriding an existing declaration if the same prefix was used.
-     *
-     * @see org.apache.axiom.om.OMElement#declareNamespace (org.apache.axiom.om.OMNamespace)
-     */
-    public OMNamespace declareNamespace(OMNamespace namespace) {
-        if (namespace != null) {
-            String prefix = namespace.getPrefix();
-            if (prefix == null) {
-                prefix = OMSerializerUtil.getNextNSPrefix();
-                namespace = new OMNamespaceImpl(namespace.getNamespaceURI(), prefix);
-            }
-            if (prefix.length() > 0 && namespace.getNamespaceURI().length() == 0) {
-                throw new IllegalArgumentException("Cannot bind a prefix to the empty namespace name");
-            }
-
-            if (!namespace.getPrefix().startsWith(XMLConstants.XMLNS_ATTRIBUTE)) {
-                setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, prefix.length() == 0 ? XMLConstants.XMLNS_ATTRIBUTE : XMLConstants.XMLNS_ATTRIBUTE + ":" + prefix, namespace.getNamespaceURI());
-            }
-        }
-        return namespace;
-    }
-
-    public void undeclarePrefix(String prefix) {
-        setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, prefix.length() == 0 ? XMLConstants.XMLNS_ATTRIBUTE : XMLConstants.XMLNS_ATTRIBUTE + ":" + prefix, "");
-    }
-
     public OMNamespace declareNamespace(String uri, String prefix) {
         if ("".equals(prefix)) {
             log.warn("Deprecated usage of OMElement#declareNamespace(String,String) with empty prefix");
@@ -246,18 +205,6 @@ public class ElementImpl extends ParentN
         return declareNamespace(ns);
     }
 
-    public OMNamespace declareDefaultNamespace(String uri) {
-        OMNamespace namespace = getNamespace();
-        if (namespace == null && uri.length() > 0
-                || namespace != null && namespace.getPrefix().length() == 0 && !namespace.getNamespaceURI().equals(uri)) {
-            throw new OMException("Attempt to add a namespace declaration that conflicts with " +
-                    "the namespace information of the element");
-        }
-
-        setAttributeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, XMLConstants.XMLNS_ATTRIBUTE, uri);
-        return new OMNamespaceImpl(uri, "");
-    }
-
     public OMNamespace getDefaultNamespace() {
         Attr decl = getAttributeNodeNS(XMLConstants.XMLNS_ATTRIBUTE_NS_URI, XMLConstants.XMLNS_ATTRIBUTE);
         if (decl != null) {
@@ -408,11 +355,6 @@ public class ElementImpl extends ParentN
         return new String(baos.toByteArray());
     }
 
-    /** @see org.apache.axiom.om.OMElement#getAllDeclaredNamespaces() */
-    public Iterator getAllDeclaredNamespaces() throws OMException {
-        return new NSDeclIterator(getAttributes());
-    }
-
     public OMElement cloneOMElement() {
         return (OMElement)clone(new OMCloneOptions());
     }

Modified: webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMFactory.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMFactory.java?rev=1685484&r1=1685483&r2=1685484&view=diff
==============================================================================
--- webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMFactory.java (original)
+++ webservices/axiom/branches/attrs-aspects/implementations/axiom-dom/src/main/java/org/apache/axiom/om/impl/dom/factory/OMDOMFactory.java Sun Jun 14 23:04:44 2015
@@ -44,6 +44,7 @@ import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.impl.OMContainerEx;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.common.AxiomNamespaceDeclaration;
 import org.apache.axiom.om.impl.common.OMNamespaceImpl;
 import org.apache.axiom.om.impl.common.factory.AxiomNodeFactory;
 import org.apache.axiom.om.impl.dom.CDATASectionImpl;
@@ -356,4 +357,8 @@ public class OMDOMFactory implements Axi
             String prefix, String namespaceURI) {
         return new NamespaceDeclaration((DocumentImpl)document, new OMNamespaceImpl(namespaceURI == null ? "" : namespaceURI, prefix), this);
     }
+
+    public final AxiomNamespaceDeclaration createNamespaceDeclaration(OMNamespace namespace) {
+        return new NamespaceDeclaration(null, namespace, this);
+    }
 }

Modified: webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java?rev=1685484&r1=1685483&r2=1685484&view=diff
==============================================================================
--- webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java (original)
+++ webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/OMElementImpl.java Sun Jun 14 23:04:44 2015
@@ -142,23 +142,6 @@ public class OMElementImpl extends OMNod
         return declareNamespace(ns);
     }
 
-    public OMNamespace declareDefaultNamespace(String uri) {
-        OMNamespace elementNamespace = getNamespace();
-        if (elementNamespace == null && uri.length() > 0
-                || elementNamespace != null && elementNamespace.getPrefix().length() == 0 && !elementNamespace.getNamespaceURI().equals(uri)) {
-            throw new OMException("Attempt to add a namespace declaration that conflicts with " +
-            		"the namespace information of the element");
-        }
-
-        OMNamespaceImpl namespace = new OMNamespaceImpl(uri == null ? "" : uri, "");
-
-        if (namespaces == null) {
-            this.namespaces = new HashMap(5);
-        }
-        namespaces.put("", namespace);
-        return namespace;
-    }
-
     public OMNamespace getDefaultNamespace() {
         OMNamespace defaultNS;
         if (namespaces != null && (defaultNS = (OMNamespace) namespaces.get("")) != null) {
@@ -172,43 +155,6 @@ public class OMElementImpl extends OMNod
         return null;
     }
 
-    public OMNamespace addNamespaceDeclaration(String uri, String prefix) {
-        OMNamespace ns = new OMNamespaceImpl(uri, prefix);
-        addNamespaceDeclaration(ns);
-        return ns;
-    }
-    
-    public void addNamespaceDeclaration(OMNamespace ns) {
-        if (namespaces == null) {
-            this.namespaces = new HashMap(5);
-        }
-        namespaces.put(ns.getPrefix(), ns);
-    }
-
-    /** @return Returns namespace. */
-    public OMNamespace declareNamespace(OMNamespace namespace) {
-        if (namespaces == null) {
-            this.namespaces = new HashMap(5);
-        }
-        String prefix = namespace.getPrefix();
-        if (prefix == null) {
-            prefix = OMSerializerUtil.getNextNSPrefix();
-            namespace = new OMNamespaceImpl(namespace.getNamespaceURI(), prefix);
-        }
-        if (prefix.length() > 0 && namespace.getNamespaceURI().length() == 0) {
-            throw new IllegalArgumentException("Cannot bind a prefix to the empty namespace name");
-        }
-        namespaces.put(prefix, namespace);
-        return namespace;
-    }
-
-    public void undeclarePrefix(String prefix) {
-        if (namespaces == null) {
-            this.namespaces = new HashMap(5);
-        }
-        namespaces.put(prefix, new OMNamespaceImpl("", prefix));
-    }
-
     /**
      * Finds a namespace with the given uri and prefix, in the scope of the document. Starts to find
      * from the current element and goes up in the hiararchy until one is found. If none is found,
@@ -313,19 +259,6 @@ public class OMElementImpl extends OMNod
         return null;
     }
 
-
-    /**
-     * Method getAllDeclaredNamespaces.
-     *
-     * @return Returns Iterator.
-     */
-    public Iterator getAllDeclaredNamespaces() {
-        if (namespaces == null) {
-            return EMPTY_ITERATOR;
-        }
-        return namespaces.values().iterator();
-    }
-
     /**
      * Inserts an attribute to this element. Implementor can decide as to insert this in the front
      * or at the end of set of attributes.

Modified: webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListImplFactory.java
URL: http://svn.apache.org/viewvc/webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListImplFactory.java?rev=1685484&r1=1685483&r2=1685484&view=diff
==============================================================================
--- webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListImplFactory.java (original)
+++ webservices/axiom/branches/attrs-aspects/implementations/axiom-impl/src/main/java/org/apache/axiom/om/impl/llom/factory/OMLinkedListImplFactory.java Sun Jun 14 23:04:44 2015
@@ -43,10 +43,12 @@ import org.apache.axiom.om.OMSourcedElem
 import org.apache.axiom.om.OMText;
 import org.apache.axiom.om.OMXMLParserWrapper;
 import org.apache.axiom.om.impl.builder.StAXOMBuilder;
+import org.apache.axiom.om.impl.common.AxiomNamespaceDeclaration;
 import org.apache.axiom.om.impl.common.OMNamespaceImpl;
 import org.apache.axiom.om.impl.common.factory.AxiomNodeFactory;
 import org.apache.axiom.om.impl.llom.CDATASectionImpl;
 import org.apache.axiom.om.impl.llom.CharacterDataImpl;
+import org.apache.axiom.om.impl.llom.NamespaceDeclaration;
 import org.apache.axiom.om.impl.llom.OMAttributeImpl;
 import org.apache.axiom.om.impl.llom.OMCommentImpl;
 import org.apache.axiom.om.impl.llom.OMDocTypeImpl;
@@ -364,4 +366,10 @@ public class OMLinkedListImplFactory imp
         // TODO
         throw new UnsupportedOperationException();
     }
+
+    public final AxiomNamespaceDeclaration createNamespaceDeclaration(OMNamespace namespace) {
+        NamespaceDeclaration decl = new NamespaceDeclaration(this);
+        decl.setDeclaredNamespace(namespace);
+        return decl;
+    }
 }