You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@jackrabbit.apache.org by ju...@apache.org on 2006/01/03 00:19:30 UTC

svn commit: r365458 [2/2] - in /incubator/jackrabbit/trunk/contrib/jcr-rmi: ./ src/java/org/apache/jackrabbit/rmi/client/ src/java/org/apache/jackrabbit/rmi/client/iterator/ src/java/org/apache/jackrabbit/rmi/iterator/ src/java/org/apache/jackrabbit/rm...

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java Mon Jan  2 15:18:30 2006
@@ -23,7 +23,9 @@
 import javax.jcr.Item;
 import javax.jcr.NamespaceRegistry;
 import javax.jcr.Node;
+import javax.jcr.NodeIterator;
 import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
 import javax.jcr.Repository;
 import javax.jcr.RepositoryException;
 import javax.jcr.Session;
@@ -32,6 +34,7 @@
 import javax.jcr.nodetype.ItemDefinition;
 import javax.jcr.nodetype.NodeDefinition;
 import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeIterator;
 import javax.jcr.nodetype.NodeTypeManager;
 import javax.jcr.nodetype.PropertyDefinition;
 import javax.jcr.observation.Event;
@@ -41,12 +44,17 @@
 import javax.jcr.query.QueryManager;
 import javax.jcr.query.QueryResult;
 import javax.jcr.query.Row;
+import javax.jcr.query.RowIterator;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
+import javax.jcr.version.VersionIterator;
 
+import org.apache.jackrabbit.rmi.remote.ArrayIterator;
+import org.apache.jackrabbit.rmi.remote.BufferIterator;
 import org.apache.jackrabbit.rmi.remote.RemoteEventCollection;
 import org.apache.jackrabbit.rmi.remote.RemoteItem;
 import org.apache.jackrabbit.rmi.remote.RemoteItemDefinition;
+import org.apache.jackrabbit.rmi.remote.RemoteIterator;
 import org.apache.jackrabbit.rmi.remote.RemoteLock;
 import org.apache.jackrabbit.rmi.remote.RemoteNamespaceRegistry;
 import org.apache.jackrabbit.rmi.remote.RemoteNode;
@@ -65,6 +73,11 @@
 import org.apache.jackrabbit.rmi.remote.RemoteVersion;
 import org.apache.jackrabbit.rmi.remote.RemoteVersionHistory;
 import org.apache.jackrabbit.rmi.remote.RemoteWorkspace;
+import org.apache.jackrabbit.rmi.server.iterator.ServerNodeIterator;
+import org.apache.jackrabbit.rmi.server.iterator.ServerNodeTypeIterator;
+import org.apache.jackrabbit.rmi.server.iterator.ServerPropertyIterator;
+import org.apache.jackrabbit.rmi.server.iterator.ServerRowIterator;
+import org.apache.jackrabbit.rmi.server.iterator.ServerVersionIterator;
 
 /**
  * Default implementation of the
@@ -79,6 +92,11 @@
 public class ServerAdapterFactory implements RemoteAdapterFactory {
 
     /**
+     * The default maximum buffer size used for local iterator buffers.
+     */
+    private static final int MAX_BUFFER_SIZE = 100;
+
+    /**
      * Creates a {@link ServerRepository ServerRepository} instance.
      * {@inheritDoc}
      */
@@ -282,4 +300,78 @@
 
         return new ServerEventCollection(listenerId, remoteEvents);
     }
