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/08/24 14:26:44 UTC

svn commit: r1757530 - in /uima/ruta/trunk: ruta-core/src/main/java/org/apache/uima/ruta/engine/ ruta-core/src/main/java/org/apache/uima/ruta/expression/type/ ruta-core/src/test/java/org/apache/uima/ruta/engine/ ruta-docbook/src/docbook/

Author: pkluegl
Date: Wed Aug 24 14:26:44 2016
New Revision: 1757530

URL: http://svn.apache.org/viewvc?rev=1757530&view=rev
Log:
UIMA-5072
- allow list values, separated by commas
- added test

Modified:
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
    uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java
    uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java
    uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.overview.xml

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java?rev=1757530&r1=1757529&r2=1757530&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/engine/RutaEngine.java Wed Aug 24 14:26:44 2016
@@ -84,6 +84,8 @@ import org.springframework.core.io.Resou
 public class RutaEngine extends JCasAnnotator_ImplBase {
 
   public static final String SCRIPT_FILE_EXTENSION = ".ruta";
+  
+  public static final String SEPARATOR_VAR_VALUES = ",";
 
   public static final String SOURCE_DOCUMENT_INFORMATION = "org.apache.uima.examples.SourceDocumentInformation";
 
@@ -867,7 +869,7 @@ public class RutaEngine extends JCasAnno
 
       int lastIndexOf = longName.lastIndexOf('.');
       String shortName = longName;
-      String blockName = null;
+      String blockName = script.getRootBlock().getName();
       if (lastIndexOf != -1) {
         blockName = longName.substring(0, lastIndexOf);
         shortName = longName.substring(lastIndexOf + 1, longName.length());
@@ -883,28 +885,54 @@ public class RutaEngine extends JCasAnno
       }
       Object valueObj = null;
       Class<?> variableType = environment.getVariableType(shortName);
-      if (Integer.class.equals(variableType)) {
-        valueObj = Integer.parseInt(value);
-      } else if (Double.class.equals(variableType)) {
-        valueObj = Double.parseDouble(value);
-      } else if (Float.class.equals(variableType)) {
-        valueObj = Float.parseFloat(value);
-      } else if (String.class.equals(variableType)) {
-        valueObj = value;
-      } else if (Boolean.class.equals(variableType)) {
-        valueObj = Boolean.parseBoolean(value);
-      } else if (Type.class.equals(variableType)) {
-        valueObj = value;
+      
+      if(variableType == null) {
+          throw new IllegalArgumentException("Variable "+shortName+" is not known in block: " + blockName);
+      }
+      
+      if(List.class.equals(variableType)) {
+        valueObj = getListVariableValueFromString(value, shortName, environment);
       } else {
-        throw new IllegalArgumentException(
-                "Only variables for primitives and types can be assigned by parameters: "
-                        + shortName + " defined in block: " + blockName);
+        valueObj = getVariableValueFromString(value, variableType);
       }
+      
+      if(value == null) {
+        throw new IllegalArgumentException("Cannot determine value "+ value +" of variable "+shortName+"  in block: " + blockName + ". Null values are not allowed");
+      }
+
       environment.setVariableValue(shortName, valueObj);
     }
 
   }
 
+  private Object getVariableValueFromString(String value, Class<?> variableType) {
+     
+    if (Integer.class.equals(variableType)) {
+      return Integer.parseInt(value);
+    } else if (Double.class.equals(variableType)) {
+      return Double.parseDouble(value);
+    } else if (Float.class.equals(variableType)) {
+      return Float.parseFloat(value);
+    } else if (String.class.equals(variableType)) {
+      return value;
+    } else if (Boolean.class.equals(variableType)) {
+      return Boolean.parseBoolean(value);
+    } else if (Type.class.equals(variableType)) {
+      return value;
+    }  
+    return null;
+  }
+
+  private List<?> getListVariableValueFromString(String value, String shortName, RutaEnvironment environment) {
+    List<Object> result = new ArrayList<>();
+    Class<?> genericType = environment.getVariableGenericType(shortName);
+    String[] split = StringUtils.split(value, RutaEngine.SEPARATOR_VAR_VALUES);
+    for (String string : split) {
+      result.add(getVariableValueFromString(string.trim(), genericType));
+    }
+    return result;
+  }
+
   public static void addSourceDocumentInformation(CAS cas, File each) {
     Type sdiType = cas.getTypeSystem()
             .getType("org.apache.uima.examples.SourceDocumentInformation");

Modified: uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java?rev=1757530&r1=1757529&r2=1757530&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java (original)
+++ uima/ruta/trunk/ruta-core/src/main/java/org/apache/uima/ruta/expression/type/TypeListVariableExpression.java Wed Aug 24 14:26:44 2016
@@ -47,6 +47,8 @@ public class TypeListVariableExpression
         result.add(((ITypeExpression) each).getType(context, stream));
       } else if (each instanceof Type) {
         result.add((Type) each);
+      } else if(each instanceof String) {
+        result.add(parent.getEnvironment().getType((String) each));
       }
     }
     return result;

