public Double visitInterestRateFutureOptionPremiumTransaction(final InterestRateFutureOptionPremiumTransaction option, final YieldCurveBundle curves) {
Validate.notNull(curves);
Validate.notNull(option);
if (curves instanceof SABRInterestRateDataBundle) {
final SABRInterestRateDataBundle sabrBundle = (SABRInterestRateDataBundle) curves;
final InterestRateFutureOptionPremiumSecurity underlyingOption = option.getUnderlyingOption();
final InterestRateFutureOptionMarginSecurity underlyingMarginedOption = new InterestRateFutureOptionMarginSecurity(underlyingOption.getUnderlyingFuture(), underlyingOption.getExpirationTime(),
underlyingOption.getStrike(), underlyingOption.isCall());
final InterestRateFutureOptionMarginTransaction margined = new InterestRateFutureOptionMarginTransaction(underlyingMarginedOption, option.getQuantity(), option.getTradePrice());
return METHOD_OPTIONFUTURESMARGIN_SABR.presentValue(margined, sabrBundle).getAmount();
}
throw new UnsupportedOperationException("The PresentValueSABRCalculator visitor visitInterestRateFutureOptionPremiumTransaction requires a SABRInterestRateDataBundle as data.");
}