@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,