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>();