You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by pk...@apache.org on 2020/03/22 20:34:30 UTC

svn commit: r1875524 - in /uima/ruta/trunk/ruta-core/src: main/java/org/apache/uima/ruta/ main/java/org/apache/uima/ruta/expression/ test/java/org/apache/uima/ruta/expression/annotation/

Author: pkluegl
Date: Sun Mar 22 20:34:30 2020
New Revision: 1875524

URL: http://svn.apache.org/viewvc?rev=1875524&view=rev
Log:
UIMA-6191: workaround for missing functionality: missing boolean expression for AnnotationTypeExpression and missing feature in feature expression

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/MatchReference.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java?rev=1875524&r1=1875523&r2=1875524&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaStream.java Sun Mar 22 20:34:30 2020
@@ -67,6 +67,7 @@ import org.apache.uima.ruta.expression.b
 import org.apache.uima.ruta.expression.bool.IBooleanListExpression;
 import org.apache.uima.ruta.expression.feature.CoveredTextFeature;
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
+import org.apache.uima.ruta.expression.feature.FeatureMatchExpression;
 import org.apache.uima.ruta.expression.feature.GenericFeatureExpression;
 import org.apache.uima.ruta.expression.feature.LazyFeature;
 import org.apache.uima.ruta.expression.feature.SimpleFeatureExpression;
@@ -1255,7 +1256,25 @@ public class RutaStream extends FSIterat
         List<Type> v = ((ITypeListExpression) expression).getTypeList(context, this);
         environment.setVariableValue(var, v);
       }
-
+    } else if (clazz.equals(Boolean.class) && expression instanceof AnnotationTypeExpression) {
+      // special not yet supported use case: b = a1==a2
+      // TODO: this should be solved by having a boolean expression and an atomic feature
+      // expression?
+      AnnotationTypeExpression ate = (AnnotationTypeExpression) expression;
+      AnnotationFS annotation = ate.getAnnotation(context, this);
+      FeatureExpression featureExpression = ate.getFeatureExpression();
+      if (featureExpression instanceof FeatureMatchExpression) {
+        FeatureMatchExpression fme = (FeatureMatchExpression) featureExpression;
+        IRutaExpression arg = fme.getArg();
+        if (arg instanceof IAnnotationExpression) {
+          AnnotationFS argAnnotation = ((IAnnotationExpression) arg).getAnnotation(context, this);
+          if (StringUtils.equals(fme.getOp(), "==")) {
+            environment.setVariableValue(var, annotation == argAnnotation);
+          } else if (StringUtils.equals(fme.getOp(), "!=")) {
+            environment.setVariableValue(var, annotation != argAnnotation);
+          }
+        }
+      }
     }
   }
 

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=1875524&r1=1875523&r2=1875524&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 Sun Mar 22 20:34:30 2020
@@ -137,6 +137,10 @@ public class MatchReference extends Ruta
         features = tail;
       }
     }
+    if (featureExpression == null && comparator != null && argument != null) {
+      featureExpression = new FeatureMatchExpression(this, comparator, argument);
+    }
+
     initialized = true;
     if (typeExpression == null && typeListExpression == null && annotationExpression == null
             && annotationListExpression == null) {

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java?rev=1875524&r1=1875523&r2=1875524&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationVariableExpressionTest.java Sun Mar 22 20:34:30 2020
@@ -41,7 +41,6 @@ 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.Ignore;
 import org.junit.Test;
 
 public class AnnotationVariableExpressionTest {
@@ -270,11 +269,10 @@ public class AnnotationVariableExpressio
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 0);
 
   }
-  
+
   @Test
-  @Ignore
   public void testCompareGlobalVariableInAction() throws Exception {
-    
+
     String document = "Some text.";
     String script = "";
     script += "ANNOTATION a1, a2;\n";
@@ -283,15 +281,14 @@ public class AnnotationVariableExpressio
     script += "Document{-> b1 = a1==a2};\n";
     script += "Document{-> b2 = a1!=a2};\n";
     script += "Document{b1==false-> T1};\n";
-    script += "Document{b2==true-> T2};\n";
-    
+    script += "Document{b2==true -> T2};\n";
+
     CAS cas = RutaTestUtils.getCAS(document);
     Ruta.apply(cas, script);
-    
+
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1);
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 1);
-    
+
   }
-  
 
 }