You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by sc...@apache.org on 2015/11/09 20:39:25 UTC

svn commit: r1713519 - /uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java

Author: schor
Date: Mon Nov  9 19:39:25 2015
New Revision: 1713519

URL: http://svn.apache.org/viewvc?rev=1713519&view=rev
Log:
[UIMA-4664] fix aggregate iterator when copying to copy the underlying iterators; add a toString method to aid debugging

Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java?rev=1713519&r1=1713518&r2=1713519&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_aggregation_common.java Mon Nov  9 19:39:25 2015
@@ -25,6 +25,8 @@ import java.util.NoSuchElementException;
 import org.apache.uima.cas.FSIndex;
 import org.apache.uima.cas.FSIterator;
 import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.Type;
+import org.apache.uima.jcas.cas.TOP;
 
 /**
  * Aggregate several FS iterators.  Simply iterates over one after the other
@@ -50,7 +52,11 @@ class FsIterator_aggregation_common<T ex
   
   FsIterator_aggregation_common(FSIterator<T>[] iterators, FSIndex<T> index) {
     this.iterators = iterators;
+    for (int i = iterators.length - 1; i >=0; i--) {
+      this.iterators[i] = iterators[i].copy();
+    }
     this.index = index;
+    moveToFirst();
   }
   
   public T get() throws NoSuchElementException {
@@ -115,7 +121,8 @@ class FsIterator_aggregation_common<T ex
       return;
     }
     
-    for (int i = lastValidIndex + 1, nbrIt = iterators.length; i < nbrIt; i++) {
+    final int nbrIt = iterators.length;
+    for (int i = lastValidIndex + 1; i < nbrIt; i++) {
       it = iterators[i];
       it.moveToFirst();
       if (it.isValid()) {
@@ -175,7 +182,7 @@ class FsIterator_aggregation_common<T ex
       it.moveToPrevious();  // make it also invalid
     } else {
       T targetFs = get();
-      it.moveTo(get());  // moves to left-most match
+      it.moveTo(targetFs);  // moves to left-most match
       while (targetFs != it.get()) {
         it.moveToNext();
       }
@@ -188,4 +195,14 @@ class FsIterator_aggregation_common<T ex
   public LowLevelIndex<T> ll_getIndex() {
     return (LowLevelIndex<T>) index;
   }  
+  
+  @Override
+  public String toString() {
+    Type type = this.ll_getIndex().getType();
+    StringBuilder sb = new StringBuilder(this.getClass().getSimpleName()).append(":").append(System.identityHashCode(this));
+    sb.append(" over Type: ").append(type.getName()).append(":").append(((TypeImpl)type).getCode());
+    sb.append(", size: ").append(this.ll_indexSize());
+    return sb.toString();
+  }
+
 }