Package com.opengamma.analytics.financial.timeseries.returns

Source Code of com.opengamma.analytics.financial.timeseries.returns.TimeSeriesReturnCalculatorFactory

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.analytics.financial.timeseries.returns;

import java.util.HashMap;
import java.util.Map;

import com.opengamma.util.CalculationMode;

/**
*
*/
public class TimeSeriesReturnCalculatorFactory {
  /** Label for continuous relative return calculator, strict mode */
  public static final String CONTINUOUS_RELATIVE_STRICT = "ContinuousRelativeReturnStrict";
  /** Label for continuous return calculator, strict mode */
  public static final String CONTINUOUS_STRICT = "ContinuousReturnStrict";
  /** Label for excess continuous return calculator, strict mode */
  public static final String EXCESS_CONTINUOUS_STRICT = "ExcessContinuousReturnStrict";
  /** Label for excess simple return calculator, strict mode */
  public static final String EXCESS_SIMPLE_NET_STRICT = "ExcessSimpleNetReturnStrict";
  /** Label for simple gross return calculator, strict mode */
  public static final String SIMPLE_GROSS_STRICT = "SimpleGrossReturnStrict";
  /** Label for simple net return calculator, strict mode */
  public static final String SIMPLE_NET_STRICT = "SimpleNetReturnStrict";
  /** Label for simple net relative return calculator, strict mode */
  public static final String SIMPLE_NET_RELATIVE_STRICT = "SimpleNetRelativeReturnStrict";
  /** Label for continuous relative return calculator, lenient mode */
  public static final String CONTINUOUS_RELATIVE_LENIENT = "ContinuousRelativeReturnLenient";
  /** Label for continuous return calculator, lenient mode */
  public static final String CONTINUOUS_LENIENT = "ContinuousReturnLenient";
  /** Label for excess continuous return calculator, lenient mode */
  public static final String EXCESS_CONTINUOUS_LENIENT = "ExcessContinuousReturnLenient";
  /** Label for excess simple return calculator, lenient mode */
  public static final String EXCESS_SIMPLE_NET_LENIENT = "ExcessSimpleNetReturnLenient";
  /** Label for simple gross return calculator, lenient mode */
  public static final String SIMPLE_GROSS_LENIENT = "SimpleGrossReturnLenient";
  /** Label for simple net return calculator, lenient mode */
  public static final String SIMPLE_NET_LENIENT = "SimpleNetReturnLenient";
  /** Label for simple net relative return calculator, lenient mode */
  public static final String SIMPLE_NET_RELATIVE_LENIENT = "SimpleNetRelativeReturnLenient";
  /** Continuous relative return calculator, strict mode */
  public static final ContinuouslyCompoundedRelativeTimeSeriesReturnCalculator CONTINUOUS_RELATIVE_STRICT_CALCULATOR = new ContinuouslyCompoundedRelativeTimeSeriesReturnCalculator(
      CalculationMode.STRICT);
  /** Continuous return calculator, strict mode */
  public static final ContinuouslyCompoundedTimeSeriesReturnCalculator CONTINUOUS_STRICT_CALCULATOR = new ContinuouslyCompoundedTimeSeriesReturnCalculator(CalculationMode.STRICT);
  /** Continuous return calculator, strict mode */
  public static final ExcessContinuouslyCompoundedTimeSeriesReturnCalculator EXCESS_CONTINUOUS_STRICT_CALCULATOR = new ExcessContinuouslyCompoundedTimeSeriesReturnCalculator(CalculationMode.STRICT);
  /** Excess simple return calculator, strict mode */
  public static final ExcessSimpleNetTimeSeriesReturnCalculator EXCESS_SIMPLE_NET_STRICT_CALCULATOR = new ExcessSimpleNetTimeSeriesReturnCalculator(CalculationMode.STRICT);
  /** Simple gross return calculator, strict mode */
  public static final SimpleGrossTimeSeriesReturnCalculator SIMPLE_GROSS_STRICT_CALCULATOR = new SimpleGrossTimeSeriesReturnCalculator(CalculationMode.STRICT);
  /** Simple net return calculator, strict mode */
  public static final SimpleNetTimeSeriesReturnCalculator SIMPLE_NET_STRICT_CALCULATOR = new SimpleNetTimeSeriesReturnCalculator(CalculationMode.STRICT);
  /** Simple net relative return calculator, strict mode */
  public static final SimpleNetRelativeTimeSeriesReturnCalculator SIMPLE_NET_RELATIVE_STRICT_CALCULATOR = new SimpleNetRelativeTimeSeriesReturnCalculator(CalculationMode.STRICT);
  /** Continuous relative return calculator, lenient mode */
  public static final ContinuouslyCompoundedRelativeTimeSeriesReturnCalculator CONTINUOUS_RELATIVE_LENIENT_CALCULATOR = new ContinuouslyCompoundedRelativeTimeSeriesReturnCalculator(
      CalculationMode.LENIENT);
  /** Continuous return calculator, lenient mode */
  public static final ContinuouslyCompoundedTimeSeriesReturnCalculator CONTINUOUS_LENIENT_CALCULATOR = new ContinuouslyCompoundedTimeSeriesReturnCalculator(CalculationMode.LENIENT);
  /** Continuous return calculator, lenient mode */
  public static final ExcessContinuouslyCompoundedTimeSeriesReturnCalculator EXCESS_CONTINUOUS_LENIENT_CALCULATOR = new ExcessContinuouslyCompoundedTimeSeriesReturnCalculator(CalculationMode.LENIENT);
  /** Excess simple return calculator, lenient mode */
  public static final ExcessSimpleNetTimeSeriesReturnCalculator EXCESS_SIMPLE_NET_LENIENT_CALCULATOR = new ExcessSimpleNetTimeSeriesReturnCalculator(CalculationMode.LENIENT);
  /** Simple gross return calculator, lenient mode */
  public static final SimpleGrossTimeSeriesReturnCalculator SIMPLE_GROSS_LENIENT_CALCULATOR = new SimpleGrossTimeSeriesReturnCalculator(CalculationMode.LENIENT);
  /** Simple net return calculator, lenient mode */
  public static final SimpleNetTimeSeriesReturnCalculator SIMPLE_NET_LENIENT_CALCULATOR = new SimpleNetTimeSeriesReturnCalculator(CalculationMode.LENIENT);
  /** Simple net relative return calculator, lenient mode */
  public static final SimpleNetRelativeTimeSeriesReturnCalculator SIMPLE_NET_RELATIVE_LENIENT_CALCULATOR = new SimpleNetRelativeTimeSeriesReturnCalculator(CalculationMode.LENIENT);
  private static final Map<String, TimeSeriesReturnCalculator> s_staticStrictInstances;
  private static final Map<Class<?>, String> s_instanceStrictNames;
  private static final Map<String, TimeSeriesReturnCalculator> s_staticLenientInstances;
  private static final Map<Class<?>, String> s_instanceLenientNames;

