/** * 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.inflation; import java.util.List; import java.util.Set; 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.instrument.index.IndexPrice; import com.opengamma.analytics.financial.legalentity.LegalEntity; import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve; import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderDiscountingDecoratedIssuer; import com.opengamma.analytics.financial.provider.description.interestrate.MulticurveProviderInterface; import com.opengamma.analytics.financial.provider.sensitivity.multicurve.ForwardSensitivity; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.money.Currency; import com.opengamma.util.tuple.DoublesPair; /** * */ public class InflationProviderDecoratedIssuer implements InflationProviderInterface { /** * The underlying Issuer provider on which the multi-curves provider is based. */ private final InflationIssuerProviderInterface _inflationIssuerProvider; /** * The currency for which the discounting curve will be replaced (decorated). */ private final Currency _decoratedCurrency; /** * The issuer for which the associated discounting curve will replace the currency discounting curve. */ private final LegalEntity _decoratingIssuer; private final MulticurveProviderInterface _multicurveDecorated; private final InflationProviderInterface _inflationDecorated; /** * Constructor. * @param inflationIssuerProvider The underlying inflation issuer provider on which the multi-curves provider is based, not null * @param decoratedCurrency The currency for which the discounting curve will be replaced (decorated), not null * @param decoratingIssuer The issuer for which the associated discounting curve will replace the currency discounting curve, not null */ public InflationProviderDecoratedIssuer(final InflationIssuerProviderInterface inflationIssuerProvider, final Currency decoratedCurrency, final LegalEntity decoratingIssuer) { ArgumentChecker.notNull(inflationIssuerProvider, "inflationIssuerProvider"); ArgumentChecker.notNull(decoratedCurrency, "decoratedCurrency"); ArgumentChecker.notNull(decoratingIssuer, "decoratingIssuer"); _inflationIssuerProvider = inflationIssuerProvider; _decoratedCurrency = decoratedCurrency; _decoratingIssuer = decoratingIssuer; _multicurveDecorated = new MulticurveProviderDiscountingDecoratedIssuer(inflationIssuerProvider.getIssuerProvider(), decoratedCurrency, decoratingIssuer); _inflationDecorated = new InflationProviderDecoratedMulticurve(inflationIssuerProvider.getInflationProvider(), _multicurveDecorated); } @Override public MulticurveProviderInterface getMulticurveProvider() { return _multicurveDecorated; } @Override public InflationProviderInterface copy() { throw new UnsupportedOperationException("Copy not supported for decorated providers"); } @Override public double getDiscountFactor(final Currency ccy, final Double time) { return _multicurveDecorated.getDiscountFactor(ccy, time); } @Override public Set<String> getAllNames() { return _inflationDecorated.getAllNames(); } @Override public double[] parameterSensitivity(final String name, final List<DoublesPair> pointSensitivity) { throw new UnsupportedOperationException("parameterSensitivity not supported for decorated providers"); } @Override public double[] parameterForwardSensitivity(final String name, final List<ForwardSensitivity> pointSensitivity) { return _inflationIssuerProvider.parameterForwardSensitivity(name, pointSensitivity); } @Override public Integer getNumberOfParameters(final String name) { return _inflationIssuerProvider.getNumberOfParameters(name); } @Override public List<String> getUnderlyingCurvesNames(final String name) { return _inflationIssuerProvider.getUnderlyingCurvesNames(name); } @Override public Set<String> getAllCurveNames() { return _inflationIssuerProvider.getAllCurveNames(); } @Override public InflationProviderInterface getInflationProvider() { // TODO: correct return _inflationIssuerProvider.getInflationProvider(); } @Override public double[] parameterInflationSensitivity(final String name, final List<DoublesPair> pointSensitivity) { return _inflationIssuerProvider.parameterInflationSensitivity(name, pointSensitivity); } @Override public double getPriceIndex(final IndexPrice index, final Double time) { return _inflationIssuerProvider.getPriceIndex(index, time); } @Override public String getName(final IndexPrice index) { return _inflationIssuerProvider.getName(index); } @Override public Set<IndexPrice> getPriceIndexes() { return _inflationIssuerProvider.getPriceIndexes(); } @Override public double getForwardRate(final IborIndex index, final double startTime, final double endTime, final double accrualFactor) { return _inflationIssuerProvider.getForwardRate(index, startTime, endTime, accrualFactor); } @Override public double getForwardRate(final IndexON index, final double startTime, final double endTime, final double accrualFactor) { return _inflationIssuerProvider.getForwardRate(index, startTime, endTime, accrualFactor); } @Override public double getFxRate(final Currency ccy1, final Currency ccy2) { return _inflationIssuerProvider.getFxRate(ccy1, ccy2); } @Override public String getName(final Currency ccy) { return _inflationIssuerProvider.getName(ccy); } @Override public Set<Currency> getCurrencies() { return _inflationIssuerProvider.getCurrencies(); } @Override public String getName(final IborIndex index) { return _inflationIssuerProvider.getName(index); } @Override public Set<IborIndex> getIndexesIbor() { return _inflationIssuerProvider.getIndexesIbor(); } @Override public String getName(final IndexON index) { return _inflationIssuerProvider.getName(index); } @Override public Set<IndexON> getIndexesON() { return _inflationIssuerProvider.getIndexesON(); } @Override public FXMatrix getFxRates() { return _inflationIssuerProvider.getFxRates(); } @Override public InflationProviderInterface withDiscountFactor(final Currency ccy, final YieldAndDiscountCurve replacement) { return _inflationIssuerProvider.getInflationProvider().withDiscountFactor(ccy, replacement); } @Override public InflationProviderInterface withForward(final IborIndex index, final YieldAndDiscountCurve replacement) { return _inflationIssuerProvider.getInflationProvider().withForward(index, replacement); } @Override public InflationProviderInterface withForward(final IndexON index, final YieldAndDiscountCurve replacement) { return _inflationIssuerProvider.getInflationProvider().withForward(index, replacement); } }