com.opengamma.financial.analytics.ircurve.CurveSpecificationBuilderConfiguration.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.financial.analytics.ircurve.CurveSpecificationBuilderConfiguration.java

Source

/**
 * 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.financial.fudgemsg.CurveSpecificationBuilderConfigurationFudgeBuilder;
import com.opengamma.id.ExternalId;
import com.opengamma.util.time.Tenor;

/**
 *
 */
@Config(description = "Curve specification builder configuration")
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;
    }

}