/** * 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 org.threeten.bp.ZoneOffset; import com.opengamma.financial.security.option.EquityIndexDividendFutureOptionSecurity; import com.opengamma.financial.security.option.EquityIndexFutureOptionSecurity; import com.opengamma.financial.security.option.ExerciseType; import com.opengamma.financial.security.option.OptionType; import com.opengamma.id.ExternalId; import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.FutureOptionSecurityDefinition; import com.opengamma.master.security.ManageableSecurity; import com.opengamma.util.money.Currency; import com.opengamma.util.time.Expiry; import com.opengamma.util.time.ExpiryAccuracy; /** * Extractor for future option securities. */ public class ListedFutureOptionSecurityExtractor extends AbstractListedSecurityExtractor<FutureOptionSecurityDefinition> { /** * Creates an instance. * * @param securityDefinition the definition, not null */ public ListedFutureOptionSecurityExtractor(FutureOptionSecurityDefinition securityDefinition) { super(securityDefinition); } //------------------------------------------------------------------------- @Override protected ManageableSecurity createSecurity() { FutureOptionSecurityDefinition defn = getSecurityDefinition(); ExternalId underlyingId = defn.getUnderlyingId().toExternalId(); Expiry expiry = new Expiry(defn.getFutureExpiry().atDay(1).atStartOfDay(ZoneOffset.UTC), ExpiryAccuracy.MONTH_YEAR); String exchange = defn.getExchange(); Currency currency = defn.getCurrency(); int pointValue = defn.getPointValue(); boolean isMargined = defn.isIsMargined(); double strike = defn.getStrike().doubleValue(); OptionType optionType = defn.getOptionType(); ExerciseType exerciseType = defn.getExerciseType().convert(); switch (defn.getListedFutureOptionType()) { case EQUITY_INDEX_FUTURE_OPTION: return new EquityIndexFutureOptionSecurity(exchange, expiry, exerciseType, underlyingId, pointValue, isMargined, currency, strike, optionType); case EQUITY_DIVIDEND_FUTURE_OPTION: return new EquityIndexDividendFutureOptionSecurity(exchange, expiry, exerciseType, underlyingId, pointValue, isMargined, currency, strike, optionType); default: // The xml validation should prevent this from happening throw new PortfolioParsingException("Unrecognised listed option type: " + defn.getListedFutureOptionType()); } } }