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/05 20:25:11 UTC
svn commit: r1763488 - in
/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src:
main/java/org/apache/uima/cas/ main/java/org/apache/uima/cas/impl/
main/java/org/apache/uima/jcas/cas/ main/resources/org/apache/uima/
test/java/org/apache/uima/cas/test/
Author: schor
Date: Wed Oct 5 20:25:10 2016
New Revision: 1763488
URL: http://svn.apache.org/viewvc?rev=1763488&view=rev
Log:
[UIMA-5115] add support for alternate sources: FSArray and FSList
Modified:
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CAS.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CASRuntimeException.java
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/FsIterator_subtypes_snapshot.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/main/java/org/apache/uima/jcas/cas/FSArray.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
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/CAS.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CAS.java?rev=1763488&r1=1763487&r2=1763488&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CAS.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CAS.java Wed Oct 5 20:25:10 2016
@@ -1106,15 +1106,19 @@ public interface CAS extends AbstractCas
default <T extends FeatureStructure> SelectFSs<T> select() {
return new SelectFSs_impl<>(this);
}
+
default <T extends FeatureStructure> SelectFSs<T> select(Type type) {
return new SelectFSs_impl<>(this).type(type);
}
+
default <T extends FeatureStructure> SelectFSs<T> select(Class<T> clazz) {
return new SelectFSs_impl<>(this).type(clazz);
}
+
default <T extends FeatureStructure> SelectFSs<T> select(int jcasType) {
return new SelectFSs_impl<>(this).type(jcasType);
}
+
default <T extends FeatureStructure> SelectFSs<T> select(String fullyQualifiedTypeName) {
return new SelectFSs_impl<>(this).type(fullyQualifiedTypeName);
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CASRuntimeException.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CASRuntimeException.java?rev=1763488&r1=1763487&r2=1763488&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CASRuntimeException.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/CASRuntimeException.java Wed Oct 5 20:25:10 2016
@@ -298,7 +298,10 @@ public class CASRuntimeException extends
/** CAS has more than 1 instance of ''{0}''{1}.*/
public static final String SELECT_GET_TOO_MANY_INSTANCES = "SELECT_GET_TOO_MANY_INSTANCES";
-
+
+ /** Select with FSList or FSArray may not specify bounds, starting position, following, or preceding. */
+ public static final String SELECT_ALT_SRC_INVALID = "SELECT_ALT_SRC_INVALID";
+
/** Index "{0}" must be an AnnotationIndex. */
public static final String ANNOTATION_INDEX_REQUIRED = "ANNOTATION_INDEX_REQUIRED";
/**
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=1763488&r1=1763487&r2=1763488&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 Wed Oct 5 20:25:10 2016
@@ -200,4 +200,5 @@ public interface SelectFSs<T extends Fea
static <N extends FeatureStructure> SelectFSs<N> sselect(FSIndex<N> index) {
return index.select();
}
+
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java?rev=1763488&r1=1763487&r2=1763488&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/cas/impl/FsIterator_subtypes_snapshot.java Wed Oct 5 20:25:10 2016
@@ -127,7 +127,7 @@ public class FsIterator_subtypes_snapsho
public void moveTo(FeatureStructure fs) {
if (is_unordered) {
int i = 0;
- while ((i < snapshot.length) && indexForComparator.compare(snapshot[i], fs) < 0) {
+ while ((i < snapshot.length) && compare(snapshot[i], fs) < 0) {
i++;
}
pos = i;
@@ -144,7 +144,7 @@ public class FsIterator_subtypes_snapsho
} else {
// found an equal. need to move to leftmost
c--;
- while ((c >= 0) && indexForComparator.compare(snapshot[c], fs) == 0) {
+ while ((c >= 0) && compare(snapshot[c], fs) == 0) {
c--;
}
pos = c + 1;
@@ -180,6 +180,8 @@ public class FsIterator_subtypes_snapsho
}
public int compare(FeatureStructure fs1, FeatureStructure fs2) {
- return this.indexForComparator.compare(fs1, fs2);
+ return (null == this.indexForComparator)
+ ? (fs1.equals(fs2) ? 0 : -1)
+ : this.indexForComparator.compare(fs1, fs2);
}
}
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=1763488&r1=1763487&r2=1763488&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 Wed Oct 5 20:25:10 2016
@@ -55,6 +55,10 @@ import org.apache.uima.cas.Type;
import org.apache.uima.cas.impl.Subiterator.BoundsUse;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.jcas.cas.EmptyFSList;
+import org.apache.uima.jcas.cas.FSArray;
+import org.apache.uima.jcas.cas.FSList;
+import org.apache.uima.jcas.cas.NonEmptyFSList;
import org.apache.uima.jcas.cas.TOP;
import org.apache.uima.jcas.impl.JCasImpl;
import org.apache.uima.jcas.tcas.Annotation;
@@ -74,6 +78,9 @@ public class SelectFSs_impl <T extends F
private int shift;
private int limit = -1;
+ private FSArray sourceFSArray = null; // alternate source
+ private FSList sourceFSList = null; // alternate source
+
private boolean isTypePriority = false;
private boolean isPositionUsesType = false;
private boolean isSkipEquals = false; // for boundsUse only
@@ -87,6 +94,7 @@ public class SelectFSs_impl <T extends F
private boolean isPreceding = false;
private boolean isNullOkSpecified = false; // for complex defaulting of get(), get(n)
+ private boolean isAltSource = false;
private BoundsUse boundsUse = null;
@@ -106,12 +114,19 @@ public class SelectFSs_impl <T extends F
this.view = (CASImpl) cas.getLowLevelCAS();
this.jcas = (JCasImpl) view.getJCas();
}
+
+ public SelectFSs_impl(FSArray source) {
+ this(source._casView);
+ isAltSource = true;
+ sourceFSArray = source;
+ }
- public SelectFSs_impl(CAS cas, Type type) {
- this(cas);
- this.ti = (TypeImpl) type;
+ public SelectFSs_impl(FSList source) {
+ this(source._casView);
+ isAltSource = true;
+ sourceFSList = source;
}
-
+
/************************************************
* Builders
************************************************/
@@ -439,6 +454,8 @@ public class SelectFSs_impl <T extends F
if (boundsUse == null) {
boundsUse = BoundsUse.notBounded;
}
+
+ maybeValidateAltSource();
final boolean isUseAnnotationIndex =
((index != null) && (index instanceof AnnotationIndex)) ||
@@ -471,6 +488,20 @@ public class SelectFSs_impl <T extends F
}
+ private void maybeValidateAltSource() {
+ if (!isAltSource) return;
+
+ if (index != null ||
+ boundsUse != BoundsUse.notBounded ||
+ isAllViews ||
+ isFollowing ||
+ isPreceding ||
+ startingFs != null) {
+ /** Select with FSList or FSArray may not specify bounds, starting position, following, or preceding. */
+ throw new CASRuntimeException(CASRuntimeException.SELECT_ALT_SRC_INVALID);
+ }
+ }
+
private void incr(FSIterator<T> it) {
if (isBackwards) {
it.moveToPrevious();
@@ -583,7 +614,13 @@ public class SelectFSs_impl <T extends F
if (null == idx) {
// no bounds, not ordered
// type could be null
- return v.indexRepository.getAllIndexedFS(ti);
+ // could be alternate source
+
+ if (isAltSource) {
+ return altSourceIterator();
+ } else {
+ return v.indexRepository.getAllIndexedFS(ti);
+ }
}
final boolean isIndexOrdered = idx.getIndexingStrategy() == FSIndex.SORTED_INDEX;
@@ -622,6 +659,36 @@ public class SelectFSs_impl <T extends F
return it;
}
+ private FSIterator<T> altSourceIterator() {
+ T[] filtered;
+ if (sourceFSList != null) {
+ List<T> filteredItems = new ArrayList<T>();
+ FSList fsl = sourceFSList;
+ while (!(fsl instanceof EmptyFSList)) {
+ NonEmptyFSList nefsl = (NonEmptyFSList) fsl;
+ T item = (T) nefsl.getHead();
+ if ((isNullOK || null != item) &&
+ ti.subsumes((TypeImpl)item.getType())) {
+ filteredItems.add(item);
+ }
+ fsl = nefsl.getTail();
+ }
+ filtered = filteredItems.toArray((T[]) Array.newInstance(FeatureStructure.class, filteredItems.size()));
+ } else {
+ List<T> filteredItems = new ArrayList<T>();
+ for (TOP item : sourceFSArray._getTheArray()) {
+ if (!isNullOK && null == item) {
+ continue; // null items may be skipped
+ }
+ if (ti.subsumes((TypeImpl)item.getType())) {
+ filteredItems.add((T)item);
+ }
+ }
+ filtered = filteredItems.toArray((T[]) Array.newInstance(FeatureStructure.class, filteredItems.size()));
+ }
+ return new FsIterator_subtypes_snapshot<T>(filtered, null, true); // items not sorted
+ }
+
@Override
public Iterator<T> iterator() {
return fsIterator();
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java?rev=1763488&r1=1763487&r2=1763488&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSArray.java Wed Oct 5 20:25:10 2016
@@ -22,7 +22,10 @@ package org.apache.uima.jcas.cas;
import org.apache.uima.cas.ArrayFS;
import org.apache.uima.cas.CASRuntimeException;
import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.SelectFSs;
+import org.apache.uima.cas.Type;
import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.SelectFSs_impl;
import org.apache.uima.cas.impl.TypeImpl;
import org.apache.uima.jcas.JCas;
import org.apache.uima.jcas.JCasRegistry;
@@ -208,5 +211,54 @@ public final class FSArray extends TOP i
FSArray bv = (FSArray) v;
System.arraycopy(bv.theArray, 0, theArray, 0, theArray.length);
}
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select() {
+ return new SelectFSs_impl<>(this);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this type
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(Type filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this JCas class
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(Class<T> filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this JCas class's type
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(int filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this type (fully qualifined type name)
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(String filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+ public static FSArray create(JCas jcas, FeatureStructure[] a) {
+ FSArray fsa = new FSArray(jcas, a.length);
+ fsa.copyFromArray(a, 0, 0, a.length);
+ return fsa;
+ }
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java?rev=1763488&r1=1763487&r2=1763488&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/FSList.java Wed Oct 5 20:25:10 2016
@@ -19,8 +19,13 @@
package org.apache.uima.jcas.cas;
+import org.apache.uima.cas.FeatureStructure;
+import org.apache.uima.cas.SelectFSs;
+import org.apache.uima.cas.Type;
import org.apache.uima.cas.impl.CASImpl;
+import org.apache.uima.cas.impl.SelectFSs_impl;
import org.apache.uima.cas.impl.TypeImpl;
+import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.jcas.JCas;
public abstract class FSList extends TOP implements CommonList {
@@ -48,5 +53,58 @@ public abstract class FSList extends TOP
NonEmptyFSList node = new NonEmptyFSList(this._casView.getTypeSystemImpl().fsNeListType, this._casView);
return node;
}
-
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select() {
+ return new SelectFSs_impl<>(this);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this type
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(Type filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this JCas class
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(Class<T> filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this JCas class's type
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(int filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+
+ /**
+ * Treat an FSArray as a source for SelectFSs.
+ * @param filterByType only includes elements of this type (fully qualifined type name)
+ * @return a new instance of SelectFSs
+ */
+ public <T extends FeatureStructure> SelectFSs<T> select(String filterByType) {
+ return new SelectFSs_impl<>(this).type(filterByType);
+ }
+
+ public static FSList create(JCas jcas, FeatureStructure[] a) {
+ NonEmptyFSList fslhead = new NonEmptyFSList(jcas);
+ NonEmptyFSList last = fslhead;
+ for (FeatureStructure item : a) {
+ last = last.add(item);
+ }
+ last.setTail(jcas.getCasImpl().getEmptyFSList());
+ return fslhead.getTail();
+ }
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java?rev=1763488&r1=1763487&r2=1763488&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/java/org/apache/uima/jcas/cas/NonEmptyFSList.java Wed Oct 5 20:25:10 2016
@@ -20,6 +20,7 @@
package org.apache.uima.jcas.cas;
import org.apache.uima.cas.CASRuntimeException;
+import org.apache.uima.cas.FeatureStructure;
import org.apache.uima.cas.impl.CASImpl;
import org.apache.uima.cas.impl.TypeImpl;
import org.apache.uima.cas.impl.TypeSystemImpl;
@@ -89,10 +90,11 @@ public class NonEmptyFSList extends FSLi
public TOP getHead() { return _getFeatureValueNc(_FI_head); }
/* setter for head * */
- public void setHead(TOP v) {
- if (v != null && _casView.getBaseCAS() != v._casView.getBaseCAS()) {
+ public void setHead(FeatureStructure v) {
+ TOP vt = (TOP) v;
+ if (vt != null && _casView.getBaseCAS() != vt._casView.getBaseCAS()) {
/** Feature Structure {0} belongs to CAS {1}, may not be set as the value of an array or list element in a different CAS {2}.*/
- throw new CASRuntimeException(CASRuntimeException.FS_NOT_MEMBER_OF_CAS, v, v._casView, _casView);
+ throw new CASRuntimeException(CASRuntimeException.FS_NOT_MEMBER_OF_CAS, vt, vt._casView, _casView);
}
_setFeatureValueNcWj(_FI_head, v); }
@@ -124,4 +126,18 @@ public class NonEmptyFSList extends FSLi
public EmptyFSList getEmptyList() {
return this._casView.getEmptyFSList();
}
+
+ /**
+ * inserts the new item as a new NonEmpty FSList node following this item
+ * @param item to be inserted
+ * @return the NonEmptyFSList node created
+ */
+ public NonEmptyFSList add(FeatureStructure item) {
+ FSList tail = getTail();
+ NonEmptyFSList node = createNonEmptyNode();
+ node.setHead(item);
+ node.setTail(tail);
+ setTail(node);
+ return node;
+ }
}
Modified: uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties
URL: http://svn.apache.org/viewvc/uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties?rev=1763488&r1=1763487&r2=1763488&view=diff
==============================================================================
--- uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties (original)
+++ uima/uimaj/branches/experiment-v3-jcas/uimaj-core/src/main/resources/org/apache/uima/UIMAException_Messages.properties Wed Oct 5 20:25:10 2016
@@ -604,6 +604,7 @@ FS_NOT_MEMBER_OF_CAS = Feature Structure
ILLEGAL_ADD_TO_INDEX_IN_BASE_CAS = Illegal operation - cannot add Feature Structure {0} to base CAS {1}.
SELECT_GET_NO_INSTANCES = CAS does not contain any ''{0}'' instances {1}.
SELECT_GET_TOO_MANY_INSTANCES = CAS has more than 1 instance of ''{0}''{1}.
+SELECT_ALT_SRC_INVALID = Select with FSList or FSArray may not specify bounds, starting position, following, or preceding.
ANNOTATION_INDEX_REQUIRED = Index "{0}" must be an AnnotationIndex.
#------------------------------------------------------------------------
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=1763488&r1=1763487&r2=1763488&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 Wed Oct 5 20:25:10 2016
@@ -33,8 +33,15 @@ import org.apache.uima.cas.Feature;
import org.apache.uima.cas.SelectFSs;
import org.apache.uima.cas.Type;
import org.apache.uima.cas.TypeSystem;
+import org.apache.uima.cas.impl.CASImpl;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.jcas.JCas;
+import org.apache.uima.jcas.cas.EmptyFSList;
+import org.apache.uima.jcas.cas.FSArray;
+import org.apache.uima.jcas.cas.FSList;
+import org.apache.uima.jcas.cas.NonEmptyFSList;
+import org.apache.uima.jcas.cas.TOP;
import org.apache.uima.jcas.tcas.Annotation;
import junit.framework.TestCase;
@@ -283,6 +290,18 @@ public class AnnotationIteratorTest exte
assertCount("Normal ambiguous select annot iterator", annotCount, select_it);
assertEquals(annotCount, sselect(annotIndex).toArray().length); // stream op
assertEquals(annotCount, sselect(annotIndex).asArray(AnnotationFS.class).length); // select op
+
+ AnnotationFS[] tokensAndSentences = sselect(annotIndex).asArray(AnnotationFS.class);
+ JCas jcas = cas.getJCas();
+ FSArray fsa = FSArray.create(jcas, tokensAndSentences);
+ NonEmptyFSList fslhead = (NonEmptyFSList) FSList.create(jcas, tokensAndSentences);
+
+ select_it = fsa.<AnnotationFS>select().fsIterator();
+ assertCount("fsa ambiguous select annot iterator", annotCount, select_it);
+
+ select_it = fslhead.<AnnotationFS>select().fsIterator();
+ assertCount("fslhead ambiguous select annot iterator", annotCount, select_it);
+
// backwards
select_it = sselect(annotIndex).backwards().fsIterator();
assertCount("Normal select backwards ambiguous annot iterator", annotCount, select_it);
@@ -426,6 +445,14 @@ public class AnnotationIteratorTest exte
assertCountLimit("Following", 2, select_it);
select_it = sselect(annotIndex).following(2, 39).backwards().limit(2).fsIterator();
assertCountLimit("Following", 2, select_it);
+
+ select_it = fsa.<AnnotationFS>select(sentenceType).fsIterator();
+ assertCount("select source array", 11, select_it);
+ select_it = fslhead.<AnnotationFS>select(sentenceType).fsIterator();
+ assertCount("select source array", 11, select_it);
+
+
+
}
private String flatStateMsg(String s) {