Merge branch 'UIMA-6258-Action-FILL-only-considers-first-annotation-of-given-type'
diff --git a/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java b/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
index ff6d32f..9a1eb27 100644
--- a/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
+++ b/ruta-core/src/main/java/org/apache/uima/ruta/action/FillAction.java
@@ -76,8 +76,9 @@
}
}
}
- if (!list.isEmpty()) {
- AnnotationFS annotationFS = list.get(0);
+
+ for (AnnotationFS annotationFS : list) {
+
stream.getCas().removeFsFromIndexes(annotationFS);
context.setAnnotation(matchedAnnotation);
stream.assignFeatureValues(annotationFS, features, context);
diff --git a/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java b/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
index a28d778..0be768a 100644
--- a/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
+++ b/ruta-core/src/test/java/org/apache/uima/ruta/action/FillTest.java
@@ -21,6 +21,8 @@
import static org.junit.Assert.assertEquals;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
import java.util.TreeMap;
@@ -30,27 +32,23 @@
import org.apache.uima.cas.Type;
import org.apache.uima.cas.text.AnnotationFS;
import org.apache.uima.cas.text.AnnotationIndex;
+import org.apache.uima.ruta.engine.Ruta;
import org.apache.uima.ruta.engine.RutaEngine;
import org.apache.uima.ruta.engine.RutaTestUtils;
+import org.apache.uima.ruta.engine.RutaTestUtils.TestFeature;
import org.junit.Test;
public class FillTest {
@Test
- public void test() {
+ public void test() throws Exception {
String name = this.getClass().getSimpleName();
String namespace = this.getClass().getPackage().getName().replaceAll("\\.", "/");
Map<String, String> complexTypes = new TreeMap<String, String>();
String type = "org.apache.uima.LanguageStorage";
complexTypes.put(type, CAS.TYPE_NAME_DOCUMENT_ANNOTATION);
- CAS cas = null;
- try {
- cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION, namespace + "/" + name
- + ".txt", 50, false, false, complexTypes, null);
- } catch (Exception e) {
- e.printStackTrace();
- assert (false);
- }
+ CAS cas = RutaTestUtils.process(namespace + "/" + name + RutaEngine.SCRIPT_FILE_EXTENSION,
+ namespace + "/" + name + ".txt", 50, false, false, complexTypes, null);
Type t = null;
AnnotationIndex<AnnotationFS> ai = null;
FSIterator<AnnotationFS> iterator = null;
@@ -63,7 +61,27 @@
Feature featureByBaseName = t.getFeatureByBaseName("language");
String stringValue = afs.getStringValue(featureByBaseName);
assertEquals("en", stringValue);
-
- cas.release();
+ }
+
+ @Test
+ public void testOverlapping() throws Exception {
+
+ String script = "(CW W){-> Struct, Struct};\n";
+ script += "CW{-> FILL(Struct, \"s\" = \"a\")};\n";
+ script += "Struct.s==\"a\"{-> T1};\n";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName = "Struct";
+ typeMap.put(typeName, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String, List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName, list);
+ list.add(new TestFeature("s", "", "uima.cas.String"));
+
+ CAS cas = RutaTestUtils.getCAS("Some text.", typeMap, featureMap);
+ Ruta.apply(cas, script);
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "Some text");
}
}