/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.function.config;
import java.util.Collections;
import java.util.List;
import org.apache.commons.lang.builder.EqualsBuilder;
import org.apache.commons.lang.builder.HashCodeBuilder;
import org.apache.commons.lang.builder.ToStringBuilder;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import org.threeten.bp.Instant;
import com.google.common.collect.ImmutableList;
import com.google.common.collect.Lists;
import com.opengamma.core.config.Config;
import com.opengamma.core.config.ConfigGroups;
import com.opengamma.util.ArgumentChecker;
/**
* Container for static function configuration definitions.
* <p>
* Note that
*/
@Config(description = "Function configuration definition", group = ConfigGroups.MISC)
public final class FunctionConfigurationDefinition {
private static final Logger s_logger = LoggerFactory.getLogger(FunctionConfigurationDefinition.class);
/**
* Function bundle name.
*/
private final String _name;
/**
* List of linked function configuration definition documents
*/
private final List<String> _functionConfigurationDefinitions;
/**
* List of static functions.
*/
private final List<StaticFunctionConfiguration> _staticFunctions;
/**
* List of parameterized functions.
*/
private final List<ParameterizedFunctionConfiguration> _parameterizedFunctions;
/**
* Creates an instance
*
* @param name the name of the function configuration definition, not null.
* @param functionConfigurationDefinitions the names of linked function configuration definition documents, not null.
* @param staticFunctions the list of static function configurations, not null.
* @param parameterizedFunctions the list of parameterized function configurations, not null.
*/
public FunctionConfigurationDefinition(final String name, final List<String> functionConfigurationDefinitions, final List<StaticFunctionConfiguration> staticFunctions,
final List<ParameterizedFunctionConfiguration> parameterizedFunctions) {
ArgumentChecker.notNull(name, "name");
ArgumentChecker.notNull(functionConfigurationDefinitions, "functionConfigurationDefinitions");
ArgumentChecker.notNull(staticFunctions, "staticFunctions");
ArgumentChecker.notNull(parameterizedFunctions, "parameterizedFunctions");
_name = name;
_functionConfigurationDefinitions = ImmutableList.copyOf(functionConfigurationDefinitions);
_staticFunctions = ImmutableList.copyOf(staticFunctions);
_parameterizedFunctions = ImmutableList.copyOf(parameterizedFunctions);
}
/**
* Gets the name.
*
* @return the name
*/
public String getName() {
return _name;
}
/**
* Gets the functionConfigurationDefinitions.
*
* @return the functionConfigurationDefinitions
*/
public List<String> getFunctionConfigurationDefinitions() {
return _functionConfigurationDefinitions;
}
/**
* Gets the staticFunctions.
*
* @return the staticFunctions
*/
public List<StaticFunctionConfiguration> getStaticFunctions() {
return _staticFunctions;
}
/**
* Gets the parameterizedFunctions.
*
* @return the parameterizedFunctions
*/
public List<ParameterizedFunctionConfiguration> getParameterizedFunctions() {
return _parameterizedFunctions;
}
@Override
public int hashCode() {
return HashCodeBuilder.reflectionHashCode(this);
}
@Override
public boolean equals(Object obj) {
return EqualsBuilder.reflectionEquals(this, obj);
}
@Override
public String toString() {
return ToStringBuilder.reflectionToString(this);
}
/**
* Creates a FunctionConfigurationDefinition from a given FunctionConfigurationSource
*
* @param name the definition name, not-null.
* @param configurationSource the function configuration source, not-null.
* @return the created function configuration definition, not-null.
*/
public static FunctionConfigurationDefinition of(final String name, final FunctionConfigurationSource configurationSource) {
return of(name, Collections.<String>emptyList(), configurationSource);
}
/**
* Creates a static FunctionConfigurationDefinition from a given FunctionConfigurationSource
*
* @param name the definition name, not-null.
* @param linkedConfigs the list of linked configs, not-null.
* @param configurationSource the function configuration source, not-null.
* @return the created function configuration definition, not-null.
*/
public static FunctionConfigurationDefinition of(final String name, final List<String> linkedConfigs, final FunctionConfigurationSource configurationSource) {
ArgumentChecker.notNull(name, "name");
ArgumentChecker.notNull(configurationSource, "configurationSource");
ArgumentChecker.notNull(linkedConfigs, "linkedConfigs");
final List<FunctionConfiguration> functions = configurationSource.getFunctionConfiguration(Instant.now()).getFunctions();
List<StaticFunctionConfiguration> staticFunctions = Lists.newArrayList();
List<ParameterizedFunctionConfiguration> parameterizedFunctions = Lists.newArrayList();
for (FunctionConfiguration functionConfiguration : functions) {
if (functionConfiguration instanceof ParameterizedFunctionConfiguration) {
parameterizedFunctions.add((ParameterizedFunctionConfiguration) functionConfiguration);
} else if (functionConfiguration instanceof StaticFunctionConfiguration) {
staticFunctions.add((StaticFunctionConfiguration) functionConfiguration);
} else {
s_logger.warn("Unsupported FunctionConfiguration type {} ", functionConfiguration.getClass());
}
}
return new FunctionConfigurationDefinition(name, linkedConfigs, staticFunctions, parameterizedFunctions);
}
}