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/12/22 12:47:23 UTC

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

Author: pkluegl
Date: Thu Dec 22 12:47:23 2016
New Revision: 1775641

URL: http://svn.apache.org/viewvc?rev=1775641&view=rev
Log:
UIMA-5231
- reset variable values for (optional) rule elemtens that did did match

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java?rev=1775641&r1=1775640&r2=1775641&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/RutaEnvironment.java Thu Dec 22 12:47:23 2016
@@ -1090,21 +1090,6 @@ public class RutaEnvironment {
 		return namespaces;
 	}
 
-//  public void addAnnotationToVariable(AnnotationFS annotation, String var, RutaStream stream) {
-//    Class<?> variableType = getVariableType(var);
-//    if(List.class.equals(variableType) &&  AnnotationFS.class.equals(getVariableGenericType(var))) {
-//      @SuppressWarnings("unchecked")
-//      List<AnnotationFS> value = getVariableValue(var, List.class, stream);
-//      if(value == null) {
-//        value = new ArrayList<>();
-//        setVariableValue(var, value);
-//      }
-//      value.add(annotation);
-//    } else if(AnnotationFS.class.equals(variableType)) {
-//      setVariableValue(var, annotation);
-//    }
-//  }
-  
   public void addMatchToVariable(RuleMatch ruleMatch, RuleElement element, MatchContext context,  RutaStream stream) {
     String var = element.getLabel();
     if(StringUtils.isBlank(var)) {

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java?rev=1775641&r1=1775640&r2=1775641&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/ComposedRuleElement.java Thu Dec 22 12:47:23 2016
@@ -540,6 +540,7 @@ public class ComposedRuleElement extends
           RutaStream stream, InferenceCrowd crowd) {
     List<AnnotationFS> textsMatched = match.getTextsMatched();
     if (textsMatched == null || textsMatched.isEmpty()) {
+      getParent().getEnvironment().addMatchToVariable(ruleMatch, this, new MatchContext(getParent()), stream);
       match.evaluateInnerMatches(true, stream);
       return;
     }

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java?rev=1775641&r1=1775640&r2=1775641&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRuleElement.java Thu Dec 22 12:47:23 2016
@@ -274,6 +274,7 @@ public class RutaRuleElement extends Abs
     List<RuleElementMatch> matchInfo = getMatch(ruleMatch, containerMatch);
     MatchContext context = new MatchContext(this, ruleMatch, after);
     if (matchInfo == null) {
+      context.getParent().getEnvironment().addMatchToVariable(ruleMatch, this, context, stream);
       if (quantifier.isOptional(context, stream)) {
         result = continueMatchSomewhereElse(after, true, annotation, ruleMatch, ruleApply,
                 containerMatch, sideStepOrigin, entryPoint, stream, crowd);

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java?rev=1775641&r1=1775640&r2=1775641&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/expression/annotation/AnnotationLabelExpressionTest.java Thu Dec 22 12:47:23 2016
@@ -505,6 +505,50 @@ public class AnnotationLabelExpressionTe
     cas.release();
   }
 
+  @Test
+  public void testLabelReset() throws Exception {
+    String script= "";
+    script += "W{->Struct1, Struct1.a = w} w:W?;";
+    script += "W{->Struct2, Struct2.a = c} c:(W ANY)?;";
+    
+    CAS cas = applyOnStruct4Cas(script);
+    
+    Type type1 = cas.getTypeSystem().getType("Struct1");
+    Feature feature1 = type1.getFeatureByBaseName("a");
+    
+    List<AnnotationFS> select1 = new ArrayList<>(CasUtil.select(cas, type1));
+    Assert.assertEquals(2, select1.size());
+    
+    AnnotationFS a11 = select1.get(0);
+    Assert.assertEquals("Some", a11.getCoveredText());
+    AnnotationFS featureValue11 = (AnnotationFS) a11.getFeatureValue(feature1);
+    Assert.assertEquals("text", featureValue11.getCoveredText());
+    
+    AnnotationFS a21 = select1.get(1);
+    Assert.assertEquals("text", a21.getCoveredText());
+    AnnotationFS featureValue21 = (AnnotationFS) a21.getFeatureValue(feature1);
+    Assert.assertNull(featureValue21);
+    
+    Type type2 = cas.getTypeSystem().getType("Struct2");
+    Feature feature2 = type2.getFeatureByBaseName("a");
+    
+    List<AnnotationFS> select2 = new ArrayList<>(CasUtil.select(cas, type2));
+    Assert.assertEquals(2, select2.size());
+    
+    AnnotationFS  a12 = select2.get(0);
+    Assert.assertEquals("Some", a12.getCoveredText());
+    AnnotationFS featureValue12 = (AnnotationFS) a12.getFeatureValue(feature2);
+    Assert.assertEquals("text.", featureValue12.getCoveredText());
+    
+    AnnotationFS  a22 = select2.get(1);
+    Assert.assertEquals("text", a22.getCoveredText());
+    AnnotationFS featureValue22 = (AnnotationFS) a22.getFeatureValue(feature2);
+    Assert.assertNull(featureValue22);
+    
+    
+  }
+  
+  
   private CAS applyOnStruct4Cas(String script) throws Exception {
     String document = "Some text.";
     Map<String, String> typeMap = new TreeMap<String, String>();