/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.curve.credit;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.engine.function.FunctionCompilationContext;
import com.opengamma.engine.function.FunctionDefinition;
import com.opengamma.financial.OpenGammaCompilationContext;
import com.opengamma.financial.analytics.curve.AbstractCurveDefinition;
import com.opengamma.financial.analytics.curve.ConstantCurveDefinition;
import com.opengamma.financial.analytics.curve.CurveDefinition;
import com.opengamma.financial.analytics.curve.InterpolatedCurveDefinition;
import com.opengamma.financial.analytics.curve.SpreadCurveDefinition;
import com.opengamma.financial.config.ConfigSourceQuery;
import com.opengamma.id.VersionCorrection;
import com.opengamma.util.ArgumentChecker;
/**
* A source for {@link AbstractCurveDefinition}s.
*/
public class ConfigDBCurveDefinitionSource implements CurveDefinitionSource {
private final ConfigSourceQuery<InterpolatedCurveDefinition> _queryInterpolatedCurveDefinition;
private final ConfigSourceQuery<CurveDefinition> _queryCurveDefinition;
private final ConfigSourceQuery<ConstantCurveDefinition> _queryConstantCurveDefinition;
private final ConfigSourceQuery<SpreadCurveDefinition> _querySpreadCurveDefinition;
/**
* @param configSource The config source, not null
* @deprecated Use {@link #ConfigDBCurveDefinitionSource(ConfigSource,VersionCorrection)} or {@link #init} instead
*/
@Deprecated
public ConfigDBCurveDefinitionSource(final ConfigSource configSource) {
this(configSource, VersionCorrection.LATEST);
}
public ConfigDBCurveDefinitionSource(final ConfigSource configSource, final VersionCorrection versionCorrection) {
ArgumentChecker.notNull(configSource, "configSource");
ArgumentChecker.notNull(versionCorrection, "versionCorrection");
_queryInterpolatedCurveDefinition = new ConfigSourceQuery<>(configSource, InterpolatedCurveDefinition.class, versionCorrection);
_queryCurveDefinition = new ConfigSourceQuery<>(configSource, CurveDefinition.class, versionCorrection);
_queryConstantCurveDefinition = new ConfigSourceQuery<>(configSource, ConstantCurveDefinition.class, versionCorrection);
_querySpreadCurveDefinition = new ConfigSourceQuery<>(configSource, SpreadCurveDefinition.class, versionCorrection);
}
public static ConfigDBCurveDefinitionSource init(final FunctionCompilationContext context, final FunctionDefinition function) {
final ConfigDBCurveDefinitionSource source = new ConfigDBCurveDefinitionSource(OpenGammaCompilationContext.getConfigSource(context), context.getFunctionInitializationVersionCorrection());
source._queryInterpolatedCurveDefinition.reinitOnChange(context, function);
source._queryCurveDefinition.reinitOnChange(context, function);
source._queryConstantCurveDefinition.reinitOnChange(context, function);
source._querySpreadCurveDefinition.reinitOnChange(context, function);
return source;
}
@Override
public CurveDefinition getCurveDefinition(final String name) {
return getCurveDefinition(name, _queryCurveDefinition.getVersionCorrection());
}
@Override
public CurveDefinition getCurveDefinition(final String name, final VersionCorrection versionCorrection) {
ArgumentChecker.notNull(name, "name");
ArgumentChecker.notNull(versionCorrection, "version correction");
CurveDefinition result = _queryInterpolatedCurveDefinition.get(name, versionCorrection);
if (result == null) {
result = _queryCurveDefinition.get(name, versionCorrection);
}
return result;
}
@Override
public AbstractCurveDefinition getDefinition(final String name) {
return getDefinition(name, _queryCurveDefinition.getVersionCorrection());
}
@Override
public AbstractCurveDefinition getDefinition(final String name, final VersionCorrection versionCorrection) {
ArgumentChecker.notNull(name, "name");
ArgumentChecker.notNull(versionCorrection, "version correction");
AbstractCurveDefinition result = _queryInterpolatedCurveDefinition.get(name, versionCorrection);
if (result != null) {
return result;
}
result = _queryConstantCurveDefinition.get(name, versionCorrection);
if (result != null) {
return result;
}
result = _querySpreadCurveDefinition.get(name, versionCorrection);
if (result != null) {
return result;
}
return _queryCurveDefinition.get(name, versionCorrection);
}
}