/** * Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.integration.tool.portfolio.xml.v1_0.conversion; import com.opengamma.financial.security.option.ExerciseType; import com.opengamma.financial.security.option.FXOptionSecurity; import com.opengamma.financial.security.option.NonDeliverableFXOptionSecurity; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.FxOptionTrade; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.SettlementType; import com.opengamma.master.security.ManageableSecurity; /** * Security extractor for fx option trades. */ public class FxOptionTradeSecurityExtractor extends TradeSecurityExtractor<FxOptionTrade> { /** * Create a security extractor for the supplied trade. * * @param trade the trade to perform extraction on */ public FxOptionTradeSecurityExtractor(FxOptionTrade trade) { super(trade); } //------------------------------------------------------------------------- @Override public ManageableSecurity[] extractSecurities() { FxOptionTrade trade = getTrade(); FxOptionCalculator calculator = new FxOptionCalculator(trade, trade.getNotional(), trade.getNotionalCurrency()); ExerciseType exerciseType = trade.getExerciseType().convert(); ManageableSecurity security = trade.getSettlementType() == SettlementType.PHYSICAL ? new FXOptionSecurity( calculator.getPutCurrency(), calculator.getCallCurrency(), calculator.getPutAmount(), calculator.getCallAmount(), calculator.getExpiry(), calculator.getSettlementDate(), calculator.isLong(), exerciseType) : new NonDeliverableFXOptionSecurity( calculator.getPutCurrency(), calculator.getCallCurrency(), calculator.getPutAmount(), calculator.getCallAmount(), calculator.getExpiry(), calculator.getSettlementDate(), calculator.isLong(), exerciseType, trade.getSettlementCurrency().equals(calculator.getCallCurrency().getCode())); return securityArray(addIdentifier(security)); } }