/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.bond;
import com.opengamma.analytics.util.amount.ReferenceAmount;
import com.opengamma.financial.analytics.model.fixedincome.BucketedCurveSensitivities;
import com.opengamma.sesame.Environment;
import com.opengamma.sesame.trade.BondTrade;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;
import com.opengamma.util.money.MultipleCurrencyAmount;
import com.opengamma.util.result.Result;
import com.opengamma.util.tuple.Pair;
/**
* Default implementation for the bond function.
*
* @deprecated use {@link DiscountingBondFn}
*/
@Deprecated
public class DefaultBondFn implements BondFn {
private final BondCalculatorFactory _bondCalculatorFactory;
/**
* Create the function.
*
* @param bondCalculatorFactory function to generate the calculator for the security
*/
public DefaultBondFn(BondCalculatorFactory bondCalculatorFactory) {
_bondCalculatorFactory = ArgumentChecker.notNull(bondCalculatorFactory, "bondCalculatorFactory");
}
@Override
public Result<MultipleCurrencyAmount> calculatePresentValueFromCurves(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculatePresentValueFromCurves();
}
return Result.failure(calculatorResult);
}
@Override
public Result<MultipleCurrencyAmount> calculatePresentValueFromCleanPrice(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculatePresentValueFromClean();
}
return Result.failure(calculatorResult);
}
@Override
public Result<MultipleCurrencyAmount> calculatePresentValueFromYield(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculatePresentValueFromYield();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateCleanPriceMarket(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateCleanPriceMarket();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateCleanPriceFromCurves(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateCleanPriceFromCurves();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateCleanPriceFromYield(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateCleanPriceFromYield();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateYieldToMaturityFromCleanPrice(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateYieldToMaturityFromCleanPrice();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateYieldToMaturityFromCurves(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateYieldToMaturityFromCurves();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateYieldToMaturityMarket(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateYieldToMaturityMarket();
}
return Result.failure(calculatorResult);
}
@Override
public Result<BucketedCurveSensitivities> calculateBucketedPV01(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateBucketedPV01();
}
return Result.failure(calculatorResult);
}
@Override
public Result<ReferenceAmount<Pair<String, Currency>>> calculatePV01(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculatePV01();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateZSpread(Environment env, BondTrade bondTrade) {
Result<BondCalculator> calculatorResult = _bondCalculatorFactory.createCalculator(env, bondTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateZSpread();
}
return Result.failure(calculatorResult);
}
}