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 2013/05/20 11:12:19 UTC

svn commit: r1484403 - /webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java

Author: veithen
Date: Mon May 20 09:12:19 2013
New Revision: 1484403

URL: http://svn.apache.org/r1484403
Log:
Simplified the logic introduced by AXIOM-96.

Modified:
    webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java

Modified: webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java
URL: http://svn.apache.org/viewvc/webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java?rev=1484403&r1=1484402&r2=1484403&view=diff
==============================================================================
--- webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java (original)
+++ webservices/axiom/trunk/modules/axiom-common-impl/src/main/java/org/apache/axiom/om/impl/common/serializer/pull/Navigator.java Mon May 20 09:12:19 2013
@@ -119,6 +119,11 @@ final class Navigator extends PullSerial
     private OMNamespace[] namespaces = new OMNamespace[16];
     
     /**
+     * The data source exposed by {@link #getDataSource()}.
+     */
+    private OMDataSource ds;
+    
+    /**
      * Constructor.
      *
      * @param serializer
@@ -508,31 +513,6 @@ final class Navigator extends PullSerial
     }
 
     /**
-     * @param n OMNode
-     * @return true if this OMNode should be considered a leaf node
-     */
-    private boolean isLeaf(OMSerializable n) {
-        if (n instanceof OMContainer) {
-            return serializer.isDataSourceALeaf() && isOMSourcedElement(n) && !((OMSourcedElement)n).isExpanded() && n != rootNode;
-        } else {
-            return true;
-        }
-    }
-
-    private boolean isOMSourcedElement(OMSerializable node) {
-        if (node instanceof OMSourcedElement) {
-            try {
-                return ((OMSourcedElement)node).getDataSource() != null;
-            } catch (UnsupportedOperationException e) {
-                // Operation unsupported for some implementations
-                return false;
-            }
-        } else {
-            return false;
-        }
-    }
-    
-    /**
      * Advance to the next node if it is available.
      * <p>
      * The following table describes the possible return values and postconditions:
@@ -565,7 +545,7 @@ final class Navigator extends PullSerial
             assert !visited;
             node = rootNode;
             return true;
-        } else if (!isLeaf(node) && !visited) {
+        } else if (node instanceof OMContainer && !visited) {
             IContainer current = (IContainer)node;
             OMNode firstChild = cache ? current.getFirstOMChild() : current.getFirstOMChildIfAvailable();
             if (firstChild != null) {
@@ -609,15 +589,24 @@ final class Navigator extends PullSerial
                 OMSourcedElement element = (OMSourcedElement)node;
                 if (!element.isExpanded()) {
                     OMDataSource ds = element.getDataSource();
-                    if (ds != null && !(OMDataSourceUtil.isPushDataSource(ds)
+                    if (ds != null) {
+                        if (serializer.isDataSourceALeaf()) {
+                            this.ds = ds;
+                            currentEvent = -1;
+                            // Mark the node as visited so that we continue with the next sibling
+                            visited = true;
+                            return;
+                        }
+                        if (!(OMDataSourceUtil.isPushDataSource(ds)
                             || (cache && OMDataSourceUtil.isDestructiveRead(ds)))) {
-                        XMLStreamReader reader = ds.getReader();
-                        while (reader.next() != START_ELEMENT) {
-                            // Just loop
+                            XMLStreamReader reader = ds.getReader();
+                            while (reader.next() != START_ELEMENT) {
+                                // Just loop
+                            }
+                            serializer.pushState(new IncludeWrapper(serializer, reader));
+                            visited = true;
+                            return;
                         }
-                        serializer.pushState(new IncludeWrapper(serializer, reader));
-                        visited = true;
-                        return;
                     }
                 }
             }
@@ -630,6 +619,7 @@ final class Navigator extends PullSerial
             } else {
                 currentEvent = ((OMNode)node).getType();
             }
+            ds = null;
             attributeCount = -1;
             namespaceCount = -1;
         } else {
@@ -873,32 +863,8 @@ final class Navigator extends PullSerial
      * @return OMDataSource associated with the current node or Null
      */
     OMDataSource getDataSource() {
-        if (getEventType() != XMLStreamReader.START_ELEMENT) {
-            return null;
-        }
-        OMDataSource ds = null;
-        if (node != null &&
-            node instanceof OMSourcedElement) {
-            OMSourcedElement element = (OMSourcedElement)node;
-            if (element.isExpanded()) {
-                // If the element is expanded, then we can't return the OMDataSource because the
-                // expanded element may already have been modified
-                ds = null;
-            } else {
-                try {
-                    ds = element.getDataSource();
-                } catch (UnsupportedOperationException e) {
-                    // Some implementations throw an UnsupportedOperationException.
-                    ds =null;
-                }
-                if (log.isDebugEnabled()) {
-                    if (ds != null) {
-                        log.debug("OMSourcedElement exposed an OMDataSource." + ds);
-                    } else {
-                        log.debug("OMSourcedElement does not have a OMDataSource.");
-                    }
-                }
-            }
+        if (log.isDebugEnabled() && ds != null) {
+            log.debug("Exposed OMDataSource: " + ds);
         }
         return ds;
     }