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 [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...
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 @@
<!-- Compile the RMI stubs for the JCR-RMI server classes. -->
<postGoal name="java:compile">
<rmic base="${maven.build.dest}" verify="true"
- includes="org/apache/jackrabbit/rmi/server/Server*.class"
+ includes="org/apache/jackrabbit/rmi/server/**/Server*.class"
classpathref="maven.dependency.classpath"/>
</postGoal>
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.
+ * <p>
+ * A <code>null</code> 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.
+ * <p>
+ * A <code>null</code> 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.
* <p>
@@ -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.
- * <p>
- * A <code>null</code> 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.
- * <p>
- * A <code>null</code> 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.
- * <p>
- * A <code>null</code> 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.
- * <p>
- * A <code>null</code> 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.
- * <p>
- * A <code>null</code> 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.
- * <p>
- * A <code>null</code> 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.
- * <p>
- * A <code>null</code> 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.
+ * <p>
+ * A <code>null</code> 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.
+ * <p>
+ * 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 <code>null</code> 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 <code>-1</code> if the size is unknown.
+ * <p>
+ * 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 <code>-1</code>
+ * @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.
+ * <p>
+ * 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 <code>null</code> 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 <code>true</code> if there are more elements,
+ * <code>false</code> 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.
+ * <p>
+ * 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 @@
+<body>
+Local adapters for remote iterators.
+</body>
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 <code>null</code> 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 <code>items</code> 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 <code>null</code> 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 <code>-1</code> 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 <code>items</code> 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 <code>null</code> 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.
+ * <p>
+ * 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 <code>-1</code> if the
+ * size is unknown.
+ *
+ * @return size of the iteration, or <code>-1</code> 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 <code>null</code> if the end of this iteration has
+ * been reached.
+ * <p>
+ * 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 <code>null</code>
+ * @throws IllegalArgumentException if <code>maxItems</code> 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 <code>NodeIterator</code>
+ * @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 <code>VersionIterator</code> 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;
+
}