Return-Path: Delivered-To: apmail-incubator-jackrabbit-commits-archive@www.apache.org Received: (qmail 1401 invoked from network); 2 Jan 2006 23:20:03 -0000 Received: from hermes.apache.org (HELO mail.apache.org) (209.237.227.199) by minotaur.apache.org with SMTP; 2 Jan 2006 23:20:03 -0000 Received: (qmail 42977 invoked by uid 500); 2 Jan 2006 23:20:03 -0000 Mailing-List: contact jackrabbit-commits-help@incubator.apache.org; run by ezmlm Precedence: bulk List-Help: List-Unsubscribe: List-Post: List-Id: Reply-To: jackrabbit-dev@incubator.apache.org Delivered-To: mailing list jackrabbit-commits@incubator.apache.org Received: (qmail 42956 invoked by uid 500); 2 Jan 2006 23:20:02 -0000 Delivered-To: apmail-incubator-jackrabbit-cvs@incubator.apache.org Received: (qmail 42847 invoked by uid 99); 2 Jan 2006 23:20:01 -0000 Received: from asf.osuosl.org (HELO asf.osuosl.org) (140.211.166.49) by apache.org (qpsmtpd/0.29) with ESMTP; Mon, 02 Jan 2006 15:20:01 -0800 X-ASF-Spam-Status: No, hits=-9.4 required=10.0 tests=ALL_TRUSTED,NO_REAL_NAME X-Spam-Check-By: apache.org Received: from [209.237.227.194] (HELO minotaur.apache.org) (209.237.227.194) by apache.org (qpsmtpd/0.29) with SMTP; Mon, 02 Jan 2006 15:19:58 -0800 Received: (qmail 1244 invoked by uid 65534); 2 Jan 2006 23:19:38 -0000 Message-ID: <20060102231938.1236.qmail@minotaur.apache.org> Content-Type: text/plain; charset="utf-8" MIME-Version: 1.0 Content-Transfer-Encoding: 7bit Subject: svn commit: r365458 [1/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... Date: Mon, 02 Jan 2006 23:19:30 -0000 To: jackrabbit-cvs@incubator.apache.org From: jukka@apache.org X-Mailer: svnmailer-1.0.5 X-Virus-Checked: Checked by ClamAV on apache.org X-Spam-Rating: minotaur.apache.org 1.6.2 0/1000/N Author: jukka Date: Mon Jan 2 15:18:30 2006 New Revision: 365458 URL: http://svn.apache.org/viewcvs?rev=365458&view=rev Log: JCR-RMI: Use remote iterators instead of arrays to avoid memory and network problems with large result sets. Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeTypeIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientPropertyIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientRowIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientVersionIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/package.html (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/ArrayIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/BufferIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerNodeTypeIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerPropertyIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerRowIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/ServerVersionIterator.java (with props) incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/iterator/package.html (with props) Removed: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/iterator/ArrayNodeIterator.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/iterator/ArrayNodeTypeIterator.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/iterator/ArrayPropertyIterator.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/iterator/ArrayRowIterator.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/iterator/ArrayVersionIterator.java Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/maven.xml incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientAdapterFactory.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNode.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeType.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeTypeManager.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientObject.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientQueryResult.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersion.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersionHistory.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNode.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNodeTypeManager.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteQueryResult.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteVersionHistory.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerAdapterFactory.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNode.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeType.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerNodeTypeManager.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerObject.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerQueryResult.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersion.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/ServerVersionHistory.java incubator/jackrabbit/trunk/contrib/jcr-rmi/src/test/org/apache/jackrabbit/test/rmi/RemoteAdapterTest.java Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/maven.xml URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/maven.xml?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/maven.xml (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/maven.xml Mon Jan 2 15:18:30 2006 @@ -23,7 +23,7 @@ Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientAdapterFactory.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientAdapterFactory.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientAdapterFactory.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientAdapterFactory.java Mon Jan 2 15:18:30 2006 @@ -19,12 +19,15 @@ 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.Session; import javax.jcr.Workspace; import javax.jcr.lock.Lock; import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeIterator; import javax.jcr.nodetype.NodeTypeManager; import javax.jcr.nodetype.ItemDefinition; import javax.jcr.nodetype.NodeDefinition; @@ -34,11 +37,19 @@ 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.client.iterator.ClientNodeIterator; +import org.apache.jackrabbit.rmi.client.iterator.ClientNodeTypeIterator; +import org.apache.jackrabbit.rmi.client.iterator.ClientPropertyIterator; +import org.apache.jackrabbit.rmi.client.iterator.ClientRowIterator; +import org.apache.jackrabbit.rmi.client.iterator.ClientVersionIterator; 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; @@ -260,4 +271,48 @@ public Row getRow(RemoteRow remote) { return new ClientRow(remote); } + + /** + * Creates and returns a {@link ClientNodeIterator} instance. + * {@inheritDoc} + */ + public NodeIterator getNodeIterator( + Session session, RemoteIterator remote) { + return new ClientNodeIterator(remote, session, this); + } + + /** + * Creates and returns a {@link ClientPropertyIterator} instance. + * {@inheritDoc} + */ + public PropertyIterator getPropertyIterator( + Session session, RemoteIterator remote) { + return new ClientPropertyIterator(remote, session, this); + } + + /** + * Creates and returns a {@link ClientVersionIterator} instance. + * {@inheritDoc} + */ + public VersionIterator getVersionIterator( + Session session, RemoteIterator remote) { + return new ClientVersionIterator(remote, session, this); + } + + /** + * Creates and returns a {@link ClientNodeTypeIterator} instance. + * {@inheritDoc} + */ + public NodeTypeIterator getNodeTypeIterator(RemoteIterator remote) { + return new ClientNodeTypeIterator(remote, this); + } + + /** + * Creates and returns a {@link ClientRowIterator} instance. + * {@inheritDoc} + */ + public RowIterator getRowIterator(RemoteIterator remote) { + return new ClientRowIterator(remote, this); + } + } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNode.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNode.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNode.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNode.java Mon Jan 2 15:18:30 2006 @@ -204,7 +204,7 @@ /** {@inheritDoc} */ public NodeIterator getNodes() throws RepositoryException { try { - return getNodeIterator(getSession(), remote.getNodes()); + return getFactory().getNodeIterator(getSession(), remote.getNodes()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -213,7 +213,7 @@ /** {@inheritDoc} */ public NodeIterator getNodes(String pattern) throws RepositoryException { try { - return getNodeIterator(getSession(), remote.getNodes(pattern)); + return getFactory().getNodeIterator(getSession(), remote.getNodes(pattern)); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -232,7 +232,7 @@ /** {@inheritDoc} */ public PropertyIterator getProperties() throws RepositoryException { try { - return getPropertyIterator(getSession(), remote.getProperties()); + return getFactory().getPropertyIterator(getSession(), remote.getProperties()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -242,8 +242,7 @@ public PropertyIterator getProperties(String pattern) throws RepositoryException { try { - RemoteProperty[] properties = remote.getProperties(pattern); - return getPropertyIterator(getSession(), properties); + return getFactory().getPropertyIterator(getSession(), remote.getProperties(pattern)); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -270,7 +269,7 @@ /** {@inheritDoc} */ public PropertyIterator getReferences() throws RepositoryException { try { - return getPropertyIterator(getSession(), remote.getReferences()); + return getFactory().getPropertyIterator(getSession(), remote.getReferences()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -406,7 +405,7 @@ public NodeIterator merge(String workspace, boolean bestEffort) throws RepositoryException { try { - return getNodeIterator(getSession(), remote.merge(workspace, bestEffort)); + return getFactory().getNodeIterator(getSession(), remote.merge(workspace, bestEffort)); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeType.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeType.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeType.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeType.java Mon Jan 2 15:18:30 2006 @@ -25,6 +25,7 @@ import org.apache.jackrabbit.rmi.remote.RemoteNodeDefinition; import org.apache.jackrabbit.rmi.remote.RemoteNodeType; +import org.apache.jackrabbit.rmi.remote.RemotePropertyDefinition; import org.apache.jackrabbit.rmi.value.SerialValueFactory; /** @@ -53,6 +54,51 @@ this.remote = remote; } + /** + * Utility method for creating an array of local node definition + * adapters for an array of remote node definitions. The node + * definition adapters are created using the local adapter factory. + *

+ * A null input is treated as an empty array. + * + * @param remotes remote node definitions + * @return local node definition array + */ + private NodeDefinition[] getNodeDefArray(RemoteNodeDefinition[] remotes) { + if (remotes != null) { + NodeDefinition[] defs = new NodeDefinition[remotes.length]; + for (int i = 0; i < remotes.length; i++) { + defs[i] = getFactory().getNodeDef(remotes[i]); + } + return defs; + } else { + return new NodeDefinition[0]; // for safety + } + } + + /** + * Utility method for creating an array of local property definition + * adapters for an array of remote property definitions. The property + * definition adapters are created using the local adapter factory. + *

+ * A null input is treated as an empty array. + * + * @param remotes remote property definitions + * @return local property definition array + */ + protected PropertyDefinition[] getPropertyDefArray( + RemotePropertyDefinition[] remotes) { + if (remotes != null) { + PropertyDefinition[] defs = new PropertyDefinition[remotes.length]; + for (int i = 0; i < remotes.length; i++) { + defs[i] = getFactory().getPropertyDef(remotes[i]); + } + return defs; + } else { + return new PropertyDefinition[0]; // for safety + } + } + /** {@inheritDoc} */ public String getName() { try { @@ -128,8 +174,7 @@ /** {@inheritDoc} */ public NodeDefinition[] getChildNodeDefinitions() { try { - RemoteNodeDefinition[] defs = remote.getChildNodeDefs(); - return getNodeDefArray(defs); + return getNodeDefArray(remote.getChildNodeDefs()); } catch (RemoteException ex) { throw new RemoteRuntimeException(ex); } @@ -138,8 +183,7 @@ /** {@inheritDoc} */ public NodeDefinition[] getDeclaredChildNodeDefinitions() { try { - RemoteNodeDefinition[] defs = remote.getDeclaredChildNodeDefs(); - return getNodeDefArray(defs); + return getNodeDefArray(remote.getDeclaredChildNodeDefs()); } catch (RemoteException ex) { throw new RemoteRuntimeException(ex); } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeTypeManager.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeTypeManager.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeTypeManager.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientNodeTypeManager.java Mon Jan 2 15:18:30 2006 @@ -66,7 +66,7 @@ /** {@inheritDoc} */ public NodeTypeIterator getAllNodeTypes() throws RepositoryException { try { - return getNodeTypeIterator(remote.getAllNodeTypes()); + return getFactory().getNodeTypeIterator(remote.getAllNodeTypes()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -75,7 +75,7 @@ /** {@inheritDoc} */ public NodeTypeIterator getPrimaryNodeTypes() throws RepositoryException { try { - return getNodeTypeIterator(remote.getPrimaryNodeTypes()); + return getFactory().getNodeTypeIterator(remote.getPrimaryNodeTypes()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -84,7 +84,7 @@ /** {@inheritDoc} */ public NodeTypeIterator getMixinNodeTypes() throws RepositoryException { try { - return getNodeTypeIterator(remote.getMixinNodeTypes()); + return getFactory().getNodeTypeIterator(remote.getMixinNodeTypes()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientObject.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientObject.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientObject.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientObject.java Mon Jan 2 15:18:30 2006 @@ -18,27 +18,13 @@ import javax.jcr.Item; import javax.jcr.Node; -import javax.jcr.NodeIterator; -import javax.jcr.Property; -import javax.jcr.PropertyIterator; import javax.jcr.Session; -import javax.jcr.nodetype.NodeDefinition; import javax.jcr.nodetype.NodeType; -import javax.jcr.nodetype.NodeTypeIterator; -import javax.jcr.nodetype.PropertyDefinition; -import javax.jcr.version.Version; -import javax.jcr.version.VersionIterator; -import org.apache.jackrabbit.rmi.iterator.ArrayNodeIterator; -import org.apache.jackrabbit.rmi.iterator.ArrayNodeTypeIterator; -import org.apache.jackrabbit.rmi.iterator.ArrayPropertyIterator; -import org.apache.jackrabbit.rmi.iterator.ArrayVersionIterator; 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.RemoteVersion; import org.apache.jackrabbit.rmi.remote.RemoteVersionHistory; @@ -77,7 +63,7 @@ /** * Utility method to create a local adapter for a remote item. * This method introspects the remote reference to determine - * whether to instantiate a {@link Property Property}, + * whether to instantiate a {@link javax.jcr.Property}, * a {@link Node Node}, or an {@link Item Item} adapter using * the local adapter factory. *

@@ -121,94 +107,6 @@ } /** - * Utility method for creating a property iterator for an array - * of remote properties. The properties in the returned iterator - * are created using the local adapter factory. - *

- * A null input is treated as an empty array. - * - * @param session current session - * @param remotes remote properties - * @return local property iterator - */ - protected PropertyIterator getPropertyIterator( - Session session, RemoteProperty[] remotes) { - if (remotes != null) { - Property[] properties = new Property[remotes.length]; - for (int i = 0; i < remotes.length; i++) { - properties[i] = factory.getProperty(session, remotes[i]); - } - return new ArrayPropertyIterator(properties); - } else { - return new ArrayPropertyIterator(new Property[0]); // for safety - } - } - - /** - * Utility method for creating a node iterator for an array - * of remote nodes. The nodes in the returned iterator - * are created using the local adapter factory. - *

- * A null input is treated as an empty array. - * - * @param session current session - * @param remotes remote nodes - * @return local node iterator - */ - protected NodeIterator getNodeIterator( - Session session, RemoteNode[] remotes) { - if (remotes != null) { - Node[] nodes = new Node[remotes.length]; - for (int i = 0; i < remotes.length; i++) { - nodes[i] = getNode(session, remotes[i]); - } - return new ArrayNodeIterator(nodes); - } else { - return new ArrayNodeIterator(new Node[0]); // for safety - } - } - - /** - * Utility method for creating a version array for an array - * of remote versions. The versions in the returned array - * are created using the local adapter factory. - *

- * A null input is treated as an empty array. - * - * @param session current session - * @param remotes remote versions - * @return local version array - */ - protected Version[] getVersionArray( - Session session, RemoteVersion[] remotes) { - if (remotes != null) { - Version[] versions = new Version[remotes.length]; - for (int i = 0; i < remotes.length; i++) { - versions[i] = factory.getVersion(session, remotes[i]); - } - return versions; - } else { - return new Version[0]; // for safety - } - } - - /** - * Utility method for creating a version iterator for an array - * of remote versions. The versions in the returned iterator - * are created using the local adapter factory. - *

- * A null input is treated as an empty array. - * - * @param session current session - * @param remotes remote versions - * @return local version iterator - */ - protected VersionIterator getVersionIterator( - Session session, RemoteVersion[] remotes) { - return new ArrayVersionIterator(getVersionArray(session, remotes)); - } - - /** * Utility method for creating an array of local node type adapters * for an array of remote node types. The node type adapters are created * using the local adapter factory. @@ -227,64 +125,6 @@ return types; } else { return new NodeType[0]; // for safety - } - } - - /** - * Utility method for creating an iterator of local node type adapters - * for an array of remote node types. The node type adapters are created - * using the local adapter factory. - *

- * A null input is treated as an empty array. - * - * @param remotes remote node types - * @return local node type iterator - */ - protected NodeTypeIterator getNodeTypeIterator(RemoteNodeType[] remotes) { - return new ArrayNodeTypeIterator(getNodeTypeArray(remotes)); - } - - /** - * Utility method for creating an array of local node definition - * adapters for an array of remote node definitions. The node - * definition adapters are created using the local adapter factory. - *

- * A null input is treated as an empty array. - * - * @param remotes remote node definitions - * @return local node definition array - */ - protected NodeDefinition[] getNodeDefArray(RemoteNodeDefinition[] remotes) { - if (remotes != null) { - NodeDefinition[] defs = new NodeDefinition[remotes.length]; - for (int i = 0; i < remotes.length; i++) { - defs[i] = factory.getNodeDef(remotes[i]); - } - return defs; - } else { - return new NodeDefinition[0]; // for safety - } - } - - /** - * Utility method for creating an array of local property definition - * adapters for an array of remote property definitions. The property - * definition adapters are created using the local adapter factory. - *

- * A null input is treated as an empty array. - * - * @param remotes remote property definitions - * @return local property definition array - */ - protected PropertyDefinition[] getPropertyDefArray(RemotePropertyDefinition[] remotes) { - if (remotes != null) { - PropertyDefinition[] defs = new PropertyDefinition[remotes.length]; - for (int i = 0; i < remotes.length; i++) { - defs[i] = factory.getPropertyDef(remotes[i]); - } - return defs; - } else { - return new PropertyDefinition[0]; // for safety } } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientQueryResult.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientQueryResult.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientQueryResult.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientQueryResult.java Mon Jan 2 15:18:30 2006 @@ -18,19 +18,13 @@ import java.rmi.RemoteException; -import javax.jcr.Node; import javax.jcr.NodeIterator; import javax.jcr.RepositoryException; import javax.jcr.Session; import javax.jcr.query.QueryResult; -import javax.jcr.query.Row; import javax.jcr.query.RowIterator; -import org.apache.jackrabbit.rmi.iterator.ArrayNodeIterator; -import org.apache.jackrabbit.rmi.iterator.ArrayRowIterator; -import org.apache.jackrabbit.rmi.remote.RemoteNode; import org.apache.jackrabbit.rmi.remote.RemoteQueryResult; -import org.apache.jackrabbit.rmi.remote.RemoteRow; /** * Local adapter for the JCR-RMI @@ -77,16 +71,7 @@ /** {@inheritDoc} */ public RowIterator getRows() throws RepositoryException { try { - RemoteRow[] remotes = remote.getRows(); - if (remotes != null) { - Row[] rows = new Row[remotes.length]; - for (int i = 0; i < rows.length; i++) { - rows[i] = getFactory().getRow(remotes[i]); - } - return new ArrayRowIterator(rows); - } else { - return new ArrayRowIterator(new Row[0]); - } + return getFactory().getRowIterator(remote.getRows()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -95,18 +80,9 @@ /** {@inheritDoc} */ public NodeIterator getNodes() throws RepositoryException { try { - RemoteNode[] remotes = remote.getNodes(); - if (remotes != null) { - Node[] nodes = new Node[remotes.length]; - for (int i = 0; i < nodes.length; i++) { - nodes[i] = getNode(session, remotes[i]); - } - return new ArrayNodeIterator(nodes); - } else { - return new ArrayNodeIterator(new Node[0]); - } - } catch (RemoteException ex) { - throw new RemoteRepositoryException(ex); + return getFactory().getNodeIterator(session, remote.getNodes()); + } catch (RemoteException e) { + throw new RemoteRepositoryException(e); } } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersion.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersion.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersion.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersion.java Mon Jan 2 15:18:30 2006 @@ -54,6 +54,29 @@ this.remote = remote; } + /** + * Utility method for creating a version array for an array + * of remote versions. The versions in the returned array + * are created using the local adapter factory. + *

+ * A null input is treated as an empty array. + * + * @param remotes remote versions + * @return local version array + */ + private Version[] getVersionArray(RemoteVersion[] remotes) { + if (remotes != null) { + Version[] versions = new Version[remotes.length]; + for (int i = 0; i < remotes.length; i++) { + versions[i] = getFactory().getVersion(getSession(), remotes[i]); + } + return versions; + } else { + return new Version[0]; // for safety + } + } + + /** {@inheritDoc} */ public Calendar getCreated() throws RepositoryException { try { @@ -66,7 +89,7 @@ /** {@inheritDoc} */ public Version[] getSuccessors() throws RepositoryException { try { - return getVersionArray(getSession(), remote.getSuccessors()); + return getVersionArray(remote.getSuccessors()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } @@ -75,7 +98,7 @@ /** {@inheritDoc} */ public Version[] getPredecessors() throws RepositoryException { try { - return getVersionArray(getSession(), remote.getPredecessors()); + return getVersionArray(remote.getPredecessors()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersionHistory.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersionHistory.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersionHistory.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/ClientVersionHistory.java Mon Jan 2 15:18:30 2006 @@ -68,7 +68,8 @@ /** {@inheritDoc} */ public VersionIterator getAllVersions() throws RepositoryException { try { - return getVersionIterator(getSession(), remote.getAllVersions()); + return getFactory().getVersionIterator( + getSession(), remote.getAllVersions()); } catch (RemoteException ex) { throw new RemoteRepositoryException(ex); } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/LocalAdapterFactory.java Mon Jan 2 15:18:30 2006 @@ -19,7 +19,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.Session; import javax.jcr.Workspace; @@ -27,6 +29,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.ObservationManager; @@ -34,11 +37,14 @@ 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.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; @@ -268,5 +274,49 @@ * @return local query row adapter */ Row getRow(RemoteRow remote); + + /** + * Factory method for creating a local adapter for a remote node iterator. + * + * @param session current session + * @param remote remote node iterator + * @return local node iterator adapter + */ + NodeIterator getNodeIterator(Session session, RemoteIterator remote); + + /** + * Factory method for creating a local adapter for a remote property iterator. + * + * @param session current session + * @param remote remote property iterator + * @return local property iterator adapter + */ + PropertyIterator getPropertyIterator(Session session, RemoteIterator remote); + + /** + * Factory method for creating a local adapter for a remote version iterator. + * + * @param session current session + * @param remote remote version iterator + * @return local version iterator adapter + */ + VersionIterator getVersionIterator(Session session, RemoteIterator remote); + + /** + * Factory method for creating a local adapter for a remote + * node type iterator. + * + * @param remote remote node type iterator + * @return local node type iterator adapter + */ + NodeTypeIterator getNodeTypeIterator(RemoteIterator remote); + + /** + * Factory method for creating a local adapter for a remote row iterator. + * + * @param remote remote row iterator + * @return local row iterator adapter + */ + RowIterator getRowIterator(RemoteIterator remote); } Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,222 @@ +/* + * 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.client.iterator; + +import java.rmi.RemoteException; +import java.util.NoSuchElementException; + +import javax.jcr.RangeIterator; + +import org.apache.jackrabbit.rmi.client.ClientObject; +import org.apache.jackrabbit.rmi.client.LocalAdapterFactory; +import org.apache.jackrabbit.rmi.client.RemoteRuntimeException; +import org.apache.jackrabbit.rmi.remote.RemoteIterator; + +/** + * A buffering local adapter for the JCR-RMI {@link RemoteIterator} + * interface. This class makes the remote iterator locally available + * using the JCR {@link RangeIterator} interface. The element arrays + * returned by the remote iterator are buffered locally. + *

+ * See the subclasses for type-specific versions of this abstract class. + */ +public abstract class ClientIterator extends ClientObject + implements RangeIterator { + + /** The adapted remote iterator. */ + private final RemoteIterator remote; + + /** + * 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 + * remote iterator. + */ + private long size; + + /** The position of the buffer within the iteration. */ + private long positionOfBuffer; + + /** The position within the buffer of the iteration. */ + private int positionInBuffer; + + /** + * The element buffer. Set to null when the end of the + * iteration has been reached. + */ + private Object[] buffer; + + /** + * Creates a local adapter for the given remote iterator. The element + * buffer is initially empty. + * + * @param remote remote iterator + * @param factory local adapter factory + */ + public ClientIterator(RemoteIterator remote, LocalAdapterFactory factory) { + super(factory); + this.remote = remote; + this.size = -2; + this.positionOfBuffer = 0; + this.positionInBuffer = 0; + this.buffer = new Object[0]; + } + + /** + * Returns the current position within the iterator. + * + * @return current position + * @see RangeIterator#getPosition() + */ + public long getPosition() { + return positionOfBuffer + positionInBuffer; + } + + /** + * Returns the size (the total number of elements) of this iteration. + * Returns -1 if the size is unknown. + *

+ * To minimize the number of remote method calls, the size is retrieved + * when this method is first called and cached for subsequent invocations. + * + * @return number of elements in the iteration, or -1 + * @throws RemoteRuntimeException on RMI errors + * @see RangeIterator#getSize() + */ + public long getSize() throws RemoteRuntimeException { + if (size == -2) { + try { + size = remote.getSize(); + } catch (RemoteException e) { + throw new RemoteRuntimeException(e); + } + } + return size; + } + + /** + * Skips the given number of elements in this iteration. + *

+ * The elements in the local element buffer are skipped first, and + * a remote skip method call is made only if more elements are being + * skipped than remain in the local buffer. + * + * @param skipNum the number of elements to skip + * @throws NoSuchElementException if skipped past the last element + * @throws RemoteRuntimeException on RMI errors + * @see RangeIterator#skip(long) + */ + public void skip(long skipNum) + throws NoSuchElementException, RemoteRuntimeException { + if (skipNum < 0) { + throw new IllegalArgumentException("Negative skip is not allowed"); + } else if (buffer == null && skipNum > 0) { + throw new NoSuchElementException("Skipped past the last element"); + } else if (positionInBuffer + skipNum < buffer.length) { + positionInBuffer += skipNum; + } else { + try { + remote.skip(skipNum - (buffer.length - positionInBuffer)); + positionInBuffer = buffer.length; + } catch (RemoteException e) { + throw new RemoteRuntimeException(e); + } catch (NoSuchElementException e) { + buffer = null; // End of iterator reached + throw e; + } + } + } + + /** + * Advances the element buffer if there are no more elements in it. The + * element buffer is set to null if the end of the iteration + * has been reached. + * + * @throws RemoteException on RMI errors + */ + private void advance() throws RemoteException { + if (buffer != null && positionInBuffer == buffer.length) { + positionOfBuffer += buffer.length; + positionInBuffer = 0; + buffer = remote.nextObjects(); + if (buffer == null) { + size = positionOfBuffer; + } + } + } + + /** + * Checks if there are more elements in this iteration. + * + * @return true if there are more elements, + * false otherwise + * @throws RemoteRuntimeException on RMI errors + * @see Iterator#hasNext() + */ + public boolean hasNext() throws RemoteRuntimeException { + try { + advance(); + return buffer != null; + } catch (RemoteException e) { + throw new RemoteRuntimeException(e); + } + } + + /** + * Returns a local adapter for the given remote object. This abstract + * method is used by {@link #next()} to convert the remote references + * returned by the remote iterator to local adapters. + *

+ * Subclasses should implement this method to use the local adapter + * factory to create local adapters of the specific element type. + * + * @param remote remote object + * @return local adapter + */ + protected abstract Object getObject(Object remote); + + /** + * Returns the next element in this iteration. + * + * @return next element + * @throws NoSuchElementException if there are no more elements + * @throws RemoteRuntimeException on RMI errors + * @see Iterator#next() + */ + public Object next() throws NoSuchElementException, RemoteRuntimeException { + try { + advance(); + if (buffer == null) { + throw new NoSuchElementException("End of iterator reached"); + } else { + return getObject(buffer[positionInBuffer++]); + } + } catch (RemoteException e) { + throw new RemoteRuntimeException(e); + } + } + + /** + * Not supported. + * + * @throws UnsupportedOperationException always thrown + * @see Iterator#remove() + */ + public void remove() throws UnsupportedOperationException { + throw new UnsupportedOperationException(); + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,70 @@ +/* + * 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.client.iterator; + +import javax.jcr.Node; +import javax.jcr.NodeIterator; +import javax.jcr.Session; + +import org.apache.jackrabbit.rmi.client.LocalAdapterFactory; +import org.apache.jackrabbit.rmi.remote.RemoteIterator; +import org.apache.jackrabbit.rmi.remote.RemoteNode; + +/** + * A ClientIterator for iterating remote nodes. + */ +public class ClientNodeIterator extends ClientIterator implements NodeIterator { + + /** The current session. */ + private final Session session; + + /** + * Creates a ClientNodeIterator instance. + * + * @param iterator remote iterator + * @param session current session + * @param factory local adapter factory + */ + public ClientNodeIterator( + RemoteIterator iterator, Session session, + LocalAdapterFactory factory) { + super(iterator, factory); + this.session = session; + } + + /** + * Creates and returns a local adapter for the given remote node. + * + * @param remote remote referecne + * @return local adapter + * @see ClientIterator#getObject(Object) + */ + protected Object getObject(Object remote) { + return getNode(session, (RemoteNode) remote); + } + + /** + * Returns the next node in this iteration. + * + * @return next node + * @see NodeIterator#nextNode() + */ + public Node nextNode() { + return (Node) next(); + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeTypeIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeTypeIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeTypeIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeTypeIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,64 @@ +/* + * 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.client.iterator; + +import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeIterator; + +import org.apache.jackrabbit.rmi.client.LocalAdapterFactory; +import org.apache.jackrabbit.rmi.remote.RemoteIterator; +import org.apache.jackrabbit.rmi.remote.RemoteNodeType; + +/** + * A ClientIterator for iterating remote node types. + */ +public class ClientNodeTypeIterator extends ClientIterator + implements NodeTypeIterator { + + /** + * Creates a ClientNodeTypeIterator instance. + * + * @param iterator remote iterator + * @param factory local adapter factory + */ + public ClientNodeTypeIterator( + RemoteIterator iterator, LocalAdapterFactory factory) { + super(iterator, factory); + } + + /** + * Creates and returns a local adapter for the given remote node. + * + * @param remote remote referecne + * @return local adapter + * @see ClientIterator#getObject(Object) + */ + protected Object getObject(Object remote) { + return getFactory().getNodeType((RemoteNodeType) remote); + } + + /** + * Returns the next node type in this iteration. + * + * @return next node type + * @see NodeTypeIterator#nextNodeType() + */ + public NodeType nextNodeType() { + return (NodeType) next(); + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientNodeTypeIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientPropertyIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientPropertyIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientPropertyIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientPropertyIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,71 @@ +/* + * 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.client.iterator; + +import javax.jcr.Property; +import javax.jcr.PropertyIterator; +import javax.jcr.Session; + +import org.apache.jackrabbit.rmi.client.LocalAdapterFactory; +import org.apache.jackrabbit.rmi.remote.RemoteIterator; +import org.apache.jackrabbit.rmi.remote.RemoteProperty; + +/** + * A ClientIterator for iterating remote properties. + */ +public class ClientPropertyIterator extends ClientIterator + implements PropertyIterator { + + /** The current session. */ + private final Session session; + + /** + * Creates a ClientPropertyIterator instance. + * + * @param iterator remote iterator + * @param session current session + * @param factory local adapter factory + */ + public ClientPropertyIterator( + RemoteIterator iterator, Session session, + LocalAdapterFactory factory) { + super(iterator, factory); + this.session = session; + } + + /** + * Creates and returns a local adapter for the given remote property. + * + * @param remote remote referecne + * @return local adapter + * @see ClientIterator#getObject(Object) + */ + protected Object getObject(Object remote) { + return getFactory().getProperty(session, (RemoteProperty) remote); + } + + /** + * Returns the next property in this iteration. + * + * @return next property + * @see PropertyIterator#nextProperty() + */ + public Property nextProperty() { + return (Property) next(); + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientPropertyIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientRowIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientRowIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientRowIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientRowIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,63 @@ +/* + * 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.client.iterator; + +import javax.jcr.query.Row; +import javax.jcr.query.RowIterator; + +import org.apache.jackrabbit.rmi.client.LocalAdapterFactory; +import org.apache.jackrabbit.rmi.remote.RemoteIterator; +import org.apache.jackrabbit.rmi.remote.RemoteRow; + +/** + * A ClientIterator for iterating remote rows. + */ +public class ClientRowIterator extends ClientIterator implements RowIterator { + + /** + * Creates a ClientRowIterator instance. + * + * @param iterator remote iterator + * @param factory local adapter factory + */ + public ClientRowIterator( + RemoteIterator iterator, LocalAdapterFactory factory) { + super(iterator, factory); + } + + /** + * Creates and returns a local adapter for the given remote row. + * + * @param remote remote reference + * @return local adapter + * @see ClientIterator#getObject(Object) + */ + protected Object getObject(Object remote) { + return getFactory().getRow((RemoteRow) remote); + } + + /** + * Returns the next row in this iteration. + * + * @return next row + * @see RowIterator#nextRow() + */ + public Row nextRow() { + return (Row) next(); + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientRowIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientVersionIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientVersionIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientVersionIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientVersionIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,71 @@ +/* + * 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.client.iterator; + +import javax.jcr.Session; +import javax.jcr.version.Version; +import javax.jcr.version.VersionIterator; + +import org.apache.jackrabbit.rmi.client.LocalAdapterFactory; +import org.apache.jackrabbit.rmi.remote.RemoteIterator; +import org.apache.jackrabbit.rmi.remote.RemoteVersion; + +/** + * A ClientIterator for iterating remote versions. + */ +public class ClientVersionIterator extends ClientIterator + implements VersionIterator { + + /** The current session. */ + private final Session session; + + /** + * Creates a ClientVersionIterator instance. + * + * @param iterator remote iterator + * @param session current session + * @param factory local adapter factory + */ + public ClientVersionIterator( + RemoteIterator iterator, Session session, + LocalAdapterFactory factory) { + super(iterator, factory); + this.session = session; + } + + /** + * Creates and returns a local adapter for the given remote version. + * + * @param remote remote referecne + * @return local adapter + * @see ClientIterator#getObject(Object) + */ + protected Object getObject(Object remote) { + return getFactory().getVersion(session, (RemoteVersion) remote); + } + + /** + * Returns the next version in this iteration. + * + * @return next version + * @see VersionIterator#nextVersion() + */ + public Version nextVersion() { + return (Version) next(); + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/ClientVersionIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/package.html URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/package.html?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/package.html (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/package.html Mon Jan 2 15:18:30 2006 @@ -0,0 +1,3 @@ + +Local adapters for remote iterators. + Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/client/iterator/package.html ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/ArrayIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/ArrayIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/ArrayIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/ArrayIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,99 @@ +/* + * 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.remote; + +import java.io.Serializable; +import java.util.NoSuchElementException; + +/** + * A simple array-based remote iterator. Used when the iteration is + * short enough for all the elements to be sent over the network in + * one go. + */ +public class ArrayIterator implements RemoteIterator, Serializable { + + /** + * The elements in this iterator. Set to null when + * all elements have been iterated. + */ + private Object[] elements; + + /** + * The position of this iterator. Set to the size of the iterator + * when all elements have been iterated. + */ + private int position; + + /** + * Creates an array-based remote iterator from the given array + * of remote references or serializable objects. + * + * @param elements elements of the iteration + */ + public ArrayIterator(Object[] elements) { + this.elements = elements; + this.position = 0; + } + + /** + * Returns the size of the iterator. + * + * @return length of the iterator + * @see RemoteIterator#getSize() + */ + public long getSize() { + if (elements == null) { + return position; + } else { + return elements.length; + } + } + + /** + * Skips the first items elements in the array. + * {@inheritDoc} + */ + public void skip(long items) + throws IllegalArgumentException, NoSuchElementException { + if (items < 0) { + throw new IllegalArgumentException("Negative skip is not allowed"); + } else if (elements == null || items > elements.length) { + throw new NoSuchElementException("Skipped past the last element"); + } else { + Object[] tmp = new Object[elements.length - (int) items]; + System.arraycopy(elements, (int) items, tmp, 0, tmp.length); + elements = tmp; + position += items; + } + } + + /** + * Returns the underlying array. + * {@inheritDoc} + */ + public Object[] nextObjects() throws IllegalArgumentException { + if (elements == null) { + return null; + } else { + Object[] tmp = elements; + position += elements.length; + elements = null; + return tmp; + } + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/ArrayIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/BufferIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/BufferIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/BufferIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/BufferIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,107 @@ +/* + * 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.remote; + +import java.io.Serializable; +import java.rmi.RemoteException; +import java.util.NoSuchElementException; + +/** + * A buffered remote iterator. Used to transfer a remote iterator reference + * along with a buffer of the first few iterator elements in one network + * transmission. + */ +public class BufferIterator implements RemoteIterator, Serializable { + + /** The element buffer. Set to null when the iterator ends. */ + private Object[] buffer; + + /** Cached size of the iterator. */ + private final long size; + + /** Remote iterator reference. */ + private final RemoteIterator remote; + + /** + * Creates a new buffered remote iterator. + * + * @param buffer first elements in the iterator + * @param size total iterator size + * @param remote reference to the remaining iterator + */ + public BufferIterator(Object[] buffer, long size, RemoteIterator remote) { + this.buffer = buffer; + this.size = size; + this.remote = remote; + } + + /** + * Returns the cached size of the iterator. + * + * @return iterator size, or -1 if unknown + * @see RemoteIterator#getSize() + */ + public long getSize() { + return size; + } + + /** + * Skips the given number of elements. First discards elements from the + * element buffer and only then contacts the remote iterator. + * + * @param items number of items to skip + * @throws IllegalArgumentException if items is negative + * @throws NoSuchElementException if skipped past the last element + * @throws RemoteException on RMI errors + * @see RemoteIterator#skip(long) + */ + public void skip(long items) + throws IllegalArgumentException, NoSuchElementException, + RemoteException { + if (items < 0) { + throw new IllegalArgumentException("Negative skip is not allowed"); + } else if (buffer == null && items > 0) { + throw new NoSuchElementException("Skipped past the last element"); + } else if (items > buffer.length) { + remote.skip(items - buffer.length); + buffer = remote.nextObjects(); + } else { + Object[] tmp = new Object[buffer.length - (int) items]; + System.arraycopy(buffer, (int) items, tmp, 0, tmp.length); + buffer = tmp; + } + } + + /** + * Returns the currently buffered elements and fills in the buffer + * with next elements. + * + * @return buffered elements, or null if the iterator has ended + * @throws RemoteException on RMI errors + * @see RemoteIterator#nextObjects() + */ + public Object[] nextObjects() throws RemoteException { + if (buffer == null) { + return null; + } else { + Object[] tmp = buffer; + buffer = remote.nextObjects(); + return tmp; + } + } + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/BufferIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Added: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteIterator.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteIterator.java?rev=365458&view=auto ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteIterator.java (added) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteIterator.java Mon Jan 2 15:18:30 2006 @@ -0,0 +1,69 @@ +/* + * 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.remote; + +import java.rmi.Remote; +import java.rmi.RemoteException; +import java.util.NoSuchElementException; + +/** + * Remote version of the JCR {@link javax.jcr.RangeIterator} interface. + * Used by the {@link org.apache.jackrabbit.rmi.server.iterator.ServerIterator} and + * {@link org.apache.jackrabbit.rmi.client.iterator.ClientIterator} classes to + * provide transparent RMI access to remote iterators. + *

+ * This interface allows both the client and server side to control the + * amount of buffering used to increase performance. + */ +public interface RemoteIterator extends Remote { + + /** + * Returns the size of the iteration, or -1 if the + * size is unknown. + * + * @return size of the iteration, or -1 if unknown + * @throws RemoteException on RMI errors + * @see javax.jcr.RangeIterator#getSize() + */ + long getSize() throws RemoteException; + + /** + * Skips the given number of elements in this iteration. + * + * @param items number of elements to skip + * @throws NoSuchElementException if skipped past the last element + * @throws RemoteException on RMI errors + * @see javax.jcr.RangeIterator#skip(long) + */ + void skip(long items) throws NoSuchElementException, RemoteException; + + /** + * Returns an array of remote references to the next elements in this + * iterator. Returns null if the end of this iteration has + * been reached. + *

+ * To reduce the amount of remote method calls, this method returns an + * array of one or more elements in this iteration. + * + * @return array of remote references, or null + * @throws IllegalArgumentException if maxItems is not positive + * @throws RemoteException on RMI errors + * @see java.util.Iterator#next() + */ + Object[] nextObjects() throws IllegalArgumentException, RemoteException; + +} Propchange: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteIterator.java ------------------------------------------------------------------------------ svn:eol-style = native Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNode.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNode.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNode.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNode.java Mon Jan 2 15:18:30 2006 @@ -98,8 +98,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteProperty[] getProperties() - throws RepositoryException, RemoteException; + RemoteIterator getProperties() throws RepositoryException, RemoteException; /** * Remote version of the @@ -111,7 +110,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteProperty[] getProperties(String pattern) + RemoteIterator getProperties(String pattern) throws RepositoryException, RemoteException; /** @@ -142,8 +141,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteProperty[] getReferences() - throws RepositoryException, RemoteException; + RemoteIterator getReferences() throws RepositoryException, RemoteException; /** * Remote version of the @@ -153,7 +151,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteNode[] getNodes() throws RepositoryException, RemoteException; + RemoteIterator getNodes() throws RepositoryException, RemoteException; /** * Remote version of the @@ -164,7 +162,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteNode[] getNodes(String pattern) + RemoteIterator getNodes(String pattern) throws RepositoryException, RemoteException; /** @@ -402,7 +400,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteNode[] merge(String workspace, boolean bestEffort) + RemoteIterator merge(String workspace, boolean bestEffort) throws RepositoryException, RemoteException; /** Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNodeTypeManager.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNodeTypeManager.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNodeTypeManager.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteNodeTypeManager.java Mon Jan 2 15:18:30 2006 @@ -69,7 +69,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteNodeType[] getAllNodeTypes() + RemoteIterator getAllNodeTypes() throws RepositoryException, RemoteException; /** @@ -81,7 +81,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteNodeType[] getPrimaryNodeTypes() + RemoteIterator getPrimaryNodeTypes() throws RepositoryException, RemoteException; /** @@ -93,7 +93,7 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteNodeType[] getMixinNodeTypes() + RemoteIterator getMixinNodeTypes() throws RepositoryException, RemoteException; } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteQueryResult.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteQueryResult.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteQueryResult.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteQueryResult.java Mon Jan 2 15:18:30 2006 @@ -51,15 +51,15 @@ * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteRow[] getRows() throws RepositoryException, RemoteException; + RemoteIterator getRows() throws RepositoryException, RemoteException; /** * @see javax.jcr.query.QueryResult#getNodes() * - * @return a NodeIterator + * @return a remote node iterator * @throws RepositoryException on repository errors * @throws RemoteException on RMI errors */ - RemoteNode[] getNodes() throws RepositoryException, RemoteException; + RemoteIterator getNodes() throws RepositoryException, RemoteException; } Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteVersionHistory.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteVersionHistory.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteVersionHistory.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/remote/RemoteVersionHistory.java Mon Jan 2 15:18:30 2006 @@ -72,12 +72,11 @@ * {@link javax.jcr.version.VersionHistory#getAllVersions() VersionHistory.getAllVersions()} * method. * - * @return a VersionIterator object. + * @return remote versions * @throws RepositoryException if an error occurs. * @throws RemoteException on RMI errors */ - RemoteVersion[] getAllVersions() - throws RepositoryException, RemoteException; + RemoteIterator getAllVersions() throws RepositoryException, RemoteException; /** * Remote version of the Modified: incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java URL: http://svn.apache.org/viewcvs/incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java?rev=365458&r1=365457&r2=365458&view=diff ============================================================================== --- incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java (original) +++ incubator/jackrabbit/trunk/contrib/jcr-rmi/src/java/org/apache/jackrabbit/rmi/server/RemoteAdapterFactory.java Mon Jan 2 15:18:30 2006 @@ -21,12 +21,15 @@ 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.Session; import javax.jcr.Workspace; import javax.jcr.lock.Lock; import javax.jcr.nodetype.NodeType; +import javax.jcr.nodetype.NodeTypeIterator; import javax.jcr.nodetype.NodeTypeManager; import javax.jcr.nodetype.NodeDefinition; import javax.jcr.nodetype.PropertyDefinition; @@ -37,12 +40,15 @@ 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.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; @@ -294,4 +300,56 @@ */ RemoteEventCollection getRemoteEvent(long listenerId, EventIterator events) throws RemoteException; + + + /** + * Returns a remote adapter for the given local node iterator. + * + * @param iterator local node iterator + * @return remote iterator adapter + * @throws RemoteException on RMI errors + */ + RemoteIterator getRemoteNodeIterator(NodeIterator iterator) + throws RemoteException; + + /** + * Returns a remote adapter for the given local property iterator. + * + * @param iterator local property iterator + * @return remote iterator adapter + * @throws RemoteException on RMI errors + */ + RemoteIterator getRemotePropertyIterator(PropertyIterator iterator) + throws RemoteException; + + /** + * Returns a remote adapter for the given local version iterator. + * + * @param iterator local version iterator + * @return remote iterator adapter + * @throws RemoteException on RMI errors + */ + RemoteIterator getRemoteVersionIterator(VersionIterator iterator) + throws RemoteException; + + /** + * Returns a remote adapter for the given local node type iterator. + * + * @param iterator local node type iterator + * @return remote iterator adapter + * @throws RemoteException on RMI errors + */ + RemoteIterator getRemoteNodeTypeIterator(NodeTypeIterator iterator) + throws RemoteException; + + /** + * Returns a remote adapter for the given local row iterator. + * + * @param iterator local row iterator + * @return remote iterator adapter + * @throws RemoteException on RMI errors + */ + RemoteIterator getRemoteRowIterator(RowIterator iterator) + throws RemoteException; + }