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 2018/07/31 09:01:01 UTC

svn commit: r1837129 - in /uima/ruta/trunk/ruta-core/src: main/java/org/apache/uima/ruta/condition/ContainsCondition.java test/java/org/apache/uima/ruta/condition/ContainsTest.java

Author: pkluegl
Date: Tue Jul 31 09:01:01 2018
New Revision: 1837129

URL: http://svn.apache.org/viewvc?rev=1837129&view=rev
Log:
UIMA-5850 - applied patch

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java?rev=1837129&r1=1837128&r2=1837129&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/condition/ContainsCondition.java Tue Jul 31 09:01:01 2018
@@ -20,6 +20,7 @@
 package org.apache.uima.ruta.condition;
 
 import java.util.ArrayList;
+import java.util.Collection;
 import java.util.List;
 
 import org.apache.uima.cas.FSIterator;
@@ -89,9 +90,11 @@ public class ContainsCondition extends T
     int anchorCount = 0;
     int totalCount = 0;
 
+    boolean usePredefinedBoundaries = minIntValue == 1 && maxIntValue == Integer.MAX_VALUE ? false : true;
+    
     if (type != null) {
       if (annotation != null) {
-        if (minIntValue == 1 && maxIntValue == Integer.MAX_VALUE && !usePercentage) {
+        if (!usePredefinedBoundaries && !usePercentage) {
           // shortcut for simple CONTAINS(Type)
           Type t = type.getType(context, stream);
           boolean annotationExsits = checkExistingAnnotation(t, annotation, stream);
@@ -102,7 +105,9 @@ public class ContainsCondition extends T
             totalCount++;
             Type t = type.getType(context, stream);
             if (each.beginsWith(t) || stream.getCas().getTypeSystem().subsumes(t, each.getType())) {
-              anchorCount += each.getBeginAnchors(t).size();
+              Collection<AnnotationFS> beginAnchors = each.getBeginAnchors(t);
+              anchorCount = incrementAnchorsWithinStrictBoundaries(annotation, anchorCount,
+                      beginAnchors);
               basicCount++;
             } else if (each.isPartOf(t)) {
               basicCount++;
@@ -180,6 +185,16 @@ public class ContainsCondition extends T
     }
   }
 
+  private int incrementAnchorsWithinStrictBoundaries(AnnotationFS annotation, int anchorCount,
+          Collection<AnnotationFS> beginAnchors) {
+    for (AnnotationFS eachBegin : beginAnchors) {
+      if (eachBegin.getEnd() <= annotation.getEnd()) {
+        anchorCount++;
+      }
+    }
+    return anchorCount;
+  }
+
   private boolean checkExistingAnnotation(Type type, AnnotationFS annotation, RutaStream stream) {
     int begin = annotation.getBegin();
     int end = annotation.getEnd();

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java?rev=1837129&r1=1837128&r2=1837129&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/condition/ContainsTest.java Tue Jul 31 09:01:01 2018
@@ -72,5 +72,23 @@ public class ContainsTest {
     
   }
   
+  @Test
+  public void testContainsOverlappingAnnotations() throws ResourceInitializationException, 
+      InvalidXMLException, IOException, AnalysisEngineProcessException, 
+      ResourceConfigurationException, URISyntaxException {
   
+  String document = "1 2 3 4 5 6 7 8";
+  
+  String script = "(\"1\" # \"5\") {-> T1};";
+  script += "(\"3\" # \"8\") {-> T1};";
+  script += "(\"3\" # \"4\") {-> T1};";
+  script += "(\"3\" # \"5\") {-> T2};";
+  script += "T2{CONTAINS(T1,1,1)-> T3};";
+  
+  CAS cas = RutaTestUtils.getCAS(document);
+  Ruta.apply(cas, script);
+  
+  RutaTestUtils.assertAnnotationsEquals(cas, 3, 1);
+  
+  }
 }