/** * 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 java.util.List; import com.google.common.collect.Lists; import com.opengamma.financial.security.option.SwaptionSecurity; import com.opengamma.id.ExternalId; import com.opengamma.id.ExternalScheme; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.BuySell; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.FixedLeg; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.SettlementType; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.SwapLeg.Direction; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.SwapTrade; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.SwaptionTrade; import com.opengamma.master.security.ManageableSecurity; import com.opengamma.util.money.Currency; import com.opengamma.util.time.Expiry; /** * Security extractor for swaption trades. */ public class SwaptionTradeSecurityExtractor extends TradeSecurityExtractor<SwaptionTrade> { /** * Create a security extractor for the supplied trade. * * @param trade the trade to perform extraction on */ public SwaptionTradeSecurityExtractor(SwaptionTrade trade) { super(trade); } //------------------------------------------------------------------------- @Override public ManageableSecurity[] extractSecurities() { SwaptionTrade trade = getTrade(); SwapTrade swapTrade = trade.getUnderlyingSwapTrade(); ManageableSecurity underlying = swapTrade.getSecurityExtractor().extractSecurities()[0]; ExternalId underlyingId = underlying.getExternalIdBundle().getExternalId(ExternalScheme.of("XML_LOADER")); List<FixedLeg> fixedLegs = Lists.newArrayList(swapTrade.getFixedLegs()); //note - these fields are resolved on a best effort basis //since they aren't actually used by the analytics. //see PLAT-1924 Currency currency = null; boolean isPayer = false; if (!fixedLegs.isEmpty()) { currency = fixedLegs.get(0).getCurrency(); isPayer = fixedLegs.get(0).getDirection() == Direction.PAY; } Expiry expiry = new Expiry(convertLocalDate(trade.getExpirationDate())); ManageableSecurity security = new SwaptionSecurity( isPayer, underlyingId, trade.getBuySell() == BuySell.BUY, expiry, trade.getSettlementType() == SettlementType.CASH_SETTLED, currency, null, trade.getExerciseType().convert(), convertLocalDate(trade.getCashSettlementPaymentDate())); return securityArray(addIdentifier(security), underlying); } }