/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.bondfuture;
import com.opengamma.analytics.financial.provider.sensitivity.multicurve.MultipleCurrencyParameterSensitivity;
import com.opengamma.analytics.util.amount.ReferenceAmount;
import com.opengamma.sesame.Environment;
import com.opengamma.sesame.trade.BondFutureTrade;
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 future function.
*/
public class DefaultBondFutureFn implements BondFutureFn {
private final BondFutureCalculatorFactory _bondFutureCalculatorFactory;
public DefaultBondFutureFn(BondFutureCalculatorFactory bondFutureCalculatorFactory) {
_bondFutureCalculatorFactory = ArgumentChecker.notNull(bondFutureCalculatorFactory, "bondFutureCalculatorFactory");
}
@Override
public Result<MultipleCurrencyAmount> calculatePV(Environment env, BondFutureTrade bondFutureTrade) {
Result<BondFutureDiscountingCalculator> calculatorResult = _bondFutureCalculatorFactory.createCalculator(env, bondFutureTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculatePV();
}
return Result.failure(calculatorResult);
}
@Override
public Result<ReferenceAmount<Pair<String, Currency>>> calculatePV01(Environment env, BondFutureTrade bondFutureTrade) {
Result<BondFutureDiscountingCalculator> calculatorResult = _bondFutureCalculatorFactory.createCalculator(env, bondFutureTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculatePV01();
}
return Result.failure(calculatorResult);
}
@Override
public Result<MultipleCurrencyParameterSensitivity> calculateBucketedPV01(Environment env,
BondFutureTrade bondFutureTrade) {
Result<BondFutureDiscountingCalculator> calculatorResult = _bondFutureCalculatorFactory.createCalculator(env, bondFutureTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateBucketedPV01();
}
return Result.failure(calculatorResult);
}
@Override
public Result<Double> calculateSecurityModelPrice(Environment env, BondFutureTrade bondFutureTrade) {
Result<BondFutureDiscountingCalculator> calculatorResult = _bondFutureCalculatorFactory.createCalculator(env, bondFutureTrade);
if (calculatorResult.isSuccess()) {
return calculatorResult.getValue().calculateSecurityModelPrice();
}
return Result.failure(calculatorResult);
}
}