You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by tw...@apache.org on 2009/07/17 10:45:49 UTC
svn commit: r795013 - in /incubator/uima/uimaj/trunk/uimaj-core/src:
main/java/org/apache/uima/cas/impl/ test/java/org/apache/uima/cas/test/
Author: twgoetz
Date: Fri Jul 17 08:45:49 2009
New Revision: 795013
URL: http://svn.apache.org/viewvc?rev=795013&view=rev
Log:
UIMA-1441: Correct use of Collection.binarySearch() in UnambiguousIteratorImpl.
https://issues.apache.org/jira/browse/UIMA-1441
Modified:
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIteratorImplBase.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/UnambiguousIteratorImpl.java
incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/SubiteratorTest.java
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIteratorImplBase.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIteratorImplBase.java?rev=795013&r1=795012&r2=795013&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIteratorImplBase.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/FSIteratorImplBase.java Fri Jul 17 08:45:49 2009
@@ -19,8 +19,11 @@
package org.apache.uima.cas.impl;
+import java.util.Comparator;
+
import org.apache.uima.cas.FSIterator;
import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.text.AnnotationIndex;
/**
* Base class for FSIterator implementations. Defines the hasNext, next, and remove methods required
@@ -30,6 +33,23 @@
*/
public abstract class FSIteratorImplBase implements FSIterator {
+ // Jira UIMA-464: add annotation comparator to be able to use Collections.binarySearch() on
+ // annotation list.
+ protected static class AnnotationComparator implements Comparator<FeatureStructure> {
+
+ private AnnotationIndex index;
+
+ protected AnnotationComparator(AnnotationIndex index) {
+ super();
+ this.index = index;
+ }
+
+ public int compare(FeatureStructure fs1, FeatureStructure fs2) {
+ return this.index.compare(fs1, fs2);
+ }
+
+ }
+
/*
* (non-Javadoc)
*
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java?rev=795013&r1=795012&r2=795013&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/Subiterator.java Fri Jul 17 08:45:49 2009
@@ -37,23 +37,6 @@
public class Subiterator extends FSIteratorImplBase {
- // Jira UIMA-464: add annotation comparator to be able to use Collections.binarySearch() on
- // annotation list.
- private static class AnnotationComparator implements Comparator {
-
- AnnotationIndex index;
-
- private AnnotationComparator(AnnotationIndex index) {
- super();
- this.index = index;
- }
-
- public int compare(Object fs1, Object fs2) {
- return this.index.compare((FeatureStructure) fs1, (FeatureStructure) fs2);
- }
-
- }
-
private ArrayList list;
private int pos;
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/UnambiguousIteratorImpl.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/UnambiguousIteratorImpl.java?rev=795013&r1=795012&r2=795013&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/UnambiguousIteratorImpl.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/main/java/org/apache/uima/cas/impl/UnambiguousIteratorImpl.java Fri Jul 17 08:45:49 2009
@@ -21,6 +21,8 @@
import java.util.ArrayList;
import java.util.Collections;
+import java.util.Comparator;
+import java.util.List;
import java.util.NoSuchElementException;
import org.apache.uima.cas.FSIterator;
@@ -38,10 +40,12 @@
*/
public class UnambiguousIteratorImpl extends FSIteratorImplBase {
- private ArrayList list;
+ private List<FeatureStructure> list;
private int pos;
+ private Comparator<FeatureStructure> annotationComparator;
+
private UnambiguousIteratorImpl() {
super();
this.pos = 0;
@@ -52,7 +56,7 @@
*/
public UnambiguousIteratorImpl(FSIterator it) {
this();
- this.list = new ArrayList();
+ this.list = new ArrayList<FeatureStructure>();
it.moveToFirst();
if (!it.isValid()) {
return;
@@ -81,7 +85,7 @@
private void initUnambiguousSubiterator(FSIterator it, final int start, final int end,
final boolean strict) {
- this.list = new ArrayList();
+ this.list = new ArrayList<FeatureStructure>();
it.moveToFirst();
// Skip annotations with begin positions before the given start
// position.
@@ -136,7 +140,7 @@
*/
public FeatureStructure get() throws NoSuchElementException {
if (isValid()) {
- return (FeatureStructure) this.list.get(this.pos);
+ return this.list.get(this.pos);
}
throw new NoSuchElementException();
}
@@ -183,13 +187,22 @@
* @see org.apache.uima.cas.FSIterator#moveTo(org.apache.uima.cas.FeatureStructure)
*/
public void moveTo(FeatureStructure fs) {
- final int found = Collections.binarySearch(this.list, fs);
+ final int found = Collections.binarySearch(this.list, fs, getAnnotationComparator(fs));
if (found >= 0) {
this.pos = found;
} else {
this.pos = (-found) - 1;
}
}
+
+ private final Comparator<FeatureStructure> getAnnotationComparator(FeatureStructure fs) {
+ if (this.annotationComparator == null) {
+ this.annotationComparator = new AnnotationComparator(fs.getCAS().getAnnotationIndex());
+ }
+ return this.annotationComparator;
+ }
+
+
/*
* (non-Javadoc)
Modified: incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/SubiteratorTest.java
URL: http://svn.apache.org/viewvc/incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/SubiteratorTest.java?rev=795013&r1=795012&r2=795013&view=diff
==============================================================================
--- incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/SubiteratorTest.java (original)
+++ incubator/uima/uimaj/trunk/uimaj-core/src/test/java/org/apache/uima/cas/test/SubiteratorTest.java Fri Jul 17 08:45:49 2009
@@ -28,6 +28,7 @@
import org.apache.uima.analysis_engine.AnalysisEngine;
import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
import org.apache.uima.cas.FSIterator;
+import org.apache.uima.cas.impl.UnambiguousIteratorImpl;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.cas.text.AnnotationIndex;
import org.apache.uima.jcas.JCas;
@@ -104,6 +105,8 @@
FSIterator tokenIterator = tokenIndex.subiterator(sentence);
AnnotationFS token = (AnnotationFS) tokenIndex.iterator().next();
tokenIterator.moveTo(token); //throws ClassCastException
+ UnambiguousIteratorImpl it = new UnambiguousIteratorImpl(tokenIndex.iterator());
+ it.moveTo(token);
} catch (AnalysisEngineProcessException e) {
e.printStackTrace();
assertTrue(false);