/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.web.spring; import java.util.HashMap; import java.util.List; import java.util.Map; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.InitializingBean; import com.opengamma.engine.function.config.AbstractFunctionConfigurationBean; import com.opengamma.engine.function.config.CombiningFunctionConfigurationSource; import com.opengamma.engine.function.config.FunctionConfiguration; import com.opengamma.engine.function.config.FunctionConfigurationSource; import com.opengamma.engine.function.config.ParameterizedFunctionConfiguration; import com.opengamma.engine.value.SurfaceAndCubePropertyNames; import com.opengamma.engine.value.ValuePropertyNames; import com.opengamma.financial.analytics.CurrencyPairsDefaults; import com.opengamma.financial.analytics.model.bond.BondFunctions; import com.opengamma.financial.analytics.model.curve.CurveFunctions; import com.opengamma.financial.analytics.model.curve.forward.ForwardFunctions; import com.opengamma.financial.analytics.model.curve.interestrate.InterestRateFunctions; import com.opengamma.financial.analytics.model.equity.option.OptionFunctions; import com.opengamma.financial.analytics.model.equity.portfoliotheory.PortfolioTheoryFunctions; import com.opengamma.financial.analytics.model.future.FutureFunctions; import com.opengamma.financial.analytics.model.futureoption.FutureOptionFunctions; import com.opengamma.financial.analytics.model.multicurve.MultiCurvePricingFunctions; import com.opengamma.financial.analytics.model.pnl.PNLFunctions; import com.opengamma.financial.analytics.model.sensitivities.SensitivitiesFunctions; import com.opengamma.financial.analytics.model.var.VaRFunctions; import com.opengamma.financial.analytics.model.volatility.local.defaultproperties.LocalVolatilitySurfaceDefaults; import com.opengamma.financial.currency.CurrencyPairs; import com.opengamma.util.SingletonFactoryBean; import com.opengamma.util.function.Function; import com.opengamma.util.tuple.Pair; import com.opengamma.util.tuple.Pairs; import com.opengamma.web.spring.defaults.GeneralLocalVolatilitySurfaceDefaults; /** * Constructs a standard function repository. * <p> * A sub-class should provide installation specific details relating to the data providers used. */ @SuppressWarnings("deprecation") public abstract class StandardFunctionConfiguration extends AbstractFunctionConfigurationBean { private static final Logger s_logger = LoggerFactory.getLogger(StandardFunctionConfiguration.class); /** * Holds one or more values referenced by a hierarchical key. */ public static class Value { private final Map<String, String> _values = new HashMap<>(); public void set(final String key, final String value) { _values.put(key, value); } // TODO: allow wildcard matches, e.g. */discounting public String get(final String key) { final String value = _values.get(key); if (value != null) { return value; } final int separator = key.lastIndexOf('/'); if (separator == -1) { return _values.get(null); } return get(key.substring(0, separator)); } } /** * Constants for a particular currency. */ public static class CurrencyInfo { /** The currency string */ private final String _currency; /** Usually the default value of the {@link ValuePropertyNames#CURVE_CONSTRUCTION_CONFIG} property */ private final Value _curveConfiguration = new Value(); /** Usually the default value of the {@link ValuePropertyNames#CURVE} property */ private final Value _curveName = new Value(); /** Usually the default value of the {@link ValuePropertyNames#CURVE_CALCULATION_METHOD} property */ private final Value _curveCalculationMethodName = new Value(); /** Usually the default value of the {@link ValuePropertyNames#SURFACE} property */ private final Value _surfaceName = new Value(); /** Usually the default value of the {@link ValuePropertyNames#CUBE} property */ private final Value _cubeName = new Value(); /** The forward curve name */ private final Value _forwardCurveName = new Value(); /** The forward curve calculation method */ private final Value _forwardCurveCalculationMethod = new Value(); /** The surface calculation method */ private final Value _surfaceCalculationMethod = new Value(); /** Usually the default value of the {@link SurfaceAndCubePropertyNames#PROPERTY_CUBE_DEFINITION} property */ private final Value _cubeDefinitionName = new Value(); /** Usually the default value of the {@link SurfaceAndCubePropertyNames#PROPERTY_CUBE_SPECIIFICATION} property */ private final Value _cubeSpecificationName = new Value(); /** Usually the default value of the {@link SurfaceAndCubePropertyNames#PROPERTY_SURFACE_DEFINITION} property */ private final Value _surfaceDefinitionName = new Value(); /** Usually the default value of the {@link SurfaceAndCubePropertyNames#PROPERTY_SURFACE_SPECIIFICATION} property */ private final Value _surfaceSpecificationName = new Value(); public CurrencyInfo(final String currency) { _currency = currency; } public String getCurrency() { return _currency; } public void setCurveConfiguration(final String key, final String curveConfiguration) { _curveConfiguration.set(key, curveConfiguration); } public String getCurveConfiguration(final String key) { return _curveConfiguration.get(key); } public void setCurveName(final String key, final String curveName) { _curveName.set(key, curveName); } public String getCurveName(final String key) { return _curveName.get(key); } public void setCurveCalculationMethodName(final String key, final String curveCalculationMethodName) { _curveCalculationMethodName.set(key, curveCalculationMethodName); } public String getCurveCalculationMethodName(final String key) { return _curveCalculationMethodName.get(key); } public void setSurfaceName(final String key, final String surfaceName) { _surfaceName.set(key, surfaceName); } public String getSurfaceName(final String key) { return _surfaceName.get(key); } public void setCubeName(final String key, final String cubeName) { _cubeName.set(key, cubeName); } public String getCubeName(final String key) { return _cubeName.get(key); } public void setForwardCurveName(final String key, final String forwardCurveName) { _forwardCurveName.set(key, forwardCurveName); } public String getForwardCurveName(final String key) { return _forwardCurveName.get(key); } public void setForwardCurveCalculationMethod(final String key, final String forwardCurveCalculationMethod) { _forwardCurveCalculationMethod.set(key, forwardCurveCalculationMethod); } public String getForwardCurveCalculationMethod(final String key) { return _forwardCurveCalculationMethod.get(key); } public void setSurfaceCalculationMethod(final String key, final String surfaceCalculationMethod) { _surfaceCalculationMethod.set(key, surfaceCalculationMethod); } public String getSurfaceCalculationMethod(final String key) { return _surfaceCalculationMethod.get(key); } /** * Gets the cube definition name for a key. * @param key The key * @return The cube definition name */ public String getCubeDefinitionName(final String key) { return _cubeDefinitionName.get(key); } /** * Sets a cube definition name for a key. * @param key The key * @param cubeDefinitionName The cube definition name */ public void setCubeDefinitionName(final String key, final String cubeDefinitionName) { _cubeDefinitionName.set(key, cubeDefinitionName); } /** * Gets the cube specification name for a key. * @param key The key * @return The cube specification name */ public String getCubeSpecificationName(final String key) { return _cubeSpecificationName.get(key); } /** * Sets a cube specification name for a key. * @param key The key * @param cubeSpecificationName The cube specification name */ public void setCubeSpecificationName(final String key, final String cubeSpecificationName) { _cubeSpecificationName.set(key, cubeSpecificationName); } /** * Gets the surface definition name for a key. * @param key The key * @return The surface definition name */ public String getSurfaceDefinitionName(final String key) { return _surfaceDefinitionName.get(key); } /** * Sets a surface definition name for a key. * @param key The key * @param surfaceDefinitionName The surface definition name */ public void setSurfaceDefinitionName(final String key, final String surfaceDefinitionName) { _surfaceDefinitionName.set(key, surfaceDefinitionName); } /** * Gets the surface specification name for a key. * @param key The key * @return The surface specification name */ public String getSurfaceSpecificationName(final String key) { return _surfaceSpecificationName.get(key); } /** * Sets a surface specification name for a key. * @param key The key * @param surfaceSpecificationName The surface specification name */ public void setSurfaceSpecificationName(final String key, final String surfaceSpecificationName) { _surfaceSpecificationName.set(key, surfaceSpecificationName); } } /** * Constants for a particular currency pair */ public static class CurrencyPairInfo { private final Pair<String, String> _currencies; private final Value _curveName = new Value(); private final Value _curveCalculationMethod = new Value(); private final Value _surfaceName = new Value(); private final Value _forwardCurveName = new Value(); public CurrencyPairInfo(final Pair<String, String> currencies) { _currencies = currencies; } public Pair<String, String> getCurrencies() { return _currencies; } public void setCurveName(final String key, final String curveName) { _curveName.set(key, curveName); } public String getCurveName(final String key) { return _curveName.get(key); } public void setCurveCalculationMethod(final String key, final String curveCalculationMethod) { _curveCalculationMethod.set(key, curveCalculationMethod); } public String getCurveCalculationMethod(final String key) { return _curveCalculationMethod.get(key); } public void setSurfaceName(final String key, final String surfaceName) { _surfaceName.set(key, surfaceName); } public String getSurfaceName(final String key) { return _surfaceName.get(key); } public String getForwardCurveName(final String key) { return _forwardCurveName.get(key); } public void setForwardCurveName(final String key, final String forwardCurveName) { _forwardCurveName.set(key, forwardCurveName); } } private final Map<String, CurrencyInfo> _perCurrencyInfo = new HashMap<>(); private final Map<Pair<String, String>, CurrencyPairInfo> _perCurrencyPairInfo = new HashMap<>(); private String _mark2MarketField; private String _costOfCarryField; private double _absoluteTolerance; private double _relativeTolerance; private int _maxIterations; public StandardFunctionConfiguration() { setDefaultCurrencyInfo(); setDefaultCurrencyPairInfo(); } 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 <T> Map<String, T> getCurrencyInfo(final Function<CurrencyInfo, T> filter) { final Map<String, T> result = new HashMap<String, T>(); for (final Map.Entry<String, CurrencyInfo> e : getPerCurrencyInfo().entrySet()) { final T entry = filter.apply(e.getValue()); if (entry instanceof InitializingBean) { try { ((InitializingBean) entry).afterPropertiesSet(); } catch (final Exception ex) { s_logger.debug("Skipping {}", e.getKey()); s_logger.trace("Caught exception", e); continue; } } if (entry != null) { result.put(e.getKey(), entry); } } return result; } public void setPerCurrencyPairInfo(final Map<Pair<String, String>, CurrencyPairInfo> perCurrencyPairInfo) { _perCurrencyPairInfo.clear(); _perCurrencyPairInfo.putAll(perCurrencyPairInfo); } public Map<Pair<String, String>, CurrencyPairInfo> getPerCurrencyPairInfo() { return _perCurrencyPairInfo; } public void setCurrencyPairInfo(final Pair<String, String> currencyPair, final CurrencyPairInfo info) { _perCurrencyPairInfo.put(currencyPair, info); } public CurrencyPairInfo getCurrencyPairInfo(final Pair<String, String> currencyPair) { return _perCurrencyPairInfo.get(currencyPair); } protected <T> Map<Pair<String, String>, T> getCurrencyPairInfo(final Function<CurrencyPairInfo, T> filter) { final Map<Pair<String, String>, T> result = new HashMap<Pair<String, String>, T>(); for (final Map.Entry<Pair<String, String>, CurrencyPairInfo> e : getPerCurrencyPairInfo().entrySet()) { final T entry = filter.apply(e.getValue()); if (entry instanceof InitializingBean) { try { ((InitializingBean) entry).afterPropertiesSet(); } catch (final Exception ex) { s_logger.debug("Skipping {}", e.getKey()); s_logger.trace("Caught exception", e); continue; } } if (entry != null) { result.put(e.getKey(), entry); } } return result; } public void setMark2MarketField(final String mark2MarketField) { _mark2MarketField = mark2MarketField; } public String getMark2MarketField() { return _mark2MarketField; } public void setCostOfCarryField(final String costOfCarryField) { _costOfCarryField = costOfCarryField; } public String getCostOfCarryField() { return _costOfCarryField; } /** * Sets the absolute tolerance for the curve root-finder. * @param absoluteTolerance The absolute tolerance, greater than zero */ public void setAbsoluteTolerance(final double absoluteTolerance) { _absoluteTolerance = absoluteTolerance; } /** * Gets the absolute tolerance for the curve root-finder. * @return The absolute tolerance */ public double getAbsoluteTolerance() { return _absoluteTolerance; } /** * Sets the relative tolerance for the curve root-finder. * @param relativeTolerance The relative tolerance, greater than zero */ public void setRelativeTolerance(final double relativeTolerance) { _relativeTolerance = relativeTolerance; } /** * Gets the relative tolerance for the curve root-finder. * @return The relative tolerance */ public double getRelativeTolerance() { return _relativeTolerance; } /** * Sets the maximum number of iterations for the curve root-finder. * @param maxIterations The maximum iterations, greater than zero */ public void setMaximumIterations(final int maxIterations) { _maxIterations = maxIterations; } /** * Gets the maximum number of iterations for the curve root-finder. * @return The maximum iterations */ public int getMaximumIterations() { return _maxIterations; } protected CurrencyInfo defaultCurrencyInfo(final String currency) { return new CurrencyInfo(currency); } protected CurrencyInfo arsCurrencyInfo() { return defaultCurrencyInfo("ARS"); } protected CurrencyInfo audCurrencyInfo() { return defaultCurrencyInfo("AUD"); } protected CurrencyInfo brlCurrencyInfo() { return defaultCurrencyInfo("BRL"); } protected CurrencyInfo cadCurrencyInfo() { return defaultCurrencyInfo("CAD"); } protected CurrencyInfo chfCurrencyInfo() { return defaultCurrencyInfo("CHF"); } protected CurrencyInfo cnyCurrencyInfo() { return defaultCurrencyInfo("CNY"); } protected CurrencyInfo czkCurrencyInfo() { return defaultCurrencyInfo("CZK"); } protected CurrencyInfo egpCurrencyInfo() { return defaultCurrencyInfo("EGP"); } protected CurrencyInfo eurCurrencyInfo() { return defaultCurrencyInfo("EUR"); } protected CurrencyInfo gbpCurrencyInfo() { return defaultCurrencyInfo("GBP"); } protected CurrencyInfo hkdCurrencyInfo() { return defaultCurrencyInfo("HKD"); } protected CurrencyInfo hufCurrencyInfo() { return defaultCurrencyInfo("HUF"); } protected CurrencyInfo idrCurrencyInfo() { return defaultCurrencyInfo("IDR"); } protected CurrencyInfo ilsCurrencyInfo() { return defaultCurrencyInfo("ILS"); } protected CurrencyInfo inrCurrencyInfo() { return defaultCurrencyInfo("INR"); } protected CurrencyInfo jpyCurrencyInfo() { return defaultCurrencyInfo("JPY"); } protected CurrencyInfo krwCurrencyInfo() { return defaultCurrencyInfo("KRW"); } protected CurrencyInfo mxnCurrencyInfo() { return defaultCurrencyInfo("MXN"); } protected CurrencyInfo myrCurrencyInfo() { return defaultCurrencyInfo("MYR"); } protected CurrencyInfo nokCurrencyInfo() { return defaultCurrencyInfo("NOK"); } protected CurrencyInfo nzdCurrencyInfo() { return defaultCurrencyInfo("NZD"); } protected CurrencyInfo phpCurrencyInfo() { return defaultCurrencyInfo("PHP"); } protected CurrencyInfo plnCurrencyInfo() { return defaultCurrencyInfo("PLN"); } protected CurrencyInfo rubCurrencyInfo() { return defaultCurrencyInfo("RUB"); } protected CurrencyInfo sekCurrencyInfo() { return defaultCurrencyInfo("SEK"); } protected CurrencyInfo sgdCurrencyInfo() { return defaultCurrencyInfo("SGD"); } protected CurrencyInfo tryCurrencyInfo() { return defaultCurrencyInfo("TRY"); } protected CurrencyInfo twdCurrencyInfo() { return defaultCurrencyInfo("TWD"); } protected CurrencyInfo usdCurrencyInfo() { return defaultCurrencyInfo("USD"); } protected CurrencyInfo zarCurrencyInfo() { return defaultCurrencyInfo("ZAR"); } protected void setDefaultCurrencyInfo() { setCurrencyInfo("ARS", arsCurrencyInfo()); setCurrencyInfo("AUD", audCurrencyInfo()); setCurrencyInfo("BRL", brlCurrencyInfo()); setCurrencyInfo("CAD", cadCurrencyInfo()); setCurrencyInfo("CHF", chfCurrencyInfo()); setCurrencyInfo("CNY", cnyCurrencyInfo()); setCurrencyInfo("CZK", czkCurrencyInfo()); setCurrencyInfo("EGP", egpCurrencyInfo()); setCurrencyInfo("EUR", eurCurrencyInfo()); setCurrencyInfo("GBP", gbpCurrencyInfo()); setCurrencyInfo("HKD", hkdCurrencyInfo()); setCurrencyInfo("HUF", hufCurrencyInfo()); setCurrencyInfo("IDR", idrCurrencyInfo()); setCurrencyInfo("ILS", ilsCurrencyInfo()); setCurrencyInfo("INR", inrCurrencyInfo()); setCurrencyInfo("JPY", jpyCurrencyInfo()); setCurrencyInfo("KRW", krwCurrencyInfo()); setCurrencyInfo("MXN", mxnCurrencyInfo()); setCurrencyInfo("MYR", myrCurrencyInfo()); setCurrencyInfo("NOK", nokCurrencyInfo()); setCurrencyInfo("NZD", nzdCurrencyInfo()); setCurrencyInfo("PHP", phpCurrencyInfo()); setCurrencyInfo("PLN", plnCurrencyInfo()); setCurrencyInfo("RUB", rubCurrencyInfo()); setCurrencyInfo("SEK", sekCurrencyInfo()); setCurrencyInfo("SGD", sgdCurrencyInfo()); setCurrencyInfo("TRY", tryCurrencyInfo()); setCurrencyInfo("TWD", twdCurrencyInfo()); setCurrencyInfo("USD", usdCurrencyInfo()); setCurrencyInfo("ZAR", zarCurrencyInfo()); } protected CurrencyPairInfo defaultCurrencyPairInfo(final String c1, final String c2) { return new CurrencyPairInfo(Pairs.of(c1, c2)); } protected CurrencyPairInfo audKrwCurrencyPairInfo() { return defaultCurrencyPairInfo("AUD", "KRW"); } protected CurrencyPairInfo chfJpyCurrencyPairInfo() { return defaultCurrencyPairInfo("CHF", "JPY"); } protected CurrencyPairInfo eurBrlCurrencyPairInfo() { return defaultCurrencyPairInfo("EUR", "BRL"); } protected CurrencyPairInfo eurChfCurrencyPairInfo() { return defaultCurrencyPairInfo("EUR", "CHF"); } protected CurrencyPairInfo eurGbpCurrencyPairInfo() { return defaultCurrencyPairInfo("EUR", "GBP"); } protected CurrencyPairInfo eurJpyCurrencyPairInfo() { return defaultCurrencyPairInfo("EUR", "JPY"); } protected CurrencyPairInfo eurTryCurrencyPairInfo() { return defaultCurrencyPairInfo("EUR", "TRY"); } protected CurrencyPairInfo jpyKrwCurrencyPairInfo() { return defaultCurrencyPairInfo("JPY", "KRW"); } protected CurrencyPairInfo sekJpyCurrencyPairInfo() { return defaultCurrencyPairInfo("SEK", "JPY"); } protected CurrencyPairInfo usdAudCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "AUD"); } protected CurrencyPairInfo usdBrlCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "BRL"); } protected CurrencyPairInfo usdCadCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "CAD"); } protected CurrencyPairInfo usdChfCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "CHF"); } protected CurrencyPairInfo usdCnyCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "CNY"); } protected CurrencyPairInfo usdEurCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "EUR"); } protected CurrencyPairInfo usdGbpCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "GBP"); } protected CurrencyPairInfo usdHkdCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "HKD"); } protected CurrencyPairInfo usdHufCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "HUF"); } protected CurrencyPairInfo usdInrCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "INR"); } protected CurrencyPairInfo usdJpyCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "JPY"); } protected CurrencyPairInfo usdKrwCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "KRW"); } protected CurrencyPairInfo usdMxnCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "MXN"); } protected CurrencyPairInfo usdNokCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "NOK"); } protected CurrencyPairInfo usdNzdCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "NZD"); } protected CurrencyPairInfo usdSgdCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "SGD"); } protected CurrencyPairInfo usdZarCurrencyPairInfo() { return defaultCurrencyPairInfo("USD", "ZAR"); } protected void setDefaultCurrencyPairInfo() { setCurrencyPairInfo(Pairs.of("AUD", "KRW"), audKrwCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("CHF", "JPY"), chfJpyCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("EUR", "BRL"), eurBrlCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("EUR", "CHF"), eurChfCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("EUR", "GBP"), eurGbpCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("EUR", "JPY"), eurJpyCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("EUR", "TRY"), eurTryCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("JPY", "KRW"), jpyKrwCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("SEK", "JPY"), sekJpyCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "AUD"), usdAudCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "BRL"), usdBrlCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "CAD"), usdCadCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "CHF"), usdChfCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "CNY"), usdCnyCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "EUR"), usdEurCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "GBP"), usdGbpCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "HKD"), usdHkdCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "HUF"), usdHufCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "INR"), usdInrCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "JPY"), usdJpyCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "KRW"), usdKrwCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "MXN"), usdMxnCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "NOK"), usdNokCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "NZD"), usdNzdCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "SGD"), usdSgdCurrencyPairInfo()); setCurrencyPairInfo(Pairs.of("USD", "ZAR"), usdZarCurrencyPairInfo()); } protected void addCurrencyConversionFunctions(final List<FunctionConfiguration> functionConfigs) { functionConfigs.add(functionConfiguration(CurrencyPairsDefaults.class, CurrencyPairs.DEFAULT_CURRENCY_PAIRS)); } protected void addLocalVolatilitySurfaceDefaults(final List<FunctionConfiguration> functionConfigs) { functionConfigs.add(new ParameterizedFunctionConfiguration(LocalVolatilitySurfaceDefaults.class.getName(), GeneralLocalVolatilitySurfaceDefaults.getLocalVolatilitySurfaceDefaults())); } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { addCurrencyConversionFunctions(functions); addLocalVolatilitySurfaceDefaults(functions); } protected FunctionConfigurationSource getRepository(final SingletonFactoryBean<FunctionConfigurationSource> defaults) { try { defaults.afterPropertiesSet(); } catch (final Exception e) { s_logger.warn("Caught exception", e); return null; } return defaults.getObject(); } protected void setBondFunctionDefaults(final CurrencyInfo i, final BondFunctions.Defaults.CurrencyInfo defaults) { defaults.setRiskFreeCurveName(i.getCurveName("model/bond/riskFree")); defaults.setRiskFreeCurveCalculationConfig(i.getCurveConfiguration("model/bond/riskFree")); defaults.setCreditCurveName(i.getCurveName("model/bond/credit")); defaults.setCreditCurveCalculationConfig(i.getCurveConfiguration("model/bond/credit")); } protected void setBondFunctionDefaults(final BondFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, BondFunctions.Defaults.CurrencyInfo>() { @Override public BondFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final BondFunctions.Defaults.CurrencyInfo d = new BondFunctions.Defaults.CurrencyInfo(); setBondFunctionDefaults(i, d); return d; } })); } protected FunctionConfigurationSource bondFunctions() { final BondFunctions.Defaults defaults = new BondFunctions.Defaults(); setBondFunctionDefaults(defaults); return getRepository(defaults); } protected void setXCcySwapFunctionDefaults(final CurrencyInfo i, final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo defaults) { defaults.setCurveCalculationConfig(i.getCurveName("model/xccyswap")); } protected void setXCcySwapFunctionDefaults(final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo d = new com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo(); setXCcySwapFunctionDefaults(i, d); return d; } })); } protected FunctionConfigurationSource xCcySwapFunctions() { final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults defaults = new com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults(); setXCcySwapFunctionDefaults(defaults); return getRepository(defaults); } protected FunctionConfigurationSource deprecatedFunctions() { return null; } protected void setEquityOptionDefaults(final OptionFunctions.Defaults defaults) { } protected FunctionConfigurationSource equityOptionFunctions() { final OptionFunctions.Defaults defaults = new OptionFunctions.Defaults(); setEquityOptionDefaults(defaults); return getRepository(defaults); } protected void setExternalSensitivitesCalculators(final SensitivitiesFunctions.Calculators calculators) { } protected void setExternalSensitivitiesDefaults(final CurrencyInfo i, final SensitivitiesFunctions.Defaults.CurrencyInfo defaults) { defaults.setCurveConfiguration(i.getCurveConfiguration("model/sensitivities")); } protected void setExternalSensitivitiesDefaults(final SensitivitiesFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, SensitivitiesFunctions.Defaults.CurrencyInfo>() { @Override public SensitivitiesFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final SensitivitiesFunctions.Defaults.CurrencyInfo d = new SensitivitiesFunctions.Defaults.CurrencyInfo(); setExternalSensitivitiesDefaults(i, d); return d; } })); } protected FunctionConfigurationSource externalSensitivitiesFunctions() { final SensitivitiesFunctions.Calculators calculators = new SensitivitiesFunctions.Calculators(); setExternalSensitivitesCalculators(calculators); final SensitivitiesFunctions.Defaults defaults = new SensitivitiesFunctions.Defaults(); setExternalSensitivitiesDefaults(defaults); return CombiningFunctionConfigurationSource.of(getRepository(calculators), getRepository(defaults)); } protected void setFixedIncomeDefaults(final CurrencyInfo i, final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo defaults) { defaults.setCurveCalculationConfig(i.getCurveConfiguration("model/fixedincome")); } protected void setFixedIncomeDefaults(final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo d = new com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults.CurrencyInfo(); setFixedIncomeDefaults(i, d); return d; } })); } protected FunctionConfigurationSource fixedIncomeFunctions() { final com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults defaults = new com.opengamma.financial.analytics.model.fixedincome.DeprecatedFunctions.Defaults(); setFixedIncomeDefaults(defaults); return getRepository(defaults); } protected void setForexDefaults(final CurrencyInfo i, final com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo defaults) { defaults.setCurveConfiguration(i.getCurveConfiguration("model/forex")); defaults.setDiscountingCurve(i.getCurveName("model/forex/discounting")); } protected void setForexDefaults(final CurrencyPairInfo i, final com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo defaults) { defaults.setSurfaceName(i.getSurfaceName("model/forex")); defaults.setForwardCurveName(i.getForwardCurveName("model/forex/forward")); } protected void setForexDefaults(final com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo d = new com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo(); setForexDefaults(i, d); return d; } })); defaults.setPerCurrencyPairInfo(getCurrencyPairInfo(new Function<CurrencyPairInfo, com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo>() { @Override public com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo apply(final CurrencyPairInfo i) { final com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo d = new com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo(); setForexDefaults(i, d); return d; } })); } protected FunctionConfigurationSource forexFunctions() { final com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions defaults = new com.opengamma.financial.analytics.model.forex.defaultproperties.DefaultPropertiesFunctions(); setForexDefaults(defaults); return getRepository(defaults); } protected void setForexOptionDefaults(final com.opengamma.financial.analytics.model.forex.option.black.BlackFunctions.Defaults defaults) { } protected FunctionConfigurationSource forexOptionFunctions() { final com.opengamma.financial.analytics.model.forex.option.black.BlackFunctions.Defaults defaults = new com.opengamma.financial.analytics.model.forex.option.black.BlackFunctions.Defaults(); setForexOptionDefaults(defaults); return getRepository(defaults); } protected void setForexDigitalDefaults(final com.opengamma.financial.analytics.model.forex.option.callspreadblack.CallSpreadBlackFunctions.Defaults defaults) { } protected FunctionConfigurationSource forexDigitalFunctions() { final com.opengamma.financial.analytics.model.forex.option.callspreadblack.CallSpreadBlackFunctions.Defaults defaults = new com.opengamma.financial.analytics.model.forex.option.callspreadblack.CallSpreadBlackFunctions.Defaults(); setForexDigitalDefaults(defaults); return getRepository(defaults); } protected void setForwardCurveDefaults(final CurrencyInfo i, final ForwardFunctions.Defaults.CurrencyInfo defaults) { defaults.setCurveConfiguration(i.getCurveConfiguration("model/curve/forward")); defaults.setDiscountingCurve(i.getCurveName("model/curve/forward/discounting")); defaults.setForwardCurve(i.getCurveName("model/curve/forward")); } protected void setForwardCurveDefaults(final CurrencyPairInfo i, final ForwardFunctions.Defaults.CurrencyPairInfo defaults) { defaults.setCurveName(i.getCurveName("model/curve/forward")); } protected void setForwardCurveDefaults(final ForwardFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, ForwardFunctions.Defaults.CurrencyInfo>() { @Override public ForwardFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final ForwardFunctions.Defaults.CurrencyInfo d = new ForwardFunctions.Defaults.CurrencyInfo(); setForwardCurveDefaults(i, d); return d; } })); defaults.setPerCurrencyPairInfo(getCurrencyPairInfo(new Function<CurrencyPairInfo, ForwardFunctions.Defaults.CurrencyPairInfo>() { @Override public ForwardFunctions.Defaults.CurrencyPairInfo apply(final CurrencyPairInfo i) { final ForwardFunctions.Defaults.CurrencyPairInfo d = new ForwardFunctions.Defaults.CurrencyPairInfo(); setForwardCurveDefaults(i, d); return d; } })); } protected FunctionConfigurationSource forwardCurveFunctions() { final ForwardFunctions.Defaults defaults = new ForwardFunctions.Defaults(); setForwardCurveDefaults(defaults); return getRepository(defaults); } protected void setFutureDefaults(final CurrencyInfo i, final FutureFunctions.Deprecated.CurrencyInfo defaults) { defaults.setCurveConfiguration(i.getCurveConfiguration("model/future")); } protected void setFutureDefaults(final FutureFunctions.Deprecated defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, FutureFunctions.Deprecated.CurrencyInfo>() { @Override public FutureFunctions.Deprecated.CurrencyInfo apply(final CurrencyInfo i) { final FutureFunctions.Deprecated.CurrencyInfo d = new FutureFunctions.Deprecated.CurrencyInfo(); setFutureDefaults(i, d); return d; } })); } protected void setFutureFunctionCalculators(final FutureFunctions.Calculators calculators) { calculators.setClosingPriceField(getMark2MarketField()); } protected FunctionConfigurationSource futureFunctions() { final FutureFunctions.Calculators calculators = new FutureFunctions.Calculators(); setFutureFunctionCalculators(calculators); final FutureFunctions.Deprecated defaults = new FutureFunctions.Deprecated(); setFutureDefaults(defaults); return CombiningFunctionConfigurationSource.of(getRepository(calculators), getRepository(defaults)); } protected void setFutureOptionDefaults(final CurrencyInfo i, final FutureOptionFunctions.Defaults.CurrencyInfo defaults) { defaults.setCurveName(i.getCurveName("model/futureoption")); defaults.setCurveCalculationConfig(i.getCurveConfiguration("model/futureoption")); defaults.setSurfaceName(i.getSurfaceName("model/futureoption")); defaults.setForwardCurveName(i.getForwardCurveName("model/futureoption")); String v = i.getForwardCurveCalculationMethod("model/futureoption"); if (v != null) { defaults.setForwardCurveCalculationMethodName(v); } v = i.getSurfaceCalculationMethod("model/futureoption"); if (v != null) { defaults.setSurfaceCalculationMethod(v); } } protected void setFutureOptionDefaults(final FutureOptionFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, FutureOptionFunctions.Defaults.CurrencyInfo>() { @Override public FutureOptionFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final FutureOptionFunctions.Defaults.CurrencyInfo d = new FutureOptionFunctions.Defaults.CurrencyInfo(); setFutureOptionDefaults(i, d); return d; } })); } protected FunctionConfigurationSource futureOptionFunctions() { final FutureOptionFunctions.Defaults defaults = new FutureOptionFunctions.Defaults(); setFutureOptionDefaults(defaults); return getRepository(defaults); } protected void setInterestRateDefaults(final InterestRateFunctions.Defaults defaults) { defaults.setApplicableCurrencies(getPerCurrencyInfo().keySet()); } protected FunctionConfigurationSource interestRateFunctions() { final InterestRateFunctions.Defaults defaults = new InterestRateFunctions.Defaults(); setInterestRateDefaults(defaults); return getRepository(defaults); } protected FunctionConfigurationSource curveFunctions() { final CurveFunctions.Defaults defaults = new CurveFunctions.Defaults(); setCurveDefaults(defaults); return getRepository(defaults); } protected void setCurveDefaults(final CurveFunctions.Defaults defaults) { defaults.setAbsoluteTolerance(_absoluteTolerance); defaults.setRelativeTolerance(_relativeTolerance); defaults.setMaximumIterations(_maxIterations); } protected void setMultiCurvePricingDefaults(final MultiCurvePricingFunctions.Defaults defaults) { defaults.setAbsoluteTolerance(_absoluteTolerance); defaults.setRelativeTolerance(_relativeTolerance); defaults.setMaximumIterations(_maxIterations); } protected void setLocalVolatilityDefaults(final CurrencyInfo i, final com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo defaults) { defaults.setCurveConfiguration(i.getCurveConfiguration("model/volatility/local")); defaults.setDiscountingCurve(i.getCurveName("model/volatility/local/discounting")); } protected void setLocalVolatilityDefaults(final com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo d = new com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo(); setLocalVolatilityDefaults(i, d); return d; } })); } protected FunctionConfigurationSource localVolatilityFunctions() { final com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions defaults = new com.opengamma.financial.analytics.model.volatility.local.defaultproperties.DefaultPropertiesFunctions(); setLocalVolatilityDefaults(defaults); return getRepository(defaults); } protected FunctionConfigurationSource multicurvePricingFunctions() { final MultiCurvePricingFunctions.Defaults defaults = new MultiCurvePricingFunctions.Defaults(); setMultiCurvePricingDefaults(defaults); return getRepository(defaults); } protected void setPNLFunctionCalculators(final PNLFunctions.Calculators calculators) { calculators.setCostOfCarryField(getCostOfCarryField()); calculators.setMark2MarketField(getMark2MarketField()); } protected void setPNLFunctionDefaults(final CurrencyInfo i, final PNLFunctions.Defaults.CurrencyInfo defaults) { defaults.setCurveConfiguration(i.getCurveConfiguration("model/pnl")); defaults.setDiscountingCurve(i.getCurveName("model/pnl/discounting")); } protected void setPNLFunctionDefaults(final CurrencyPairInfo i, final PNLFunctions.Defaults.CurrencyPairInfo defaults) { defaults.setSurfaceName(i.getSurfaceName("model/pnl")); } protected void setPNLFunctionDefaults(final PNLFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, PNLFunctions.Defaults.CurrencyInfo>() { @Override public PNLFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final PNLFunctions.Defaults.CurrencyInfo d = new PNLFunctions.Defaults.CurrencyInfo(); setPNLFunctionDefaults(i, d); return d; } })); defaults.setPerCurrencyPairInfo(getCurrencyPairInfo(new Function<CurrencyPairInfo, PNLFunctions.Defaults.CurrencyPairInfo>() { @Override public PNLFunctions.Defaults.CurrencyPairInfo apply(final CurrencyPairInfo i) { final PNLFunctions.Defaults.CurrencyPairInfo d = new PNLFunctions.Defaults.CurrencyPairInfo(); setPNLFunctionDefaults(i, d); return d; } })); } protected FunctionConfigurationSource pnlFunctions() { final PNLFunctions.Calculators calculators = new PNLFunctions.Calculators(); setPNLFunctionCalculators(calculators); final PNLFunctions.Defaults defaults = new PNLFunctions.Defaults(); setPNLFunctionDefaults(defaults); return CombiningFunctionConfigurationSource.of(getRepository(calculators), getRepository(defaults)); } protected void setPortfolioTheoryCalculators(final PortfolioTheoryFunctions.Calculators calculators) { } protected void setPortfolioTheoryDefaults(final PortfolioTheoryFunctions.Defaults defaults) { } protected FunctionConfigurationSource portfolioTheoryFunctions() { final PortfolioTheoryFunctions.Calculators calculators = new PortfolioTheoryFunctions.Calculators(); setPortfolioTheoryCalculators(calculators); final PortfolioTheoryFunctions.Defaults defaults = new PortfolioTheoryFunctions.Defaults(); setPortfolioTheoryDefaults(defaults); return CombiningFunctionConfigurationSource.of(getRepository(calculators), getRepository(defaults)); } protected void setSABRCubeDefaults(final CurrencyInfo i, final com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo defaults) { defaults.setCurveConfiguration(i.getCurveConfiguration("model/sabrcube")); defaults.setCubeDefinitionName(i.getCubeDefinitionName("model/sabrcube")); defaults.setCubeSpecificationName(i.getCubeSpecificationName("model/sabrcube")); defaults.setSurfaceDefinitionName(i.getSurfaceDefinitionName("model/sabrcube")); defaults.setSurfaceSpecificationName(i.getSurfaceSpecificationName("model/sabrcube")); } protected void setSABRCubeDefaults(final com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo d = new com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo(); setSABRCubeDefaults(i, d); return d; } })); @SuppressWarnings("unused") final Object temp = getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo d = new com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo(); setSABRCubeDefaults(i, d); return d; } }); } protected FunctionConfigurationSource sabrCubeFunctions() { final com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions defaults = new com.opengamma.financial.analytics.model.sabrcube.defaultproperties.DefaultPropertiesFunctions(); setSABRCubeDefaults(defaults); return getRepository(defaults); } protected void setSwaptionDefaults(final CurrencyInfo i, final com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults.CurrencyInfo defaults) { defaults.setCurveConfig(i.getCurveConfiguration("model/swaption/black")); defaults.setSurfaceName(i.getSurfaceName("model/swaption/black")); } protected void setSwaptionDefaults(final com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults defaults) { defaults.setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults.CurrencyInfo d = new com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults.CurrencyInfo(); setSwaptionDefaults(i, d); return d; } })); } protected FunctionConfigurationSource swaptionFunctions() { final com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults defaults = new com.opengamma.financial.analytics.model.swaption.black.BlackFunctions.Defaults(); setSwaptionDefaults(defaults); return getRepository(defaults); } protected void setVaRDefaults(final VaRFunctions.Defaults defaults) { } protected FunctionConfigurationSource varFunctions() { final VaRFunctions.Defaults defaults = new VaRFunctions.Defaults(); setVaRDefaults(defaults); return getRepository(defaults); } protected void setVolatilitySurfaceDefaults(final com.opengamma.financial.analytics.model.volatility.surface.SurfaceFunctions.Defaults defaults) { } protected void setVolatilitySurfaceBlackDefaults(final CurrencyInfo i, final com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo defaults) { defaults.setCurveName(i.getForwardCurveName("model/volatility/surface/black")); final String v = i.getForwardCurveCalculationMethod("model/volatility/surface/black"); if (v != null) { defaults.setCurveCalculationMethod(v); } defaults.setSurfaceName(i.getSurfaceName("model/volatility/surface/black")); } protected void setVolatilitySurfaceBlackDefaults(final CurrencyPairInfo i, final com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo defaults) { defaults.setCurveName(i.getCurveName("model/volatility/surface/black")); final String v = i.getCurveCalculationMethod("model/volatility/surface/black"); if (v != null) { defaults.setCurveCalculationMethod(v); } defaults.setSurfaceName(i.getSurfaceName("model/volatility/surface/black")); } protected void setVolatilitySurfaceBlackDefaults(final com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions defaults) { defaults .setPerCurrencyInfo(getCurrencyInfo(new Function<CurrencyInfo, com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo>() { @Override public com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo apply(final CurrencyInfo i) { final com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo d = new com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyInfo(); setVolatilitySurfaceBlackDefaults(i, d); return d; } })); defaults .setPerCurrencyPairInfo(getCurrencyPairInfo(new Function<CurrencyPairInfo, com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo>() { @Override public com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo apply(final CurrencyPairInfo i) { final com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo d = new com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions.CurrencyPairInfo(); setVolatilitySurfaceBlackDefaults(i, d); return d; } })); } protected void setVolatilitySurfaceDefaults(final com.opengamma.financial.analytics.volatility.surface.SurfaceFunctions.Defaults defaults) { } protected FunctionConfigurationSource volatilitySurfaceFunctions() { final com.opengamma.financial.analytics.model.volatility.surface.SurfaceFunctions.Defaults d1 = new com.opengamma.financial.analytics.model.volatility.surface.SurfaceFunctions.Defaults(); setVolatilitySurfaceDefaults(d1); final com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions d2 = new com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties.DefaultPropertiesFunctions(); setVolatilitySurfaceBlackDefaults(d2); final com.opengamma.financial.analytics.volatility.surface.SurfaceFunctions.Defaults d3 = new com.opengamma.financial.analytics.volatility.surface.SurfaceFunctions.Defaults(); setVolatilitySurfaceDefaults(d3); return CombiningFunctionConfigurationSource.of(getRepository(d1), getRepository(d2), getRepository(d3)); } @Override protected FunctionConfigurationSource createObject() { return CombiningFunctionConfigurationSource.of(super.createObject(), bondFunctions(), // bondFutureOptionFunctions(), forexDigitalFunctions(), deprecatedFunctions(), equityOptionFunctions(), externalSensitivitiesFunctions(), fixedIncomeFunctions(), forexFunctions(), forexOptionFunctions(), forwardCurveFunctions(), futureFunctions(), futureOptionFunctions(), interestRateFunctions(), // irFutureOptionFunctions(), localVolatilityFunctions(), pnlFunctions(), portfolioTheoryFunctions(), sabrCubeFunctions(), swaptionFunctions(), varFunctions(), volatilitySurfaceFunctions(), xCcySwapFunctions()); } }