/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.math.interpolation;
/**
*
*/
public final class CombinedInterpolatorExtrapolatorFactory {
private CombinedInterpolatorExtrapolatorFactory() {
}
public static CombinedInterpolatorExtrapolator getInterpolator(final String interpolatorName) {
final Interpolator1D interpolator = Interpolator1DFactory.getInterpolator(interpolatorName);
return new CombinedInterpolatorExtrapolator(interpolator);
}
public static CombinedInterpolatorExtrapolator getInterpolator(final String interpolatorName, final String extrapolatorName) {
final Interpolator1D interpolator = Interpolator1DFactory.getInterpolator(interpolatorName);
if (extrapolatorName == null || extrapolatorName.isEmpty()) {
return new CombinedInterpolatorExtrapolator(interpolator);
}
final Interpolator1D extrapolator = getExtrapolator(extrapolatorName, interpolator);
return new CombinedInterpolatorExtrapolator(interpolator, extrapolator, extrapolator);
}
// REVIEW emcleod 4-8-2010 not sure if this is how people will want to construct the combined interpolator - should it be more strict?
// Also see CombinedInterpolatorExtrapolatorNodeSensitivityCalculatorFactory
public static CombinedInterpolatorExtrapolator getInterpolator(final String interpolatorName, final String leftExtrapolatorName, final String rightExtrapolatorName) {
final Interpolator1D interpolator = Interpolator1DFactory.getInterpolator(interpolatorName);
if (leftExtrapolatorName == null || leftExtrapolatorName.isEmpty()) {
if (rightExtrapolatorName == null || rightExtrapolatorName.isEmpty()) {
return new CombinedInterpolatorExtrapolator(interpolator);
}
final Interpolator1D extrapolator = getExtrapolator(rightExtrapolatorName, interpolator);
return new CombinedInterpolatorExtrapolator(interpolator, extrapolator);
}
if (rightExtrapolatorName == null || rightExtrapolatorName.isEmpty()) {
final Interpolator1D extrapolator = getExtrapolator(leftExtrapolatorName, interpolator);
return new CombinedInterpolatorExtrapolator(interpolator, extrapolator);
}
final Interpolator1D leftExtrapolator = getExtrapolator(leftExtrapolatorName, interpolator);
final Interpolator1D rightExtrapolator = getExtrapolator(rightExtrapolatorName, interpolator);
return new CombinedInterpolatorExtrapolator(interpolator, leftExtrapolator, rightExtrapolator);
}
public static Interpolator1D getExtrapolator(final String extrapolatorName, final Interpolator1D interpolator) {
if (extrapolatorName.equals(Interpolator1DFactory.LINEAR_EXTRAPOLATOR)) {
return new LinearExtrapolator1D(interpolator);
}
if (extrapolatorName.equals(Interpolator1DFactory.LOG_LINEAR_EXTRAPOLATOR)) {
return new LogLinearExtrapolator1D(interpolator);
}
if (extrapolatorName.equals(Interpolator1DFactory.QUADRATIC_LEFT_EXTRAPOLATOR)) {
return new QuadraticPolynomialLeftExtrapolator(interpolator);
}
if (extrapolatorName.equals(Interpolator1DFactory.PRODUCT_POLYNOMIAL_EXTRAPOLATOR)) {
return new ProductPolynomialExtrapolator1D(interpolator);
}
if (extrapolatorName.equals(Interpolator1DFactory.RECIPROCAL_EXTRAPOLATOR)) {
return new ReciprocalExtrapolator1D(interpolator);
}
return Interpolator1DFactory.getInterpolator(extrapolatorName);
}
}