/**
* 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.description.interestrate.ParameterIssuerProviderInterface;
import com.opengamma.financial.analytics.conversion.BondAndBondFutureTradeConverter;
import com.opengamma.sesame.Environment;
import com.opengamma.sesame.IssuerProviderBundle;
import com.opengamma.sesame.IssuerProviderFn;
import com.opengamma.sesame.trade.BondFutureTrade;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.result.Result;
/**
* Implementation of the BondFutureCalculatorFactory that uses the discounting calculator to return values.
*/
public class BondFutureDiscountingCalculatorFactory implements BondFutureCalculatorFactory {
private final BondAndBondFutureTradeConverter _converter;
private final IssuerProviderFn _issuerProviderFn;
public BondFutureDiscountingCalculatorFactory(BondAndBondFutureTradeConverter converter,
IssuerProviderFn issuerProviderFn) {
_converter = ArgumentChecker.notNull(converter, "converter");
_issuerProviderFn = ArgumentChecker.notNull(issuerProviderFn, "issuerProviderFn");
}
@Override
public Result<BondFutureDiscountingCalculator> createCalculator(Environment env, BondFutureTrade bondFutureTrade) {
Result<IssuerProviderBundle> bundleResult = _issuerProviderFn.getMulticurveBundle(env, bondFutureTrade.getTrade());
if (bundleResult.isSuccess()) {
ParameterIssuerProviderInterface curves = bundleResult.getValue().getParameterIssuerProvider();
BondFutureDiscountingCalculator calculator = new BondFutureDiscountingCalculator(bondFutureTrade,
curves,
_converter,
env.getValuationTime());
return Result.success(calculator);
} else {
return Result.failure(bundleResult);
}
}
}