  static {
    s_staticStrictInstances = new HashMap<>();
    s_instanceStrictNames = new HashMap<>();
    s_staticLenientInstances = new HashMap<>();
    s_instanceLenientNames = new HashMap<>();
    s_staticLenientInstances.put(CONTINUOUS_LENIENT, CONTINUOUS_LENIENT_CALCULATOR);
    s_instanceLenientNames.put(CONTINUOUS_LENIENT_CALCULATOR.getClass(), CONTINUOUS_LENIENT);
    s_staticLenientInstances.put(CONTINUOUS_RELATIVE_LENIENT, CONTINUOUS_RELATIVE_LENIENT_CALCULATOR);
    s_instanceLenientNames.put(CONTINUOUS_RELATIVE_LENIENT_CALCULATOR.getClass(), CONTINUOUS_RELATIVE_LENIENT);
    s_staticStrictInstances.put(CONTINUOUS_RELATIVE_STRICT, CONTINUOUS_RELATIVE_STRICT_CALCULATOR);
    s_instanceStrictNames.put(CONTINUOUS_RELATIVE_STRICT_CALCULATOR.getClass(), CONTINUOUS_RELATIVE_STRICT);
    s_staticStrictInstances.put(CONTINUOUS_STRICT, CONTINUOUS_STRICT_CALCULATOR);
    s_instanceStrictNames.put(CONTINUOUS_STRICT_CALCULATOR.getClass(), CONTINUOUS_STRICT);
    s_staticLenientInstances.put(EXCESS_CONTINUOUS_LENIENT, EXCESS_CONTINUOUS_LENIENT_CALCULATOR);
    s_instanceLenientNames.put(EXCESS_CONTINUOUS_LENIENT_CALCULATOR.getClass(), EXCESS_CONTINUOUS_LENIENT);
    s_staticStrictInstances.put(EXCESS_CONTINUOUS_STRICT, EXCESS_CONTINUOUS_STRICT_CALCULATOR);
    s_instanceStrictNames.put(EXCESS_CONTINUOUS_STRICT_CALCULATOR.getClass(), EXCESS_CONTINUOUS_STRICT);
    s_staticLenientInstances.put(EXCESS_SIMPLE_NET_LENIENT, EXCESS_SIMPLE_NET_LENIENT_CALCULATOR);
    s_instanceLenientNames.put(EXCESS_SIMPLE_NET_LENIENT_CALCULATOR.getClass(), EXCESS_SIMPLE_NET_LENIENT);
    s_staticStrictInstances.put(EXCESS_SIMPLE_NET_STRICT, EXCESS_SIMPLE_NET_STRICT_CALCULATOR);
    s_instanceStrictNames.put(EXCESS_SIMPLE_NET_STRICT_CALCULATOR.getClass(), EXCESS_SIMPLE_NET_STRICT);
    s_staticLenientInstances.put(SIMPLE_GROSS_LENIENT, SIMPLE_GROSS_LENIENT_CALCULATOR);
    s_instanceLenientNames.put(SIMPLE_GROSS_LENIENT_CALCULATOR.getClass(), SIMPLE_GROSS_LENIENT);
    s_staticStrictInstances.put(SIMPLE_GROSS_STRICT, SIMPLE_GROSS_STRICT_CALCULATOR);
    s_instanceStrictNames.put(SIMPLE_GROSS_STRICT_CALCULATOR.getClass(), SIMPLE_GROSS_STRICT);
    s_staticLenientInstances.put(SIMPLE_NET_LENIENT, SIMPLE_NET_LENIENT_CALCULATOR);
    s_instanceLenientNames.put(SIMPLE_NET_LENIENT_CALCULATOR.getClass(), SIMPLE_NET_LENIENT);
    s_staticStrictInstances.put(SIMPLE_NET_STRICT, SIMPLE_NET_STRICT_CALCULATOR);
    s_instanceStrictNames.put(SIMPLE_NET_STRICT_CALCULATOR.getClass(), SIMPLE_NET_STRICT);
    s_staticLenientInstances.put(SIMPLE_NET_RELATIVE_LENIENT, SIMPLE_NET_RELATIVE_LENIENT_CALCULATOR);
    s_instanceLenientNames.put(SIMPLE_NET_RELATIVE_LENIENT_CALCULATOR.getClass(), SIMPLE_NET_RELATIVE_LENIENT);
    s_staticStrictInstances.put(SIMPLE_NET_RELATIVE_STRICT, SIMPLE_NET_RELATIVE_STRICT_CALCULATOR);
    s_instanceStrictNames.put(SIMPLE_NET_RELATIVE_STRICT_CALCULATOR.getClass(), SIMPLE_NET_RELATIVE_STRICT);
  }

