[exo-jcr-commits] exo-jcr SVN: r206 - jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene.
do-not-reply at jboss.org
do-not-reply at jboss.org
Sun Oct 4 15:39:27 EDT 2009
Author: skabashnyuk
Date: 2009-10-04 15:39:27 -0400 (Sun, 04 Oct 2009)
New Revision: 206
Modified:
jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIteratorImpl.java
jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ScoreNodeIteratorImpl.java
Log:
EXOJCR-161 : Improved support of TwoWayIterator.
Modified: jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIteratorImpl.java
===================================================================
--- jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIteratorImpl.java 2009-10-04 19:38:09 UTC (rev 205)
+++ jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/NodeIteratorImpl.java 2009-10-04 19:39:27 UTC (rev 206)
@@ -189,7 +189,7 @@
{
throw new IllegalArgumentException("skipNum must not be negative");
}
- scoreNodes.skipBack(skipNum - 1);
+ scoreNodes.skipBack(skipNum + 1);
fetchNext();
}
Modified: jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ScoreNodeIteratorImpl.java
===================================================================
--- jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ScoreNodeIteratorImpl.java 2009-10-04 19:38:09 UTC (rev 205)
+++ jcr/trunk/component/core/src/main/java/org/exoplatform/services/jcr/impl/core/query/lucene/ScoreNodeIteratorImpl.java 2009-10-04 19:39:27 UTC (rev 206)
@@ -16,9 +16,11 @@
*/
package org.exoplatform.services.jcr.impl.core.query.lucene;
+import java.util.ArrayList;
import java.util.Arrays;
import java.util.Collection;
import java.util.Iterator;
+import java.util.ListIterator;
import java.util.NoSuchElementException;
import javax.jcr.RangeIterator;
@@ -27,11 +29,22 @@
* <code>ScoreNodeIteratorImpl</code> implements a {@link ScoreNodeIterator}
* over an array of {@link ScoreNode ScoreNode[]}.
*/
-public class ScoreNodeIteratorImpl implements ScoreNodeIterator{
+public class ScoreNodeIteratorImpl implements ScoreNodeIterator
+{
+ //private final ScoreNode[][] scoreNodes;
+
+ private ListIterator<ScoreNode[]> iterator;
+
+
public ScoreNodeIteratorImpl(ScoreNode[][] scoreNodes)
{
- this(Arrays.asList(scoreNodes));
+
+ iterator = Arrays.asList(scoreNodes).listIterator();
+ //this.scoreNodes = scoreNodes;
+ ///this(Arrays.asList(scoreNodes));
+ this.size = scoreNodes.length;
+ //this.position = -1;
}
/**
@@ -47,54 +60,54 @@
*/
//public static final RangeIterator EMPTY = new RangeIteratorAdapter(Collections.EMPTY_LIST);
- /**
- * The adapted iterator instance.
- */
- private final Iterator iterator;
+ // /**
+ // * The adapted iterator instance.
+ // */
+ // private final Iterator iterator;
/**
* Number of elements in the adapted iterator, or -1 if unknown.
*/
- private long size;
+ private int size;
/**
* Current position of the iterator.
*/
- private long position;
+ // private int position;
- /**
- * Creates an adapter for the given iterator of the given size.
- *
- * @param iterator adapted iterator
- * @param size size of the iterator, or -1 if unknown
- */
- public ScoreNodeIteratorImpl(Iterator iterator, long size)
- {
- this.iterator = iterator;
- this.size = size;
- this.position = 0;
- }
+ // /**
+ // * Creates an adapter for the given iterator of the given size.
+ // *
+ // * @param iterator adapted iterator
+ // * @param size size of the iterator, or -1 if unknown
+ // */
+ // public ScoreNodeIteratorImpl(Iterator iterator, long size)
+ // {
+ // this.iterator = iterator;
+ // this.size = size;
+ // this.position = 0;
+ // }
- /**
- * Creates an adapter for the given iterator of unknown size.
- *
- * @param iterator adapted iterator
- */
- public ScoreNodeIteratorImpl(Iterator iterator)
- {
- this(iterator, -1);
- }
+ // /**
+ // * Creates an adapter for the given iterator of unknown size.
+ // *
+ // * @param iterator adapted iterator
+ // */
+ // public ScoreNodeIteratorImpl(Iterator iterator)
+ // {
+ // this(iterator, -1);
+ // }
+ //
+ // /**
+ // * Creates a {@link RangeIterator} for the given collection.
+ // *
+ // * @param collection the collection to iterate
+ // */
+ // public ScoreNodeIteratorImpl(Collection collection)
+ // {
+ // this(collection.iterator(), collection.size());
+ // }
- /**
- * Creates a {@link RangeIterator} for the given collection.
- *
- * @param collection the collection to iterate
- */
- public ScoreNodeIteratorImpl(Collection collection)
- {
- this(collection.iterator(), collection.size());
- }
-
//-------------------------------------------------------< RangeIterator >
/**
@@ -104,7 +117,7 @@
*/
public long getPosition()
{
- return position;
+ return iterator.nextIndex();
}
/**
@@ -130,6 +143,7 @@
{
throw new IllegalArgumentException("skip(" + n + ")");
}
+
for (long i = 0; i < n; i++)
{
next();
@@ -148,18 +162,19 @@
*/
public boolean hasNext()
{
- if (iterator.hasNext())
- {
- return true;
- }
- else
- {
- if (size == -1)
- {
- size = position;
- }
- return false;
- }
+ // if (iterator.hasNext())
+ // {
+ // return true;
+ // }
+ // else
+ // {
+ // if (size == -1)
+ // {
+ // size = position;
+ // }
+ // return false;
+ // }
+ return iterator.hasNext();
}
/**
@@ -172,20 +187,7 @@
*/
public Object next() throws NoSuchElementException
{
- try
- {
- Object next = iterator.next();
- position++;
- return next;
- }
- catch (NoSuchElementException e)
- {
- if (size == -1)
- {
- size = position;
- }
- throw e;
- }
+ return iterator.next();
}
/**
@@ -197,28 +199,23 @@
*/
public void remove() throws UnsupportedOperationException, IllegalStateException
{
- iterator.remove();
- position--;
- if (size != -1)
- {
- size--;
- }
+ iterator.remove();
+ size--;
}
public void skipBack(long skipNum)
{
if (skipNum < 0)
{
- throw new IllegalArgumentException("skipNum must not be negative");
+ throw new IllegalArgumentException("skip(" + skipNum + ")");
}
- if ((position - skipNum) < 0)
+ if ((iterator.nextIndex() - skipNum) < 0)
{
throw new NoSuchElementException();
}
- if (skipNum > 0)
+ for (long i = 0; i < skipNum; i++)
{
- position -= skipNum + 1;
- next();
+ iterator.previous();
}
}
More information about the exo-jcr-commits
mailing list