[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