/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.future; import java.util.HashMap; import java.util.List; import java.util.Map; import org.springframework.beans.factory.InitializingBean; import com.opengamma.core.value.MarketDataRequirementNames; import com.opengamma.engine.function.config.AbstractFunctionConfigurationBean; import com.opengamma.engine.function.config.FunctionConfiguration; import com.opengamma.engine.function.config.FunctionConfigurationSource; import com.opengamma.master.historicaltimeseries.impl.HistoricalTimeSeriesRatingFieldNames; import com.opengamma.util.ArgumentChecker; /** * Function repository configuration source for the functions contained in this package. */ public class FutureFunctions 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 FutureFunctions().getObjectCreating(); } public static FunctionConfigurationSource deprecated() { return new Deprecated().getObjectCreating(); } /** * Function repository configuration source for the deprecated functions contained in this package. */ public static class Deprecated extends AbstractFunctionConfigurationBean { /** * Currency specific data. */ public static class CurrencyInfo implements InitializingBean { private String _curveConfiguration; public void setCurveConfiguration(final String curveConfiguration) { _curveConfiguration = curveConfiguration; } public String getCurveConfiguration() { return _curveConfiguration; } @Override public void afterPropertiesSet() { ArgumentChecker.notNullInjected(getCurveConfiguration(), "curveConfiguration"); } } 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 addInterestRateFutureDefaults(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().getCurveConfiguration(); } functions.add(functionConfiguration(InterestRateFutureDefaults.class, args)); } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { if (!getPerCurrencyInfo().isEmpty()) { addInterestRateFutureDefaults(functions); } functions.add(functionConfiguration(InterestRateFuturePresentValueFunction.class)); functions.add(functionConfiguration(InterestRateFuturePV01Function.class)); functions.add(functionConfiguration(InterestRateFutureYieldCurveNodeSensitivitiesFunction.class)); } } /** * Function repository configuration source for the configurable functions contained in this package. */ public static class Calculators extends AbstractFunctionConfigurationBean { private String _htsResolutionKey = HistoricalTimeSeriesRatingFieldNames.DEFAULT_CONFIG_NAME; private String _closingPriceField; private String _costOfCarryField = "COST_OF_CARRY"; private String _valueFieldName = MarketDataRequirementNames.MARKET_VALUE; public void setHtsResolutionKey(final String htsResolutionKey) { _htsResolutionKey = htsResolutionKey; } public String getHtsResolutionKey() { return _htsResolutionKey; } public void setClosingPriceField(final String closingPriceField) { _closingPriceField = closingPriceField; } public String getClosingPriceField() { return _closingPriceField; } public void setCostOfCarryField(final String costOfCarryField) { _costOfCarryField = costOfCarryField; } public String getCostOfCarryField() { return _costOfCarryField; } public void setValueFieldName(final String valueFieldName) { _valueFieldName = valueFieldName; } public String getValueFieldName() { return _valueFieldName; } @Override public void afterPropertiesSet() { ArgumentChecker.notNullInjected(getHtsResolutionKey(), "htsResolutionKey"); ArgumentChecker.notNullInjected(getClosingPriceField(), "closingPriceField"); ArgumentChecker.notNullInjected(getCostOfCarryField(), "costOfCarryField"); ArgumentChecker.notNullInjected(getValueFieldName(), "valueFieldName"); super.afterPropertiesSet(); } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { functions.add(functionConfiguration(MarkToMarketForwardFuturesFunction.class, getClosingPriceField(), getCostOfCarryField(), getHtsResolutionKey())); functions.add(functionConfiguration(MarkToMarketPresentValueFuturesFunction.class, getClosingPriceField(), getCostOfCarryField(), getHtsResolutionKey())); functions.add(functionConfiguration(MarkToMarketPV01FuturesFunction.class, getClosingPriceField(), getCostOfCarryField(), getHtsResolutionKey())); functions.add(functionConfiguration(MarkToMarketSpotFuturesFunction.class, getClosingPriceField(), getCostOfCarryField(), getHtsResolutionKey())); functions.add(functionConfiguration(MarkToMarketValueDeltaFuturesFunction.class, getClosingPriceField(), getCostOfCarryField(), getHtsResolutionKey())); functions.add(functionConfiguration(MarkToMarketValueRhoFuturesFunction.class, getClosingPriceField(), getCostOfCarryField(), getHtsResolutionKey())); functions.add(functionConfiguration(MarkToMarketScenarioPnLFuturesFunction.class)); } } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { functions.add(functionConfiguration(FutureSecurityDeltaFunction.class)); functions.add(functionConfiguration(FutureSecurityValueDeltaFunction.class)); // TODO: add functions from package } }