/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.provider.calculator.inflationissuer;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorDelegate;
import com.opengamma.analytics.financial.interestrate.bond.definition.BillTransaction;
import com.opengamma.analytics.financial.interestrate.bond.definition.BondCapitalIndexedTransaction;
import com.opengamma.analytics.financial.interestrate.bond.definition.BondFixedTransaction;
import com.opengamma.analytics.financial.interestrate.bond.provider.BillTransactionDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.bond.provider.BondCapitalIndexedTransactionDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.bond.provider.BondTransactionDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.cash.derivative.DepositCounterpart;
import com.opengamma.analytics.financial.interestrate.cash.provider.DepositCounterpartDiscountingMethod;
import com.opengamma.analytics.financial.provider.calculator.inflation.InflationIssuerProviderAdapter;
import com.opengamma.analytics.financial.provider.calculator.inflation.PresentValueCurveSensitivityDiscountingInflationCalculator;
import com.opengamma.analytics.financial.provider.description.inflation.ParameterInflationIssuerProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.inflation.MultipleCurrencyInflationSensitivity;
/**
*
*/
public final class PresentValueCurveSensitivityIssuerInflationCalculator
extends InstrumentDerivativeVisitorDelegate<ParameterInflationIssuerProviderInterface, MultipleCurrencyInflationSensitivity> {
/**
* The unique instance of the calculator.
*/
private static final PresentValueCurveSensitivityIssuerInflationCalculator INSTANCE = new PresentValueCurveSensitivityIssuerInflationCalculator();
/**
* Gets the calculator instance.
* @return The calculator.
*/
public static PresentValueCurveSensitivityIssuerInflationCalculator getInstance() {
return INSTANCE;
}
/**
* Private constructor.
*/
private PresentValueCurveSensitivityIssuerInflationCalculator() {
super(new InflationIssuerProviderAdapter<>(PresentValueCurveSensitivityDiscountingInflationCalculator.getInstance()));
}
/** Calculators */
private static final DepositCounterpartDiscountingMethod METHOD_DEPO_CTPY = DepositCounterpartDiscountingMethod.getInstance();
private static final BillTransactionDiscountingMethod METHOD_BILL_TR = BillTransactionDiscountingMethod.getInstance();
private static final BondTransactionDiscountingMethod METHOD_BOND_TR = BondTransactionDiscountingMethod.getInstance();
private static final BondCapitalIndexedTransactionDiscountingMethod METHOD_CAPIND_BOND_TR =
BondCapitalIndexedTransactionDiscountingMethod.getInstance();
// ----- Deposit -----
@Override
public MultipleCurrencyInflationSensitivity visitDepositCounterpart(final DepositCounterpart deposit,
final ParameterInflationIssuerProviderInterface issuercurves) {
return MultipleCurrencyInflationSensitivity.of(
METHOD_DEPO_CTPY.presentValueCurveSensitivity(deposit, issuercurves.getIssuerProvider()));
}
// ----- Bond/Bill -----
@Override
public MultipleCurrencyInflationSensitivity visitBillTransaction(final BillTransaction bill,
final ParameterInflationIssuerProviderInterface issuercurves) {
return MultipleCurrencyInflationSensitivity.of(
METHOD_BILL_TR.presentValueCurveSensitivity(bill, issuercurves.getIssuerProvider()));
}
@Override
public MultipleCurrencyInflationSensitivity visitBondFixedTransaction(final BondFixedTransaction bond,
final ParameterInflationIssuerProviderInterface issuercurves) {
return MultipleCurrencyInflationSensitivity.of(
METHOD_BOND_TR.presentValueCurveSensitivity(bond, issuercurves.getIssuerProvider()));
}
@Override
public MultipleCurrencyInflationSensitivity visitBondCapitalIndexedTransaction(final BondCapitalIndexedTransaction<?> bond,
final ParameterInflationIssuerProviderInterface curves) {
return METHOD_CAPIND_BOND_TR.presentValueCurveSensitivity(bond, curves);
}
}