/** * Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.analytics.ircurve; import java.lang.reflect.Field; import java.lang.reflect.Modifier; import java.util.ArrayList; import java.util.Collections; import java.util.List; import java.util.Map; import java.util.SortedSet; import java.util.TreeSet; import org.apache.commons.lang.ObjectUtils; import org.apache.commons.lang.builder.ToStringBuilder; import org.threeten.bp.LocalDate; import com.google.common.collect.ImmutableList; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.core.config.Config; import com.opengamma.core.config.ConfigGroups; import com.opengamma.financial.fudgemsg.CurveSpecificationBuilderConfigurationFudgeBuilder; import com.opengamma.id.ExternalId; import com.opengamma.util.time.Tenor; /** * */ @Config(description = "Curve specification builder configuration", group = ConfigGroups.CURVES_LEGACY) public class CurveSpecificationBuilderConfiguration { /** * The names of the curve instrument providers, currently used in CurveSpecificationBuilderConfiguration fudge messages and Web UI */ public static final List<String> s_curveSpecNames = getCurveSpecBuilderConfigurationNames(); private final Map<Tenor, CurveInstrumentProvider> _cashInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _fra3MInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _fra6MInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _liborInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _euriborInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _cdorInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _futureInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _swap12MInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _swap6MInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _swap3MInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _swap28DInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _basisSwapInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _tenorSwapInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _oisSwapInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _stiborInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _ciborInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _simpleZeroDepositInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _periodicZeroDepositInstrumentProviders; private final Map<Tenor, CurveInstrumentProvider> _continuousZeroDepositInstrumentProviders; /** * A curve specification builder configuration for a particular currency * @param cashInstrumentProviders a map of tenor to instrument providers for Cash curve instrument e.g. (StaticCurveInstrumentProvider) * @param fra3MInstrumentProviders a map of tenor to instrument providers for 3M FRA curve instruments (e.g. 3M x 6M) * @param fra6MInstrumentProviders a map of tenor to instrument providers for 6M FRA curve instruments (e.g. 3M x 9M) * @param liborInstrumentProviders a map of tenor to instrument providers for Libor curve instruments * @param euriborInstrumentProviders a map of tenor to instrument providers for Euribor curve instruments * @param cdorInstrumentProviders a map of tenor in instrument providers for CDOR curve instruments * @param ciborInstrumentProviders a map of tenor in instrument providers for Cibor curve instruments * @param stiborInstrumentProviders a map of tenor in instrument providers for Stibor curve instruments * @param futureInstrumentProviders a map of tenor to instrument providers for future curve instruments e.g. (BloombergFutureInstrumentProvider) * @param swap6MInstrumentProviders a map of tenor to instrument providers for 6M swap curve instruments where 6M is the floating tenor * @param swap3MInstrumentProviders a map of tenor to instrument providers for 3M swap curve instruments where 3M is the floating tenor * @param basisSwapInstrumentProviders a map of tenor to instrument providers for basis swap instruments * @param tenorSwapInstrumentProviders a map of tenor to instrument providers for tenor swap curve * @param oisSwapInstrumentProviders a map of tenor to instrument providers for OIS swap curve instruments * @param simpleZeroDepositInstrumentProviders a map of tenor to simple zero deposit instruments * @param periodicZeroDepositInstrumentProviders a map of tenor to periodic zero deposit instruments * @param continuousZeroDepositInstrumentProviders a map of tenor to continuous zero deposit instruments * @param swap12MInstrumentProviders a map of tenor to instrument providers for 12M swap curve instruments where 12M is the floating tenor * @param swap28DInstrumentProviders a map of tenor to instrument providers for 28D swap curve instruments where 28D is the floating tenor */ public CurveSpecificationBuilderConfiguration(final Map<Tenor, CurveInstrumentProvider> cashInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> fra3MInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> fra6MInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> liborInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> euriborInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> cdorInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> ciborInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> stiborInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> futureInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> swap6MInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> swap3MInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> basisSwapInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> tenorSwapInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> oisSwapInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> simpleZeroDepositInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> periodicZeroDepositInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> continuousZeroDepositInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> swap12MInstrumentProviders, final Map<Tenor, CurveInstrumentProvider> swap28DInstrumentProviders) { _cashInstrumentProviders = cashInstrumentProviders; _fra3MInstrumentProviders = fra3MInstrumentProviders; _fra6MInstrumentProviders = fra6MInstrumentProviders; _liborInstrumentProviders = liborInstrumentProviders; _euriborInstrumentProviders = euriborInstrumentProviders; _cdorInstrumentProviders = cdorInstrumentProviders; _ciborInstrumentProviders = ciborInstrumentProviders; _stiborInstrumentProviders = stiborInstrumentProviders; _futureInstrumentProviders = futureInstrumentProviders; _swap12MInstrumentProviders = swap12MInstrumentProviders; _swap6MInstrumentProviders = swap6MInstrumentProviders; _swap3MInstrumentProviders = swap3MInstrumentProviders; _basisSwapInstrumentProviders = basisSwapInstrumentProviders; _tenorSwapInstrumentProviders = tenorSwapInstrumentProviders; _oisSwapInstrumentProviders = oisSwapInstrumentProviders; _simpleZeroDepositInstrumentProviders = simpleZeroDepositInstrumentProviders; _periodicZeroDepositInstrumentProviders = periodicZeroDepositInstrumentProviders; _continuousZeroDepositInstrumentProviders = continuousZeroDepositInstrumentProviders; _swap28DInstrumentProviders = swap28DInstrumentProviders; } private static List<String> getCurveSpecBuilderConfigurationNames() { final List<String> list = new ArrayList<>(); for (final Field field : CurveSpecificationBuilderConfigurationFudgeBuilder.class.getDeclaredFields()) { if (Modifier.isStatic(field.getModifiers()) && field.isSynthetic() == false) { field.setAccessible(true); try { list.add((String) field.get(null)); } catch (final Exception ex) { // Ignore } } } Collections.sort(list, String.CASE_INSENSITIVE_ORDER); return ImmutableList.copyOf(list); } private static ExternalId getStaticSecurity(final Map<Tenor, CurveInstrumentProvider> instrumentMappers, final LocalDate curveDate, final Tenor tenor) { final CurveInstrumentProvider mapper = instrumentMappers.get(tenor); if (mapper != null) { return mapper.getInstrument(curveDate, tenor); } throw new OpenGammaRuntimeException("can't find instrument mapper definition for " + tenor); } private static ExternalId getStaticSecurity(final Map<Tenor, CurveInstrumentProvider> instrumentMappers, final LocalDate curveDate, final FixedIncomeStrip strip) { final Tenor tenor = strip.getCurveNodePointTime(); final Tenor payTenor = strip.getPayTenor(); final Tenor receiveTenor = strip.getReceiveTenor(); final IndexType payIndexType = strip.getPayIndexType(); final IndexType receiveIndexType = strip.getReceiveIndexType(); final CurveInstrumentProvider mapper = instrumentMappers.get(tenor); if (mapper != null) { return mapper.getInstrument(curveDate, tenor, payTenor, receiveTenor, payIndexType, receiveIndexType); } throw new OpenGammaRuntimeException("can't find instrument mapper definition for " + tenor); } /** * Build a cash security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getCashSecurity(final LocalDate curveDate, final Tenor tenor) { if (_cashInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get cash instrument provider"); } return getStaticSecurity(_cashInstrumentProviders, curveDate, tenor); } /** * Build a 3M FRA security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getFRA3MSecurity(final LocalDate curveDate, final Tenor tenor) { if (_fra3MInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get 3M FRA instrument provider"); } return getStaticSecurity(_fra3MInstrumentProviders, curveDate, tenor); } /** * Build a 6M FRA security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getFRA6MSecurity(final LocalDate curveDate, final Tenor tenor) { if (_fra6MInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get 6M FRA instrument provider"); } return getStaticSecurity(_fra6MInstrumentProviders, curveDate, tenor); } /** * Build a Swap security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getSwap12MSecurity(final LocalDate curveDate, final Tenor tenor) { if (_swap12MInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get 12M swap instrument provider"); } return getStaticSecurity(_swap12MInstrumentProviders, curveDate, tenor); } /** * Build a Swap security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getSwap28DSecurity(final LocalDate curveDate, final Tenor tenor) { if (_swap28DInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get 28D swap instrument provider"); } return getStaticSecurity(_swap28DInstrumentProviders, curveDate, tenor); } /** * Build a Swap security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getSwap6MSecurity(final LocalDate curveDate, final Tenor tenor) { if (_swap6MInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get 6M swap instrument provider"); } return getStaticSecurity(_swap6MInstrumentProviders, curveDate, tenor); } /** * Build a 3M swap security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getSwap3MSecurity(final LocalDate curveDate, final Tenor tenor) { if (_swap3MInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get 3M swap instrument provider"); } return getStaticSecurity(_swap3MInstrumentProviders, curveDate, tenor); } /** * Build a Basis Swap security identifier for a curve node point * @param curveDate the date of the start of the curve * @param strip the basis swap strip * @return identifier of the security to use */ public ExternalId getBasisSwapSecurity(final LocalDate curveDate, final FixedIncomeStrip strip) { if (_basisSwapInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get basis swap instrument provider"); } return getStaticSecurity(_basisSwapInstrumentProviders, curveDate, strip); } /** * Build a Tenor Swap security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return identifier of the security to use */ public ExternalId getTenorSwapSecurity(final LocalDate curveDate, final Tenor tenor) { if (_tenorSwapInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get tenor swap instrument provider"); } return getStaticSecurity(_tenorSwapInstrumentProviders, curveDate, tenor); } /** * Build a OIS swap security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return identifier of the security to use */ public ExternalId getOISSwapSecurity(final LocalDate curveDate, final Tenor tenor) { if (_oisSwapInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get OIS swap instrument provider"); } return getStaticSecurity(_oisSwapInstrumentProviders, curveDate, tenor); } /** * Build a Libor security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getLiborSecurity(final LocalDate curveDate, final Tenor tenor) { if (_liborInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get Libor instrument provider"); } return getStaticSecurity(_liborInstrumentProviders, curveDate, tenor); } /** * Build a Euribor security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getEuriborSecurity(final LocalDate curveDate, final Tenor tenor) { if (_euriborInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get Euribor instrument provider"); } return getStaticSecurity(_euriborInstrumentProviders, curveDate, tenor); } /** * Build a CDOR security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getCDORSecurity(final LocalDate curveDate, final Tenor tenor) { if (_cdorInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get CDOR instrument provider"); } return getStaticSecurity(_cdorInstrumentProviders, curveDate, tenor); } /** * Build a Cibor security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getCiborSecurity(final LocalDate curveDate, final Tenor tenor) { if (_ciborInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get Cibor instrument provider"); } return getStaticSecurity(_ciborInstrumentProviders, curveDate, tenor); } /** * Build a Stibor security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getStiborSecurity(final LocalDate curveDate, final Tenor tenor) { if (_stiborInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get Stibor instrument provider"); } return getStaticSecurity(_stiborInstrumentProviders, curveDate, tenor); } /** * Build a simple zero deposit security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getSimpleZeroDepositSecurity(final LocalDate curveDate, final Tenor tenor) { if (_simpleZeroDepositInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get simple zero deposit instrument provider"); } return getStaticSecurity(_simpleZeroDepositInstrumentProviders, curveDate, tenor); } /** * Build a periodic zero deposit security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @param periodsPerYear the periods per year * @return the identifier of the security to use */ public ExternalId getPeriodicZeroDepositSecurity(final LocalDate curveDate, final Tenor tenor, final int periodsPerYear) { if (_periodicZeroDepositInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get periodic zero deposit instrument provider"); } final CurveInstrumentProvider mapper = _periodicZeroDepositInstrumentProviders.get(tenor); if (mapper != null) { return mapper.getInstrument(curveDate, tenor, periodsPerYear, true); } throw new OpenGammaRuntimeException("can't find instrument mapper definition for " + tenor + " (looking for periodic zero deposit strip)"); } /** * Build a continuous security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @return the identifier of the security to use */ public ExternalId getContinuousZeroDepositSecurity(final LocalDate curveDate, final Tenor tenor) { if (_continuousZeroDepositInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get continuous zero deposit instrument provider"); } return getStaticSecurity(_continuousZeroDepositInstrumentProviders, curveDate, tenor); } /** * Build a Future security identifier for a curve node point * @param curveDate the date of the start of the curve * @param tenor the time into the curve for this security * @param numberQuarterlyFuturesFromTenor the number of quarterly IR futures to traverse from (curveDate + tenor) * @return the identifier of the security to use */ public ExternalId getFutureSecurity(final LocalDate curveDate, final Tenor tenor, final int numberQuarterlyFuturesFromTenor) { if (_futureInstrumentProviders == null) { throw new OpenGammaRuntimeException("Cannot get future instrument provider"); } final CurveInstrumentProvider mapper = _futureInstrumentProviders.get(tenor); if (mapper != null) { return mapper.getInstrument(curveDate, tenor, numberQuarterlyFuturesFromTenor); } throw new OpenGammaRuntimeException("can't find instrument mapper definition for " + tenor + " (looking for future strip)"); } /** * Gets the cashInstrumentProviders field for serialisation * @return the cashInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getCashInstrumentProviders() { return _cashInstrumentProviders; } /** * Gets the fra3MInstrumentProviders field for serialisation * @return the fra3MInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getFra3MInstrumentProviders() { return _fra3MInstrumentProviders; } /** * Gets the fra6MInstrumentProviders field for serialisation * @return the fra6MInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getFra6MInstrumentProviders() { return _fra6MInstrumentProviders; } /** * Gets the liborInstrumentProviders field for serialisation * @return the liborInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getLiborInstrumentProviders() { return _liborInstrumentProviders; } /** * Gets the euriborInstrumentProviders field for serialisation * @return the euriborInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getEuriborInstrumentProviders() { return _euriborInstrumentProviders; } /** * Gets the cdorInstrumentProviders field for serialisation * @return the cdorInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getCDORInstrumentProviders() { return _cdorInstrumentProviders; } /** * Gets the ciborInstrumentProviders field for serialisation * @return the ciborInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getCiborInstrumentProviders() { return _ciborInstrumentProviders; } /** * Gets the stiborInstrumentProviders field for serialisation * @return the stiborInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getStiborInstrumentProviders() { return _stiborInstrumentProviders; } /** * Gets the futureInstrumentProviders field for serialisation * @return the futureInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getFutureInstrumentProviders() { return _futureInstrumentProviders; } /** * Gets the swap12MInstrumentProviders field for serialisation * @return the swap12MInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getSwap12MInstrumentProviders() { return _swap12MInstrumentProviders; } /** * Gets the swap28DInstrumentProviders field for serialisation * @return the swap12MInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getSwap28DInstrumentProviders() { return _swap28DInstrumentProviders; } /** * Gets the swap6MInstrumentProviders field for serialisation * @return the swap6MInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getSwap6MInstrumentProviders() { return _swap6MInstrumentProviders; } /** * Gets the swap3MInstrumentProviders field for serialisation * @return the swap3MInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getSwap3MInstrumentProviders() { return _swap3MInstrumentProviders; } /** * Gets the basisSwapInstrumentProviders field for serialisation * @return the basisSwapInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getBasisSwapInstrumentProviders() { return _basisSwapInstrumentProviders; } /** * Gets the tenorSwapInstrumentProviders field for serialisation * @return the swapInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getTenorSwapInstrumentProviders() { return _tenorSwapInstrumentProviders; } /** * Gets the oisSwapInstrumentProviders field for serialisation * @return the oisSwapInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getOISSwapInstrumentProviders() { return _oisSwapInstrumentProviders; } /** * Gets the simpleZeroDepositInstrumentProviders for serialisation * @return the simpleZeroDepositInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getSimpleZeroDepositInstrumentProviders() { return _simpleZeroDepositInstrumentProviders; } /** * Gets the periodicZeroDepositInstrumentProviders for serialisation * @return the periodicZeroDepositInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getPeriodicZeroDepositInstrumentProviders() { return _periodicZeroDepositInstrumentProviders; } /** * Gets the continuousZeroDepositInstrumentProviders for serialisation * @return the continuousZeroDepositInstrumentProviders */ public Map<Tenor, CurveInstrumentProvider> getContinuousZeroDepositInstrumentProviders() { return _continuousZeroDepositInstrumentProviders; } /** * Get all available tenors * * @return the sorted tenors */ public SortedSet<Tenor> getAllTenors() { final SortedSet<Tenor> allTenors = new TreeSet<Tenor>(); if (getBasisSwapInstrumentProviders() != null) { allTenors.addAll(getBasisSwapInstrumentProviders().keySet()); } if (getCashInstrumentProviders() != null) { allTenors.addAll(getCashInstrumentProviders().keySet()); } if (getCDORInstrumentProviders() != null) { allTenors.addAll(getCDORInstrumentProviders().keySet()); } if (getCiborInstrumentProviders() != null) { allTenors.addAll(getCiborInstrumentProviders().keySet()); } if (getEuriborInstrumentProviders() != null) { allTenors.addAll(getEuriborInstrumentProviders().keySet()); } if (getFra3MInstrumentProviders() != null) { allTenors.addAll(getFra3MInstrumentProviders().keySet()); } if (getFra6MInstrumentProviders() != null) { allTenors.addAll(getFra6MInstrumentProviders().keySet()); } if (getFutureInstrumentProviders() != null) { allTenors.addAll(getFutureInstrumentProviders().keySet()); } if (getLiborInstrumentProviders() != null) { allTenors.addAll(getLiborInstrumentProviders().keySet()); } if (getOISSwapInstrumentProviders() != null) { allTenors.addAll(getOISSwapInstrumentProviders().keySet()); } if (getStiborInstrumentProviders() != null) { allTenors.addAll(getStiborInstrumentProviders().keySet()); } if (getSwap3MInstrumentProviders() != null) { allTenors.addAll(getSwap3MInstrumentProviders().keySet()); } if (getSwap6MInstrumentProviders() != null) { allTenors.addAll(getSwap6MInstrumentProviders().keySet()); } if (getSwap12MInstrumentProviders() != null) { allTenors.addAll(getSwap12MInstrumentProviders().keySet()); } if (getTenorSwapInstrumentProviders() != null) { allTenors.addAll(getTenorSwapInstrumentProviders().keySet()); } if (getSimpleZeroDepositInstrumentProviders() != null) { allTenors.addAll(getSimpleZeroDepositInstrumentProviders().keySet()); } if (getPeriodicZeroDepositInstrumentProviders() != null) { allTenors.addAll(getPeriodicZeroDepositInstrumentProviders().keySet()); } if (getContinuousZeroDepositInstrumentProviders() != null) { allTenors.addAll(getContinuousZeroDepositInstrumentProviders().keySet()); } if (getSwap28DInstrumentProviders() != null) { allTenors.addAll(getSwap28DInstrumentProviders().keySet()); } return allTenors; } @Override public boolean equals(final Object o) { if (o == null) { return false; } if (!(o instanceof CurveSpecificationBuilderConfiguration)) { return false; } final CurveSpecificationBuilderConfiguration other = (CurveSpecificationBuilderConfiguration) o; return (ObjectUtils.equals(getCashInstrumentProviders(), other.getCashInstrumentProviders()) && ObjectUtils.equals(getFra3MInstrumentProviders(), other.getFra3MInstrumentProviders()) && ObjectUtils.equals(getFra6MInstrumentProviders(), other.getFra6MInstrumentProviders()) && ObjectUtils.equals(getFutureInstrumentProviders(), other.getFutureInstrumentProviders()) && ObjectUtils.equals(getLiborInstrumentProviders(), other.getLiborInstrumentProviders()) && ObjectUtils.equals(getEuriborInstrumentProviders(), other.getEuriborInstrumentProviders()) && ObjectUtils.equals(getCiborInstrumentProviders(), other.getCiborInstrumentProviders()) && ObjectUtils.equals(getStiborInstrumentProviders(), other.getStiborInstrumentProviders()) && ObjectUtils.equals(getCDORInstrumentProviders(), other.getCDORInstrumentProviders()) && ObjectUtils.equals(getSwap12MInstrumentProviders(), other.getSwap12MInstrumentProviders()) && ObjectUtils.equals(getSwap6MInstrumentProviders(), other.getSwap6MInstrumentProviders()) && ObjectUtils.equals(getSwap3MInstrumentProviders(), other.getSwap3MInstrumentProviders()) && ObjectUtils.equals(getBasisSwapInstrumentProviders(), other.getBasisSwapInstrumentProviders()) && ObjectUtils.equals(getTenorSwapInstrumentProviders(), other.getTenorSwapInstrumentProviders())) && ObjectUtils.equals(getOISSwapInstrumentProviders(), other.getOISSwapInstrumentProviders()) && ObjectUtils.equals(getSimpleZeroDepositInstrumentProviders(), other.getSimpleZeroDepositInstrumentProviders()) && ObjectUtils.equals(getPeriodicZeroDepositInstrumentProviders(), other.getPeriodicZeroDepositInstrumentProviders()) && ObjectUtils.equals(getContinuousZeroDepositInstrumentProviders(), other.getContinuousZeroDepositInstrumentProviders()) && ObjectUtils.equals(getSwap28DInstrumentProviders(), other.getSwap28DInstrumentProviders()); } @Override public String toString() { return ToStringBuilder.reflectionToString(this); } @Override public int hashCode() { final int prime = 31; int result = 1; result = prime * result + ((_basisSwapInstrumentProviders == null) ? 0 : _basisSwapInstrumentProviders.hashCode()); result = prime * result + ((_cashInstrumentProviders == null) ? 0 : _cashInstrumentProviders.hashCode()); result = prime * result + ((_cdorInstrumentProviders == null) ? 0 : _cdorInstrumentProviders.hashCode()); result = prime * result + ((_ciborInstrumentProviders == null) ? 0 : _ciborInstrumentProviders.hashCode()); result = prime * result + ((_continuousZeroDepositInstrumentProviders == null) ? 0 : _continuousZeroDepositInstrumentProviders.hashCode()); result = prime * result + ((_euriborInstrumentProviders == null) ? 0 : _euriborInstrumentProviders.hashCode()); result = prime * result + ((_fra3MInstrumentProviders == null) ? 0 : _fra3MInstrumentProviders.hashCode()); result = prime * result + ((_fra6MInstrumentProviders == null) ? 0 : _fra6MInstrumentProviders.hashCode()); result = prime * result + ((_futureInstrumentProviders == null) ? 0 : _futureInstrumentProviders.hashCode()); result = prime * result + ((_liborInstrumentProviders == null) ? 0 : _liborInstrumentProviders.hashCode()); result = prime * result + ((_oisSwapInstrumentProviders == null) ? 0 : _oisSwapInstrumentProviders.hashCode()); result = prime * result + ((_periodicZeroDepositInstrumentProviders == null) ? 0 : _periodicZeroDepositInstrumentProviders.hashCode()); result = prime * result + ((_simpleZeroDepositInstrumentProviders == null) ? 0 : _simpleZeroDepositInstrumentProviders.hashCode()); result = prime * result + ((_stiborInstrumentProviders == null) ? 0 : _stiborInstrumentProviders.hashCode()); result = prime * result + ((_swap12MInstrumentProviders == null) ? 0 : _swap12MInstrumentProviders.hashCode()); result = prime * result + ((_swap28DInstrumentProviders == null) ? 0 : _swap28DInstrumentProviders.hashCode()); result = prime * result + ((_swap3MInstrumentProviders == null) ? 0 : _swap3MInstrumentProviders.hashCode()); result = prime * result + ((_swap6MInstrumentProviders == null) ? 0 : _swap6MInstrumentProviders.hashCode()); result = prime * result + ((_tenorSwapInstrumentProviders == null) ? 0 : _tenorSwapInstrumentProviders.hashCode()); return result; } }