ArgumentChecker.notNull(curves, "curves");
ArgumentChecker.notNull(payment, "payment");
if (curves instanceof SABRInterestRateDataBundle) {
final SABRInterestRateDataBundle sabrBundle = (SABRInterestRateDataBundle) curves;
if (sabrBundle.getSABRParameter() instanceof SABRInterestRateCorrelationParameters) {
final SABRInterestRateCorrelationParameters sabrCorrelation = (SABRInterestRateCorrelationParameters) sabrBundle.getSABRParameter();
final CapFloorCMSSpreadSABRBinormalMethod method = new CapFloorCMSSpreadSABRBinormalMethod(sabrCorrelation.getCorrelation(), CapFloorCMSSABRReplicationMethod.getDefaultInstance(),
CouponCMSSABRReplicationMethod.getInstance());
return method.presentValueSABRSensitivity(payment, sabrBundle);
}
}
throw new UnsupportedOperationException("The PresentValueSABRSensitivitySABRCalculator visitor visitCapFloorCMSSpread requires a SABRInterestRateDataBundle with correlation as data.");