/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model.fixedincome;
import java.util.HashMap;
import java.util.List;
import java.util.Map;
import org.springframework.beans.factory.InitializingBean;
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 deprecated functions in this package.
*/
public class DeprecatedFunctions extends AbstractFunctionConfigurationBean {
/**
* Default instance of a repository configuration source exposing the deprecated functions from this package.
*
* @return the configuration source exposing functions from this package
*/
public static FunctionConfigurationSource instance() {
return new DeprecatedFunctions().getObjectCreating();
}
/**
* Function repository configuration source for the default functions contained in this package.
*/
public static class Defaults extends AbstractFunctionConfigurationBean {
/**
* Currency specific data.
*/
public static class CurrencyInfo implements InitializingBean {
private String _curveCalculationConfig;
public void setCurveCalculationConfig(final String curveCalculationConfig) {
_curveCalculationConfig = curveCalculationConfig;
}
public String getCurveCalculationConfig() {
return _curveCalculationConfig;
}
@Override
public void afterPropertiesSet() {
ArgumentChecker.notNullInjected(getCurveCalculationConfig(), "curveCalculationConfig");
}
}
private final Map<String, CurrencyInfo> _perCurrencyInfo = new HashMap<>();
private boolean _includeIRFutures;
public void setPerCurrencyInfo(final Map<String, CurrencyInfo> perCurrencyInfo) {
_perCurrencyInfo.clear();
_perCurrencyInfo.putAll(perCurrencyInfo);
}
public Map<String, CurrencyInfo> getPerCurrencyInfo() {
return _perCurrencyInfo;
}
public void setCurrencyInfo(final String currency, final CurrencyInfo info) {
_perCurrencyInfo.put(currency, info);
}
public CurrencyInfo getCurrencyInfo(final String currency) {
return _perCurrencyInfo.get(currency);
}
public void setIncludeIRFutures(final boolean includeIRFutures) {
_includeIRFutures = includeIRFutures;
}
public boolean isIncludeIRFutures() {
return _includeIRFutures;
}
protected void addInterestRateInstrumentDefaults(final List<FunctionConfiguration> functions) {
final String[] args = new String[1 + getPerCurrencyInfo().size() * 2];
int i = 0;
args[i++] = Boolean.toString(isIncludeIRFutures());
for (final Map.Entry<String, CurrencyInfo> e : getPerCurrencyInfo().entrySet()) {
args[i++] = e.getKey();
args[i++] = e.getValue().getCurveCalculationConfig();
}
functions.add(functionConfiguration(InterestRateInstrumentDefaultPropertiesFunction.class, args));
}
protected void addCrossCurrencySwapDefaults(final List<FunctionConfiguration> functions) {
final String[] args = new String[getPerCurrencyInfo().size() * 2];
int i = 0;
for (final Map.Entry<String, CurrencyInfo> e : getPerCurrencyInfo().entrySet()) {
args[i++] = e.getKey();
args[i++] = e.getValue().getCurveCalculationConfig();
}
functions.add(functionConfiguration(CrossCurrencySwapDefaults.class, args));
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
if (!getPerCurrencyInfo().isEmpty()) {
addInterestRateInstrumentDefaults(functions);
addCrossCurrencySwapDefaults(functions);
}
}
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
functions.add(functionConfiguration(BondTradePV01Function.class));
functions.add(functionConfiguration(BondTradeYCNSFunction.class));
functions.add(functionConfiguration(InterestRateInstrumentParRateCurveSensitivityFunction.class));
functions.add(functionConfiguration(InterestRateInstrumentParRateFunction.class));
functions.add(functionConfiguration(InterestRateInstrumentParRateParallelCurveSensitivityFunction.class));
functions.add(functionConfiguration(InterestRateInstrumentPresentValueFunction.class));
functions.add(functionConfiguration(InterestRateInstrumentPV01Function.class));
functions.add(functionConfiguration(InterestRateInstrumentYieldCurveNodeSensitivitiesFunction.class));
functions.add(functionConfiguration(SwapPayLegPresentValueFunction.class));
functions.add(functionConfiguration(SwapReceiveLegPresentValueFunction.class));
functions.add(functionConfiguration(SwapLegDetailFunction.class, "true"));
functions.add(functionConfiguration(SwapLegDetailFunction.class, "false"));
}
}