Author: schor
Date: Fri Aug 19 13:53:22 2016
New Revision: 1756917

URL: http://svn.apache.org/viewvc?rev=1756917&view=rev
Log:
[UIMA-5063] only do bounds processing when isbounded is true.  Add test case

Modified:
    
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotationIndexImpl.java
    
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
    
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java

Modified: 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotationIndexImpl.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotationIndexImpl.java?rev=1756917&r1=1756916&r2=1756917&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotationIndexImpl.java
 (original)
+++ 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotationIndexImpl.java
 Fri Aug 19 13:53:22 2016
@@ -135,7 +135,7 @@ public class AnnotationIndexImpl <T exte
       return (FSIterator<T>) this.index.iterator();
     }
     // return non-constrained, non-strict, unambiguous iterator
-    boolean strict = true;
+    boolean strict = false;
     boolean isBounded = false;
     return new Subiterator<T>(this.index.iterator(), null, 0, 0, ambiguous, 
strict, isBounded, 
((FSIndexRepositoryImpl.IndexImpl<T>)(this.index)).getFsRepositoryImpl());
   }

Modified: 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java?rev=1756917&r1=1756916&r2=1756917&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
 (original)
+++ 
uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
 Fri Aug 19 13:53:22 2016
@@ -105,7 +105,7 @@ public class Subiterator<T extends Annot
    * @param ambiguous true means normal iteration, 
    *                  false means to skip annotations whose begin lies between 
previous begin (inclusive) and end (exclusive)
    * @param strict true means to skip annotations whose end is greater than 
the bounding end position (ignoring type priorities)
-   * @param isBounded false means its an unambiguous iterator with no bounds 
narrowing; ambiguous taken to be false
+   * @param isBounded false means it's an unambiguous iterator with no bounds 
narrowing; ambiguous taken to be false
    * @param fsIndexRepo the index repository for this iterator
    */
   Subiterator(
@@ -311,7 +311,9 @@ public class Subiterator<T extends Annot
     }
 
     adjustForStrictForward();
-    if (it.isValid() && (it.get().getBegin() > boundingEnd)) {
+    
+    // stop in bounded case if out of bounds going forwards UIMA-5063
+    if (isBounded && it.isValid() && (it.get().getBegin() > boundingEnd)) {
       it.moveToLast();
       it.moveToNext();  // mark invalid
     } else {
@@ -340,7 +342,8 @@ public class Subiterator<T extends Annot
       return;
     }
     
-    if (isValid() && ((FeatureStructureImpl)it.get()).getAddress() == startId) 
{
+    // stop in bounded case if out of bounds going backwards UIMA-5063
+    if (isBounded && isValid() && 
((FeatureStructureImpl)it.get()).getAddress() == startId) {
       it.moveToFirst();
       it.moveToPrevious();  // make it invalid
     } else {

Modified: 
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
URL: 
http://svn.apache.org/viewvc/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java?rev=1756917&r1=1756916&r2=1756917&view=diff
==============================================================================
--- 
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
 (original)
+++ 
uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
 Fri Aug 19 13:53:22 2016
@@ -156,6 +156,8 @@ public class AnnotationIteratorTest exte
   }
 
   public void testIterator1() {
+    
+    
 //   Tokens                +---+
 //                        +---+
 //                       +---+
@@ -168,6 +170,7 @@ public class AnnotationIteratorTest exte
 //   bound4strict                   +------------------+            
 //   sentence4strict                 +-----------------------------+
     
+    
     try {
       this.cas.setDocumentText(text);
     } catch (CASRuntimeException e) {
@@ -191,6 +194,11 @@ public class AnnotationIteratorTest exte
     // for (int i = 0; i < text.length() - 5; i++) {
     // cas.getIndexRepository().addFS(cas.createAnnotation(tokenType, i, i+5));
     // }
+    
+    // create overlapping sentences for unambigious testing
+    //   begin =  0,  5, 10, ...
+    //   end   = 10, 15, 20, ...
+    // non-overlapping:  0-10, 10-20, etc.
     for (int i = 0; i < text.length() - 10; i += 5) {
       ++annotCount;
       ir.addFS(fs = this.cas.createAnnotation(this.sentenceType, i, i + 10));
@@ -264,7 +272,10 @@ public class AnnotationIteratorTest exte
     assertCount("Normal ambiguous annot iterator", annotCount, it);
     
     it = annotIndex.iterator(false);  // false means create an unambiguous 
iterator
-    assertCount("Unambiguous annot iterator", 1, it);  // because of document 
Annotation
+    assertCount("Unambiguous annot iterator", 1, it);  // because of document 
Annotation - spans the whole range
+    
+    it = sentIndex.iterator(false);  //  false means create an unambiguous 
iterator
+    assertCount("Unambigous sentence iterator", 5, it);
     
     AnnotationFS bigBound = this.cas.createAnnotation(this.sentenceType, 10, 
41);
     it = annotIndex.subiterator(bigBound, true, true);  // ambiguous, and 
strict


Reply via email to