Package com.opengamma.analytics.financial.provider.description.interestrate

Source Code of com.opengamma.analytics.financial.provider.description.interestrate.ProviderUtils

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

import java.util.Collection;
import java.util.Iterator;
import java.util.Map;

import com.opengamma.analytics.financial.forex.method.FXMatrix;
import com.opengamma.analytics.financial.instrument.index.IborIndex;
import com.opengamma.analytics.financial.instrument.index.IndexON;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.money.Currency;

/**
* Utility class for providers. This is a temporary class and will be removed when the providers
* have been refactored.
*/
public class ProviderUtils {

  /**
   * Merges discounting curve providers.
   * @param providers The providers to merge, not null or empty
   * @return The merged providers
   */
  public static MulticurveProviderDiscount mergeDiscountingProviders(final Collection<MulticurveProviderDiscount> providers) {
    ArgumentChecker.notNull(providers, "providers");
    ArgumentChecker.notEmpty(providers, "providers");
    final MulticurveProviderDiscount result = new MulticurveProviderDiscount();
    for (final MulticurveProviderDiscount provider : providers) {
      for (final Map.Entry<Currency, YieldAndDiscountCurve> entry : provider.getDiscountingCurves().entrySet()) {
        result.setCurve(entry.getKey(), entry.getValue());
      }
      for (final Map.Entry<IborIndex, YieldAndDiscountCurve> entry : provider.getForwardIborCurves().entrySet()) {
        result.setCurve(entry.getKey(), entry.getValue());
      }
      for (final Map.Entry<IndexON, YieldAndDiscountCurve> entry : provider.getForwardONCurves().entrySet()) {
        result.setCurve(entry.getKey(), entry.getValue());
      }
      final FXMatrix matrix = provider.getFxRates();
      final Collection<Currency> currencies = matrix.getCurrencies().keySet();
      final Iterator<Currency> iterator = currencies.iterator();
      if (currencies.size() > 0) {
        final Currency initialCurrency = iterator.next();
        while (iterator.hasNext()) {
          final Currency otherCurrency = iterator.next();
          result.getFxRates().addCurrency(initialCurrency, otherCurrency, matrix.getFxRate(initialCurrency, otherCurrency));
        }
      }
    }
    return result;
  }

  /**
   * Merges Hull-White one-factor providers.
   * @param providers The providers to merge, not null or empty
   * @return The merged providers
   */
  public static HullWhiteOneFactorProviderDiscount mergeHullWhiteProviders(final Collection<HullWhiteOneFactorProviderDiscount> providers) {
    ArgumentChecker.notNull(providers, "providers");
    ArgumentChecker.notEmpty(providers, "providers");
    final Iterator<HullWhiteOneFactorProviderDiscount> iter = providers.iterator();
    final HullWhiteOneFactorProviderDiscount result = iter.next().copy();
    while (iter.hasNext()) {
      final HullWhiteOneFactorProviderDiscount provider = iter.next().copy();
      final MulticurveProviderDiscount underlying = provider.getMulticurveProvider().copy();
      for (final Map.Entry<Currency, YieldAndDiscountCurve> entry : underlying.getDiscountingCurves().entrySet()) {
        result.setCurve(entry.getKey(), entry.getValue());
      }
      for (final Map.Entry<IborIndex, YieldAndDiscountCurve> entry : underlying.getForwardIborCurves().entrySet()) {
        result.setCurve(entry.getKey(), entry.getValue());
      }
      for (final Map.Entry<IndexON, YieldAndDiscountCurve> entry : underlying.getForwardONCurves().entrySet()) {
        result.setCurve(entry.getKey(), entry.getValue());
      }
      final FXMatrix matrix = underlying.getFxRates();
      final Collection<Currency> currencies = matrix.getCurrencies().keySet();
      final Iterator<Currency> iterator = currencies.iterator();
      if (currencies.size() > 0) {
        final Currency initialCurrency = iterator.next();
        while (iterator.hasNext()) {
          final Currency otherCurrency = iterator.next();
          underlying.getFxRates().addCurrency(initialCurrency, otherCurrency, matrix.getFxRate(initialCurrency, otherCurrency));
        }
      }
      //TODO actually merge.
    }
    return result;
  }

  /**
   * Merges a discounting curve provider and an FX matrix.
   * @param provider The provider, not null
   * @param matrix The FX matrix, not null
   * @return The merged provider
   */
  public static MulticurveProviderDiscount mergeDiscountingProviders(final MulticurveProviderDiscount provider, final FXMatrix matrix) {
    ArgumentChecker.notNull(provider, "provider");
    ArgumentChecker.notNull(matrix, "matrix");
    final MulticurveProviderDiscount result = provider.copy();
    final Collection<Currency> currencies = matrix.getCurrencies().keySet();
    final Iterator<Currency> iterator = currencies.iterator();
    if (currencies.size() > 0) {
      final Currency initialCurrency = iterator.next();
      while (iterator.hasNext()) {
        final Currency otherCurrency = iterator.next();
        result.getFxRates().addCurrency(initialCurrency, otherCurrency, matrix.getFxRate(initialCurrency, otherCurrency));
      }
    }
    return result;
  }

  /**
   * Merges a Hull-White curve provider and an FX matrix.
   * @param provider The provider, not null
   * @param matrix The FX matrix, not null
   * @return The merged provider
   */
  public static HullWhiteOneFactorProviderDiscount mergeHullWhiteProviders(final HullWhiteOneFactorProviderDiscount provider, final FXMatrix matrix) {
    ArgumentChecker.notNull(provider, "provider");
    ArgumentChecker.notNull(matrix, "matrix");
    final HullWhiteOneFactorProviderDiscount result = provider.copy();
    final Collection<Currency> currencies = matrix.getCurrencies().keySet();
    final Iterator<Currency> iterator = currencies.iterator();
    if (currencies.size() > 0) {
      final Currency initialCurrency = iterator.next();
      while (iterator.hasNext()) {
        final Currency otherCurrency = iterator.next();
        result.getMulticurveProvider().getFxRates().addCurrency(initialCurrency, otherCurrency, matrix.getFxRate(initialCurrency, otherCurrency));
      }
    }
    return result;
  }
}
TOP

Related Classes of com.opengamma.analytics.financial.provider.description.interestrate.ProviderUtils

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.