Package com.opengamma.financial.fudgemsg

Source Code of com.opengamma.financial.fudgemsg.CurveSpecificationBuilderConfigurationFudgeBuilder

/**
* 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);
  }
}
TOP

Related Classes of com.opengamma.financial.fudgemsg.CurveSpecificationBuilderConfigurationFudgeBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.