+
+    /**
+     * Optimizes the given remote iterator for transmission across the
+     * network. This method retrieves the first set of elements from
+     * the iterator by calling {@link RemoteIterator#nextObjects()} and
+     * then asks for the total size of the iterator. If the size is unkown
+     * or greater than the length of the retrieved array, then the elements,
+     * the size, and the remote iterator reference are wrapped into a
+     * {@link BufferIterator} instance that gets passed over the network.
+     * If the retrieved array of elements contains all the elements in the
+     * iterator, then the iterator instance is discarded and just the elements
+     * are wrapped into a {@link ArrayIterator} instance to be passed to the
+     * client.
+     *
+     * @param remote remote iterator
+     * @return optimized remote iterator
+     * @throws RemoteException on RMI errors
+     */
+    private RemoteIterator optimizeIterator(RemoteIterator remote)
+            throws RemoteException {
+        Object[] elements = remote.nextObjects();
+        long size = remote.getSize();
+        if (size == -1 || (elements != null && size > elements.length)) {
+            return new BufferIterator(elements, size, remote);
+        } else {
+            return new ArrayIterator(elements);
+        }
+    }
+
+    /**
+     * Creates a {@link ServerNodeIterator} instance. {@inheritDoc}
+     */
+    public RemoteIterator getRemoteNodeIterator(NodeIterator iterator)
+            throws RemoteException {
+        return optimizeIterator(
+                new ServerNodeIterator(iterator, this, MAX_BUFFER_SIZE));
+    }
+
+    /**
+     * Creates a {@link ServerPropertyIterator} instance. {@inheritDoc}
+     */
+    public RemoteIterator getRemotePropertyIterator(PropertyIterator iterator)
+            throws RemoteException {
+        return optimizeIterator(
+                new ServerPropertyIterator(iterator, this, MAX_BUFFER_SIZE));
+    }
+
+    /**
+     * Creates a {@link ServerVersionIterator} instance. {@inheritDoc}
+     */
+    public RemoteIterator getRemoteVersionIterator(VersionIterator iterator)
+            throws RemoteException {
+        return optimizeIterator(
+                new ServerVersionIterator(iterator, this, MAX_BUFFER_SIZE));
+    }
+
+    /**
+     * Creates a {@link ServerNodeTypeIterator} instance. {@inheritDoc}
+     */
+    public RemoteIterator getRemoteNodeTypeIterator(NodeTypeIterator iterator)
+            throws RemoteException {
+        return optimizeIterator(
+                new ServerNodeTypeIterator(iterator, this, MAX_BUFFER_SIZE));
+    }
+
+    /**
+     * Creates a {@link ServerRowIterator} instance. {@inheritDoc}
+     */
+    public RemoteIterator getRemoteRowIterator(RowIterator iterator)
+            throws RemoteException {
+        return optimizeIterator(
+                new ServerRowIterator(iterator, this, MAX_BUFFER_SIZE));
+    }
+
 }

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNode.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNode.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNode.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNode.java Mon Jan  2 15:18:30 2006
@@ -27,6 +27,7 @@
 import javax.jcr.version.Version;
 
 import org.apache.jackrabbit.rmi.remote.RemoteItem;
+import org.apache.jackrabbit.rmi.remote.RemoteIterator;
 import org.apache.jackrabbit.rmi.remote.RemoteLock;
 import org.apache.jackrabbit.rmi.remote.RemoteNode;
 import org.apache.jackrabbit.rmi.remote.RemoteNodeDefinition;
@@ -94,10 +95,10 @@
     }
 
     /** {@inheritDoc} */
-    public RemoteProperty[] getProperties()
+    public RemoteIterator getProperties()
             throws RepositoryException, RemoteException {
         try {
-            return getRemotePropertyArray(node.getProperties());
+            return getFactory().getRemotePropertyIterator(node.getProperties());
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }
@@ -114,20 +115,20 @@
     }
 
     /** {@inheritDoc} */
-    public RemoteProperty[] getProperties(String pattern)
+    public RemoteIterator getProperties(String pattern)
             throws RepositoryException, RemoteException {
         try {
-            return getRemotePropertyArray(node.getProperties(pattern));
+            return getFactory().getRemotePropertyIterator(node.getProperties(pattern));
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }
     }
 
     /** {@inheritDoc} */
-    public RemoteProperty[] getReferences()
+    public RemoteIterator getReferences()
             throws RepositoryException, RemoteException {
         try {
-            return getRemotePropertyArray(node.getReferences());
+            return getFactory().getRemotePropertyIterator(node.getReferences());
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }
@@ -201,19 +202,19 @@
     }
 
     /** {@inheritDoc} */
