/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.volatility.surface;
import java.util.List;
import com.opengamma.engine.function.config.AbstractFunctionConfigurationBean;
import com.opengamma.engine.function.config.FunctionConfiguration;
import com.opengamma.engine.function.config.FunctionConfigurationSource;
import com.opengamma.util.ArgumentChecker;
/**
* Function repository configuration source for the functions contained in this package and sub-packages.
*/
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();
}
public static FunctionConfigurationSource defaults() {
final Defaults factory = new Defaults();
factory.afterPropertiesSet();
return factory.getObject();
}
public static FunctionConfigurationSource defaults(final String leftXExtrapolatorName, final String rightXExtrapolatorName, final String xInterpolatorName, final String leftYExtrapolatorName,
final String rightYExtrapolatorName, final String yInterpolatorName) {
final Defaults factory = new Defaults();
factory.setLeftXExtrapolatorName(leftXExtrapolatorName);
factory.setRightXExtrapolatorName(rightXExtrapolatorName);
factory.setXInterpolatorName(xInterpolatorName);
factory.setLeftYExtrapolatorName(leftYExtrapolatorName);
factory.setRightYExtrapolatorName(rightYExtrapolatorName);
factory.setYInterpolatorName(yInterpolatorName);
factory.afterPropertiesSet();
return factory.getObject();
}
/**
* Function repository configuration source for the functions contained in this package and sub-packages.
*/
public static class Defaults extends AbstractFunctionConfigurationBean {
private String _leftXExtrapolatorName = "FlatExtrapolator";
private String _rightXExtrapolatorName = "FlatExtrapolator";
private String _xInterpolatorName = "Linear";
private String _leftYExtrapolatorName = "FlatExtrapolator";
private String _rightYExtrapolatorName = "FlatExtrapolator";
private String _yInterpolatorName = "Linear";
public String getLeftXExtrapolatorName() {
return _leftXExtrapolatorName;
}
public void setLeftXExtrapolatorName(final String leftXExtrapolatorName) {
_leftXExtrapolatorName = leftXExtrapolatorName;
}
public String getRightXExtrapolatorName() {
return _rightXExtrapolatorName;
}
public void setRightXExtrapolatorName(final String rightXExtrapolatorName) {
_rightXExtrapolatorName = rightXExtrapolatorName;
}
public String getXInterpolatorName() {
return _xInterpolatorName;
}
public void setXInterpolatorName(final String xInterpolatorName) {
_xInterpolatorName = xInterpolatorName;
}
public String getLeftYExtrapolatorName() {
return _leftYExtrapolatorName;
}
public void setLeftYExtrapolatorName(final String leftYExtrapolatorName) {
_leftYExtrapolatorName = leftYExtrapolatorName;
}
public String getRightYExtrapolatorName() {
return _rightYExtrapolatorName;
}
public void setRightYExtrapolatorName(final String rightYExtrapolatorName) {
_rightYExtrapolatorName = rightYExtrapolatorName;
}
public String getYInterpolatorName() {
return _yInterpolatorName;
}
public void setYInterpolatorName(final String yInterpolatorName) {
_yInterpolatorName = yInterpolatorName;
}
@Override
public void afterPropertiesSet() {
ArgumentChecker.notNull(getLeftXExtrapolatorName(), "leftXExtrapolatorName");
ArgumentChecker.notNull(getRightXExtrapolatorName(), "rightXExtrapolatorName");
ArgumentChecker.notNull(getXInterpolatorName(), "xInterpolatorName");
ArgumentChecker.notNull(getLeftYExtrapolatorName(), "leftYExtrapolatorName");
ArgumentChecker.notNull(getRightYExtrapolatorName(), "rightYExtrapolatorName");
ArgumentChecker.notNull(getYInterpolatorName(), "yInterpolatorName");
super.afterPropertiesSet();
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
functions.add(functionConfiguration(InterpolatedVolatilitySurfaceDefaultPropertiesFunction.class, getLeftXExtrapolatorName(), getRightXExtrapolatorName(), getXInterpolatorName(),
getLeftYExtrapolatorName(), getRightYExtrapolatorName(), getYInterpolatorName()));
}
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
functions.add(functionConfiguration(BondFutureOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(CommodityOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(DefaultVolatilitySurfaceShiftFunction.class));
functions.add(functionConfiguration(EquityFutureOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(EquityOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(IRFutureOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(RawBondFutureOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(RawEquityFutureOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(RawEquityOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(RawIRFutureOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(RawFXVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(RawCommodityFutureOptionVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(RawSwaptionATMVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(SwaptionATMVolatilitySurfaceDataFunction.class));
functions.add(functionConfiguration(VolatilitySurfaceShiftFunction.class));
functions.add(functionConfiguration(RawSurfaceDataFunction.class));
}
}