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 2016/10/03 19:52:41 UTC

svn commit: r1763203 - in /uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src: main/java/org/apache/uima/cas/ main/java/org/apache/uima/cas/impl/ test/java/org/apache/uima/cas/test/

Author: schor
Date: Mon Oct  3 19:52:41 2016
New Revision: 1763203

URL: http://svn.apache.org/viewvc?rev=1763203&view=rev
Log:
[UIMA-5115] make asArray and asList take a class argument - needed to construct the resulting array.

Added:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotStream.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/SelectTest.java
Modified:
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
    uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java?rev=1763203&r1=1763202&r2=1763203&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/SelectFSs.java Mon Oct  3 19:52:41 2016
@@ -165,8 +165,8 @@ public interface SelectFSs<T extends Fea
   // ---------------------------------
   FSIterator<T> fsIterator();
   Iterator<T> iterator();
-  List<T> asList();
-  T[] asArray();
+  List<T> asList(Class<T> clazz);
+  T[] asArray(Class<T> clazz);
   Spliterator<T> spliterator();
   
   // returning one item

Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotStream.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotStream.java?rev=1763203&view=auto
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotStream.java (added)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/AnnotStream.java Mon Oct  3 19:52:41 2016
@@ -0,0 +1,334 @@
+/*
+ * Licensed to the Apache Software Foundation (ASF) under one
+ * or more contributor license agreements.  See the NOTICE file
+ * distributed with this work for additional information
+ * regarding copyright ownership.  The ASF licenses this file
+ * to you under the Apache License, Version 2.0 (the
+ * "License"); you may not use this file except in compliance
+ * with the License.  You may obtain a copy of the License at
+ * 
+ *   http://www.apache.org/licenses/LICENSE-2.0
+ * 
+ * Unless required by applicable law or agreed to in writing,
+ * software distributed under the License is distributed on an
+ * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
+ * KIND, either express or implied.  See the License for the
+ * specific language governing permissions and limitations
+ * under the License.
+ */
+
+package org.apache.uima.cas.impl;
+
+import java.util.Comparator;
+import java.util.Iterator;
+import java.util.Optional;
+import java.util.Spliterator;
+import java.util.function.BiConsumer;
+import java.util.function.BiFunction;
+import java.util.function.BinaryOperator;
+import java.util.function.Consumer;
+import java.util.function.Function;
+import java.util.function.IntFunction;
+import java.util.function.Predicate;
+import java.util.function.Supplier;
+import java.util.function.ToDoubleFunction;
+import java.util.function.ToIntFunction;
+import java.util.function.ToLongFunction;
+import java.util.stream.Collector;
+import java.util.stream.DoubleStream;
+import java.util.stream.IntStream;
+import java.util.stream.LongStream;
+import java.util.stream.Stream;
+
+import org.apache.uima.cas.Type;
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.jcas.cas.TOP;
+import org.apache.uima.jcas.impl.JCasImpl;
+
+/**
+ * A builder class for streams over Annotation Indexes
+ * Use:
+ *   AnnotStream as = new AnnotStream( optional args );
+ *   as.<configure methods and args>;  // chained
+ *     e.g. reverse(), boundedBy(fs), strict(true), unambiguous(true), typePriorities(false)
+ *     
+ *   as.stream() - followed by normal stream operations
+ *   as.spliterator()
+ */
+public class AnnotStream <T extends AnnotationFS> implements Stream<T> {
+
+  private final CASImpl cas;
+  private TypeImpl type;
+  private boolean isReverse;
+  private boolean isStrict;
+  private boolean isUnambiguous;
+  private boolean isUseTypePriorities;
+  private TOP boundingFs;
+  
+  AnnotStream(FsIndex_singletype fsi) {
+    this.cas = fsi.casImpl;
+    this.type = fsi.getTypeImpl();
+  }
+  
+  public AnnotStream reverse() {return reverse(true);}
+  public AnnotStream reverse(boolean b) {isReverse = b; return this;}
+  
+  public AnnotStream strict() { return strict(true); }
+  public AnnotStream strict(boolean b) {isStrict = b; return this;}
+
+  public AnnotStream useTypePriorities() { return useTypePriorities(true); }
+  public AnnotStream useTypePriorities(boolean b) {isUseTypePriorities = b; return this;}
+
+  public AnnotStream boundingFs(TOP fs) { boundingFs = fs; return this;}
+
+  /*************************************************
+   * Stream methods
+   *************************************************/
+  @Override
+  public Iterator<T> iterator() {return null;
+//  maybeMakeStream().iterator();
+  }
+
+//  @Override
+//  public Spliterator<T> spliterator() {
+//    // TODO Auto-generated method stub
+//    return null;
+//  }
+
+  @Override
+  public boolean isParallel() {
+    // TODO Auto-generated method stub
+    return false;
+  }
+
+  @Override
+  public Stream<T> sequential() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> parallel() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> unordered() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> onClose(Runnable closeHandler) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public void close() {
+    // TODO Auto-generated method stub
+    
+  }
+
+  @Override
+  public Stream<T> filter(Predicate<? super T> predicate) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public <R> Stream<R> map(Function<? super T, ? extends R> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public IntStream mapToInt(ToIntFunction<? super T> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public LongStream mapToLong(ToLongFunction<? super T> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public DoubleStream mapToDouble(ToDoubleFunction<? super T> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public <R> Stream<R> flatMap(Function<? super T, ? extends Stream<? extends R>> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public IntStream flatMapToInt(Function<? super T, ? extends IntStream> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public LongStream flatMapToLong(Function<? super T, ? extends LongStream> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public DoubleStream flatMapToDouble(Function<? super T, ? extends DoubleStream> mapper) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> distinct() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> sorted() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> sorted(Comparator<? super T> comparator) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> peek(Consumer<? super T> action) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> limit(long maxSize) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Stream<T> skip(long n) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public void forEach(Consumer<? super T> action) {
+    // TODO Auto-generated method stub
+    
+  }
+
+  @Override
+  public void forEachOrdered(Consumer<? super T> action) {
+    // TODO Auto-generated method stub
+    
+  }
+
+  @Override
+  public Object[] toArray() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public <A> A[] toArray(IntFunction<A[]> generator) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public T reduce(T identity, BinaryOperator<T> accumulator) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Optional<T> reduce(BinaryOperator<T> accumulator) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public <U> U reduce(U identity, BiFunction<U, ? super T, U> accumulator,
+      BinaryOperator<U> combiner) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public <R> R collect(Supplier<R> supplier, BiConsumer<R, ? super T> accumulator,
+      BiConsumer<R, R> combiner) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public <R, A> R collect(Collector<? super T, A, R> collector) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Optional<T> min(Comparator<? super T> comparator) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Optional<T> max(Comparator<? super T> comparator) {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public long count() {
+    // TODO Auto-generated method stub
+    return 0;
+  }
+
+  @Override
+  public boolean anyMatch(Predicate<? super T> predicate) {
+    // TODO Auto-generated method stub
+    return false;
+  }
+
+  @Override
+  public boolean allMatch(Predicate<? super T> predicate) {
+    // TODO Auto-generated method stub
+    return false;
+  }
+
+  @Override
+  public boolean noneMatch(Predicate<? super T> predicate) {
+    // TODO Auto-generated method stub
+    return false;
+  }
+
+  @Override
+  public Optional<T> findFirst() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Optional<T> findAny() {
+    // TODO Auto-generated method stub
+    return null;
+  }
+
+  @Override
+  public Spliterator<T> spliterator() {
+    // TODO Auto-generated method stub
+    return null;
+  }  
+  
+}

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java?rev=1763203&r1=1763202&r2=1763203&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/SelectFSs_impl.java Mon Oct  3 19:52:41 2016
@@ -19,6 +19,7 @@
 
 package org.apache.uima.cas.impl;
 
+import java.lang.reflect.Array;
 import java.util.ArrayList;
 import java.util.Arrays;
 import java.util.Comparator;
@@ -581,8 +582,8 @@ public class SelectFSs_impl <T extends F
    * @return
    */
   @Override
-  public List<T> asList() {
-    T[] a = asArray();
+  public List<T> asList(Class<T> clazz) {
+    T[] a = asArray(clazz);
     return Arrays.asList(a);
   }
   
@@ -590,13 +591,16 @@ public class SelectFSs_impl <T extends F
    * @see org.apache.uima.cas.SelectFSs#asArray()
    */
   @Override
-  public T[] asArray() {
+  public T[] asArray(Class<T> clazz) {
     List<T> al = new ArrayList<>();
     FSIterator<T> it = fsIterator();
     while (it.isValid()) {
       al.add(it.getNvc());
+      it.moveToNextNvc();
     }
-    return (T[]) al.toArray();
+    
+    T[] r = (T[]) Array.newInstance(clazz, al.size());
+    return al.toArray(r);
   }
 
   /**

Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java?rev=1763203&r1=1763202&r2=1763203&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/AnnotationIteratorTest.java Mon Oct  3 19:52:41 2016
@@ -276,6 +276,8 @@ public class AnnotationIteratorTest exte
 //      FSIndexFlat.enabled ? it instanceof FSIndexFlat.FSIteratorFlat : it instanceof FSIteratorWrapper);   
     assertCount("Normal ambiguous annot iterator", annotCount, it);
     assertCount("Normal ambiguous select annot iterator", annotCount, select_it);
+    assertEquals(annotCount, SelectFSs.sselect(annotIndex).toArray().length);  // stream op
+    assertEquals(annotCount, SelectFSs.sselect(annotIndex).asArray(AnnotationFS.class).length);  // select op
     
     it = annotIndex.iterator(false);  // false means create an unambiguous iterator
     assertCount("Unambiguous annot iterator", 1, it);  // because of document Annotation - spans the whole range

Added: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/SelectTest.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/SelectTest.java?rev=1763203&view=auto
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/SelectTest.java (added)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/test/java/org/apache/uima/cas/test/SelectTest.java Mon Oct  3 19:52:41 2016
@@ -0,0 +1,68 @@
+package org.apache.uima.cas.test;
+
+import static org.junit.Assert.*;
+
+import org.apache.uima.cas.Type;
+import org.junit.AfterClass;
+import org.junit.BeforeClass;
+import org.junit.Test;
+
+public class SelectTest {
+  
+  private static Type A1;
+
+  @BeforeClass
+  public static void setUpBeforeClass() throws Exception {
+    /* Setup the type system, the CAS with data 
+     *   Annotation types:  
+     *     A1
+     *       A1a  - subtype
+     *     A2
+     *     A3
+     *       type order A1, A2, A3
+     *   
+     *   non-annotation types:
+     *     T1
+     *       T1a
+     *     T2
+     *     T3
+     *       type order T1, T2, T3   sortkey: int
+     *  
+     *   Indexes over non-annotation types:
+     *     bag, set, sorted
+     *      
+     *   Instances: some have same keys so set is tested.  
+     *     
+     *     
+     */
+    
+    
+    
+  }
+
+  @AfterClass
+  public static void tearDownAfterClass() throws Exception {
+  }
+
+  @Test
+  public void test() {
+    
+    /* Select testing
+     *   Test with cas, jcas, fsArray, fsList, index
+     *   
+     *   Test with type as positional, as keyword
+     *   
+     *   
+     */
+    
+    /* non-annotation testing
+     *   bag, set, sorted - count, try T1, T1a
+     * 
+     *   For set and sorted, test order and backwards
+     *     For bag, confirm backwards is ignored  
+     * 
+     *   
+     */
+  }
+
+}