/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.model.bond;
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 functions contained in this package.
*/
public class BondFunctions 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 BondFunctions().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 _riskFreeCurveName;
private String _riskFreeCurveCalculationConfig;
private String _creditCurveName;
private String _creditCurveCalculationConfig;
public CurrencyInfo() {
}
public CurrencyInfo(final String riskFreeCurveName, final String riskFreeCurveCalculationConfig, final String creditCurveName, final String creditCurveCalculationConfig) {
setRiskFreeCurveName(riskFreeCurveName);
setRiskFreeCurveCalculationConfig(riskFreeCurveCalculationConfig);
setCreditCurveName(creditCurveName);
setCreditCurveCalculationConfig(creditCurveCalculationConfig);
}
public void setRiskFreeCurveName(final String curveName) {
_riskFreeCurveName = curveName;
}
public String getRiskFreeCurveName() {
return _riskFreeCurveName;
}
public void setRiskFreeCurveCalculationConfig(final String curveCalculationConfig) {
_riskFreeCurveCalculationConfig = curveCalculationConfig;
}
public String getRiskFreeCurveCalculationConfig() {
return _riskFreeCurveCalculationConfig;
}
public void setCreditCurveName(final String curveName) {
_creditCurveName = curveName;
}
public String getCreditCurveName() {
return _creditCurveName;
}
public void setCreditCurveCalculationConfig(final String curveCalculationConfig) {
_creditCurveCalculationConfig = curveCalculationConfig;
}
public String getCreditCurveCalculationConfig() {
return _creditCurveCalculationConfig;
}
@Override
public void afterPropertiesSet() {
ArgumentChecker.notNullInjected(getRiskFreeCurveName(), "riskFreeCurveName");
ArgumentChecker.notNullInjected(getRiskFreeCurveCalculationConfig(), "riskFreeCurveCalculationConfig");
ArgumentChecker.notNullInjected(getCreditCurveName(), "creditCurveName");
ArgumentChecker.notNullInjected(getCreditCurveCalculationConfig(), "creditCurveCalculationConfig");
}
}
private final Map<String, CurrencyInfo> _perCurrencyInfo = new HashMap<>();
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);
}
protected void addBondCurveDefaults(final List<FunctionConfiguration> functions) {
final String[] args = new String[getPerCurrencyInfo().size() * 5];
int i = 0;
for (final Map.Entry<String, CurrencyInfo> e : getPerCurrencyInfo().entrySet()) {
args[i++] = e.getKey();
args[i++] = e.getValue().getRiskFreeCurveName();
args[i++] = e.getValue().getRiskFreeCurveCalculationConfig();
args[i++] = e.getValue().getCreditCurveName();
args[i++] = e.getValue().getCreditCurveCalculationConfig();
}
functions.add(functionConfiguration(BondSecurityCurveNameDefaults.class, args));
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
if (!getPerCurrencyInfo().isEmpty()) {
addBondCurveDefaults(functions);
}
}
}
@Override
protected void addAllConfigurations(final List<FunctionConfiguration> functions) {
functions.add(functionConfiguration(BondCouponPaymentDiaryFunction.class));
functions.add(functionConfiguration(BondTenorFunction.class));
functions.add(functionConfiguration(BondMarketCleanPriceFunction.class));
functions.add(functionConfiguration(BondMarketDirtyPriceFunction.class));
functions.add(functionConfiguration(BondMarketYieldFunction.class));
functions.add(functionConfiguration(NelsonSiegelSvenssonBondCurveFunction.class));
}
}