You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@uima.apache.org by re...@apache.org on 2013/03/30 20:03:13 UTC

svn commit: r1462844 - in /uima/sandbox/uimafit/trunk/uimafit/src: main/java/org/apache/uima/fit/factory/ test/java/org/apache/uima/fit/component/initialize/ test/java/org/apache/uima/fit/factory/testAes/

Author: rec
Date: Sat Mar 30 19:03:13 2013
New Revision: 1462844

URL: http://svn.apache.org/r1462844
Log:
[UIMA-2780] Initialize multi-value parameters with a single value 
https://issues.apache.org/jira/browse/UIMA-2780

Modified:
    uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java
    uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java
    uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ConfigurationParameterFactory.java
    uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FlowControllerFactory.java
    uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ResourceCreationSpecifierFactory.java
    uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/component/initialize/ConfigurationParameterInitializerTest.java
    uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/testAes/ParameterizedAE.java

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java?rev=1462844&r1=1462843&r2=1462844&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/AnalysisEngineFactory.java Sat Mar 30 19:03:13 2013
@@ -24,6 +24,7 @@ import static org.apache.uima.fit.descri
 import static org.apache.uima.fit.descriptor.OperationalProperties.OUTPUTS_NEW_CASES_DEFAULT;
 import static org.apache.uima.fit.factory.ConfigurationParameterFactory.createConfigurationData;
 import static org.apache.uima.fit.factory.ConfigurationParameterFactory.ensureParametersComeInPairs;
+import static org.apache.uima.fit.factory.ConfigurationParameterFactory.setParameters;
 import static org.apache.uima.fit.factory.ExternalResourceFactory.bindExternalResource;
 import static org.apache.uima.fit.factory.TypeSystemDescriptionFactory.createTypeSystemDescription;
 
@@ -297,15 +298,9 @@ public final class AnalysisEngineFactory
     AnalysisEngineMetaData meta = desc.getAnalysisEngineMetaData();
     ResourceMetaDataFactory.configureResourceMetaData(meta, componentClass);
 
