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");
}