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 2016/03/22 15:01:55 UTC

svn commit: r1736191 - in /uima/ruta/trunk: ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/ ruta-core/src/main/java/org/apache/uima/ruta/expression/ ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/ ruta-core/src/test/java/org/apache...

Author: pkluegl
Date: Tue Mar 22 14:01:55 2016
New Revision: 1736191

URL: http://svn.apache.org/viewvc?rev=1736191&view=rev
Log:
UIMA-4748
- boolean comparison of strings
- added test in implicit condition

Added:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java   (with props)
    uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java
      - copied, changed from r1733239, uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java
Removed:
    uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java
    uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanTypeExpression.java
Modified:
    uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java
    uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
    uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
    uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java

Modified: uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-core/src/main/antlr3/org/apache/uima/ruta/parser/RutaParser.g Tue Mar 22 14:01:55 2016
@@ -2621,6 +2621,7 @@ composedBooleanExpression returns [IBool
 	:
 	(e2 = booleanCompare)=> e2 = booleanCompare {expr = e2;}
 	| (bne = booleanNumberExpression)=> bne = booleanNumberExpression{expr = bne;}
+	| (bse = booleanStringExpression)=> bse = booleanStringExpression{expr = bse;}
 	| (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
 	| e1 = booleanFunction {expr = e1;}
 	| LPAREN ep = booleanExpression RPAREN {expr = ep;}
@@ -2669,7 +2670,14 @@ booleanTypeExpression  returns  [IBoolea
 	e2 = typeExpression
 	{expr = ExpressionFactory.createBooleanTypeExpression(e1,op,e2);}
 	;
-	
+booleanStringExpression  returns  [IBooleanExpression expr = null]
+	:
+	e1 = stringExpression
+	op = (EQUAL | NOTEQUAL)
+	e2 = stringExpression
+	{expr = ExpressionFactory.createBooleanStringExpression(e1,op,e2);}
+	;
+
 booleanNumberExpression  returns  [IBooleanExpression expr = null]
 	:
 	//LPAREN

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/ExpressionFactory.java Tue Mar 22 14:01:55 2016
@@ -38,6 +38,7 @@ import org.apache.uima.ruta.expression.b
 import org.apache.uima.ruta.expression.bool.BooleanListFeatureExpression;
 import org.apache.uima.ruta.expression.bool.BooleanListVariableExpression;
 import org.apache.uima.ruta.expression.bool.BooleanNumberExpression;
+import org.apache.uima.ruta.expression.bool.BooleanStringExpression;
 import org.apache.uima.ruta.expression.bool.BooleanTypeExpression;
 import org.apache.uima.ruta.expression.bool.BooleanVariableExpression;
 import org.apache.uima.ruta.expression.bool.IBooleanExpression;
@@ -168,6 +169,11 @@ public class ExpressionFactory {
           INumberExpression e2) {
     return new BooleanNumberExpression(e1, op.getText(), e2);
   }
+  
+  public static IBooleanExpression createBooleanStringExpression(IStringExpression e1, Token op,
+          IStringExpression e2) {
+    return new BooleanStringExpression(e1, op.getText(), e2);
+  }
 
   public static IBooleanExpression createSimpleBooleanExpression(Token v) {
     return new SimpleBooleanExpression(Boolean.valueOf(v.getText()));

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/RutaExpression.java Tue Mar 22 14:01:55 2016
@@ -29,13 +29,32 @@ import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.ruta.RutaElement;
 import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.annotation.IAnnotationExpression;
+import org.apache.uima.ruta.expression.annotation.IAnnotationListExpression;
 import org.apache.uima.ruta.expression.feature.FeatureExpression;
+import org.apache.uima.ruta.expression.feature.SimpleFeatureExpression;
 import org.apache.uima.ruta.rule.MatchContext;
 
 public class RutaExpression extends RutaElement implements IRutaExpression {
 
   protected List<AnnotationFS> getTargetAnnotation(AnnotationFS matchedAnnotation,
           FeatureExpression fe, MatchContext context, RutaStream stream) {
+
+    if (fe instanceof SimpleFeatureExpression) {
+      SimpleFeatureExpression sfe = (SimpleFeatureExpression) fe;
+      IAnnotationExpression annotationExpression = sfe.getMatchReference()
+              .getAnnotationExpression(context, stream);
+      IAnnotationListExpression annotationListExpression = sfe.getMatchReference()
+              .getAnnotationListExpression(context, stream);
+      if (annotationExpression != null) {
+        List<AnnotationFS> as = new ArrayList<>(1);
+        as.add(annotationExpression.getAnnotation(context, stream));
+        return as;
+      } else if (annotationListExpression != null) {
+        return annotationListExpression.getAnnotationList(context, stream);
+      }
+    }
+
     if (matchedAnnotation == null) {
       return Collections.emptyList();
     }

Added: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java?rev=1736191&view=auto
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java (added)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java Tue Mar 22 14:01:55 2016
@@ -0,0 +1,74 @@
+/*
+ * 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.bool;
+
+import org.apache.uima.ruta.RutaStream;
+import org.apache.uima.ruta.expression.string.IStringExpression;
+import org.apache.uima.ruta.rule.MatchContext;
+
+public class BooleanStringExpression extends AbstractBooleanExpression {
+
+  private final IStringExpression e1;
+
+  private final String op;
+
+  private final IStringExpression e2;
+
+  public BooleanStringExpression(IStringExpression e1, String op, IStringExpression e2) {
+    super();
+    this.e1 = e1;
+    this.op = op;
+    this.e2 = e2;
+  }
+
+  @Override
+  public boolean getBooleanValue(MatchContext context, RutaStream stream) {
+    String first = getFristExpression().getStringValue(context, stream);
+    String second = getSecondExpression().getStringValue(context, stream);
+    return eval(first, getOperator(), second);
+  }
+
+  private boolean eval(String t1, String op, String t2) {
+    if ("==".equals(op)) {
+      return t1.equals(t2);
+    } else if ("!=".equals(op)) {
+      return !t1.equals(t2);
+    }
+    return false;
+  }
+
+  public IStringExpression getFristExpression() {
+    return e1;
+  }
+
+  public String getOperator() {
+    return op;
+  }
+
+  public IStringExpression getSecondExpression() {
+    return e2;
+  }
+
+  @Override
+  public String getStringValue(MatchContext context, RutaStream stream) {
+    return e1.getStringValue(context, stream) + " " + op + " " + e2.getStringValue(context, stream);
+  }
+
+}

Propchange: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/bool/BooleanStringExpression.java
------------------------------------------------------------------------------
    svn:eol-style = native

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ImplicitCondition2Test.java Tue Mar 22 14:01:55 2016
@@ -19,9 +19,16 @@
 
 package org.apache.uima.ruta.condition;
 
+import java.io.IOException;
+
+import org.apache.uima.analysis_engine.AnalysisEngineProcessException;
 import org.apache.uima.cas.CAS;
+import org.apache.uima.cas.CASException;
+import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
+import org.apache.uima.util.InvalidXMLException;
+import org.junit.Assert;
 import org.junit.Test;
 
 public class ImplicitCondition2Test {
@@ -53,4 +60,15 @@ public class ImplicitCondition2Test {
 
     cas.release();
   }
+  
+  @Test
+  public void testStringCompare() throws ResourceInitializationException, InvalidXMLException, IOException, AnalysisEngineProcessException, CASException {
+    CAS cas = RutaTestUtils.getCAS("a b. a b.");
+    Assert.assertTrue(Ruta.matches(cas.getJCas(), "(w:W # W{W.ct==w.ct}){->T1};"));
+    Assert.assertTrue(Ruta.matches(cas.getJCas(), "STRING s1 = \"a\"; (w:W W{s1==w.ct}){->T2};"));
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "a b. a", "b. a b");
+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 2, "a b", "a b");
+  }
+  
+  
 }

Modified: uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java (original)
+++ uima/ruta/trunk/ruta-ep-ide-ui/src/main/java/org/apache/uima/ruta/ide/validator/LanguageCheckerVisitor.java Tue Mar 22 14:01:55 2016
@@ -878,12 +878,17 @@ public class LanguageCheckerVisitor exte
     String bref = featText.substring(0, firstIndexOf);
     String aref = featText.substring(0, lastIndexOf);
     String fref = featText.substring(lastIndexOf + 1, featText.length());
+    if(currentLabels.contains(aref)) {
+      return;
+    }
     String match = isFeatureMatch(aref);
     if (match == null
             && (getVariableType(aref) == RutaTypeConstants.RUTA_TYPE_AT || getVariableType(bref) == RutaTypeConstants.RUTA_TYPE_AT)) {
       // do not check on variables!
       return;
     }
+   
+    
     match = expand(match);
     if (match != null) {
       int kind = -1;

Modified: uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/antlr3/org/apache/uima/ruta/ide/core/parser/RutaParser.g Tue Mar 22 14:01:55 2016
@@ -2616,8 +2616,9 @@ simpleBooleanExpression returns [Express
 composedBooleanExpression returns [Expression expr = null]
 	:
 	(e2 = booleanCompare)=> e2 = booleanCompare {expr = e2;}
-	| (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
 	| (bne = booleanNumberExpression)=> bne = booleanNumberExpression{expr = bne;}
+	| (bse = booleanStringExpression)=> bse = booleanStringExpression{expr = bse;}
+	| (bte = booleanTypeExpression)=> bte = booleanTypeExpression{expr = bte;}
 	| e1 = booleanFunction {expr = e1;}
 	| LPAREN ep = booleanExpression RPAREN {expr = ep;}
 	;
@@ -2679,6 +2680,16 @@ booleanNumberExpression  returns  [Expre
 	{expr = ExpressionFactory.createBooleanNumberExpression(e1,op,e2);}
 	;
 
+booleanStringExpression  returns  [Expression expr = null]
+	:
+	//LPAREN
+	e1 = stringExpression
+	op = (EQUAL | NOTEQUAL)
+	e2 = stringExpression
+	//RPAREN
+	{expr = ExpressionFactory.createBooleanStringExpression(e1,op,e2);}
+	;
+
 genericVariableReference returns[Expression varRef]
 :
   id=Identifier

Modified: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java?rev=1736191&r1=1736190&r2=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/ExpressionFactory.java Tue Mar 22 14:01:55 2016
@@ -66,7 +66,7 @@ public class ExpressionFactory extends A
     return new RutaExpression(e.sourceStart(), e.sourceEnd(), e, RutaTypeConstants.RUTA_TYPE_B);
   }
 
-  public static RutaBooleanNumberExpression createBooleanNumberExpression(Expression e1, Token op,
+  public static RutaBooleanCompareExpression createBooleanNumberExpression(Expression e1, Token op,
           Expression e2) {
     int lexerOpID = op.getType(); // Integer.valueOf(op.getText());
     int operatorID = 0;
@@ -93,7 +93,7 @@ public class ExpressionFactory extends A
       default:
         break;
     }
-    return new RutaBooleanNumberExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
+    return new RutaBooleanCompareExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
   }
 
   public static VariableReference createBooleanVariableReference(Token variableId) {
@@ -315,11 +315,31 @@ public class ExpressionFactory extends A
         break;
     }
     if (e1 != null && e2 != null) {
-      return new RutaBooleanTypeExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
+      return new RutaBooleanCompareExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
     }
     return null;
   }
 
+  public static Expression createBooleanStringExpression(Expression e1, Token op, Expression e2) {
+    int lexerOpID = op.getType(); // Integer.valueOf(op.getText());
+    int operatorID = 0;
+    // convert lexer-opId to dltk-opId:
+    switch (lexerOpID) {
+      case RutaLexer.EQUAL:
+        operatorID = E_EQUAL;
+        break;
+      case RutaLexer.NOTEQUAL:
+        operatorID = E_NOT_EQUAL;
+        break;
+      default:
+        break;
+    }
+    if (e1 != null && e2 != null) {
+      return new RutaBooleanCompareExpression(e1.sourceStart(), e2.sourceEnd(), operatorID, e1, e2);
+    }
+    return null;
+  }
+  
   public static Expression createListExpression(List<Expression> exprList, int type) {
     List<ASTNode> l = new ArrayList<>();
     int start = 0;
@@ -407,4 +427,6 @@ public class ExpressionFactory extends A
     int bounds[] = getBounds(t);
     return new NullExpression(bounds[0], bounds[1]);
   }
+
+ 
 }

Copied: uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java (from r1733239, uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java)
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java?p2=uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java&p1=uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java&r1=1733239&r2=1736191&rev=1736191&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanNumberExpression.java (original)
+++ uima/ruta/trunk/ruta-ep-ide/src/main/java/org/apache/uima/ruta/ide/parser/ast/RutaBooleanCompareExpression.java Tue Mar 22 14:01:55 2016
@@ -23,7 +23,7 @@ import org.eclipse.dltk.ast.ASTVisitor;
 import org.eclipse.dltk.ast.expressions.Expression;
 import org.eclipse.dltk.utils.CorePrinter;
 
-public class RutaBooleanNumberExpression extends Expression {
+public class RutaBooleanCompareExpression extends Expression {
   /**
    * <,<=,>,>=,==,...
    */
@@ -33,7 +33,7 @@ public class RutaBooleanNumberExpression
 
   private Expression e2;
 
-  public RutaBooleanNumberExpression(int start, int end, int operatorID, Expression e1,
+  public RutaBooleanCompareExpression(int start, int end, int operatorID, Expression e1,
           Expression e2) {
     super(start, end);
     this.kind = operatorID;