/** * 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.io.Serializable; import org.apache.commons.lang.ObjectUtils; import org.threeten.bp.LocalDate; import com.opengamma.OpenGammaRuntimeException; import com.opengamma.core.value.MarketDataRequirementNames; import com.opengamma.financial.analytics.ircurve.strips.DataFieldType; import com.opengamma.id.ExternalId; import com.opengamma.util.ArgumentChecker; import com.opengamma.util.time.Tenor; /** * Provides the external id of instruments for which the ticker does not change with time. * * This should be pulled from the configuration. */ public class StaticCurveInstrumentProvider implements CurveInstrumentProvider, Serializable { /** The market data identifier */ private final ExternalId _identifier; /** The market data field */ private final String _dataField; /** The market data field type */ private final DataFieldType _fieldType; /** * Sets the data field for market data to {@link MarketDataRequirementNames#MARKET_VALUE} * @param identifier The market data identifier, not null */ public StaticCurveInstrumentProvider(final ExternalId identifier) { this(identifier, MarketDataRequirementNames.MARKET_VALUE, DataFieldType.OUTRIGHT); } /** * @param identifier The market data identifier, not null * @param dataField The market data field, not null * @param fieldType The market data field type, not null */ public StaticCurveInstrumentProvider(final ExternalId identifier, final String dataField, final DataFieldType fieldType) { ArgumentChecker.notNull(identifier, "identifier"); ArgumentChecker.notNull(dataField, "data field"); ArgumentChecker.notNull(fieldType, "field type"); _identifier = identifier; _dataField = dataField; _fieldType = fieldType; } @Override public ExternalId getInstrument(final LocalDate curveDate, final Tenor tenor) { return _identifier; } @Override public ExternalId getInstrument(final LocalDate curveDate, final Tenor tenor, final int numQuarterlyFuturesFromTenor) { return _identifier; } @Override public ExternalId getInstrument(final LocalDate curveDate, final Tenor startTenor, final Tenor futureTenor, final int numFutureFromTenor) { return _identifier; } @Override public ExternalId getInstrument(final LocalDate curveDate, final Tenor tenor, final int periodsPerYear, final boolean isPeriodicZeroDeposit) { if (isPeriodicZeroDeposit) { return _identifier; } throw new OpenGammaRuntimeException("Flag indicating periodic zero deposit was false"); } @Override public ExternalId getInstrument(final LocalDate curveDate, final Tenor tenor, final Tenor payTenor, final Tenor receiveTenor, final IndexType payIndexType, final IndexType receiveIndexType) { return _identifier; } @Override public ExternalId getInstrument(final LocalDate curveDate, final Tenor tenor, final Tenor resetTenor, final IndexType indexType) { return _identifier; } @Override public ExternalId getInstrument(final LocalDate curveDate, final Tenor startTenor, final int startIMMPeriods, final int endIMMPeriods) { return _identifier; } @Override public String getMarketDataField() { return _dataField; } @Override public DataFieldType getDataFieldType() { return _fieldType; } @Override public boolean equals(final Object o) { if (o == null) { return false; } if (!(o instanceof StaticCurveInstrumentProvider)) { return false; } final StaticCurveInstrumentProvider other = (StaticCurveInstrumentProvider) o; return ObjectUtils.equals(_identifier, other._identifier) && ObjectUtils.equals(_dataField, other._dataField) && _fieldType == other._fieldType; } @Override public int hashCode() { return _identifier.hashCode() ^ _dataField.hashCode() ^ _fieldType.hashCode(); } @Override public String toString() { return "StaticCurveInstrumentProvider[" + _identifier.toString() + ", field=" + _dataField + ", type=" + _fieldType + "]"; } }