/**
* Copyright (C) 2011 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.model.volatility.smile.function;
import java.util.HashMap;
import java.util.Map;
/**
*
*/
public final class VolatilityFunctionFactory {
/** Standard Hagan */
public static final String HAGAN = "Hagan";
/** Alternative Hagan */
public static final String ALTERNATIVE_HAGAN = "Alternative Hagan";
/** Berestycki */
public static final String BERESTYCKI = "Berestycki";
/** Johnson */
public static final String JOHNSON = "Johnson";
/** Paulot */
public static final String PAULOT = "Paulot";
/** Standard Hagan formula */
public static final SABRHaganVolatilityFunction HAGAN_FORMULA = new SABRHaganVolatilityFunction();
/** Alternative Hagan formula */
public static final SABRHaganAlternativeVolatilityFunction ALTERNATIVE_HAGAN_FORMULA = new SABRHaganAlternativeVolatilityFunction();
/** Berestycki formula */
public static final SABRBerestyckiVolatilityFunction BERESTYCKI_FORMULA = new SABRBerestyckiVolatilityFunction();
/** Johnson formula */
public static final SABRJohnsonVolatilityFunction JOHNSON_FORMULA = new SABRJohnsonVolatilityFunction();
/** Paulot formula */
public static final SABRPaulotVolatilityFunction PAULOT_FORMULA = new SABRPaulotVolatilityFunction();
private static final Map<String, VolatilityFunctionProvider<?>> s_instances = new HashMap<>();
private static final Map<Class<? extends VolatilityFunctionProvider<?>>, String> s_instanceNames = new HashMap<>();
static {
s_instances.put(ALTERNATIVE_HAGAN, ALTERNATIVE_HAGAN_FORMULA);
s_instances.put(BERESTYCKI, BERESTYCKI_FORMULA);
s_instances.put(HAGAN, HAGAN_FORMULA);
s_instances.put(JOHNSON, JOHNSON_FORMULA);
s_instances.put(PAULOT, PAULOT_FORMULA);
s_instanceNames.put(ALTERNATIVE_HAGAN_FORMULA.getClass(), ALTERNATIVE_HAGAN);
s_instanceNames.put(BERESTYCKI_FORMULA.getClass(), BERESTYCKI);
s_instanceNames.put(HAGAN_FORMULA.getClass(), HAGAN);
s_instanceNames.put(JOHNSON_FORMULA.getClass(), JOHNSON);
s_instanceNames.put(PAULOT_FORMULA.getClass(), PAULOT);
}
private VolatilityFunctionFactory() {
}
public static VolatilityFunctionProvider<?> getCalculator(final String name) {
final VolatilityFunctionProvider<?> calculator = s_instances.get(name);
if (calculator != null) {
return calculator;
}
throw new IllegalArgumentException("Could not get calculator for " + name);
}
public static String getCalculatorName(final VolatilityFunctionProvider<?> calculator) {
if (calculator == null) {
return null;
}
return s_instanceNames.get(calculator.getClass());
}
}