Package com.opengamma.analytics.financial.interestrate

Source Code of com.opengamma.analytics.financial.interestrate.YieldCurveBundle

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

import java.util.HashMap;
import java.util.LinkedHashMap;
import java.util.Map;
import java.util.Set;

import org.apache.commons.lang.ObjectUtils;

import com.opengamma.analytics.financial.forex.method.FXMatrix;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve;
import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderDiscount;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;

/**
* A bundle of curves and forex exchange rates used for pricing. The curves are stored as a map <String, YieldAndDiscountCurve>.
* @deprecated Use {@link MulticurveProviderDiscount}
*/
@Deprecated
public class YieldCurveBundle {

  /**
   * The map used to store the curves.
   */
  private final Map<String, YieldAndDiscountCurve> _curves;
  /**
   * A map linking each curve in the bundle to its currency.
   */
  private final Map<String, Currency> _curveCurrency;
  /**
   * The matrix containing the exchange rates.
   */
  private final FXMatrix _fxMatrix;

  /**
   * Constructor. An empty map is created for the curves and an empty FXMatrix.
   */
  public YieldCurveBundle() {
    _curves = new LinkedHashMap<>();
    _curveCurrency = new HashMap<>();
    _fxMatrix = new FXMatrix();
  }

  /**
   * Constructor from existing currency map and existing fxMatrix.
   * @param fxMatrix The FXMatrix.
   * @param curveCurrency The map of currency names to currency
   * @param curvesMap The map of curve names to curve
   */
  public YieldCurveBundle(final FXMatrix fxMatrix, final Map<String, Currency> curveCurrency, final Map<String, ? extends YieldAndDiscountCurve> curvesMap) {
    ArgumentChecker.notNull(fxMatrix, "FX matrix");
    ArgumentChecker.notNull(curveCurrency, "curve currency");
    _curves = new LinkedHashMap<>();
    if (curvesMap != null) {
      ArgumentChecker.noNulls(curvesMap.keySet(), "curve map key set");
      ArgumentChecker.noNulls(curvesMap.values(), "curve map entry set");
      _curves.putAll(curvesMap);
    }
    _curveCurrency = new HashMap<>(curveCurrency);
    _fxMatrix = new FXMatrix(fxMatrix);
  }

  /**
   * Constructor from existing currency map and existing fxMatrix.
   * @param fxMatrix The FXMatrix.
   * @param curveCurrency The map of currency names to currency
   */
  public YieldCurveBundle(final FXMatrix fxMatrix, final Map<String, Currency> curveCurrency) {
    _curves = new LinkedHashMap<>();
    _curveCurrency = new HashMap<>(curveCurrency);
    _fxMatrix = new FXMatrix(fxMatrix);
  }

  /**
   * Constructor from an existing map. A new map is created.
   * @param curvesMap The map.
   */
  public YieldCurveBundle(final Map<String, ? extends YieldAndDiscountCurve> curvesMap) {
    _curves = new LinkedHashMap<>();
    _curveCurrency = new HashMap<>();
    _fxMatrix = new FXMatrix();
    if (curvesMap != null) {
      ArgumentChecker.noNulls(curvesMap.keySet(), "curves map key set");
      ArgumentChecker.noNulls(curvesMap.values(), "curves map values");
      _curves.putAll(curvesMap);
    }
  }

  /**
   * Constructor from an array of names and curves. The two arrays should have the same length.
   * The names and curves are linked in the order of the arrays.
   * @param names The names.
   * @param curves The curves.
   */
  public YieldCurveBundle(final String[] names, final YieldAndDiscountCurve[] curves) {
    ArgumentChecker.notNull(names, "names");
    ArgumentChecker.notNull(curves, "curves");
    ArgumentChecker.isTrue(names.length == curves.length, "Different number of names ({}) and curves ({})", names.length, curves.length);
    ArgumentChecker.noNulls(names, "names");
    ArgumentChecker.noNulls(curves, "curves");
    _curves = new LinkedHashMap<>();
    _curveCurrency = new HashMap<>();
    _fxMatrix = new FXMatrix();
    final int n = names.length;
    for (int i = 0; i < n; i++) {
      _curves.put(names[i], curves[i]);
    }
  }

  public YieldCurveBundle(final FXMatrix fxMatrix, final String[] names, final YieldAndDiscountCurve[] curves) {
    ArgumentChecker.notNull(names, "names");
    ArgumentChecker.notNull(curves, "curves");
    ArgumentChecker.isTrue(names.length == curves.length, "Different number of names ({}) and curves ({})", names.length, curves.length);
    ArgumentChecker.noNulls(names, "names");
    ArgumentChecker.noNulls(curves, "curves");
    _curves = new LinkedHashMap<>();
    _curveCurrency = new HashMap<>();
    final int n = names.length;
    for (int i = 0; i < n; i++) {
      _curves.put(names[i], curves[i]);
    }
    _fxMatrix = fxMatrix;
  }

  /**
   * Constructor from existing curve and currency maps and existing fxMatrix. A new map is created.
   * @param curvesMap The map of curves.
   * @param fxMatrix The FXMatrix.
   * @param curveCurrency The map of currencies.
   */
  public YieldCurveBundle(final Map<String, ? extends YieldAndDiscountCurve> curvesMap, final FXMatrix fxMatrix, final Map<String, Currency> curveCurrency) {
    ArgumentChecker.notNull(curvesMap, "curves map");
    ArgumentChecker.notNull(fxMatrix, "FX matrix");
    ArgumentChecker.notNull(curveCurrency, "curve currency");
    _curves = new LinkedHashMap<>(curvesMap);
    _curveCurrency = new HashMap<>(curveCurrency);
    _fxMatrix = new FXMatrix(fxMatrix);
  }