-    ConfigurationData reflectedConfigurationData = createConfigurationData(componentClass);
-    ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
-            reflectedConfigurationData.configurationParameters,
-            reflectedConfigurationData.configurationValues);
-    if (configurationParameters != null) {
-      ResourceCreationSpecifierFactory.setConfigurationParameters(desc, configurationParameters,
-              configurationValues);
-    }
-
+    // set parameters
+    setParameters(desc, componentClass, configurationParameters, configurationValues);
+    
     // set the type system
     if (typeSystem != null) {
       desc.getAnalysisEngineMetaData().setTypeSystem(typeSystem);

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java?rev=1462844&r1=1462843&r2=1462844&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/CollectionReaderFactory.java Sat Mar 30 19:03:13 2013
@@ -20,6 +20,7 @@ package org.apache.uima.fit.factory;
 
 import static org.apache.uima.fit.factory.ConfigurationParameterFactory.createConfigurationData;
 import static org.apache.uima.fit.factory.ConfigurationParameterFactory.ensureParametersComeInPairs;
+import static org.apache.uima.fit.factory.ConfigurationParameterFactory.setParameters;
 import static org.apache.uima.fit.factory.ExternalResourceFactory.bindExternalResource;
 import static org.apache.uima.fit.factory.FsIndexFactory.createFsIndexCollection;
 import static org.apache.uima.fit.factory.ResourceCreationSpecifierFactory.createResourceCreationSpecifier;
@@ -251,15 +252,9 @@ public final class CollectionReaderFacto
     desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
     desc.setImplementationName(readerClass.getName());
 
-    ConfigurationData reflectedConfigurationData = createConfigurationData(readerClass);
-    ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
-            reflectedConfigurationData.configurationParameters,
-            reflectedConfigurationData.configurationValues);
-    if (configurationParameters != null) {
-      ResourceCreationSpecifierFactory.setConfigurationParameters(desc, configurationParameters,
-              configurationValues);
-    }
-
+    // set parameters
+    setParameters(desc, readerClass, configurationParameters, configurationValues);
+    
     // Configure resource meta data
     ResourceMetaData meta = desc.getMetaData();
     ResourceMetaDataFactory.configureResourceMetaData(meta, readerClass);

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ConfigurationParameterFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ConfigurationParameterFactory.java?rev=1462844&r1=1462843&r2=1462844&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ConfigurationParameterFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ConfigurationParameterFactory.java Sat Mar 30 19:03:13 2013
@@ -289,8 +289,38 @@ public final class ConfigurationParamete
   }
 
   /**
+   * Analyze a component for parameters and default values, merge that with parameter values
+   * specified, potentially adding extra parameters. Set the merged result into the provided
+   * descriptor.
+   * 
+   * @param desc
+   *          the descriptor into which to merge the parameters
+   * @param componentClass
+   *          the component class which will be analyzed for parameters. Must match the
+   *          implementationName set in the descriptor.
+   * @param configurationParameters
+   *          additional parameters
+   * @param configurationValues
+   */
+  public static void setParameters(ResourceCreationSpecifier desc,
+          Class<?> componentClass, ConfigurationParameter[] configurationParameters,
+          Object[] configurationValues) {
+    ConfigurationData reflectedConfigurationData = ConfigurationParameterFactory
+            .createConfigurationData(componentClass);
+    ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
+            reflectedConfigurationData.configurationParameters,
+            reflectedConfigurationData.configurationValues);
+    if (configurationParameters != null) {
+      ResourceCreationSpecifierFactory.setConfigurationParameters(desc, configurationParameters,
+              configurationValues);
+    }
+  }
+  
+  /**
    * This method converts configuration data provided as an array of objects and returns a
-   * {@link ConfigurationData} object
+   * {@link ConfigurationData} object. This should only be used to prepare values supplied in a
+   * factory method call for merging with existing parameter declarations, e.g. extracted from a
+   * class using {@link #createConfigurationData(Class)}.
    */
   public static ConfigurationData createConfigurationData(Object... configurationData) {
     if (configurationData == null) {
@@ -376,8 +406,8 @@ public final class ConfigurationParamete
 
   /**
    * Provides a mechanism to add configuration parameter information to a specifier for the given
-   * classes. this method may be useful in situations where a class definition has annotated
-   * configuration parameters that you want to include in the given specifier
+   * classes. This method may be useful in situations where a class definition has annotated
+   * configuration parameters that you want to include in the given specifier.
    */
   public static void addConfigurationParameters(ResourceCreationSpecifier specifier,
           List<Class<?>> dynamicallyLoadedClasses) {
@@ -388,12 +418,11 @@ public final class ConfigurationParamete
               reflectedConfigurationData.configurationParameters,
               reflectedConfigurationData.configurationValues);
     }
-
   }
 
   /**
    * Provides a mechanism to add configuration parameter information to a specifier for the given
-   * classes. this method may be useful in situations where a class definition has annotated
+   * classes. This method may be useful in situations where a class definition has annotated
    * configuration parameters that you want to include in the given specifier
    */
   public static void addConfigurationParameters(ResourceCreationSpecifier specifier,

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FlowControllerFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FlowControllerFactory.java?rev=1462844&r1=1462843&r2=1462844&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FlowControllerFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/FlowControllerFactory.java Sat Mar 30 19:03:13 2013
@@ -20,6 +20,7 @@ package org.apache.uima.fit.factory;
 
 import static org.apache.uima.fit.factory.ConfigurationParameterFactory.createConfigurationData;
 import static org.apache.uima.fit.factory.ConfigurationParameterFactory.ensureParametersComeInPairs;
+import static org.apache.uima.fit.factory.ConfigurationParameterFactory.setParameters;
 import static org.apache.uima.fit.factory.ExternalResourceFactory.bindExternalResource;
 
 import java.util.Collection;
@@ -90,15 +91,8 @@ public final class FlowControllerFactory
     desc.setFrameworkImplementation(Constants.JAVA_FRAMEWORK_NAME);
     desc.setImplementationName(flowControllerClass.getName());
 
-    ConfigurationData reflectedConfigurationData = ConfigurationParameterFactory
-            .createConfigurationData(flowControllerClass);
-    ResourceCreationSpecifierFactory.setConfigurationParameters(desc,
-            reflectedConfigurationData.configurationParameters,
-            reflectedConfigurationData.configurationValues);
-    if (configurationParameters != null) {
-      ResourceCreationSpecifierFactory.setConfigurationParameters(desc, configurationParameters,
-              configurationValues);
-    }
+    // set parameters
+    setParameters(desc, flowControllerClass, configurationParameters, configurationValues);
 
     // Configure resource meta data
     ResourceMetaData meta = desc.getMetaData();
@@ -118,5 +112,4 @@ public final class FlowControllerFactory
 
     return desc;
   }
