/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.equity.trs.calculator;
import com.opengamma.analytics.financial.equity.EquityTrsDataBundle;
import com.opengamma.analytics.financial.equity.trs.definition.EquityTotalReturnSwap;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorAdapter;
import com.opengamma.analytics.financial.provider.calculator.discounting.GammaPV01CurveParametersCalculator;
import com.opengamma.analytics.financial.provider.calculator.discounting.PresentValueCurveSensitivityDiscountingCalculator;
import com.opengamma.analytics.financial.provider.description.interestrate.ParameterProviderInterface;
import com.opengamma.util.ArgumentChecker;
/**
* Calculates the gamma PV01 of an equity total return swap.
*/
public final class EqyTrsGammaPV01Calculator extends InstrumentDerivativeVisitorAdapter<EquityTrsDataBundle, Double> {
/** The singleton instance */
private static final EqyTrsGammaPV01Calculator INSTANCE = new EqyTrsGammaPV01Calculator();
/** The gamma PV01 calculator */
private static final GammaPV01CurveParametersCalculator<ParameterProviderInterface> CALCULATOR =
new GammaPV01CurveParametersCalculator<>(PresentValueCurveSensitivityDiscountingCalculator.getInstance());
/**
* Gets the instance.
* @return The instance
*/
public static EqyTrsGammaPV01Calculator getInstance() {
return INSTANCE;
}
/**
* Private constructor.
*/
private EqyTrsGammaPV01Calculator() {
}
@Override
public Double visitEquityTotalReturnSwap(final EquityTotalReturnSwap equityTrs, final EquityTrsDataBundle data) {
ArgumentChecker.notNull(equityTrs, "equityTrs");
ArgumentChecker.notNull(data, "data");
return equityTrs.getFundingLeg().accept(CALCULATOR, data.getCurves());
}
}