  public static String getReturnCalculatorName(final TimeSeriesReturnCalculator calculator) {
    if (calculator == null) {
      return null;
    }
    final CalculationMode mode = calculator.getMode();
    if (mode == CalculationMode.STRICT) {
      return s_instanceStrictNames.get(calculator.getClass());
    } else if (mode == CalculationMode.LENIENT) {
      return s_instanceLenientNames.get(calculator.getClass());
    } else {
      throw new IllegalArgumentException("Do not have calculator for " + calculator.getClass().getName() + " with calculation mode " + mode);
    }
  }

  public static String getReturnCalculatorName(final TimeSeriesReturnCalculator calculator, final CalculationMode mode) {
    if (calculator == null) {
      return null;
    }
    switch (mode) {
      case STRICT:
        return s_instanceStrictNames.get(calculator.getClass());
      case LENIENT:
        return s_instanceLenientNames.get(calculator.getClass());
      default:
        throw new IllegalArgumentException("Do not have name for " + calculator.getClass().getName() + " with calculation mode " + mode);
    }
  }

  public static TimeSeriesReturnCalculator getReturnCalculator(final String calculatorName) {
    if (s_staticLenientInstances.containsKey(calculatorName)) {
      return s_staticLenientInstances.get(calculatorName);
    }
    if (s_staticStrictInstances.containsKey(calculatorName)) {
      return s_staticStrictInstances.get(calculatorName);
    }
    throw new IllegalArgumentException("Do not have calculator for " + calculatorName);
  }

  public static TimeSeriesReturnCalculator getReturnCalculator(final String calculatorName, final CalculationMode mode) {
    TimeSeriesReturnCalculator calculator;
    switch (mode) {
      case STRICT:
        calculator = s_staticStrictInstances.get(calculatorName);
        break;
      case LENIENT:
        calculator = s_staticLenientInstances.get(calculatorName);
        break;
      default:
        throw new IllegalArgumentException("Do not have calculator for " + calculatorName + " with mode " + mode);
    }
    if (calculator == null) {
      throw new IllegalArgumentException("Do not have calculator for " + calculatorName + " with mode " + mode);
    }
    return calculator;
  }
}
TOP

Related Classes of com.opengamma.analytics.financial.timeseries.returns.TimeSeriesReturnCalculatorFactory

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.