/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.model.volatility.surface.black.defaultproperties; import com.opengamma.core.security.Security; import com.opengamma.engine.ComputationTarget; import com.opengamma.engine.function.FunctionCompilationContext; import com.opengamma.engine.target.ComputationTargetType; import com.opengamma.financial.analytics.model.forex.ForexVisitors; import com.opengamma.financial.security.option.FXOptionSecurity; import com.opengamma.util.money.Currency; import com.opengamma.util.money.UnorderedCurrencyPair; /** * */ public class FXBlackVolatilitySurfaceTradeDefaults extends FXBlackVolatilitySurfaceDefaults { public FXBlackVolatilitySurfaceTradeDefaults(final String... defaultsPerCurrencyPair) { super(ComputationTargetType.TRADE, defaultsPerCurrencyPair); } @Override public boolean canApplyTo(final FunctionCompilationContext context, final ComputationTarget target) { final Security security = target.getTrade().getSecurity(); if (!(security instanceof FXOptionSecurity)) { return false; } final FXOptionSecurity fxOption = (FXOptionSecurity) security; final Currency putCurrency = fxOption.accept(ForexVisitors.getPutCurrencyVisitor()); final Currency callCurrency = fxOption.accept(ForexVisitors.getCallCurrencyVisitor()); final String currencyPair = UnorderedCurrencyPair.of(putCurrency, callCurrency).getObjectId().getValue(); if (getAllCurrencyPairs().contains(currencyPair)) { return true; } final String firstCcy = currencyPair.substring(0, 3); final String secondCcy = currencyPair.substring(3, 6); final String reversedCcys = secondCcy + firstCcy; return getAllCurrencyPairs().contains(reversedCcys); } @Override protected String getCurrencyPair(final ComputationTarget target) { final FXOptionSecurity fxOption = (FXOptionSecurity) target.getTrade().getSecurity(); final Currency putCurrency = fxOption.accept(ForexVisitors.getPutCurrencyVisitor()); final Currency callCurrency = fxOption.accept(ForexVisitors.getCallCurrencyVisitor()); return UnorderedCurrencyPair.of(putCurrency, callCurrency).getObjectId().getValue(); } }