-
 }

Modified: uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ResourceCreationSpecifierFactory.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ResourceCreationSpecifierFactory.java?rev=1462844&r1=1462843&r2=1462844&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ResourceCreationSpecifierFactory.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/main/java/org/apache/uima/fit/factory/ResourceCreationSpecifierFactory.java Sat Mar 30 19:03:13 2013
@@ -19,7 +19,9 @@
 package org.apache.uima.fit.factory;
 
 import java.io.IOException;
+import java.lang.reflect.Array;
 import java.net.URL;
+import java.util.Collection;
 
 import org.apache.uima.UIMAException;
 import org.apache.uima.UIMAFramework;
@@ -152,12 +154,32 @@ public final class ResourceCreationSpeci
             .getConfigurationParameterDeclarations();
     ConfigurationParameterSettings paramSettings = metaData.getConfigurationParameterSettings();
     for (int i = 0; i < configurationParameters.length; i++) {
-      if (paramDecls != null
-              && paramDecls.getConfigurationParameter(null, configurationParameters[i].getName()) == null) {
+      ConfigurationParameter decl = paramDecls.getConfigurationParameter(null, configurationParameters[i].getName());
+      if (paramDecls != null && decl == null) {
         paramDecls.addConfigurationParameter(configurationParameters[i]);
+        decl = configurationParameters[i];
       }
-      paramSettings.setParameterValue(configurationParameters[i].getName(), configurationValues[i]);
+      
+      // Upgrade single-value to multi-value if necessary
+      Object value = configurationValues[i];
+      if ((value != null) && decl.isMultiValued() && !isMultiValue(value)) {
+        value = Array.newInstance(value.getClass(), 1);
+        Array.set(value, 0, configurationValues[i]);
+      }
+      
+      paramSettings.setParameterValue(configurationParameters[i].getName(), value);
     }
   }
 
+  /**
+   * Check if the given parameter represents one value or multiple values.
+   */
+  private static boolean isMultiValue(Object aObject) {
+    if (aObject != null) {
+      return (aObject instanceof Collection) || aObject.getClass().isArray();
+    }
+    else {
+      return false;
+    }
+  }
 }

Modified: uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/component/initialize/ConfigurationParameterInitializerTest.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/component/initialize/ConfigurationParameterInitializerTest.java?rev=1462844&r1=1462843&r2=1462844&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/component/initialize/ConfigurationParameterInitializerTest.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/component/initialize/ConfigurationParameterInitializerTest.java Sat Mar 30 19:03:13 2013
@@ -72,7 +72,8 @@ public class ConfigurationParameterIniti
             typeSystemDescription, ParameterizedAE.PARAM_FLOAT_3, 1.234f,
             ParameterizedAE.PARAM_FLOAT_6, new Float[] { 1.234f, 0.001f }, "file2", "foo/bar",
             "files9", new File[] { new File("test/data/file"), new File("test/data/file2") },
-            ParameterizedAE.PARAM_STRING_9, new String[] { "singleelementarray" });
+            ParameterizedAE.PARAM_STRING_9, "singleelementarray",
+            "files10", new File("test/data/file"), "booleans8", true);
 
     ParameterizedAE component = new ParameterizedAE();
     component.initialize(engine.getUimaContext());
