/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.conversion;
import org.threeten.bp.ZonedDateTime;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.analytics.financial.instrument.InstrumentDefinition;
import com.opengamma.analytics.financial.instrument.future.InterestRateFutureOptionMarginSecurityDefinition;
import com.opengamma.analytics.financial.instrument.future.InterestRateFutureOptionPremiumSecurityDefinition;
import com.opengamma.analytics.financial.instrument.future.InterestRateFutureSecurityDefinition;
import com.opengamma.core.holiday.HolidaySource;
import com.opengamma.core.region.RegionSource;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.financial.convention.ConventionBundleSource;
import com.opengamma.financial.security.FinancialSecurityVisitorAdapter;
import com.opengamma.financial.security.future.InterestRateFutureSecurity;
import com.opengamma.financial.security.option.IRFutureOptionSecurity;
import com.opengamma.financial.security.option.OptionType;
import com.opengamma.id.ExternalId;
import com.opengamma.id.ExternalIdBundle;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;
/**
* Converts interest rate future option securities into the form used by the analytics library
*
* @deprecated Use {@link InterestRateFutureOptionSecurityConverter}. {@link ConventionBundleSource} should not be used, as the conventions are not typed.
*/
@Deprecated
public class InterestRateFutureOptionSecurityConverterDeprecated extends FinancialSecurityVisitorAdapter<InstrumentDefinition<?>> {
/** The security source */
private final SecuritySource _securitySource;
/** Converter for the underlying future */
private final InterestRateFutureSecurityConverterDeprecated _underlyingConverter;
/** Lookup version/correction */
private final VersionCorrection _versionCorrection;
/**
* @param holidaySource The holiday source, not null
* @param conventionSource The convention source, not null
* @param regionSource The region source, not null
* @param securitySource The security source, not null
* @param versionCorrection The resolution timestamp, not null
*/
public InterestRateFutureOptionSecurityConverterDeprecated(final HolidaySource holidaySource, final ConventionBundleSource conventionSource, final RegionSource regionSource,
final SecuritySource securitySource, final VersionCorrection versionCorrection) {
ArgumentChecker.notNull(securitySource, "security source");
ArgumentChecker.notNull(versionCorrection, "versionCorrection");
_underlyingConverter = new InterestRateFutureSecurityConverterDeprecated(holidaySource, conventionSource, regionSource);
_securitySource = securitySource;
_versionCorrection = versionCorrection;
}
@Override
public InstrumentDefinition<?> visitIRFutureOptionSecurity(final IRFutureOptionSecurity security) {
ArgumentChecker.notNull(security, "security");
final ExternalId underlyingIdentifier = security.getUnderlyingId();
final InterestRateFutureSecurity underlyingSecurity = ((InterestRateFutureSecurity) _securitySource.getSingle(ExternalIdBundle.of(underlyingIdentifier), _versionCorrection));
if (underlyingSecurity == null) {
throw new OpenGammaRuntimeException("Underlying security " + underlyingIdentifier + " was not found in database");
}
final InterestRateFutureSecurityDefinition underlyingFuture = _underlyingConverter.visitInterestRateFutureSecurity(underlyingSecurity);
final ZonedDateTime expirationDate = security.getExpiry().getExpiry();
final double strike = security.getStrike();
final boolean isCall = security.getOptionType() == OptionType.CALL ? true : false;
final boolean isMargined = security.isMargined();
if (isMargined) {
return new InterestRateFutureOptionMarginSecurityDefinition(underlyingFuture, expirationDate, strike, isCall);
}
return new InterestRateFutureOptionPremiumSecurityDefinition(underlyingFuture, expirationDate, strike, isCall);
}
}