/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.forex.defaultproperties; 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.util.ArgumentChecker; import com.opengamma.util.tuple.Pair; /** * Function repository configuration source for the default functions contained in this package. */ public class FXForwardPropertiesFunctions extends AbstractFunctionConfigurationBean { /** * Currency specific data. */ public static class CurrencyInfo implements InitializingBean { /** The curve configuration name */ private String _curveConfiguration; /** The discounting curve name */ private String _discountingCurve; /** * Gets the curve configuration name. * @return The curve configuration name */ public String getCurveConfiguration() { return _curveConfiguration; } /** * Sets the curve configuration name. * @param curveConfiguration The curve configuration name, not null */ public void setCurveConfiguration(final String curveConfiguration) { _curveConfiguration = curveConfiguration; } /** * Gets the discounting curve name * @return The discounting curve name */ public String getDiscountingCurve() { return _discountingCurve; } /** * Sets the discounting curve name. * @param discountingCurve The discounting curve name, not null */ public void setDiscountingCurve(final String discountingCurve) { _discountingCurve = discountingCurve; } @Override public void afterPropertiesSet() { ArgumentChecker.notNullInjected(getCurveConfiguration(), "curveConfiguration"); ArgumentChecker.notNullInjected(getDiscountingCurve(), "discountingCurve"); } } /** * Currency-pair specific data. */ public static class CurrencyPairInfo implements InitializingBean { /** The forward curve name */ private String _forwardCurveName; /** * Gets the forward curve name. * @return The forward curve name */ public String getForwardCurveName() { return _forwardCurveName; } /** * Sets the forward curve name * @param forwardCurveName The forward curve name, not null */ public void setForwardCurveName(final String forwardCurveName) { _forwardCurveName = forwardCurveName; } @Override public void afterPropertiesSet() { ArgumentChecker.notNullInjected(getForwardCurveName(), "forwardCurveName"); } } /** The per-currency defaults */ private final Map<String, CurrencyInfo> _perCurrencyInfo = new HashMap<>(); /** The per-currency pair defaults */ private final Map<Pair<String, String>, CurrencyPairInfo> _perCurrencyPairInfo = new HashMap<>(); /** * Sets the defaults for a set of currencies. * @param perCurrencyInfo The currency pair defaults */ public void setPerCurrencyInfo(final Map<String, CurrencyInfo> perCurrencyInfo) { _perCurrencyInfo.clear(); _perCurrencyInfo.putAll(perCurrencyInfo); } /** * Gets the defaults for a currency. * @return The currency defaults */ public Map<String, CurrencyInfo> getPerCurrencyInfo() { return _perCurrencyInfo; } /** * Sets the defaults for a currency. * @param currency The currency * @param info The defaults */ public void setCurrencyInfo(final String currency, final CurrencyInfo info) { _perCurrencyInfo.put(currency, info); } /** * Gets the defaults for a currency. * @param currency The currency * @return The defaults */ public CurrencyInfo getCurrencyInfo(final String currency) { return _perCurrencyInfo.get(currency); } /** * Sets the defaults for a set of currency pairs. * @param perCurrencyPairInfo The currency pairs and defaults */ public void setPerCurrencyPairInfo(final Map<Pair<String, String>, CurrencyPairInfo> perCurrencyPairInfo) { _perCurrencyPairInfo.clear(); _perCurrencyPairInfo.putAll(perCurrencyPairInfo); } /** * Gets the defaults for a currency pair. * @return The defaults */ public Map<Pair<String, String>, CurrencyPairInfo> getPerCurrencyPairInfo() { return _perCurrencyPairInfo; } /** * Sets defaults for a currency pair. * @param currencyPair The currency pair * @param info The currency pair defaults */ public void setCurrencyPairInfo(final Pair<String, String> currencyPair, final CurrencyPairInfo info) { _perCurrencyPairInfo.put(currencyPair, info); } /** * Gets defaults for a currency pair. * @param currencyPair The currency pair * @return The currency pair defaults */ public CurrencyPairInfo getCurrencyPairInfo(final Pair<String, String> currencyPair) { return _perCurrencyPairInfo.get(currencyPair); } /** * Adds defaults for FX forwards relevant to the discounting calculation method. * @param functions The list of functions */ protected void addFXForwardDefaults(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().getCurveConfiguration(); args[i++] = e.getValue().getDiscountingCurve(); } functions.add(functionConfiguration(FXForwardDefaults.class, args)); } /** * Adds defaults for FX forwards relevant to the forward point calculation method. * @param functions The list of functions */ protected void addFXForwardPointsDefaults(final List<FunctionConfiguration> functions) { final String[] args = new String[getPerCurrencyPairInfo().size() * 3]; int i = 0; for (final Map.Entry<Pair<String, String>, CurrencyPairInfo> e : getPerCurrencyPairInfo().entrySet()) { args[i++] = e.getKey().getFirst(); args[i++] = e.getKey().getSecond(); args[i++] = e.getValue().getForwardCurveName(); } functions.add(functionConfiguration(FXForwardForwardPointsDefaults.class, args)); } @Override protected void addAllConfigurations(final List<FunctionConfiguration> functions) { if (!getPerCurrencyInfo().isEmpty()) { addFXForwardDefaults(functions); } if (!getPerCurrencyPairInfo().isEmpty()) { addFXForwardPointsDefaults(functions); } } }