  /**
   * Constructor from an array of names and curves. The two arrays should have the same length.
   * The names and curves are linked in the order of the arrays.
   * @param names The names.
   * @param curves The curves.
   * @param currencies The currency associated to each curve.
   */
  public YieldCurveBundle(final String[] names, final YieldAndDiscountCurve[] curves, final Currency[] currencies) {
    ArgumentChecker.notNull(names, "names");
    ArgumentChecker.notNull(curves, "curves");
    ArgumentChecker.isTrue(names.length == curves.length, "Different number of names ({}) and curves ({})", names.length, curves.length);
    ArgumentChecker.isTrue(names.length == currencies.length, "Different number of names ({}) and currencies ({})", names.length, currencies.length);
    ArgumentChecker.noNulls(names, "names");
    ArgumentChecker.noNulls(curves, "curves");
    _curves = new LinkedHashMap<>();
    _curveCurrency = new HashMap<>();
    _fxMatrix = new FXMatrix();
    final int n = names.length;
    for (int i = 0; i < n; i++) {
      _curves.put(names[i], curves[i]);
      _curveCurrency.put(names[i], currencies[i]);
    }
  }

  /**
   * Constructor from a bundle. A new map is created.
   * @param bundle A bundle.
   */
  public YieldCurveBundle(final YieldCurveBundle bundle) {
    ArgumentChecker.notNull(bundle, "bundle");
    _curves = new LinkedHashMap<>(bundle._curves);
    _curveCurrency = new HashMap<>(bundle._curveCurrency);
    _fxMatrix = new FXMatrix(bundle._fxMatrix);
  }

  /**
   * Create a new copy of the bundle.
   * @return The bundle.
   */
  public YieldCurveBundle copy() {
    final LinkedHashMap<String, YieldAndDiscountCurve> curves = new LinkedHashMap<>(_curves);
    final Map<String, Currency> curveCurrency = new HashMap<>(_curveCurrency);
    final FXMatrix fxMatrix = new FXMatrix(_fxMatrix);
    return new YieldCurveBundle(fxMatrix, curveCurrency, curves);
  }

  /**
   * Add a new curve to the bundle.
   * @param name The curve name.
   * @param curve The curve.
   * @throws IllegalArgumentException if curve name already present
   */
  public void setCurve(final String name, final YieldAndDiscountCurve curve) {
    ArgumentChecker.notNull(name, "name");
    ArgumentChecker.notNull(curve, "curve");
    if (_curves.containsKey(name)) {
      throw new IllegalArgumentException("Named yield curve already set: " + name);
    }
    _curves.put(name, curve);
  }

  /**
   * Replace an existing curve with a new one.
   * @param name The curve name.
   * @param curve The curve.
   *  @throws IllegalArgumentException if curve name NOT already present
   */
  public void replaceCurve(final String name, final YieldAndDiscountCurve curve) {
    ArgumentChecker.notNull(name, "name");
    ArgumentChecker.notNull(curve, "curve");
    if (!_curves.containsKey(name)) {
      throw new IllegalArgumentException("Named yield curve not in set" + name);
    }
    _curves.put(name, curve);
  }

  public void addAll(final YieldCurveBundle other) {
    ArgumentChecker.notNull(other, "yield curve bundle");
    _curves.putAll(other._curves);
  }

  public YieldAndDiscountCurve getCurve(final String name) {
    if (_curves.containsKey(name)) {
      return _curves.get(name);
    }
    throw new IllegalArgumentException("Named yield curve not found: " + name);
  }

  /**
   * Returns the map with the curves.
   * @return The map.
   */
  public Map<String, YieldAndDiscountCurve> getCurvesMap() {
    return _curves;
  }

  /**
   * Returns the number of curves in the bundle.
   * @return The number of curves.
   */
  public int size() {
    return _curves.size();
  }

  public Set<String> getAllNames() {
    return _curves.keySet();
  }

  public Boolean containsName(final String curveName) {
    return _curves.containsKey(curveName);
  }

  /**
   * Gets map linking each curve in the bundle to its currency.
   * @return The map.
   */
  public Map<String, Currency> getCurrencyMap() {
    return _curveCurrency;
  }

  /**
   * Return the currency associated to a given curve.
   * @param curveName The curve name.
   * @return The currency.
   */
  public Currency getCurveCurrency(final String curveName) {
    final Currency ccy = _curveCurrency.get(curveName);
    if (ccy == null) {
      throw new IllegalArgumentException("Named yield curve not in map: " + curveName);
    }
    return ccy;
  }

  /**
   * Gets the underlying FXMatrix containing the exchange rates.
   * @return The matrix.
   */
  public FXMatrix getFxRates() {
    return _fxMatrix;
  }

  @Override
  public int hashCode() {
    final int prime = 31;
    int result = 1;
    result = prime * result + _curveCurrency.hashCode();
    result = prime * result + _curves.hashCode();
    result = prime * result + _fxMatrix.hashCode();
    return result;
  }

  @Override
  public boolean equals(final Object obj) {
    if (this == obj) {
      return true;
    }
    if (obj == null) {
      return false;
    }
    if (getClass() != obj.getClass()) {
      return false;
    }
    final YieldCurveBundle other = (YieldCurveBundle) obj;
    if (!ObjectUtils.equals(_curveCurrency, other._curveCurrency)) {
      return false;
    }
    if (!ObjectUtils.equals(_curves, other._curves)) {
      return false;
    }
    if (!ObjectUtils.equals(_fxMatrix, other._fxMatrix)) {
      return false;
    }
    return true;
  }


}
TOP

Related Classes of com.opengamma.analytics.financial.interestrate.YieldCurveBundle

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.