/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.surface;
import java.util.List;
import com.opengamma.core.change.ChangeEvent;
import com.opengamma.core.config.impl.ConfigItem;
import com.opengamma.engine.function.config.AbstractFunctionConfigurationBean;
import com.opengamma.engine.function.config.BeanDynamicFunctionConfigurationSource;
import com.opengamma.engine.function.config.FunctionConfiguration;
import com.opengamma.engine.function.config.FunctionConfigurationSource;
import com.opengamma.engine.function.config.VersionedFunctionConfigurationBean;
import com.opengamma.financial.config.ConfigMasterChangeProvider;
import com.opengamma.master.config.ConfigDocument;
import com.opengamma.master.config.ConfigMaster;
import com.opengamma.master.config.ConfigSearchRequest;
import com.opengamma.master.config.impl.ConfigSearchIterator;
import com.opengamma.util.ArgumentChecker;
/**
* Function repository configuration source for the functions contained in this package.
*/
public class SurfaceFunctions extends AbstractFunctionConfigurationBean {
/**
* Default instance of a repository configuration source exposing the functions from this package.
* @return The configuration source exposing functions from this package
*/
public static FunctionConfigurationSource instance() {
return new SurfaceFunctions().getObjectCreating();
}
/**
* Returns a configuration source populated with surface definition and specification
* functions that listen to changes.
* @param configMaster The config master
* @return A configuration source
*/
public static FunctionConfigurationSource providers(final ConfigMaster configMaster) {
return new BeanDynamicFunctionConfigurationSource(ConfigMasterChangeProvider.of(configMaster)) {
@Override
protected VersionedFunctionConfigurationBean createConfiguration() {
final Providers providers = new Providers();
providers.setConfigMaster(configMaster);
return providers;
}
@Override
protected boolean isPropogateEvent(final ChangeEvent event) {
return Providers.isMonitoredType(event.getObjectId().getValue());
}
};
}
/**
* Function repository configuration source for curve functions based on the items defined in a {@link ConfigMaster}.
*/
public static class Providers extends VersionedFunctionConfigurationBean {
/** The configuration master */
private ConfigMaster _configMaster;
/**
* Sets the config master.
*
* @param configMaster The config master, not null
*/
public void setConfigMaster(final ConfigMaster configMaster) {
ArgumentChecker.notNull(configMaster, "config master");
_configMaster = configMaster;
}
/**
* Gets the config master.
*
* @return The config master
*/
public ConfigMaster getConfigMaster() {
return _configMaster;
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
final ConfigSearchRequest<SurfaceDefinition<?, ?>> searchRequest = new ConfigSearchRequest<>();
searchRequest.setVersionCorrection(getVersionCorrection());
searchRequest.setType(SurfaceDefinition.class);
for (final ConfigDocument configDocument : ConfigSearchIterator.iterable(getConfigMaster(), searchRequest)) {
final SurfaceDefinition<?, ?> config = ((ConfigItem<SurfaceDefinition<?, ?>>) configDocument.getConfig()).getValue();
functions.add(functionConfiguration(SurfaceDefinitionFunction.class, config.getName()));
}
searchRequest.setType(SurfaceSpecification.class);
for (final ConfigDocument configDocument : ConfigSearchIterator.iterable(getConfigMaster(), searchRequest)) {
final SurfaceSpecification config = ((ConfigItem<SurfaceSpecification>) configDocument.getConfig()).getValue();
functions.add(functionConfiguration(SurfaceSpecificationFunction.class, config.getName()));
}
}
/**
* Returns true if the type is {@link SurfaceDefinition} or {@link SurfaceSpecification}.
* @param type
* @return
*/
/* package */ static boolean isMonitoredType(final String type) {
return SurfaceDefinition.class.getName().equals(type) || SurfaceSpecification.class.getName().equals(type);
}
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
}
}