Author: pkluegl
Date: Mon Aug 29 07:05:46 2016
New Revision: 1758174

URL: http://svn.apache.org/viewvc?rev=1758174&view=rev
Log:
UIMA-4851
- environment modification not by inlined rules

Modified:
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRule.java
    
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRule.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/rule/AbstractRule.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRule.java?rev=1758174&r1=1758173&r2=1758174&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRule.java
 (original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/AbstractRule.java
 Mon Aug 29 07:05:46 2016
@@ -26,6 +26,8 @@ public abstract class AbstractRule exten
 
   private final int id;
 
+  private boolean inlined;
+  
   public AbstractRule(RutaBlock parent, int id) {
     super(parent);
     this.id = id;
@@ -35,4 +37,12 @@ public abstract class AbstractRule exten
     return id;
   }
 
+  public boolean isInlined() {
+    return inlined;
+  }
+
+  public void setInlined(boolean inlined) {
+    this.inlined = inlined;
+  }
+
 }

Modified: 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRule.java
URL: 
http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRule.java?rev=1758174&r1=1758173&r2=1758174&view=diff
==============================================================================
--- 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRule.java 
(original)
+++ 
uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/rule/RutaRule.java 
Mon Aug 29 07:05:46 2016
@@ -116,6 +116,7 @@ public class RutaRule extends AbstractRu
       for (RutaStatement eachInlined : rules) {
         if (eachInlined instanceof RutaRule) {
           RutaRule inlinedRule = (RutaRule) eachInlined;
+          inlinedRule.setInlined(true);
           fillLabelMap(inlinedRule.getRoot());
         }
       }
@@ -123,6 +124,10 @@ public class RutaRule extends AbstractRu
   }
 
   private void prepareEnvironment(MatchContext context, RutaStream stream) {
+    if(isInlined()) {
+      // only the actual rule may setup the environment
+      return;
+    }
     RutaBlock parent = context.getParent();
     RutaEnvironment environment = parent.getEnvironment();
     for (Entry<String, Object> entry : labels.entrySet()) {
@@ -144,6 +149,10 @@ public class RutaRule extends AbstractRu
   }
 
   private void cleanupEnvironment(MatchContext context, RutaStream stream) {
+    if(isInlined()) {
+      // only the actual rule may revert the environment
+      return;
+    }
     RutaBlock parent = context.getParent();
     RutaEnvironment environment = parent.getEnvironment();
     for (Entry<String, Object> entry : labels.entrySet()) {

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=1758174&r1=1758173&r2=1758174&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
 Mon Aug 29 07:05:46 2016
@@ -23,7 +23,6 @@ import static org.junit.Assert.assertEqu
 import static org.junit.Assert.assertNotNull;
 
 import java.io.IOException;
-import java.net.URISyntaxException;
 import java.util.ArrayList;
 import java.util.List;
 import java.util.Map;
@@ -37,7 +36,6 @@ import org.apache.uima.cas.Feature;
 import org.apache.uima.cas.Type;
 import org.apache.uima.cas.text.AnnotationFS;
 import org.apache.uima.cas.text.AnnotationIndex;
-import org.apache.uima.resource.ResourceConfigurationException;
 import org.apache.uima.resource.ResourceInitializationException;
 import org.apache.uima.ruta.engine.Ruta;
 import org.apache.uima.ruta.engine.RutaTestUtils;
@@ -319,14 +317,18 @@ public class AnnotationLabelExpressionTe
 
   @Test
   public void testAcrossInlinedRules() throws Exception {
-//    String script = "(# PERIOD){->T1};\n";
-//    script += "T1{-> Struct1, Struct1.a = i}<-{i:SW;};\n";
-//    script += "o:T1<-{SW{->Struct2, Struct2.a = o};};\n";
-//    script += "Struct1.a{->T2};\n";
-//    script += "Struct1{Struct1.a.ct==\"text\"->T3};\n";
-//    CAS cas = applyOnStruct4Cas(script);
-//    RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "text");
-//    RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Some text.");
+    String script = "(# PERIOD){->T1};\n";
+    script += "T1{-> Struct1, Struct1.a = i}<-{i:SW;};\n";
+    script += "o:T1<-{SW{->Struct2, Struct2.a = o};};\n";
+    script += "Struct1.a{->T2};\n";
+    script += "Struct1{Struct1.a.ct==\"text\"->T3};\n";
+    script += "Struct2.a{->T4};\n";
+    script += "Struct2{Struct2.a.ct==\"Some text.\"->T5};\n";
+    CAS cas = applyOnStruct4Cas(script);
+    RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "text");
+    RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Some text.");
+    RutaTestUtils.assertAnnotationsEquals(cas, 4, 1, "Some text.");
+    RutaTestUtils.assertAnnotationsEquals(cas, 5, 1, "text");
   }
 
   


Reply via email to