/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.irfutureoption; import java.util.Collections; import java.util.HashMap; import java.util.Set; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.value.ValuePropertyNames; import com.opengamma.engine.value.ValueRequirement; import com.opengamma.engine.value.ValueRequirementNames; import com.opengamma.financial.security.FinancialSecurityUtils; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.tuple.Pair; import com.opengamma.util.tuple.Pairs; /** * Adds {@link ValuePropertyNames#CURVE} to the {@link ValueRequirement}'s produced by {@link InterestRateFutureOptionBlackFunction} * that require it, such as {@link ValueRequirementNames#POSITION_RHO} * @deprecated The functions for which these defaults apply are deprecated. */ @Deprecated public class InterestRateFutureOptionBlackCurveSpecificDefaults extends InterestRateFutureOptionBlackDefaults { private static final String[] s_curveRequirements = new String[] { ValueRequirementNames.POSITION_RHO }; private final HashMap<String, String> _currencyCurveNames; public InterestRateFutureOptionBlackCurveSpecificDefaults(final String[] currencyCurveConfigAndSurfaceNames) { ArgumentChecker.notNull(currencyCurveConfigAndSurfaceNames, "currency, curve names"); final int argLenth = currencyCurveConfigAndSurfaceNames.length; ArgumentChecker.isTrue(argLenth % 4 == 0, "Must have one curve, one curv config and one surface name per currency"); _currencyCurveNames = new HashMap<>(); final HashMap<String, Pair<String, String>> currencyConfigAndSurfaceMap = new HashMap<>(); for (int i = 0; i < argLenth; i += 4) { final String currency = currencyCurveConfigAndSurfaceNames[i]; final String curve = currencyCurveConfigAndSurfaceNames[i + 1]; final String config = currencyCurveConfigAndSurfaceNames[i + 2]; final String surface = currencyCurveConfigAndSurfaceNames[i + 3]; _currencyCurveNames.put(currency, curve); currencyConfigAndSurfaceMap.put(currency, Pairs.of(config, surface)); } setCurrencyCurveConfigAndSurfaceNames(currencyConfigAndSurfaceMap); } @Override protected void getDefaults(final PropertyDefaults defaults) { super.getDefaults(defaults); for (final String requirement : s_curveRequirements) { defaults.addValuePropertyName(requirement, ValuePropertyNames.CURVE); } } @Override protected Set<String> getDefaultValue(final FunctionCompilationContext context, final ComputationTarget target, final ValueRequirement desiredValue, final String propertyName) { if (ValuePropertyNames.CURVE.equals(propertyName)) { final String currencyName = FinancialSecurityUtils.getCurrency(target.getTrade().getSecurity()).getCode(); if (!_currencyCurveNames.containsKey(currencyName)) { s_logger.error("Could not curve name for currency " + currencyName + "; should never happen"); return null; } final String curveName = _currencyCurveNames.get(currencyName); return Collections.singleton(curveName); } return super.getDefaultValue(context, target, desiredValue, propertyName); } private static final Logger s_logger = LoggerFactory.getLogger(InterestRateFutureOptionBlackCurveSpecificDefaults.class); }