[UIMA-5929] Add exists() method to CasUtil

- Added CasUtil.exists() method
- Added corresponding unit test
diff --git a/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java b/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
index 869faee..dc97d5e 100644
--- a/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
+++ b/uimafit-core/src/main/java/org/apache/uima/fit/util/CasUtil.java
@@ -46,6 +46,7 @@
 import org.apache.uima.cas.impl.Subiterator;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.jcas.cas.TOP;
 import org.apache.uima.jcas.tcas.Annotation;
 
 /**
@@ -1187,6 +1188,21 @@
   }
 
   /**
+   * Test if a CAS contains an annotation of the given type.
+   * 
+   * @param <T>
+   *          the annotation type.
+   * @param aCas
+   *          a CAS.
+   * @param aType
+   *          a annotation type.
+   * @return {@code true} if there is at least one annotation of the given type in the CAS.
+   */
+  public static <T extends TOP> boolean exists(CAS aCas, Type aType) {
+    return CasUtil.iterator(aCas, aType).hasNext();
+  }
+  
+  /**
    * Convenience method to get the specified view or a default view if the requested view does not
    * exist. The default can also be {@code null}.
    * 
diff --git a/uimafit-core/src/test/java/org/apache/uima/fit/util/CasUtilTest.java b/uimafit-core/src/test/java/org/apache/uima/fit/util/CasUtilTest.java
index f1a1595..67d0ae7 100644
--- a/uimafit-core/src/test/java/org/apache/uima/fit/util/CasUtilTest.java
+++ b/uimafit-core/src/test/java/org/apache/uima/fit/util/CasUtilTest.java
@@ -19,6 +19,7 @@
 package org.apache.uima.fit.util;
 
 import static java.util.Arrays.asList;
+import static org.apache.uima.fit.factory.TypeSystemDescriptionFactory.createTypeSystemDescription;
 import static org.apache.uima.fit.util.CasUtil.getAnnotationType;
 import static org.apache.uima.fit.util.CasUtil.getType;
 import static org.apache.uima.fit.util.CasUtil.iterator;
@@ -27,12 +28,16 @@
 import static org.apache.uima.fit.util.CasUtil.selectByIndex;
 import static org.apache.uima.fit.util.CasUtil.selectFS;
 import static org.apache.uima.fit.util.CasUtil.toText;
+import static org.apache.uima.fit.util.CasUtil.exists;
 import static org.junit.Assert.assertEquals;
+import static org.junit.Assert.assertFalse;
 import static org.junit.Assert.assertNull;
+import static org.junit.Assert.assertTrue;
 
 import java.util.Collection;
 import java.util.Iterator;
 
+import org.apache.uima.UIMAException;
 import org.apache.uima.cas.ArrayFS;
 import org.apache.uima.cas.CAS;
 import org.apache.uima.cas.FeatureStructure;
@@ -42,6 +47,7 @@
 import org.apache.uima.fit.type.Token;
 import org.apache.uima.jcas.cas.TOP;
 import org.apache.uima.jcas.tcas.Annotation;
+import org.apache.uima.util.CasCreationUtils;
 import org.junit.Test;
 
 /**
@@ -186,4 +192,17 @@
     assertEquals(asList("Rot", "wood", "cheeses", "dew?"),
             toText((Iterable<AnnotationFS>) (Iterable) selectFS(cas, getType(cas, Token.class))));
   }
+  
+  @Test
+  public void testExists() throws UIMAException {
+    CAS cas = CasCreationUtils.createCas(createTypeSystemDescription(), null, null);
+
+    Type tokenType = CasUtil.getAnnotationType(cas, Token.class);
+    
+    assertFalse(exists(cas, tokenType));
+
+    cas.addFsToIndexes(cas.createAnnotation(tokenType, 0, 1));
+
+    assertTrue(exists(cas, tokenType));
+  }
 }