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