/** * A factory method for creating a ConfigurationParameter object. * * @param name * the parameter name * @param parameterClass * the parameter class * @param parameterDescription * the parameter description * @param isMandatory * whether the parameter is mandatory * @return the configuration parameter */ public static ConfigurationParameter createPrimitiveParameter(String name, Class<?> parameterClass, String parameterDescription, boolean isMandatory) { String parameterClassName; if (parameterClass.isArray()) { parameterClassName = parameterClass.getComponentType().getName(); } else { parameterClassName = parameterClass.getName(); } String parameterType = JAVA_UIMA_TYPE_MAP.get(parameterClassName); if (parameterType == null) { // If we cannot map the type, we'll try to convert it to a String parameterType = ConfigurationParameter.TYPE_STRING; } return createPrimitiveParameter(name, parameterType, parameterDescription, parameterClass.isArray(), isMandatory); }
/** * This method creates configuration data for a given class definition using reflection and the * configuration parameter annotation * * @param componentClass * the class to analyze * @return the configuration settings extracted from the class */ public static ConfigurationData createConfigurationData(Class<?> componentClass) { List<ConfigurationParameter> configurationParameters = new ArrayList<ConfigurationParameter>(); List<Object> configurationValues = new ArrayList<Object>(); for (Field field : ReflectionUtil.getFields(componentClass)) { if (ConfigurationParameterFactory.isConfigurationParameterField(field)) { configurationParameters.add(ConfigurationParameterFactory.createPrimitiveParameter(field)); configurationValues.add(ConfigurationParameterFactory.getDefaultValue(field)); } } return new ConfigurationData( configurationParameters.toArray(new ConfigurationParameter[configurationParameters .size()]), configurationValues.toArray(new Object[configurationValues.size()])); }
ConfigurationParameter param = ConfigurationParameterFactory.createPrimitiveParameter(name, value.getClass(), null, false); configurationParameters.add(param);
/** * Create configuration parameter declarations and settings from a list of (name, value) pairs. * * @param specifier * The ResourceCreationSpecifier whose parameters are to be set. * @param configurationData * The configuration parameters to be set. These should be supplied as (name, value) * pairs, so there should always be an even number of parameters. */ public static void setConfigurationParameters(ResourceCreationSpecifier specifier, Object... configurationData) { if (configurationData == null || configurationData.length == 0) { return; } ConfigurationParameterFactory.ensureParametersComeInPairs(configurationData); ConfigurationParameter[] configurationParameters = new ConfigurationParameter[configurationData.length / 2]; Object[] configurationValues = new Object[configurationData.length / 2]; for (int i = 0; i < configurationValues.length; i++) { String name = (String) configurationData[i * 2]; Object value = configurationData[i * 2 + 1]; ConfigurationParameter param = ConfigurationParameterFactory.createPrimitiveParameter(name, value.getClass(), null, false); configurationParameters[i] = param; configurationValues[i] = ConfigurationParameterFactory.convertParameterValue(param, value); } setConfigurationParameters(specifier, configurationParameters, configurationValues); }
/** * A factory method for creating a ConfigurationParameter from a given field definition * * @param field * the field to analyze * @return the configuration parameter. */ public static ConfigurationParameter createPrimitiveParameter(Field field) { if (isConfigurationParameterField(field)) { org.apache.uima.fit.descriptor.ConfigurationParameter annotation = ReflectionUtil .getAnnotation(field, org.apache.uima.fit.descriptor.ConfigurationParameter.class); String name = getConfigurationParameterName(field); boolean multiValued = isMultiValued(field); String parameterType = getConfigurationParameterType(field); return createPrimitiveParameter(name, parameterType, annotation.description(), multiValued, annotation.mandatory()); } else { throw new IllegalArgumentException("field is not annotated with annotation of type " + org.apache.uima.fit.descriptor.ConfigurationParameter.class.getName()); } }