/**
* 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 org.threeten.bp.ZonedDateTime;
import com.opengamma.financial.security.future.EquityIndexDividendFutureSecurity;
import com.opengamma.id.ExternalId;
import com.opengamma.integration.tool.portfolio.xml.v1_0.jaxb.FutureSecurityDefinition;
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 securities.
*/
public class ListedFutureSecurityExtractor
extends AbstractListedSecurityExtractor<FutureSecurityDefinition> {
/**
* Creates an instance.
*
* @param securityDefinition the definition, not null
*/
public ListedFutureSecurityExtractor(FutureSecurityDefinition securityDefinition) {
super(securityDefinition);
}
@Override
protected ManageableSecurity createSecurity() {
FutureSecurityDefinition 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();
String settlementExchange = defn.getSettlementExchange();
ZonedDateTime settlementDate = defn.getSettlementDate().atStartOfDay(ZoneOffset.UTC);
switch (defn.getFutureType()) {
case EQUITY_DIVIDEND_FUTURE:
return new EquityIndexDividendFutureSecurity(
expiry,
exchange,
settlementExchange,
currency,
pointValue,
settlementDate,
underlyingId,
defn.getFutureCategory());
case EQUITY_INDEX_FUTURE:
throw new PortfolioParsingException("EquityIndexFuture is not yet supported");
default:
// The xml validation should prevent this from happening
throw new PortfolioParsingException("Unrecognised listed option type: " + defn.getFutureType());
}
}
}