Modified: uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java?rev=1757530&r1=1757529&r2=1757530&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java (original)
+++ uima/ruta/trunk/ruta-core/src/test/java/org/apache/uima/ruta/engine/ParamVarTest.java Wed Aug 24 14:26:44 2016
@@ -23,6 +23,7 @@ import java.util.HashMap;
 import java.util.Map;
 
 import org.apache.uima.cas.CAS;
+import org.apache.uima.ruta.type.CW;
 import org.apache.uima.ruta.type.SW;
 import org.junit.Test;
 
@@ -52,16 +53,18 @@ public class ParamVarTest {
     script += "type2{-> T7};\n";
     CAS cas = null;
     Map<String, Object> params = new HashMap<String, Object>();
-    params.put(RutaEngine.PARAM_VAR_NAMES, new String[] {"First.s", "Second.s", "s", "i", "b", "type1", "type2"});
-    params.put(RutaEngine.PARAM_VAR_VALUES, new String[] {"Some", "text", "Some", "0", "true", SW.class.getName(), "CW"});
-    
+    params.put(RutaEngine.PARAM_VAR_NAMES,
+            new String[] { "First.s", "Second.s", "s", "i", "b", "type1", "type2" });
+    params.put(RutaEngine.PARAM_VAR_VALUES,
+            new String[] { "Some", "text", "Some", "0", "true", SW.class.getName(), "CW" });
+
     try {
       cas = RutaTestUtils.getCAS(document);
       Ruta.apply(cas, script, params);
     } catch (Exception e) {
       e.printStackTrace();
     }
-    
+
     RutaTestUtils.assertAnnotationsEquals(cas, 1, 1, "Some");
     RutaTestUtils.assertAnnotationsEquals(cas, 2, 1, "text");
     RutaTestUtils.assertAnnotationsEquals(cas, 3, 1, "Some");
@@ -72,4 +75,23 @@ public class ParamVarTest {
 
     cas.release();
   }
+
+  @Test
+  public void testMultiValue() throws Exception {
+    String document = "Some text.";
+    String script = "";
+    script += "TYPELIST tl;";
+    script += "ANY{PARTOF(tl) -> T1};";
+    Map<String, Object> params = new HashMap<String, Object>();
+    params.put(RutaEngine.PARAM_VAR_NAMES, new String[] { "tl" });
+    params.put(RutaEngine.PARAM_VAR_VALUES, new String[] {
+        SW.class.getName() + RutaEngine.SEPARATOR_VAR_VALUES + CW.class.getName() });
+
+    CAS cas = RutaTestUtils.getCAS(document);
+      Ruta.apply(cas, script, params);
+
+    RutaTestUtils.assertAnnotationsEquals(cas, 1, 2, "Some", "text");
+    
+    cas.release();
+  }
 }

Modified: uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.overview.xml
URL: http://svn.apache.org/viewvc/uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.overview.xml?rev=1757530&r1=1757529&r2=1757530&view=diff
==============================================================================
--- uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.overview.xml (original)
+++ uima/ruta/trunk/ruta-docbook/src/docbook/tools.ruta.overview.xml Wed Aug 24 14:26:44 2016
@@ -1129,8 +1129,8 @@ Document{-> EXEC(MyAnalysisEngine, {MyTy
             This parameter specifies the values of variables as string values in an string array. It is
             used in combination with the parameter varNames, which contains the names of the corresponding
             variables. The n-th entry of this string array specifies the value of the n-th entry of the
-            string array of the parameter varNames. Only value of the kinds annotation type, string, boolean, int, double
-            and float are allowed.
+            string array of the parameter varNames. The values for list variables are separated by the character 
+            <quote>,</quote>. Thus, the usage of commas is not allowed if the variable is a list.
           </para>
         </section>
         <section id="ugr.tools.ruta.ae.basic.parameter.dictRemoveWS">