/** * 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.model.interestrate.curve.YieldAndDiscountCurve; 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; /** * An inflation provider modified by a spread. The discount factors for all currencies are multiplied by exp(-s*t) * with s the spread and t the time. */ public class InflationProviderDecorated implements InflationProviderInterface { /** * The underlying issuer provider on which the multi-curves provider is based. */ private final InflationProviderInterface _inflationProvider; /** * The spread (shift). */ private final double _spread; /** * Constructor. * @param inflationProvider The underlying issuer provider on which the multi-curves provider is based, not null * @param spread The spread */ public InflationProviderDecorated(final InflationProviderInterface inflationProvider, final double spread) { ArgumentChecker.notNull(inflationProvider, "inflationProvider"); _inflationProvider = inflationProvider; _spread = spread; } @Override public MulticurveProviderInterface getMulticurveProvider() { return _inflationProvider.getMulticurveProvider(); } @Override public InflationProviderInterface copy() { throw new UnsupportedOperationException("Copy not supported for decorated providers"); } @Override public double getDiscountFactor(final Currency ccy, final Double time) { final double df = _inflationProvider.getDiscountFactor(ccy, time); return df * Math.exp(-time * _spread); } @Override public Set<String> getAllNames() { return _inflationProvider.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 _inflationProvider.parameterForwardSensitivity(name, pointSensitivity); } @Override public Integer getNumberOfParameters(final String name) { return _inflationProvider.getNumberOfParameters(name); } @Override public List<String> getUnderlyingCurvesNames(final String name) { return _inflationProvider.getUnderlyingCurvesNames(name); } @Override public Set<String> getAllCurveNames() { return _inflationProvider.getAllCurveNames(); } @Override public InflationProviderInterface getInflationProvider() { // TODO Auto-generated method stub return null; } @Override public double[] parameterInflationSensitivity(final String name, final List<DoublesPair> pointSensitivity) { // TODO Auto-generated method stub return null; } @Override public double getPriceIndex(final IndexPrice index, final Double time) { // TODO Auto-generated method stub return 0; } @Override public String getName(final IndexPrice index) { // TODO Auto-generated method stub return null; } @Override public Set<IndexPrice> getPriceIndexes() { // TODO Auto-generated method stub return null; } @Override public double getForwardRate(final IborIndex index, final double startTime, final double endTime, final double accrualFactor) { // TODO Auto-generated method stub return 0; } @Override public double getForwardRate(final IndexON index, final double startTime, final double endTime, final double accrualFactor) { // TODO Auto-generated method stub return 0; } @Override public double getFxRate(final Currency ccy1, final Currency ccy2) { // TODO Auto-generated method stub return 0; } @Override public String getName(final Currency ccy) { // TODO Auto-generated method stub return null; } @Override public Set<Currency> getCurrencies() { // TODO Auto-generated method stub return null; } @Override public String getName(final IborIndex index) { // TODO Auto-generated method stub return null; } @Override public Set<IborIndex> getIndexesIbor() { // TODO Auto-generated method stub return null; } @Override public String getName(final IndexON index) { // TODO Auto-generated method stub return null; } @Override public Set<IndexON> getIndexesON() { // TODO Auto-generated method stub return null; } @Override public FXMatrix getFxRates() { // TODO Auto-generated method stub return null; } @Override public InflationProviderInterface withDiscountFactor(final Currency ccy, final YieldAndDiscountCurve replacement) { // TODO Auto-generated method stub return null; } @Override public InflationProviderInterface withForward(final IborIndex index, final YieldAndDiscountCurve replacement) { // TODO Auto-generated method stub return null; } @Override public InflationProviderInterface withForward(final IndexON index, final YieldAndDiscountCurve replacement) { // TODO Auto-generated method stub return null; } /* (non-Javadoc) * @see java.lang.Object#hashCode() */ @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((_inflationProvider == null) ? 0 : _inflationProvider.hashCode()); long temp; temp = Double.doubleToLongBits(_spread); result = prime * result + (int) (temp ^ (temp >>> 32)); return result; } /* (non-Javadoc) * @see java.lang.Object#equals(java.lang.Object) */ @Override public boolean equals(final Object obj) { if (this == obj) { return true; } if (obj == null) { return false; } if (getClass() != obj.getClass()) { return false; } final InflationProviderDecorated other = (InflationProviderDecorated) obj; if (_inflationProvider == null) { if (other._inflationProvider != null) { return false; } } else if (!_inflationProvider.equals(other._inflationProvider)) { return false; } if (Double.doubleToLongBits(_spread) != Double.doubleToLongBits(other._spread)) { return false; } return true; } }