/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.fudgemsg;
import java.util.HashMap;
import java.util.Map;
import java.util.Map.Entry;
import org.fudgemsg.FudgeField;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeBuilder;
import org.fudgemsg.mapping.FudgeBuilderFor;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;
import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.financial.analytics.ircurve.CurveInstrumentProvider;
import com.opengamma.financial.analytics.ircurve.CurveSpecificationBuilderConfiguration;
import com.opengamma.util.time.DateUtils;
import com.opengamma.util.time.Tenor;
/**
* Builder for converting CurveSpecificationBuilderConfiguration instances to/from Fudge messages.
*/
@FudgeBuilderFor(CurveSpecificationBuilderConfiguration.class)
public class CurveSpecificationBuilderConfigurationFudgeBuilder implements FudgeBuilder<CurveSpecificationBuilderConfiguration> {
private static final String CASH = "cashInstrumentProviders";
private static final String FRA = "fraInstrumentProviders";
private static final String FRA_3M = "fra3MInstrumentProviders";
private static final String FRA_6M = "fra6MInstrumentProviders";
private static final String FUTURE = "futureInstrumentProviders";
private static final String RATE = "rateInstrumentProviders";
private static final String LIBOR = "liborInstrumentProviders";
private static final String EURIBOR = "euriborInstrumentProviders";
private static final String CDOR = "cdorInstrumentProviders";
private static final String CIBOR = "ciborInstrumentProviders";
private static final String STIBOR = "stiborInstrumentProviders";
private static final String SWAP = "swapInstrumentProviders";
private static final String SWAP_3M = "swap3MInstrumentProviders";
private static final String SWAP_6M = "swap6MInstrumentProviders";
private static final String SWAP_12M = "swap12MInstrumentProviders";
private static final String BASIS_SWAP = "basisSwapInstrumentProviders";
private static final String TENOR_SWAP = "tenorSwapInstrumentProviders";
private static final String OIS_SWAP = "oisSwapInstrumentProviders";
private static final String SIMPLE_ZERO_DEPOSIT = "simpleZeroDepositInstrumentProviders";
private static final String PERIODIC_ZERO_DEPOSIT = "periodicZeroDepositInstrumentProviders";
private static final String CONTINUOUS_ZERO_DEPOSIT = "continuousZeroDepositInstrumentProviders";
private static final String SWAP_28D = "swap28DInstrumentProviders";
@Override
public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final CurveSpecificationBuilderConfiguration object) {
final MutableFudgeMsg message = serializer.newMessage();
FudgeSerializer.addClassHeader(message, CurveSpecificationBuilderConfiguration.class);
if (object.getCashInstrumentProviders() != null) {
final MutableFudgeMsg cashInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getCashInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(cashInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(CASH, cashInstrumentProvidersMessage);
}
if (object.getFra3MInstrumentProviders() != null) {
final MutableFudgeMsg fra3MInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getFra3MInstrumentProviders().entrySet()) {
if (entry.getKey().getPeriod().toString() == null) {
throw new OpenGammaRuntimeException("null");
}
serializer.addToMessageWithClassHeaders(fra3MInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(FRA_3M, fra3MInstrumentProvidersMessage);
}
if (object.getFra6MInstrumentProviders() != null) {
final MutableFudgeMsg fra6MInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getFra6MInstrumentProviders().entrySet()) {
if (entry.getKey().getPeriod().toString() == null) {
throw new OpenGammaRuntimeException("null");
}
serializer.addToMessageWithClassHeaders(fra6MInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(FRA_6M, fra6MInstrumentProvidersMessage);
}
if (object.getFutureInstrumentProviders() != null) {
final MutableFudgeMsg futureInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getFutureInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(futureInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(FUTURE, futureInstrumentProvidersMessage);
}
if (object.getLiborInstrumentProviders() != null) {
final MutableFudgeMsg liborInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getLiborInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(liborInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(LIBOR, liborInstrumentProvidersMessage);
}
if (object.getEuriborInstrumentProviders() != null) {
final MutableFudgeMsg euriborInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getEuriborInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(euriborInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(EURIBOR, euriborInstrumentProvidersMessage);
}
if (object.getCDORInstrumentProviders() != null) {
final MutableFudgeMsg cdorInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getCDORInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(cdorInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(CDOR, cdorInstrumentProvidersMessage);
}
if (object.getCiborInstrumentProviders() != null) {
final MutableFudgeMsg ciborInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getCiborInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(ciborInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(CIBOR, ciborInstrumentProvidersMessage);
}
if (object.getStiborInstrumentProviders() != null) {
final MutableFudgeMsg stiborInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getStiborInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(stiborInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(STIBOR, stiborInstrumentProvidersMessage);
}
if (object.getSwap3MInstrumentProviders() != null) {
final MutableFudgeMsg swap3MInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getSwap3MInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(swap3MInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(SWAP_3M, swap3MInstrumentProvidersMessage);
}
if (object.getSwap6MInstrumentProviders() != null) {
final MutableFudgeMsg swap6MInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getSwap6MInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(swap6MInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(SWAP_6M, swap6MInstrumentProvidersMessage);
}
if (object.getSwap12MInstrumentProviders() != null) {
final MutableFudgeMsg swap12MInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getSwap12MInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(swap12MInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(SWAP_12M, swap12MInstrumentProvidersMessage);
}
if (object.getSwap28DInstrumentProviders() != null) {
final MutableFudgeMsg swap28DInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getSwap28DInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(swap28DInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(SWAP_28D, swap28DInstrumentProvidersMessage);
}
if (object.getBasisSwapInstrumentProviders() != null) {
final MutableFudgeMsg basisSwapInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getBasisSwapInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(basisSwapInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(BASIS_SWAP, basisSwapInstrumentProvidersMessage);
}
if (object.getTenorSwapInstrumentProviders() != null) {
final MutableFudgeMsg tenorSwapInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getTenorSwapInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(tenorSwapInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(TENOR_SWAP, tenorSwapInstrumentProvidersMessage);
}
if (object.getOISSwapInstrumentProviders() != null) {
final MutableFudgeMsg oisSwapInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getOISSwapInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(oisSwapInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(OIS_SWAP, oisSwapInstrumentProvidersMessage);
}
if (object.getSimpleZeroDepositInstrumentProviders() != null) {
final MutableFudgeMsg simpleZeroDepositInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getSimpleZeroDepositInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(simpleZeroDepositInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(SIMPLE_ZERO_DEPOSIT, simpleZeroDepositInstrumentProvidersMessage);
}
if (object.getPeriodicZeroDepositInstrumentProviders() != null) {
final MutableFudgeMsg periodicZeroDepositInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getPeriodicZeroDepositInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(periodicZeroDepositInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(PERIODIC_ZERO_DEPOSIT, periodicZeroDepositInstrumentProvidersMessage);
}
if (object.getContinuousZeroDepositInstrumentProviders() != null) {
final MutableFudgeMsg continuousZeroDepositInstrumentProvidersMessage = serializer.newMessage();
for (final Entry<Tenor, CurveInstrumentProvider> entry : object.getContinuousZeroDepositInstrumentProviders().entrySet()) {
serializer.addToMessageWithClassHeaders(continuousZeroDepositInstrumentProvidersMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
}
message.add(CONTINUOUS_ZERO_DEPOSIT, continuousZeroDepositInstrumentProvidersMessage);
}
return message;
}
@Override
public CurveSpecificationBuilderConfiguration buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
Map<Tenor, CurveInstrumentProvider> cashInstrumentProviders = null;
if (message.hasField(CASH)) {
cashInstrumentProviders = new HashMap<>();
final FudgeMsg cashInstrumentProvidersMessage = message.getMessage(CASH);
for (final FudgeField field : cashInstrumentProvidersMessage.getAllFields()) {
cashInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
if (message.hasField(FRA_3M) && message.hasField(FRA)) {
throw new OpenGammaRuntimeException("Have message with the old FRA field and the new FRA_3M field: should not happen");
}
Map<Tenor, CurveInstrumentProvider> fra3MInstrumentProviders = null;
if (message.hasField(FRA)) {
// Treat all old definitions as if they were 3m FRA rates
final FudgeMsg fraInstrumentProvidersMessage = message.getMessage(FRA);
fra3MInstrumentProviders = new HashMap<>();
for (final FudgeField field : fraInstrumentProvidersMessage.getAllFields()) {
fra3MInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
} else if (message.hasField(FRA_3M)) {
fra3MInstrumentProviders = new HashMap<>();
final FudgeMsg fra3MInstrumentProvidersMessage = message.getMessage(FRA_3M);
for (final FudgeField field : fra3MInstrumentProvidersMessage.getAllFields()) {
fra3MInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
if (message.hasField(FRA_6M) && message.hasField(FRA)) {
throw new OpenGammaRuntimeException("Have message with the old FRA field and the new FRA_6M field: should not happen");
}
Map<Tenor, CurveInstrumentProvider> fra6MInstrumentProviders = null;
if (message.hasField(FRA_6M)) {
fra6MInstrumentProviders = new HashMap<>();
final FudgeMsg fra6MInstrumentProvidersMessage = message.getMessage(FRA_6M);
for (final FudgeField field : fra6MInstrumentProvidersMessage.getAllFields()) {
fra6MInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> futureInstrumentProviders = null;
if (message.hasField(FUTURE)) {
futureInstrumentProviders = new HashMap<>();
final FudgeMsg futureInstrumentProvidersMessage = message.getMessage(FUTURE);
for (final FudgeField field : futureInstrumentProvidersMessage.getAllFields()) {
futureInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
if (message.hasField(RATE) && message.hasField(LIBOR)) {
throw new OpenGammaRuntimeException("Have message with old RATE field and new LIBOR field: should not happen");
}
Map<Tenor, CurveInstrumentProvider> liborInstrumentProviders = null;
if (message.hasField(RATE)) {
// Treat all old definitions as if they were Libor rates
liborInstrumentProviders = new HashMap<>();
final FudgeMsg rateInstrumentProvidersMessage = message.getMessage(RATE);
for (final FudgeField field : rateInstrumentProvidersMessage.getAllFields()) {
liborInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
} else if (message.hasField(LIBOR)) {
liborInstrumentProviders = new HashMap<>();
final FudgeMsg liborInstrumentProvidersMessage = message.getMessage(LIBOR);
for (final FudgeField field : liborInstrumentProvidersMessage.getAllFields()) {
liborInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
if (message.hasField(RATE) && message.hasField(EURIBOR)) {
throw new OpenGammaRuntimeException("Have message with old RATE field and new EURIBOR field: should not happen");
}
Map<Tenor, CurveInstrumentProvider> euriborInstrumentProviders = null;
if (message.hasField(EURIBOR)) {
euriborInstrumentProviders = new HashMap<>();
final FudgeMsg euriborInstrumentProvidersMessage = message.getMessage(EURIBOR);
for (final FudgeField field : euriborInstrumentProvidersMessage.getAllFields()) {
euriborInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> cdorInstrumentProviders = null;
if (message.hasField(CDOR)) {
cdorInstrumentProviders = new HashMap<>();
final FudgeMsg cdorInstrumentProvidersMessage = message.getMessage(CDOR);
for (final FudgeField field : cdorInstrumentProvidersMessage.getAllFields()) {
cdorInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> ciborInstrumentProviders = null;
if (message.hasField(CIBOR)) {
ciborInstrumentProviders = new HashMap<>();
final FudgeMsg ciborInstrumentProvidersMessage = message.getMessage(CIBOR);
for (final FudgeField field : ciborInstrumentProvidersMessage.getAllFields()) {
ciborInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> stiborInstrumentProviders = null;
if (message.hasField(STIBOR)) {
stiborInstrumentProviders = new HashMap<>();
final FudgeMsg stiborInstrumentProvidersMessage = message.getMessage(STIBOR);
for (final FudgeField field : stiborInstrumentProvidersMessage.getAllFields()) {
stiborInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
if (message.hasField(SWAP) && message.hasField(SWAP_3M)) {
throw new OpenGammaRuntimeException("Have message with old SWAP field and new SWAP_3M field: should not happen");
}
Map<Tenor, CurveInstrumentProvider> swap3MInstrumentProviders = null;
if (message.hasField(SWAP)) {
// Treat all old definitions as if they were swaps with 3m floating legs
swap3MInstrumentProviders = new HashMap<>();
final FudgeMsg swapInstrumentProvidersMessage = message.getMessage(SWAP);
for (final FudgeField field : swapInstrumentProvidersMessage.getAllFields()) {
swap3MInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
} else if (message.hasField(SWAP_3M)) {
swap3MInstrumentProviders = new HashMap<>();
final FudgeMsg swap3MInstrumentProvidersMessage = message.getMessage(SWAP_3M);
for (final FudgeField field : swap3MInstrumentProvidersMessage.getAllFields()) {
swap3MInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
if (message.hasField(SWAP) && message.hasField(SWAP_6M)) {
throw new OpenGammaRuntimeException("Have message with old SWAP field and new SWAP_6M field: should not happen");
}
Map<Tenor, CurveInstrumentProvider> swap6MInstrumentProviders = null;
if (message.hasField(SWAP_6M)) {
swap6MInstrumentProviders = new HashMap<>();
final FudgeMsg swap6MInstrumentProvidersMessage = message.getMessage(SWAP_6M);
for (final FudgeField field : swap6MInstrumentProvidersMessage.getAllFields()) {
swap6MInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> swap12MInstrumentProviders = null;
if (message.hasField(SWAP_12M)) {
swap12MInstrumentProviders = new HashMap<>();
final FudgeMsg swap12MInstrumentProvidersMessage = message.getMessage(SWAP_12M);
for (final FudgeField field : swap12MInstrumentProvidersMessage.getAllFields()) {
swap12MInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> swap28DInstrumentProviders = null;
if (message.hasField(SWAP_28D)) {
swap28DInstrumentProviders = new HashMap<>();
final FudgeMsg swap28DInstrumentProvidersMessage = message.getMessage(SWAP_28D);
for (final FudgeField field : swap28DInstrumentProvidersMessage.getAllFields()) {
swap28DInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> basisSwapInstrumentProviders = null;
if (message.hasField(BASIS_SWAP)) {
basisSwapInstrumentProviders = new HashMap<>();
final FudgeMsg basisSwapInstrumentProvidersMessage = message.getMessage(BASIS_SWAP);
for (final FudgeField field : basisSwapInstrumentProvidersMessage.getAllFields()) {
basisSwapInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> tenorSwapInstrumentProviders = null;
if (message.hasField(TENOR_SWAP)) {
tenorSwapInstrumentProviders = new HashMap<>();
final FudgeMsg tenorSwapInstrumentProvidersMessage = message.getMessage(TENOR_SWAP);
for (final FudgeField field : tenorSwapInstrumentProvidersMessage.getAllFields()) {
tenorSwapInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> oisSwapInstrumentProviders = null;
if (message.hasField(OIS_SWAP)) {
final FudgeMsg oisSwapInstrumentProvidersMessage = message.getMessage(OIS_SWAP);
oisSwapInstrumentProviders = new HashMap<>();
for (final FudgeField field : oisSwapInstrumentProvidersMessage.getAllFields()) {
oisSwapInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> simpleZeroDepositInstrumentProviders = null;
if (message.hasField(SIMPLE_ZERO_DEPOSIT)) {
final FudgeMsg simpleZeroDepositInstrumentProvidersMessage = message.getMessage(SIMPLE_ZERO_DEPOSIT);
simpleZeroDepositInstrumentProviders = new HashMap<>();
for (final FudgeField field : simpleZeroDepositInstrumentProvidersMessage.getAllFields()) {
simpleZeroDepositInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> periodicZeroDepositInstrumentProviders = null;
if (message.hasField(PERIODIC_ZERO_DEPOSIT)) {
final FudgeMsg periodicZeroDepositInstrumentProvidersMessage = message.getMessage(PERIODIC_ZERO_DEPOSIT);
periodicZeroDepositInstrumentProviders = new HashMap<>();
for (final FudgeField field : periodicZeroDepositInstrumentProvidersMessage.getAllFields()) {
periodicZeroDepositInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
Map<Tenor, CurveInstrumentProvider> continuousZeroDepositInstrumentProviders = null;
if (message.hasField(CONTINUOUS_ZERO_DEPOSIT)) {
final FudgeMsg continuousZeroDepositInstrumentProvidersMessage = message.getMessage(CONTINUOUS_ZERO_DEPOSIT);
continuousZeroDepositInstrumentProviders = new HashMap<>();
for (final FudgeField field : continuousZeroDepositInstrumentProvidersMessage.getAllFields()) {
continuousZeroDepositInstrumentProviders.put(Tenor.of(DateUtils.toPeriod(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
}
}
return new CurveSpecificationBuilderConfiguration(cashInstrumentProviders, fra3MInstrumentProviders, fra6MInstrumentProviders, liborInstrumentProviders, euriborInstrumentProviders,
cdorInstrumentProviders, ciborInstrumentProviders, stiborInstrumentProviders, futureInstrumentProviders, swap6MInstrumentProviders, swap3MInstrumentProviders, basisSwapInstrumentProviders,
tenorSwapInstrumentProviders, oisSwapInstrumentProviders, simpleZeroDepositInstrumentProviders, periodicZeroDepositInstrumentProviders, continuousZeroDepositInstrumentProviders,
swap12MInstrumentProviders, swap28DInstrumentProviders);
}
}