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;
}