Author: pkluegl
Date: Fri Nov 8 13:08:01 2019
New Revision: 1869556
URL: http://svn.apache.org/viewvc?rev=1869556&view=rev
Log:
UIMA-6148: define also a list for single annotation, so that features
expression could later be used by the list interface
Added:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcher.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java?rev=1869556&r1=1869555&r2=1869556&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
(original)
+++
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/AnnotationTypeExpression.java
Fri Nov 8 13:08:01 2019
@@ -208,7 +208,7 @@ public class AnnotationTypeExpression ex
}
if (annotationListExpression != null) {
List<AnnotationFS> result =
annotationListExpression.getAnnotationList(context, stream);
- if (featureExpression != null) {
+ if (result != null && featureExpression != null) {
return new ArrayList<>(featureExpression.getAnnotations(result, true,
context, stream));
} else {
return result;
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java?rev=1869556&r1=1869555&r2=1869556&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java
(original)
+++
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java
Fri Nov 8 13:08:01 2019
@@ -27,6 +27,7 @@ import org.apache.uima.ruta.RutaConstant
import org.apache.uima.ruta.RutaEnvironment;
import org.apache.uima.ruta.RutaStream;
import org.apache.uima.ruta.block.RutaBlock;
+import
org.apache.uima.ruta.expression.annotation.AnnotationListDelegateVariableExpression;
import
org.apache.uima.ruta.expression.annotation.AnnotationListVariableExpression;
import
org.apache.uima.ruta.expression.annotation.AnnotationListVariableIndexExpression;
import org.apache.uima.ruta.expression.annotation.AnnotationVariableExpression;
@@ -164,6 +165,7 @@ public class MatchReference extends Ruta
return true;
} else if (environment.isVariableOfType(candidate,
RutaConstants.RUTA_VARIABLE_ANNOTATION)) {
annotationExpression = new AnnotationVariableExpression(candidate);
+ annotationListExpression = new
AnnotationListDelegateVariableExpression(candidate);
return true;
} else if (environment.isVariableOfType(candidate,
RutaConstants.RUTA_VARIABLE_ANNOTATION_LIST)) {
Added:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java?rev=1869556&view=auto
==============================================================================
---
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java
(added)
+++
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/annotation/AnnotationListDelegateVariableExpression.java
Fri Nov 8 13:08:01 2019
@@ -0,0 +1,53 @@
+/*
+ * 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.ruta.expression.annotation;
+
+import java.util.Arrays;
+import java.util.List;
+
+import org.apache.uima.cas.text.AnnotationFS;
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.block.RutaBlock;
+import org.apache.uima.ruta.rule.MatchContext;
+
+public class AnnotationListDelegateVariableExpression extends
AbstractAnnotationListExpression {
+
+ private String var;
+
+ public AnnotationListDelegateVariableExpression(String var) {
+ super();
+ this.var = var;
+ }
+
+ @Override
+ public List<AnnotationFS> getList(MatchContext context, RutaStream stream) {
+
+ RutaBlock parent = context.getParent();
+ AnnotationFS variableValue = parent.getEnvironment().getVariableValue(var,
AnnotationFS.class,
+ stream);
+
+ if (variableValue != null) {
+ return Arrays.asList(variableValue);
+ }
+
+ return null;
+ }
+
+}
Modified:
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcher.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcher.java?rev=1869556&r1=1869555&r2=1869556&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcher.java
(original)
+++
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaAnnotationTypeMatcher.java
Fri Nov 8 13:08:01 2019
@@ -53,11 +53,15 @@ public class RutaAnnotationTypeMatcher i
// just for forcing expression top initialize
// TODO this is maybe a bit expensive sometimes
expression.getType(context, stream);
- if (expression.getAnnotationExpression() != null) {
+ if (expression.getAnnotationListExpression() != null) {
+ result = expression.getAnnotationList(context, stream);
+ if (result == null) {
+ // avoid null lists here
+ result = Collections.emptyList();
+ }
+ } else if (expression.getAnnotationExpression() != null) {
result = new ArrayList<>(1);
result.add(expression.getAnnotation(context, stream));
- } else if (expression.getAnnotationListExpression() != null) {
- result = expression.getAnnotationList(context, stream);
} else {
// TODO defer to getter of expression?
Modified:
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java?rev=1869556&r1=1869555&r2=1869556&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
(original)
+++
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/ForEachBlockTest.java
Fri Nov 8 13:08:01 2019
@@ -19,13 +19,17 @@
package org.apache.uima.ruta.block;
+import java.util.ArrayList;
import java.util.HashMap;
+import java.util.List;
import java.util.Map;
+import java.util.TreeMap;
import org.apache.uima.cas.CAS;
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.apache.uima.ruta.seed.TextSeeder;
import org.junit.Ignore;
import org.junit.Test;
@@ -209,4 +213,27 @@ public class ForEachBlockTest {
RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "1", "22", "333");
}
+ @Test
+ public void testFSArrayFeatureMatch() throws Exception {
+ String script = "Document {-> s:Struct, s.elements = SW};";
+ script += "FOREACH(struct) Struct{} {\n";
+ script += "struct.elements{-> T1};\n";
+ script += "}\n";
+
+ Map<String, String> typeMap = new TreeMap<String, String>();
+ String typeName1 = "Struct";
+ typeMap.put(typeName1, "uima.tcas.Annotation");
+
+ Map<String, List<TestFeature>> featureMap = new TreeMap<String,
List<TestFeature>>();
+ List<TestFeature> list = new ArrayList<RutaTestUtils.TestFeature>();
+ featureMap.put(typeName1, list);
+ String fn1 = "elements";
+ list.add(new TestFeature(fn1, "", "uima.cas.FSArray"));
+
+ CAS cas = RutaTestUtils.getCAS("This is a test.", typeMap, featureMap);
+ Ruta.apply(cas, script);
+
+ RutaTestUtils.assertAnnotationsEquals(cas, 1, 3, "is", "a", "test");
+ }
+
}
Modified:
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
URL:
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java?rev=1869556&r1=1869555&r2=1869556&view=diff
==============================================================================
---
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
(original)
+++
uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/block/RutaScriptBlockTest.java
Fri Nov 8 13:08:01 2019
@@ -28,7 +28,7 @@ import org.junit.Test;
public class RutaScriptBlockTest {
@Test
- public void testInnerDocumentMatch() {
+ public void testInnerDocumentMatch() throws Exception {
String document = "Some text";
String script = "";
script += "CW{ -> CREATE(RutaAnnotation, \"score\"=1)};";
@@ -39,19 +39,12 @@ public class RutaScriptBlockTest {
script += "RutaAnnotation{-> T3};";
script += "}";
- CAS cas = null;
- try {
- cas = RutaTestUtils.getCAS(document);
- Ruta.apply(cas, script);
- } catch (Exception e) {
- e.printStackTrace();
- }
+ CAS cas = RutaTestUtils.getCAS(document);
+ Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some");
RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "Some");
RutaTestUtils.assertAnnotationsEquals(cas, 3, 2, "Some", "Some");
-
- cas.release();
}
@Test
@@ -78,7 +71,6 @@ public class RutaScriptBlockTest {
Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "1");
- cas.release();
}
@Test
@@ -92,7 +84,6 @@ public class RutaScriptBlockTest {
Ruta.apply(cas, script);
RutaTestUtils.assertAnnotationsEquals(cas, 2, 3, "1", "22", "333");
- cas.release();
}
}