/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.third.party;
import com.opengamma.financial.security.irs.InterestRateSwapSecurity;
import com.opengamma.sesame.DiscountingMulticurveCombinerFn;
import com.opengamma.sesame.Environment;
import com.opengamma.sesame.MulticurveBundle;
import com.opengamma.sesame.irs.InterestRateSwapCalculator;
import com.opengamma.sesame.irs.InterestRateSwapCalculatorFactory;
import com.opengamma.sesame.trade.InterestRateSwapTrade;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.result.Result;
/**
* Example implementation of a third party IRS calculator
*/
public class ThirdPartyInterestRateSwapCalculatorFactory implements InterestRateSwapCalculatorFactory {
private final DiscountingMulticurveCombinerFn _discountingMulticurveCombinerFn;
public ThirdPartyInterestRateSwapCalculatorFactory(DiscountingMulticurveCombinerFn discountingMulticurveCombinerFn) {
_discountingMulticurveCombinerFn = ArgumentChecker.notNull(discountingMulticurveCombinerFn, "discountingMulticurveCombinerFn");
}
@Override
public Result<InterestRateSwapCalculator> createCalculator(Environment env, InterestRateSwapSecurity security) {
throw new UnsupportedOperationException();
}
@Override
public Result<InterestRateSwapCalculator> createCalculator(Environment environment, InterestRateSwapTrade trade) {
Result<MulticurveBundle> bundleResult = _discountingMulticurveCombinerFn.getMulticurveBundle(environment, trade);
if (bundleResult.isSuccess()) {
InterestRateSwapCalculator calculator = new ThirdPartyInterestRateSwapCalculator(trade.getSecurity(),
bundleResult.getValue().getMulticurveProvider(),
environment.getValuationTime());
return Result.success(calculator);
} else {
return Result.failure(bundleResult);
}
}
}