/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.ircurve;
import org.threeten.bp.LocalDate;
import com.opengamma.engine.function.FunctionCompilationContext;
import com.opengamma.engine.function.FunctionDefinition;
import com.opengamma.financial.OpenGammaCompilationContext;
import com.opengamma.id.ObjectId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;
/**
*
*/
public interface InterpolatedYieldCurveSpecificationBuilder {
/**
* Synthetic object identifier used to propagate changes from concrete implementations to function initializations.
*/
ObjectId SYNTHETIC_CHANGE_ID = ObjectId.of("OpenGamma", "InterpolatedYieldCurveSpecification");
/**
* Instance locked at a single version/correction timestamp.
* <p>
* Construction of this object, using the {@link #init} method, will also register the calling function for re-initialization.
*/
final class AtVersionCorrection {
private final InterpolatedYieldCurveSpecificationBuilder _instance;
private final VersionCorrection _version;
private AtVersionCorrection(final InterpolatedYieldCurveSpecificationBuilder instance, final VersionCorrection version) {
_instance = ArgumentChecker.notNull(instance, "instance");
_version = ArgumentChecker.notNull(version, "version");
}
public InterpolatedYieldCurveSpecification buildCurve(LocalDate curveDate, YieldCurveDefinition curveDefinition) {
return _instance.buildCurve(curveDate, curveDefinition, _version);
}
public static AtVersionCorrection init(final FunctionCompilationContext context, final FunctionDefinition function) {
if (context.getFunctionReinitializer() != null) {
context.getFunctionReinitializer().reinitializeFunction(function, SYNTHETIC_CHANGE_ID);
}
return new AtVersionCorrection(OpenGammaCompilationContext.getInterpolatedYieldCurveSpecificationBuilder(context), context.getFunctionInitializationVersionCorrection());
}
}
InterpolatedYieldCurveSpecification buildCurve(LocalDate curveDate, YieldCurveDefinition curveDefinition, VersionCorrection version);
}