@@ -89,6 +90,7 @@ public class ConfigurationParameterIniti
     assertEquals(1, component.getStrings8().size());
     assertTrue(component.getStrings8().contains("cherry"));
     assertTrue(component.getStrings9().contains("singleelementarray"));
+    assertEquals(0, component.getStrings10().size());
 
     assertFalse(component.isBoolean1());
 
@@ -114,6 +116,8 @@ public class ConfigurationParameterIniti
     assertTrue(component.getBooleans6().get(1));
     assertTrue(component.getBooleans6().get(2));
     assertFalse(component.getBooleans6().get(3));
+    assertTrue(component.getBooleans7().get(0));
+    assertTrue(component.getBooleans8().get(0));
 
     assertEquals(0, component.getInt1());
     assertEquals(42, component.getInt2());
@@ -161,6 +165,7 @@ public class ConfigurationParameterIniti
     assertEquals(2, component.getFiles9().size());
     assertEquals(new File("test/data/file"), component.getFiles9().get(0));
     assertEquals(new File("test/data/file2"), component.getFiles9().get(1));
+    assertEquals(new File("test/data/file"), component.getFiles10().get(0));
     
     assertNull(component.getRegex1());
     assertTrue(component.getRegex2().matcher("This is uimaFIT calling!").matches());

Modified: uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/testAes/ParameterizedAE.java
URL: http://svn.apache.org/viewvc/uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/testAes/ParameterizedAE.java?rev=1462844&r1=1462843&r2=1462844&view=diff
==============================================================================
--- uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/testAes/ParameterizedAE.java (original)
+++ uima/sandbox/uimafit/trunk/uimafit/src/test/java/org/apache/uima/fit/factory/testAes/ParameterizedAE.java Sat Mar 30 19:03:13 2013
@@ -71,7 +71,6 @@ public class ParameterizedAE extends JCa
   @ConfigurationParameter(name = PARAM_STRING_9, mandatory = false)
   private Set<String> strings9;
 
-  @SuppressWarnings("unused")
   @ConfigurationParameter(name = "strings10", mandatory = true, defaultValue = {})
   private Set<String> strings10;
 
@@ -90,6 +89,10 @@ public class ParameterizedAE extends JCa
   public Set<String> getStrings9() {
     return strings9;
   }
+  
+  public Set<String> getStrings10() {
+    return strings10;
+  }
 
   public static final String PARAM_BOOLEAN_1 = "boolean1";
   @ConfigurationParameter(name = PARAM_BOOLEAN_1, mandatory = true, defaultValue = "false")
@@ -127,6 +130,20 @@ public class ParameterizedAE extends JCa
     return booleans6;
   }
 
+  @ConfigurationParameter(name = "booleans7", defaultValue = "true")
+  private LinkedList<Boolean> booleans7;
+
+  public LinkedList<Boolean> getBooleans7() {
+    return booleans7;
+  }
+
+  @ConfigurationParameter(name = "booleans8", mandatory = false)
+  private LinkedList<Boolean> booleans8;
+
+  public LinkedList<Boolean> getBooleans8() {
+    return booleans8;
+  }
+
   public static final String PARAM_INT_1 = "int1";
   @ConfigurationParameter(name = PARAM_INT_1, mandatory = true, defaultValue = "0")
   private int int1;
@@ -236,6 +253,9 @@ public class ParameterizedAE extends JCa
   @ConfigurationParameter(name = "files9", mandatory = false)
   private List<File> files9;
 
+  @ConfigurationParameter(name = "files10", mandatory = false)
+  private List<File> files10;
+
   public EnumValue getEnum1() {
     return enum1;
   }
@@ -288,6 +308,10 @@ public class ParameterizedAE extends JCa
     return files9;
   }
 
+  public List<File> getFiles10() {
+    return files10;
+  }
+  
   public float[] getFloat4() {
     return float4;
   }