/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.swaption.black; 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.financial.analytics.model.horizon.SwaptionBlackThetaDefaults; import com.opengamma.util.ArgumentChecker; /** * Function repository configuration source for the functions contained in this package. * @deprecated The functions that are added are deprecated */ @Deprecated public class BlackFunctions 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 BlackFunctions().getObjectCreating(); } /** * Function repository configuration source for the functions contained in this package. */ public static class Defaults extends AbstractFunctionConfigurationBean { /** * Currency specific data. */ public static class CurrencyInfo implements InitializingBean { private String _curveConfig; private String _surfaceName; public void setCurveConfig(final String curveConfig) { _curveConfig = curveConfig; } public String getCurveConfig() { return _curveConfig; } public void setSurfaceName(final String surfaceName) { _surfaceName = surfaceName; } public String getSurfaceName() { return _surfaceName; } @Override public void afterPropertiesSet() { ArgumentChecker.notNullInjected(getCurveConfig(), "curveConfig"); ArgumentChecker.notNullInjected(getSurfaceName(), "surfaceName"); } } private final Map<String, CurrencyInfo> _perCurrencyInfo = new HashMap<>(); private int _numberOfDays = 1; 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 setNumberOfDays(final int numberOfDays) { _numberOfDays = numberOfDays; } public int getNumberOfDays() { return _numberOfDays; } protected void addSwaptionBlackDefaults(final List<FunctionConfiguration> functions) { final String[] args = new String[getPerCurrencyInfo().size() * 3]; int i = 0; for (final Map.Entry<String, CurrencyInfo> e : getPerCurrencyInfo().entrySet()) { args[i++] = e.getKey(); args[i++] = e.getValue().getCurveConfig(); args[i++] = e.getValue().getSurfaceName(); } functions.add(functionConfiguration(SwaptionBlackDefaultPropertiesFunction.class, args)); } protected void addSwaptionBlackThetaDefaults(final List<FunctionConfiguration> functions) { final String[] args = new String[1 + getPerCurrencyInfo().size() * 3]; int i = 0; args[i++] = Integer.toString(getNumberOfDays()); for (final Map.Entry<String, CurrencyInfo> e : getPerCurrencyInfo().entrySet()) { args[i++] = e.getKey(); args[i++] = e.getValue().getCurveConfig(); args[i++] = e.getValue().getSurfaceName(); } functions.add(functionConfiguration(SwaptionBlackThetaDefaults.class, args)); } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { if (!getPerCurrencyInfo().isEmpty()) { addSwaptionBlackDefaults(functions); addSwaptionBlackThetaDefaults(functions); } } } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { functions.add(functionConfiguration(SwaptionBlackVolatilitySensitivityFunction.class)); functions.add(functionConfiguration(SwaptionBlackImpliedVolatilityFunction.class)); functions.add(functionConfiguration(SwaptionBlackTheoreticaForwardDeltaFunction.class)); functions.add(functionConfiguration(SwaptionBlackTheoreticalForwardGammaFunction.class)); functions.add(functionConfiguration(SwaptionBlackDriftlessThetaFunction.class)); functions.add(functionConfiguration(SwaptionBlackTheoreticalForwardThetaFunction.class)); functions.add(functionConfiguration(SwaptionBlackTheoreticalForwardVegaFunction.class)); functions.add(functionConfiguration(SwaptionBlackValueDeltaFunction.class)); functions.add(functionConfiguration(SwaptionBlackValueGammaFunction.class)); functions.add(functionConfiguration(SwaptionBlackValueThetaFunction.class)); functions.add(functionConfiguration(SwaptionBlackForwardFunction.class)); } }