/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.function.config;
import java.lang.reflect.Modifier;
import java.util.Arrays;
import java.util.LinkedList;
import java.util.List;
import com.opengamma.engine.function.FunctionDefinition;
import com.opengamma.util.SingletonFactoryBean;
/**
* Factory bean template for creating a simple {@link FunctionConfigurationSource} which returns a static configuration. The configuration may be generated from additional parameters set on the bean
* or entirely from static data.
*/
public abstract class AbstractFunctionConfigurationBean extends SingletonFactoryBean<FunctionConfigurationSource> {
protected static <F extends FunctionDefinition> FunctionConfiguration functionConfiguration(final Class<F> clazz, final String... args) {
if (Modifier.isAbstract(clazz.getModifiers())) {
throw new IllegalStateException("Attempting to register an abstract class - " + clazz);
}
if (args.length == 0) {
return new StaticFunctionConfiguration(clazz.getName());
}
return new ParameterizedFunctionConfiguration(clazz.getName(), Arrays.asList(args));
}
protected abstract void addAllConfigurations(final List<FunctionConfiguration> functions);
protected FunctionConfigurationBundle createRepositoryConfiguration() {
final List<FunctionConfiguration> functions = new LinkedList<FunctionConfiguration>();
addAllConfigurations(functions);
return new FunctionConfigurationBundle(functions);
}
@Override
protected FunctionConfigurationSource createObject() {
return new SimpleFunctionConfigurationSource(createRepositoryConfiguration());
}
}