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);