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
+ *
+ *
+ */
+ }
+
+}