/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.provider.calculator.issuer;
import com.opengamma.analytics.financial.interestrate.InstrumentDerivativeVisitorDelegate;
import com.opengamma.analytics.financial.interestrate.bond.definition.BillSecurity;
import com.opengamma.analytics.financial.interestrate.bond.definition.BillTotalReturnSwap;
import com.opengamma.analytics.financial.interestrate.bond.definition.BillTransaction;
import com.opengamma.analytics.financial.interestrate.bond.definition.BondFixedSecurity;
import com.opengamma.analytics.financial.interestrate.bond.definition.BondFixedTransaction;
import com.opengamma.analytics.financial.interestrate.bond.definition.BondTotalReturnSwap;
import com.opengamma.analytics.financial.interestrate.bond.provider.BillSecurityDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.bond.provider.BillTotalReturnSwapDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.bond.provider.BillTransactionDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.bond.provider.BondSecurityDiscountingMethod;
import com.opengamma.analytics.financial.interestrate.bond.provider.BondTotalReturnSwapDiscountingMethod;
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.interestrate.future.derivative.BondFuturesTransaction;
import com.opengamma.analytics.financial.interestrate.future.provider.BondFuturesTransactionDiscountingMethod;
import com.opengamma.analytics.financial.provider.calculator.discounting.PresentValueCurveSensitivityDiscountingCalculator;
import com.opengamma.analytics.financial.provider.description.interestrate.ParameterIssuerProviderInterface;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyMulticurveSensitivity;
/**
* Calculates the sensitivity of the present value of issuer-specific instruments to curves
* used in pricing by discounting.
*/
public final class PresentValueCurveSensitivityIssuerCalculator extends InstrumentDerivativeVisitorDelegate<ParameterIssuerProviderInterface, MultipleCurrencyMulticurveSensitivity> {
/**
* The unique instance of the calculator.
*/
private static final PresentValueCurveSensitivityIssuerCalculator INSTANCE = new PresentValueCurveSensitivityIssuerCalculator();
/**
* Gets the calculator instance.
* @return The calculator.
*/
public static PresentValueCurveSensitivityIssuerCalculator getInstance() {
return INSTANCE;
}
/**
* Private constructor.
*/
private PresentValueCurveSensitivityIssuerCalculator() {
super(new IssuerProviderAdapter<>(PresentValueCurveSensitivityDiscountingCalculator.getInstance()));
}
/** Method for counterparty deposits */
private static final DepositCounterpartDiscountingMethod METHOD_DEPO_CTPY = DepositCounterpartDiscountingMethod.getInstance();
/** Method for bill securities */
private static final BillSecurityDiscountingMethod METHOD_BILL_SEC = BillSecurityDiscountingMethod.getInstance();
/** Method for bill transactions */
private static final BillTransactionDiscountingMethod METHOD_BILL_TR = BillTransactionDiscountingMethod.getInstance();
/** Method for bond securities */
private static final BondSecurityDiscountingMethod METHOD_BOND_SEC = BondSecurityDiscountingMethod.getInstance();
/** Method for bond transactions */
private static final BondTransactionDiscountingMethod METHOD_BOND_TR = BondTransactionDiscountingMethod.getInstance();
/** Method for bond future transactions */
private static final BondFuturesTransactionDiscountingMethod METHOD_BNDFUT_TRA = BondFuturesTransactionDiscountingMethod.getInstance();
/** Method for bond Total Return Swap */
private static final BondTotalReturnSwapDiscountingMethod METHOD_TRS_BND = BondTotalReturnSwapDiscountingMethod.getInstance();
/** Method for bill Total Return Swap */
private static final BillTotalReturnSwapDiscountingMethod METHOD_TRS_BILL = BillTotalReturnSwapDiscountingMethod.getInstance();
// ----- Deposit -----
@Override
public MultipleCurrencyMulticurveSensitivity visitDepositCounterpart(final DepositCounterpart deposit, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_DEPO_CTPY.presentValueCurveSensitivity(deposit, issuercurves.getIssuerProvider());
}
// ----- Bond/Bill -----
@Override
public MultipleCurrencyMulticurveSensitivity visitBillSecurity(final BillSecurity bill, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_BILL_SEC.presentValueCurveSensitivity(bill, issuercurves.getIssuerProvider());
}
@Override
public MultipleCurrencyMulticurveSensitivity visitBillTransaction(final BillTransaction bill, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_BILL_TR.presentValueCurveSensitivity(bill, issuercurves.getIssuerProvider());
}
@Override
public MultipleCurrencyMulticurveSensitivity visitBondFixedSecurity(final BondFixedSecurity bond, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_BOND_SEC.presentValueCurveSensitivity(bond, issuercurves.getIssuerProvider());
}
@Override
public MultipleCurrencyMulticurveSensitivity visitBondFixedTransaction(final BondFixedTransaction bond, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_BOND_TR.presentValueCurveSensitivity(bond, issuercurves.getIssuerProvider());
}
// ----- Futures -----
@Override
public MultipleCurrencyMulticurveSensitivity visitBondFuturesTransaction(final BondFuturesTransaction futures, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_BNDFUT_TRA.presentValueCurveSensitivity(futures, issuercurves.getIssuerProvider());
}
// ----- Other -----
@Override
public MultipleCurrencyMulticurveSensitivity visitBondTotalReturnSwap(final BondTotalReturnSwap trs, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_TRS_BND.presentValueCurveSensitivity(trs, issuercurves.getIssuerProvider());
}
@Override
public MultipleCurrencyMulticurveSensitivity visitBillTotalReturnSwap(final BillTotalReturnSwap trs, final ParameterIssuerProviderInterface issuercurves) {
return METHOD_TRS_BILL.presentValueCurveSensitivity(trs, issuercurves.getIssuerProvider());
}
}