public void testReconfigure() throws Exception {
try {
// set up some resource metadata and create a resource
ResourceCreationSpecifier specifier = new MyTestSpecifier();
ResourceMetaData md = specifier.getMetaData();
md.setName("TestResource");
md.setDescription("Resource used for Testing the Resource_impl base class");
ConfigurationParameter p1 = new ConfigurationParameter_impl();
p1.setName("StringParam");
p1.setDescription("parameter with String data type");
p1.setType(ConfigurationParameter.TYPE_STRING);
ConfigurationParameter p2 = new ConfigurationParameter_impl();
p2.setName("IntegerParam");
p2.setDescription("parameter with Integer data type");
p2.setType(ConfigurationParameter.TYPE_INTEGER);
ConfigurationParameter p3 = new ConfigurationParameter_impl();
p3.setName("BooleanParam");
p3.setDescription("parameter with Boolean data type");
p3.setType(ConfigurationParameter.TYPE_BOOLEAN);
ConfigurationParameter p4 = new ConfigurationParameter_impl();
p4.setName("FloatParam");
p4.setDescription("parameter with Float data type");
p4.setType(ConfigurationParameter.TYPE_FLOAT);
ConfigurationParameter p5 = new ConfigurationParameter_impl();
p5.setName("StringArrayParam");
p5.setDescription("mutli-valued parameter with String data type");
p5.setType(ConfigurationParameter.TYPE_STRING);
p5.setMultiValued(true);
ConfigurationParameter p6 = new ConfigurationParameter_impl();
p6.setName("IntegerArrayParam");
p6.setDescription("multi-valued parameter with Integer data type");
p6.setType(ConfigurationParameter.TYPE_INTEGER);
p6.setMultiValued(true);
ConfigurationParameter p7 = new ConfigurationParameter_impl();
p7.setName("BooleanArrayParam");
p7.setDescription("multi-valued parameter with Boolean data type");
p7.setType(ConfigurationParameter.TYPE_BOOLEAN);
p7.setMultiValued(true);
ConfigurationParameter p8 = new ConfigurationParameter_impl();
p8.setName("FloatArrayParam");
p8.setDescription("multi-valued parameter with Float data type");
p8.setType(ConfigurationParameter.TYPE_FLOAT);
p8.setMultiValued(true);
md.getConfigurationParameterDeclarations().setConfigurationParameters(
new ConfigurationParameter[] { p1, p2, p3, p4, p5, p6, p7, p8 });
ConfigurableResource testResource1 = new MyTestResource();
testResource1.initialize(specifier, null);
// valid settings
String[] paramNames = { "StringParam", "BooleanParam", "IntegerParam", "FloatParam",
"StringArrayParam", "BooleanArrayParam", "IntegerArrayParam", "FloatArrayParam" };
String theStr = "hello world";
Boolean theBool = Boolean.valueOf(false);
Integer theInt = Integer.valueOf(42);
Float theFloat = Float.valueOf(2.718281828459045F);
String[] theStrArr = { "the", "quick", "brown", "fox" };
Boolean[] theBoolArr = { Boolean.valueOf(false), Boolean.valueOf(true) };
Integer[] theIntArr = { Integer.valueOf(1), Integer.valueOf(2), Integer.valueOf(3) };
Float[] theFloatArr = { Float.valueOf(3.0F), Float.valueOf(3.1F), Float.valueOf(3.14F) };
Object[] values = new Object[] { theStr, theBool, theInt, theFloat, theStrArr, theBoolArr,
theIntArr, theFloatArr };
for (int i = 0; i < paramNames.length; i++) {
testResource1.setConfigParameterValue(paramNames[i], values[i]);
}
testResource1.reconfigure();
// check
for (int i = 0; i < paramNames.length; i++) {
Object val = testResource1.getConfigParameterValue(paramNames[i]);
Assert.assertEquals(val, values[i]);
}
// invalid settings
// wrong type
Exception ex = null;
testResource1.setConfigParameterValue("StringParam", Integer.valueOf(13));
try {
testResource1.reconfigure();
} catch (ResourceConfigurationException e) {
ex = e;
}
Assert.assertNotNull(ex);
ex = null;
testResource1.setConfigParameterValue("IntegerArrayParam", new Object[] { "A", "B", "C" });
try {
testResource1.reconfigure();
} catch (ResourceConfigurationException e) {
ex = e;
}
Assert.assertNotNull(ex);
// inappropriate array
ex = null;
testResource1.setConfigParameterValue("FloatParam", new Float[] { Float.valueOf(0.1F),
Float.valueOf(0.2F), Float.valueOf(0.3F) });
try {
testResource1.reconfigure();
} catch (ResourceConfigurationException e) {
ex = e;
}
Assert.assertNotNull(ex);
// array required
ex = null;
testResource1.setConfigParameterValue("BooleanArrayParam", Boolean.valueOf(true));
try {
testResource1.reconfigure();
} catch (ResourceConfigurationException e) {
ex = e;
}
Assert.assertNotNull(ex);
// required parameter set to null
ex = null;
testResource1.setConfigParameterValue("StringParam", null);
try {
testResource1.reconfigure();
} catch (ResourceConfigurationException e) {
ex = e;
}
Assert.assertNotNull(ex);
// Now try a resource that defines configuration groups
// (instantiate metadata from XML TAE descriptor because it's convenient)
XMLInputSource in = new XMLInputSource(JUnitExtension
.getFile("ConfigurableResourceImplTest/AnnotatorWithConfigurationGroups.xml"));
AnalysisEngineDescription desc = UIMAFramework.getXMLParser().parseAnalysisEngineDescription(in);
ResourceMetaData metadata = desc.getMetaData();
MyTestSpecifier spec = new MyTestSpecifier();
spec.setMetaData(metadata);
ConfigurableResource testResource2 = new MyTestResource();
testResource2.initialize(spec, null);