-    public RemoteNode[] getNodes() throws RepositoryException, RemoteException {
+    public RemoteIterator getNodes() throws RepositoryException, RemoteException {
         try {
-            return getRemoteNodeArray(node.getNodes());
+            return getFactory().getRemoteNodeIterator(node.getNodes());
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }
     }
 
     /** {@inheritDoc} */
-    public RemoteNode[] getNodes(String pattern)
+    public RemoteIterator getNodes(String pattern)
             throws RepositoryException, RemoteException {
         try {
-            return getRemoteNodeArray(node.getNodes(pattern));
+            return getFactory().getRemoteNodeIterator(node.getNodes(pattern));
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }
@@ -358,10 +359,10 @@
     }
 
     /** {@inheritDoc} */
-    public RemoteNode[] merge(String workspace, boolean bestEffort)
+    public RemoteIterator merge(String workspace, boolean bestEffort)
             throws RepositoryException, RemoteException {
         try {
-            return getRemoteNodeArray(node.merge(workspace, bestEffort));
+            return getFactory().getRemoteNodeIterator(node.merge(workspace, bestEffort));
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeType.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeType.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeType.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeType.java Mon Jan  2 15:18:30 2006
@@ -19,6 +19,7 @@
 import java.rmi.RemoteException;
 
 import javax.jcr.Value;
+import javax.jcr.nodetype.NodeDefinition;
 import javax.jcr.nodetype.NodeType;
 import javax.jcr.nodetype.PropertyDefinition;
 
@@ -54,6 +55,57 @@
         super(factory);
         this.type = type;
     }
+
+    /**
+     * Utility method for creating an array of remote references for
+     * local node definitions. The remote references are created using the
+     * remote adapter factory.
+     * <p>
+     * A <code>null</code> input is treated as an empty array.
+     *
+     * @param defs local node definition array
+     * @return remote node definition array
+     * @throws RemoteException on RMI errors
+     */
+    private RemoteNodeDefinition[] getRemoteNodeDefArray(NodeDefinition[] defs)
+            throws RemoteException {
+        if (defs != null) {
+            RemoteNodeDefinition[] remotes =
+                new RemoteNodeDefinition[defs.length];
+            for (int i = 0; i < defs.length; i++) {
+                remotes[i] = getFactory().getRemoteNodeDefinition(defs[i]);
+            }
+            return remotes;
+        } else {
+            return new RemoteNodeDefinition[0]; // for safety
+        }
+    }
+
+    /**
+     * Utility method for creating an array of remote references for
+     * local property definitions. The remote references are created using the
+     * remote adapter factory.
+     * <p>
+     * A <code>null</code> input is treated as an empty array.
+     *
+     * @param defs local property definition array
+     * @return remote property definition array
+     * @throws RemoteException on RMI errors
+     */
+    private RemotePropertyDefinition[] getRemotePropertyDefArray(
+            PropertyDefinition[] defs) throws RemoteException {
+        if (defs != null) {
+            RemotePropertyDefinition[] remotes =
+                new RemotePropertyDefinition[defs.length];
+            for (int i = 0; i < defs.length; i++) {
+                remotes[i] = getFactory().getRemotePropertyDefinition(defs[i]);
+            }
+            return remotes;
+        } else {
+            return new RemotePropertyDefinition[0]; // for safety
+        }
+    }
+
 
     /** {@inheritDoc} */
     public String getName() throws RemoteException {

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeTypeManager.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeTypeManager.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeTypeManager.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeTypeManager.java Mon Jan  2 15:18:30 2006
@@ -21,6 +21,7 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.nodetype.NodeTypeManager;
 
+import org.apache.jackrabbit.rmi.remote.RemoteIterator;
 import org.apache.jackrabbit.rmi.remote.RemoteNodeType;
 import org.apache.jackrabbit.rmi.remote.RemoteNodeTypeManager;
 
@@ -67,30 +68,33 @@
     }
 
     /** {@inheritDoc} */
-    public RemoteNodeType[] getAllNodeTypes()
+    public RemoteIterator getAllNodeTypes()
             throws RepositoryException, RemoteException {
         try {
-            return getRemoteNodeTypeArray(manager.getAllNodeTypes());
+            return getFactory().getRemoteNodeTypeIterator(
+                    manager.getAllNodeTypes());
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }
     }
 
     /** {@inheritDoc} */
-    public RemoteNodeType[] getPrimaryNodeTypes()
+    public RemoteIterator getPrimaryNodeTypes()
             throws RepositoryException, RemoteException {
         try {
-            return getRemoteNodeTypeArray(manager.getPrimaryNodeTypes());
+            return getFactory().getRemoteNodeTypeIterator(
+                    manager.getPrimaryNodeTypes());
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }
     }
 
     /** {@inheritDoc} */
-    public RemoteNodeType[] getMixinNodeTypes()
+    public RemoteIterator getMixinNodeTypes()
             throws RepositoryException, RemoteException {
         try {
-            return getRemoteNodeTypeArray(manager.getMixinNodeTypes());
+            return getFactory().getRemoteNodeTypeIterator(
+                    manager.getMixinNodeTypes());
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerObject.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerObject.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerObject.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerObject.java Mon Jan  2 15:18:30 2006
@@ -18,7 +18,6 @@
 
 import java.rmi.RemoteException;
 import java.rmi.server.UnicastRemoteObject;
-import java.util.ArrayList;
 
 import javax.jcr.AccessDeniedException;
 import javax.jcr.InvalidItemStateException;
@@ -31,10 +30,8 @@
 import javax.jcr.NamespaceException;
 import javax.jcr.NoSuchWorkspaceException;
 import javax.jcr.Node;
-import javax.jcr.NodeIterator;
 import javax.jcr.PathNotFoundException;
 import javax.jcr.Property;
-import javax.jcr.PropertyIterator;
 import javax.jcr.ReferentialIntegrityException;
 import javax.jcr.RepositoryException;
 import javax.jcr.UnsupportedRepositoryOperationException;
@@ -43,31 +40,19 @@
 import javax.jcr.nodetype.ConstraintViolationException;
 import javax.jcr.nodetype.NoSuchNodeTypeException;
 import javax.jcr.nodetype.NodeType;
-import javax.jcr.nodetype.NodeTypeIterator;
-import javax.jcr.nodetype.PropertyDefinition;
-import javax.jcr.nodetype.NodeDefinition;
 import javax.jcr.query.InvalidQueryException;
-import javax.jcr.query.RowIterator;
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionException;
 import javax.jcr.version.VersionHistory;
-import javax.jcr.version.VersionIterator;
 
 import org.apache.jackrabbit.rmi.remote.RemoteItem;
 import org.apache.jackrabbit.rmi.remote.RemoteNode;
-import org.apache.jackrabbit.rmi.remote.RemoteNodeDefinition;
 import org.apache.jackrabbit.rmi.remote.RemoteNodeType;
-import org.apache.jackrabbit.rmi.remote.RemoteProperty;
-import org.apache.jackrabbit.rmi.remote.RemotePropertyDefinition;
-import org.apache.jackrabbit.rmi.remote.RemoteRow;
-import org.apache.jackrabbit.rmi.remote.RemoteVersion;
 
 /**
  * Base class for remote adapters. The purpose of this class is to
  * centralize the handling of the RemoteAdapterFactory instance used
  * to instantiate new server adapters.
- *
- * @author Jukka Zitting
  */
 public class ServerObject extends UnicastRemoteObject {
 
@@ -199,102 +184,6 @@
 
     /**
      * Utility method for creating an array of remote references for
-     * local properties. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty iterator.
-     *
-     * @param iterator local property iterator
-     * @return remote property array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemoteProperty[] getRemotePropertyArray(PropertyIterator iterator)
-            throws RemoteException {
-        if (iterator != null) {
-            ArrayList remotes = new ArrayList();
-            while (iterator.hasNext()) {
-                remotes.add(factory.getRemoteProperty(iterator.nextProperty()));
-            }
-            return (RemoteProperty[]) remotes.toArray(new RemoteProperty[remotes.size()]);
-        } else {
-            return new RemoteProperty[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
-     * local nodes. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty iterator.
-     *
-     * @param iterator local node iterator
-     * @return remote node array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemoteNode[] getRemoteNodeArray(NodeIterator iterator)
-            throws RemoteException {
-        if (iterator != null) {
-            ArrayList remotes = new ArrayList();
-            while (iterator.hasNext()) {
-                remotes.add(getRemoteNode(iterator.nextNode()));
-            }
-            return (RemoteNode[]) remotes.toArray(new RemoteNode[remotes.size()]);
-        } else {
-            return new RemoteNode[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
-     * local versions. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty array.
-     *
-     * @param versions local version array
-     * @return remote version array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemoteVersion[] getRemoteVersionArray(Version[] versions)
-            throws RemoteException {
-        if (versions != null) {
-            RemoteVersion[] remotes = new RemoteVersion[versions.length];
-            for (int i = 0; i < remotes.length; i++) {
-                remotes[i] = factory.getRemoteVersion(versions[i]);
-            }
-            return remotes;
-        } else {
-            return new RemoteVersion[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
-     * local versions. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty iterator.
-     *
-     * @param iterator local version iterator
-     * @return remote version array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemoteVersion[] getRemoteVersionArray(VersionIterator iterator)
-            throws RemoteException {
-        if (iterator != null) {
-            ArrayList remotes = new ArrayList();
-            while (iterator.hasNext()) {
-                remotes.add(factory.getRemoteVersion(iterator.nextVersion()));
-            }
-            return (RemoteVersion[]) remotes.toArray(new RemoteVersion[remotes.size()]);
-        } else {
-            return new RemoteVersion[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
      * local node types. The remote references are created using the
      * remote adapter factory.
      * <p>
@@ -314,102 +203,6 @@
             return remotes;
         } else {
             return new RemoteNodeType[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
-     * local node types. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty iterator.
-     *
-     * @param iterator local node type iterator
-     * @return remote node type array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemoteNodeType[] getRemoteNodeTypeArray(NodeTypeIterator iterator)
-            throws RemoteException {
-        if (iterator != null) {
-            ArrayList remotes = new ArrayList();
-            while (iterator.hasNext()) {
-                remotes.add(factory.getRemoteNodeType(iterator.nextNodeType()));
-            }
-            return (RemoteNodeType[]) remotes.toArray(new RemoteNodeType[remotes.size()]);
-        } else {
-            return new RemoteNodeType[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
-     * local node definitions. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty array.
-     *
-     * @param defs local node definition array
-     * @return remote node definition array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemoteNodeDefinition[] getRemoteNodeDefArray(NodeDefinition[] defs)
-            throws RemoteException {
-        if (defs != null) {
-            RemoteNodeDefinition[] remotes = new RemoteNodeDefinition[defs.length];
-            for (int i = 0; i < defs.length; i++) {
-                remotes[i] = factory.getRemoteNodeDefinition(defs[i]);
-            }
-            return remotes;
-        } else {
-            return new RemoteNodeDefinition[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
-     * local property definitions. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty array.
-     *
-     * @param defs local property definition array
-     * @return remote property definition array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemotePropertyDefinition[] getRemotePropertyDefArray(PropertyDefinition[] defs)
-            throws RemoteException {
-        if (defs != null) {
-            RemotePropertyDefinition[] remotes = new RemotePropertyDefinition[defs.length];
-            for (int i = 0; i < defs.length; i++) {
-                remotes[i] = factory.getRemotePropertyDefinition(defs[i]);
-            }
-            return remotes;
-        } else {
-            return new RemotePropertyDefinition[0]; // for safety
-        }
-    }
-
-    /**
-     * Utility method for creating an array of remote references for
-     * local query result rows. The remote references are created using the
-     * remote adapter factory.
-     * <p>
-     * A <code>null</code> input is treated as an empty iterator.
-     *
-     * @param iterator local query result row iterator
-     * @return remote query result row array
-     * @throws RemoteException on RMI errors
-     */
-    protected RemoteRow[] getRemoteRowArray(RowIterator iterator)
-            throws RemoteException {
-        if (iterator != null) {
-            ArrayList remotes = new ArrayList();
-            while (iterator.hasNext()) {
-                remotes.add(getFactory().getRemoteRow(iterator.nextRow()));
-            }
-            return (RemoteRow[]) remotes.toArray(new RemoteRow[remotes.size()]);
-        } else {
-            return new RemoteRow[0]; // for safety
         }
     }
 

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerQueryResult.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerQueryResult.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerQueryResult.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerQueryResult.java Mon Jan  2 15:18:30 2006
@@ -21,9 +21,8 @@
 import javax.jcr.RepositoryException;
 import javax.jcr.query.QueryResult;
 
-import org.apache.jackrabbit.rmi.remote.RemoteNode;
+import org.apache.jackrabbit.rmi.remote.RemoteIterator;
 import org.apache.jackrabbit.rmi.remote.RemoteQueryResult;
-import org.apache.jackrabbit.rmi.remote.RemoteRow;
 
 /**
  * Remote adapter for the JCR {@link javax.jcr.query.QueryResult QueryResult} interface.
@@ -61,13 +60,13 @@
     }
 
     /** {@inheritDoc} */
-    public RemoteRow[] getRows() throws RepositoryException, RemoteException {
-        return getRemoteRowArray(result.getRows());
+    public RemoteIterator getRows() throws RepositoryException, RemoteException {
+        return getFactory().getRemoteRowIterator(result.getRows());
     }
 
     /** {@inheritDoc} */
-    public RemoteNode[] getNodes() throws RepositoryException, RemoteException {
-        return getRemoteNodeArray(result.getNodes());
+    public RemoteIterator getNodes() throws RepositoryException, RemoteException {
+        return getFactory().getRemoteNodeIterator(result.getNodes());
     }
 
 }

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersion.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersion.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersion.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersion.java Mon Jan  2 15:18:30 2006
@@ -53,6 +53,30 @@
         this.version = version;
     }
 
+    /**
+     * Utility method for creating an array of remote references for
+     * local versions. The remote references are created using the
+     * remote adapter factory.
+     * <p>
+     * A <code>null</code> input is treated as an empty array.
+     *
+     * @param versions local version array
+     * @return remote version array
+     * @throws RemoteException on RMI errors
+     */
+    private RemoteVersion[] getRemoteVersionArray(Version[] versions)
+            throws RemoteException {
+        if (versions != null) {
+            RemoteVersion[] remotes = new RemoteVersion[versions.length];
+            for (int i = 0; i < remotes.length; i++) {
+                remotes[i] = getFactory().getRemoteVersion(versions[i]);
+            }
+            return remotes;
+        } else {
+            return new RemoteVersion[0]; // for safety
+        }
+    }
+
 //  This is only available after 0.16.2
 //    /** {@inheritDoc} */
 //    public RemoteVersionHistory getContainingHistory() throws RepositoryException {

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersionHistory.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersionHistory.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersionHistory.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersionHistory.java Mon Jan  2 15:18:30 2006
@@ -22,6 +22,7 @@
 import javax.jcr.version.Version;
 import javax.jcr.version.VersionHistory;
 
+import org.apache.jackrabbit.rmi.remote.RemoteIterator;
 import org.apache.jackrabbit.rmi.remote.RemoteVersion;
 import org.apache.jackrabbit.rmi.remote.RemoteVersionHistory;
 
@@ -56,16 +57,6 @@
     }
 
     /** {@inheritDoc} */
-//    public String getVersionableUUID()
-//            throws RepositoryException, RemoteException {
-//        try {
-//            return versionHistory.getVersionableUUID();
-//        } catch (RepositoryException ex) {
-//            throw getRepositoryException(ex);
-//        }
-//    }
-
-    /** {@inheritDoc} */
     public RemoteVersion getRootVersion()
             throws RepositoryException, RemoteException {
         try {
@@ -76,10 +67,11 @@
     }
 
     /** {@inheritDoc} */
-    public RemoteVersion[] getAllVersions()
+    public RemoteIterator getAllVersions()
             throws RepositoryException, RemoteException {
         try {
-            return getRemoteVersionArray(versionHistory.getAllVersions());
+            return getFactory().getRemoteVersionIterator(
+                    versionHistory.getAllVersions());
         } catch (RepositoryException ex) {
             throw getRepositoryException(ex);
         }

Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerIterator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerIterator.java?rev=365458&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerIterator.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerIterator.java Mon Jan  2 15:18:30 2006
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed 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.jackrabbit.rmi.server.iterator;
+
+import java.rmi.RemoteException;
+import java.util.ArrayList;
+import java.util.NoSuchElementException;
+
+import javax.jcr.RangeIterator;
+
+import org.apache.jackrabbit.rmi.remote.RemoteIterator;
+import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
+import org.apache.jackrabbit.rmi.server.ServerObject;
+
+
+/**
+ * Remote adapter for the JCR {@link RangeIterator} interface. This
+ * class makes a local iterator available as an RMI service using teh
+ * {@link RemoteIterator} interface.
+ */
+public abstract class ServerIterator extends ServerObject
+        implements RemoteIterator {
+
+    /** The adapted local iterator. */
+    private final RangeIterator iterator;
+
+    /** The maximum number of elements to send per request. */
+    private final int maxBufferSize;
+
+    /**
+     * The cached number of elements in the iterator, -1 if the iterator
+     * size is unknown, or -2 if the size has not been retrieved from the
+     * adapted local iterator. This variable is useful in cases when the
+     * underlying iterator does not know its sizes (getSize() returns -1)
+     * but we reach the end of the iterator in a nextObjects() call and
+     * can thus determine the size of the iterator.
+     */
+    private long size;
+
+    /**
+     * Creates a remote adapter for the given local item.
+     *
+     * @param iterator      local iterator to be adapted
+     * @param factory       remote adapter factory
+     * @param maxBufferSize maximum buffer size
+     * @throws RemoteException on RMI errors
+     */
+    public ServerIterator(
+            RangeIterator iterator, RemoteAdapterFactory factory,
+            int maxBufferSize) throws RemoteException {
+        super(factory);
+        this.iterator = iterator;
+        this.maxBufferSize = maxBufferSize;
+        this.size = -2;
+    }
+
+    /**
+     * Returns the size of the iterator. The size is cached by invoking the
+     * adapted local iterator when this method is first called or by
+     * determining the size from an end-of-iterator condition in nextObjects().
+     *
+     * @return size of the iterator
+     * @throws RemoteException on RMI errors
+     * @see RemoteIterator#getSize()
+     * @see RangeIterator#getSize()
+     */
+    public long getSize() throws RemoteException {
+        if (size == -2) {
+            size = iterator.getSize();
+        }
+        return size;
+    }
+
+    /**
+     * Skips the given number of elements.
+     *
+     * @param items number of elements to skip
+     * @throws NoSuchElementException if skipped past the last element
+     * @throws RemoteException on RMI errors
+     */
+    public void skip(long items)
+            throws NoSuchElementException, RemoteException {
+        try {
+            iterator.skip(items);
+        } catch (NoSuchElementException e) {
+            throw new NoSuchElementException(e.getMessage());
+        }
+    }
+
+    /**
+     * Returns a remote adapter for the given local object. This abstract
+     * method is used by {@link #nextObjects(int)} to convert the local
+     * objects to remote references to be sent to the client.
+     * <p>
+     * Subclasses should implement this method to use the remote adapter
+     * factory to create remote adapters of the specific element type.
+     *
+     * @param object local object
+     * @return remote adapter
+     * @throws RemoteException on RMI errors
+     */
+    protected abstract Object getRemoteObject(Object object)
+            throws RemoteException;
+
+    /**
+     * Returns an array of remote references to the next elements in this
+     * iteration.
+     *
+     * @return array of remote references, or <code>null</code>
+     * @throws RemoteException on RMI errors
+     * @see RemoteIterator#nextObjects(int)
+     * @see java.util.Iterator#next()
+     */
+    public Object[] nextObjects() throws RemoteException {
+        if (!iterator.hasNext()) {
+            return null;
+        } else {
+            ArrayList items = new ArrayList();
+            while (items.size() < maxBufferSize && iterator.hasNext()) {
+                items.add(getRemoteObject(iterator.next()));
+            }
+            if (!iterator.hasNext()) {
+                size = iterator.getPosition();
+            }
+            return items.toArray();
+        }
+    }
+
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerIterator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeIterator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeIterator.java?rev=365458&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeIterator.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeIterator.java Mon Jan  2 15:18:30 2006
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed 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.jackrabbit.rmi.server.iterator;
+
+import java.rmi.RemoteException;
+
+import javax.jcr.Node;
+import javax.jcr.NodeIterator;
+
+import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
+
+/**
+ * A ServerIterator for iterating nodes.
+ */
+public class ServerNodeIterator extends ServerIterator {
+
+    /**
+     * Creates a ServerNodeIterator instance.
+     *
+     * @param iterator      local node iterator
+     * @param factory       remote adapter factory
+     * @param maxBufferSize maximum size of the element buffer
+     * @throws RemoteException on RMI errors
+     */
+    public ServerNodeIterator(
+            NodeIterator iterator, RemoteAdapterFactory factory,
+            int maxBufferSize) throws RemoteException {
+        super(iterator, factory, maxBufferSize);
+    }
+
+    /**
+     * Creates and returns a remote adapter for the given node.
+     *
+     * @param object local object
+     * @return remote adapter
+     * @throws RemoteException on RMI errors
+     * @see ServerIterator#getRemoteObject(Object)
+     */
+    protected Object getRemoteObject(Object object) throws RemoteException {
+        return getRemoteNode((Node) object);
+    }
+
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeIterator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeTypeIterator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeTypeIterator.java?rev=365458&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeTypeIterator.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeTypeIterator.java Mon Jan  2 15:18:30 2006
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed 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.jackrabbit.rmi.server.iterator;
+
+import java.rmi.RemoteException;
+
+import javax.jcr.nodetype.NodeType;
+import javax.jcr.nodetype.NodeTypeIterator;
+
+import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
+
+/**
+ * A ServerIterator for iterating node types.
+ */
+public class ServerNodeTypeIterator extends ServerIterator {
+
+    /**
+     * Creates a ServerNodeTypeIterator instance.
+     *
+     * @param iterator      local node type iterator
+     * @param factory       remote adapter factory
+     * @param maxBufferSize maximum size of the element buffer
+     * @throws RemoteException on RMI errors
+     */
+    public ServerNodeTypeIterator(
+            NodeTypeIterator iterator, RemoteAdapterFactory factory,
+            int maxBufferSize) throws RemoteException {
+        super(iterator, factory, maxBufferSize);
+    }
+
+    /**
+     * Creates and returns a remote adapter for the given node type.
+     *
+     * @param object local object
+     * @return remote adapter
+     * @throws RemoteException on RMI errors
+     * @see ServerIterator#getRemoteObject(Object)
+     */
+    protected Object getRemoteObject(Object object) throws RemoteException {
+        return getFactory().getRemoteNodeType((NodeType) object);
+    }
+
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeTypeIterator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerPropertyIterator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerPropertyIterator.java?rev=365458&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerPropertyIterator.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerPropertyIterator.java Mon Jan  2 15:18:30 2006
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed 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.jackrabbit.rmi.server.iterator;
+
+import java.rmi.RemoteException;
+
+import javax.jcr.Property;
+import javax.jcr.PropertyIterator;
+
+import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
+
+/**
+ * A ServerIterator for iterating properties.
+ */
+public class ServerPropertyIterator extends ServerIterator {
+
+    /**
+     * Creates a ServerPropertyIterator instance.
+     *
+     * @param iterator      local property iterator
+     * @param factory       remote adapter factory
+     * @param maxBufferSize maximum size of the element buffer
+     * @throws RemoteException on RMI errors
+     */
+    public ServerPropertyIterator(
+            PropertyIterator iterator, RemoteAdapterFactory factory,
+            int maxBufferSize) throws RemoteException {
+        super(iterator, factory, maxBufferSize);
+    }
+
+    /**
+     * Creates and returns a remote adapter for the given property.
+     *
+     * @param object local object
+     * @return remote adapter
+     * @throws RemoteException on RMI errors
+     * @see ServerIterator#getRemoteObject(Object)
+     */
+    protected Object getRemoteObject(Object object) throws RemoteException {
+        return getFactory().getRemoteProperty((Property) object);
+    }
+
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerPropertyIterator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerRowIterator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerRowIterator.java?rev=365458&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerRowIterator.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerRowIterator.java Mon Jan  2 15:18:30 2006
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed 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.jackrabbit.rmi.server.iterator;
+
+import java.rmi.RemoteException;
+
+import javax.jcr.query.Row;
+import javax.jcr.query.RowIterator;
+
+import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
+
+/**
+ * A ServerIterator for iterating rows.
+ */
+public class ServerRowIterator extends ServerIterator {
+
+    /**
+     * Creates a ServerRowIterator instance.
+     *
+     * @param iterator      local row iterator
+     * @param factory       remote adapter factory
+     * @param maxBufferSize maximum size of the element buffer
+     * @throws RemoteException on RMI errors
+     */
+    public ServerRowIterator(
+            RowIterator iterator, RemoteAdapterFactory factory,
+            int maxBufferSize) throws RemoteException {
+        super(iterator, factory, maxBufferSize);
+    }
+
+    /**
+     * Creates and returns a remote adapter for the given row.
+     *
+     * @param object local object
+     * @return remote adapter
+     * @throws RemoteException on RMI errors
+     * @see ServerIterator#getRemoteObject(Object)
+     */
+    protected Object getRemoteObject(Object object) throws RemoteException {
+        return getFactory().getRemoteRow((Row) object);
+    }
+
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerRowIterator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerVersionIterator.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerVersionIterator.java?rev=365458&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerVersionIterator.java (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerVersionIterator.java Mon Jan  2 15:18:30 2006
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2004-2005 The Apache Software Foundation or its licensors,
+ *                     as applicable.
+ *
+ * Licensed 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.jackrabbit.rmi.server.iterator;
+
+import java.rmi.RemoteException;
+
+import javax.jcr.version.Version;
+import javax.jcr.version.VersionIterator;
+
+import org.apache.jackrabbit.rmi.server.RemoteAdapterFactory;
+
+/**
+ * A ServerIterator for iterating versions.
+ */
+public class ServerVersionIterator extends ServerIterator {
+
+    /**
+     * Creates a ServerVersionIterator instance.
+     *
+     * @param iterator      local version iterator
+     * @param factory       remote adapter factory
+     * @param maxBufferSize maximum size of the element buffer
+     * @throws RemoteException on RMI errors
+     */
+    public ServerVersionIterator(
+            VersionIterator iterator, RemoteAdapterFactory factory,
+            int maxBufferSize) throws RemoteException {
+        super(iterator, factory, maxBufferSize);
+    }
+
+    /**
+     * Creates and returns a remote adapter for the given version..
+     *
+     * @param object local object
+     * @return remote adapter
+     * @throws RemoteException on RMI errors
+     * @see ServerIterator#getRemoteObject(Object)
+     */
+    protected Object getRemoteObject(Object object) throws RemoteException {
+        return getFactory().getRemoteVersion((Version) object);
+    }
+
+}

Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerVersionIterator.java
------------------------------------------------------------------------------
    svn:eol-style = native

Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/package.html
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/package.html?rev=365458&view=auto
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/package.html (added)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/package.html Mon Jan  2 15:18:30 2006
@@ -0,0 +1,3 @@
+<body>
+Remote adapters for local iterators.
+</body>

Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/package.html
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/test/org/apache/jackrabbit/test/rmi/RemoteAdapterTest.java
URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/test/org/apache/jackrabbit/test/rmi/RemoteAdapterTest.java?rev=365458&r1=365457&r2=365458&view=diff
==============================================================================
--- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/test/org/apache/jackrabbit/test/rmi/RemoteAdapterTest.java (original)
+++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/test/org/apache/jackrabbit/test/rmi/RemoteAdapterTest.java Mon Jan  2 15:18:30 2006
@@ -261,6 +261,10 @@
         ignoreMethod("getVersionHistory");        // TODO
         ignoreMethod("getBaseVersion");           // TODO
         ignoreMethod("setProperty");              // multiple methods
+        ignoreMethod("getNodes");                 // null iterator
+        ignoreMethod("getProperties");            // null iterator
+        ignoreMethod("getReferences");            // null iterator
+        ignoreMethod("merge");                    // null iterator
 
         Node node = (Node) mock;
         RemoteNode remote = remoteFactory.getRemoteNode(node);
@@ -353,6 +357,9 @@
      */
     public void testNodeTypeManager() throws Exception {
         prepareTests(NodeTypeManager.class);
+        ignoreMethod("getAllNodeTypes");     // null iterator
+        ignoreMethod("getPrimaryNodeTypes"); // null iterator
+        ignoreMethod("getMixinNodeTypes");   // null iterator
 
         NodeTypeManager manager = (NodeTypeManager) mock;
         RemoteNodeTypeManager remote =
@@ -461,6 +468,8 @@
      */
     public void testQueryResult() throws Exception {
         prepareTests(QueryResult.class);
+        ignoreMethod("getNodes"); // null iterator
+        ignoreMethod("getRows");  // null iterator
 
         QueryResult result = (QueryResult) mock;
         RemoteQueryResult remote = remoteFactory.getRemoteQueryResult(result);
@@ -509,6 +518,7 @@
         prepareTests(VersionHistory.class);
         ignoreMethod("getVersionLabels"); // UUID call
         ignoreMethod("hasVersionLabel");  // UUID call
+        ignoreMethod("getAllVersions");   // null iterator
 
         VersionHistory history = (VersionHistory) mock;
         RemoteVersionHistory remote =