org.apache.jackrabbit.rmi.client.iterator
Class ClientIterator

java.lang.Object
  extended by org.apache.jackrabbit.rmi.client.ClientObject
      extended by org.apache.jackrabbit.rmi.client.iterator.ClientIterator
All Implemented Interfaces:
Iterator, RangeIterator
Direct Known Subclasses:
ClientAccessControlPolicyIterator, ClientNodeIterator, ClientNodeTypeIterator, ClientPrincipalIterator, ClientPropertyIterator, ClientRowIterator, ClientVersionIterator

public abstract class ClientIterator
extends ClientObject
implements RangeIterator

A buffering local adapter for the JCR-RMI RemoteIterator interface. This class makes the remote iterator locally available using the JCR RangeIterator interface. The element arrays returned by the remote iterator are buffered locally.

See the subclasses for type-specific versions of this abstract class.


Constructor Summary
ClientIterator(RemoteIterator remote, LocalAdapterFactory factory)
          Creates a local adapter for the given remote iterator.
 
Method Summary
protected abstract  Object getObject(Object remote)
          Returns a local adapter for the given remote object.
 long getPosition()
          Returns the current position within the iterator.
 long getSize()
          Returns the size (the total number of elements) of this iteration.
 boolean hasNext()
          Checks if there are more elements in this iteration.
 Object next()
          Returns the next element in this iteration.
 void remove()
          Not supported.
 void skip(long skipNum)
          Skips the given number of elements in this iteration.
 
Methods inherited from class org.apache.jackrabbit.rmi.client.ClientObject
getFactory, getItem, getNode, getNodeTypeArray
 
Methods inherited from class java.lang.Object
clone, equals, finalize, getClass, hashCode, notify, notifyAll, toString, wait, wait, wait
 

Constructor Detail

ClientIterator

public ClientIterator(RemoteIterator remote,
                      LocalAdapterFactory factory)
Creates a local adapter for the given remote iterator. The element buffer is initially empty.

Parameters:
remote - remote iterator
factory - local adapter factory
Method Detail

getPosition

public long getPosition()
Returns the current position within the iterator.

Specified by:
getPosition in interface RangeIterator
Returns:
current position
See Also:
RangeIterator.getPosition()

getSize

public long getSize()
             throws RemoteRuntimeException
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.

Specified by:
getSize in interface RangeIterator
Returns:
number of elements in the iteration, or -1
Throws:
RemoteRuntimeException - on RMI errors
See Also:
RangeIterator.getSize()

skip

public void skip(long skipNum)
          throws NoSuchElementException,
                 RemoteRuntimeException
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.

Specified by:
skip in interface RangeIterator
Parameters:
skipNum - the number of elements to skip
Throws:
NoSuchElementException - if skipped past the last element
RemoteRuntimeException - on RMI errors
See Also:
RangeIterator.skip(long)

hasNext

public boolean hasNext()
                throws RemoteRuntimeException
Checks if there are more elements in this iteration.

Specified by:
hasNext in interface Iterator
Returns:
true if there are more elements, false otherwise
Throws:
RemoteRuntimeException - on RMI errors
See Also:
Iterator#hasNext()

getObject

protected abstract Object getObject(Object remote)
Returns a local adapter for the given remote object. This abstract method is used by 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.

Parameters:
remote - remote object
Returns:
local adapter

next

public Object next()
            throws NoSuchElementException,
                   RemoteRuntimeException
Returns the next element in this iteration.

Specified by:
next in interface Iterator
Returns:
next element
Throws:
NoSuchElementException - if there are no more elements
RemoteRuntimeException - on RMI errors
See Also:
Iterator#next()

remove

public void remove()
            throws UnsupportedOperationException
Not supported.

Specified by:
remove in interface Iterator
Throws:
UnsupportedOperationException - always thrown
See Also:
Iterator#remove()


Copyright © 2004-2010 The Apache Software Foundation. All Rights Reserved.