}
//-------------------------------------------------------------------------
@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());
}
}