Author: pkluegl
Date: Thu Jan 12 12:04:47 2012
New Revision: 1230503

URL: http://svn.apache.org/viewvc?rev=1230503&view=rev
Log:
UIMA-2233
restricted creation of alternative "matching realities" to situations where 
parallel realities are needed, e.g., multiple anchors for rule elements.

Modified:
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/ComposedRuleElementMatch.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/RuleMatch.java
    
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/TextMarkerRuleElement.java

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/ComposedRuleElementMatch.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/ComposedRuleElementMatch.java?rev=1230503&r1=1230502&r2=1230503&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/ComposedRuleElementMatch.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/ComposedRuleElementMatch.java
 Thu Jan 12 12:04:47 2012
@@ -168,6 +168,29 @@ public class ComposedRuleElementMatch ex
     return copy;
   }
 
+  public void update(ComposedRuleElementMatch extendedContainerMatch) {
+    for (Entry<RuleElement, List<RuleElementMatch>> entry : 
innerMatches.entrySet()) {
+      RuleElement key = entry.getKey();
+      List<RuleElementMatch> value = entry.getValue();
+      if (key.equals(extendedContainerMatch.getRuleElement())) {
+        extendedContainerMatch.setContainerMatch(this);
+        if (value != null) {
+          value.set(value.size() - 1, extendedContainerMatch);
+        }
+      } else {
+        if (value != null) {
+          for (RuleElementMatch each : value) {
+            if (each instanceof ComposedRuleElementMatch) {
+              ((ComposedRuleElementMatch)each).update(extendedContainerMatch);
+            }
+          }
+        } 
+      }
+    }
+  }
+
+  
+  
   public String toString() {
     return "CREM" + innerMatches.toString();
   }
@@ -194,4 +217,5 @@ public class ComposedRuleElementMatch ex
 
   }
 
+ 
 }

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/RuleMatch.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/RuleMatch.java?rev=1230503&r1=1230502&r2=1230503&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/RuleMatch.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/RuleMatch.java
 Thu Jan 12 12:04:47 2012
@@ -206,6 +206,14 @@ public class RuleMatch {
     copy.setDelegateApply(newDelegateApply);
     return copy;
   }
+  
+  public void update(ComposedRuleElementMatch extendedContainerMatch) {
+    if (extendedContainerMatch.getContainerMatch() == null) {
+      setRootMatch(extendedContainerMatch);
+    } else {
+      rootMatch.update(extendedContainerMatch);
+    }
+  }
 
   public void setDelegateApply(Map<AbstractTextMarkerAction, ScriptApply> 
delegateApply) {
     this.delegateApply = delegateApply;

Modified: 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/TextMarkerRuleElement.java
URL: 
http://svn.apache.org/viewvc/uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/TextMarkerRuleElement.java?rev=1230503&r1=1230502&r2=1230503&view=diff
==============================================================================
--- 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/TextMarkerRuleElement.java
 (original)
+++ 
uima/sandbox/trunk/TextMarker/uimaj-ep-textmarker-engine/src/main/java/org/apache/uima/textmarker/rule/TextMarkerRuleElement.java
 Thu Jan 12 12:04:47 2012
@@ -56,13 +56,15 @@ public class TextMarkerRuleElement exten
           InferenceCrowd crowd) {
     Collection<AnnotationFS> anchors = getAnchors(stream);
 
-    boolean useAlternatives = entryPoint == null; // anchors.size() > 1;
+    boolean useAlternatives = entryPoint == null && !(anchors.size() == 1);
     for (AnnotationFS eachAnchor : anchors) {
       ComposedRuleElementMatch extendedContainerMatch = containerMatch;
       RuleMatch extendedMatch = ruleMatch;
       if (useAlternatives) {
         extendedContainerMatch = containerMatch.copy();
         extendedMatch = ruleMatch.copy(extendedContainerMatch);
+      } else {
+        extendedMatch.update(extendedContainerMatch);
       }
       doMatch(eachAnchor, extendedMatch, extendedContainerMatch, true, stream, 
crowd);
       if (extendedMatch.matched()) {
@@ -121,13 +123,15 @@ public class TextMarkerRuleElement exten
         stepbackMatch(after, annotation, ruleMatch, ruleApply, containerMatch, 
sideStepOrigin,
                 stream, crowd, entryPoint);
       }
-      boolean useAlternatives = entryPoint == null; // nextAnnotations.size() 
> 1;
+      boolean useAlternatives = entryPoint == null && !(nextAnnotations.size() 
== 1);
       for (AnnotationFS eachAnchor : nextAnnotations) {
         ComposedRuleElementMatch extendedContainerMatch = containerMatch;
         RuleMatch extendedMatch = ruleMatch;
         if (useAlternatives) {
           extendedContainerMatch = containerMatch.copy();
           extendedMatch = ruleMatch.copy(extendedContainerMatch);
+        } else {
+          extendedMatch.update(extendedContainerMatch);
         }
 
         doMatch(eachAnchor, extendedMatch, extendedContainerMatch, false, 
stream, crowd);


Reply via email to