Package com.opengamma.financial.fudgemsg

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

/**
* Copyright (C) 2013 - 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 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 org.threeten.bp.Period;

import com.opengamma.financial.analytics.curve.CurveNodeIdMapper;
import com.opengamma.financial.analytics.ircurve.CurveInstrumentProvider;
import com.opengamma.util.time.Tenor;

/**
* Fudge builder for {@link CurveNodeIdMapper}
*/
@FudgeBuilderFor(CurveNodeIdMapper.class)
public class CurveNodeIdMapperBuilder implements FudgeBuilder<CurveNodeIdMapper> {
  /** The name field */
  public static final String NAME_FIELD = "name";
  /** The cash ids field */
  public static final String CASH_NODE_FIELD = "cashIds";
  /** The continuously compounded node field */
  public static final String CONTINUOUSLY_COMPOUNDED_NODE_FIELD = "continuouslyCompoundedIds";
  /** The credit spread node field */
  public static final String CREDIT_SPREAD_NODE_FIELD = "creditSpreadIds";
  /** The deliverable swap future node field */
  public static final String DELIVERABLE_SWAP_FUTURE_NODE_FIELD = "deliverableSwapFutureIds";
  /** The discount factor node field */
  public static final String DISCOUNT_FACTOR_NODE_FIELD = "discountFactorIds";
  /** The FRA node field */
  public static final String FRA_NODE_FIELD = "fraIds";
  /** The FX forward node field */
  public static final String FX_FORWARD_NODE_FIELD = "fxForwardIds";
  /** The rate future node field */
  public static final String RATE_FUTURE_FIELD = "rateFutureIds";
  /** The swap node field */
  public static final String SWAP_NODE_FIELD = "swapIds";
  /** The zero coupon inflation node field */
  public static final String ZERO_COUPON_INFLATION_NODE_FIELD = "zeroCouponInflationIds";

  @Override
  public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final CurveNodeIdMapper object) {
    final MutableFudgeMsg message = serializer.newMessage();
    message.add(null, 0, object.getClass().getName());
    message.add(NAME_FIELD, object.getName());
    if (object.getCashNodeIds() != null) {
      message.add(CASH_NODE_FIELD, getMessageForField(serializer, object.getCashNodeIds()));
    }
    if (object.getContinuouslyCompoundedRateNodeIds() != null) {
      message.add(CONTINUOUSLY_COMPOUNDED_NODE_FIELD, getMessageForField(serializer, object.getContinuouslyCompoundedRateNodeIds()));
    }
    if (object.getCreditSpreadNodeIds() != null) {
      message.add(CREDIT_SPREAD_NODE_FIELD, getMessageForField(serializer, object.getCreditSpreadNodeIds()));
    }
    if (object.getDeliverableSwapFutureNodeIds() != null) {
      message.add(DELIVERABLE_SWAP_FUTURE_NODE_FIELD, getMessageForField(serializer, object.getDeliverableSwapFutureNodeIds()));
    }
    if (object.getDiscountFactorNodeIds() != null) {
      message.add(DISCOUNT_FACTOR_NODE_FIELD, getMessageForField(serializer, object.getDiscountFactorNodeIds()));
    }
    if (object.getFRANodeIds() != null) {
      message.add(FRA_NODE_FIELD, getMessageForField(serializer, object.getFRANodeIds()));
    }
    if (object.getFXForwardNodeIds() != null) {
      message.add(FX_FORWARD_NODE_FIELD, getMessageForField(serializer, object.getFXForwardNodeIds()));
    }
    if (object.getRateFutureNodeIds() != null) {
      message.add(RATE_FUTURE_FIELD, getMessageForField(serializer, object.getRateFutureNodeIds()));
    }
    if (object.getSwapNodeIds() != null) {
      message.add(SWAP_NODE_FIELD, getMessageForField(serializer, object.getSwapNodeIds()));
    }
    if (object.getZeroCouponInflationNodeIds() != null) {
      message.add(ZERO_COUPON_INFLATION_NODE_FIELD, getMessageForField(serializer, object.getZeroCouponInflationNodeIds()));
    }
    return message;
  }

  @Override
  public CurveNodeIdMapper buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
    final String name;
    if (message.hasField(NAME_FIELD)) {
      name = message.getString(NAME_FIELD);
    } else {
      name = null;
    }
    final Map<Tenor, CurveInstrumentProvider> cashNodeIds = getMapForField(CASH_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> continuouslyCompoundedRateNodeIds = getMapForField(CONTINUOUSLY_COMPOUNDED_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> creditSpreadNodeIds = getMapForField(CREDIT_SPREAD_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> deliverableSwapFutureNodeIds = getMapForField(DELIVERABLE_SWAP_FUTURE_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> discountFactorNodeIds = getMapForField(DISCOUNT_FACTOR_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> fraNodeIds = getMapForField(FRA_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> fxForwardNodeIds = getMapForField(FX_FORWARD_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> rateFutureNodeIds = getMapForField(RATE_FUTURE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> swapNodeIds = getMapForField(SWAP_NODE_FIELD, deserializer, message);
    final Map<Tenor, CurveInstrumentProvider> zeroCouponInflationNodeIds = getMapForField(ZERO_COUPON_INFLATION_NODE_FIELD, deserializer, message);
    final CurveNodeIdMapper idMapper = CurveNodeIdMapper.builder().
        cashNodeIds(cashNodeIds).
        continuouslyCompoundedRateNodeIds(continuouslyCompoundedRateNodeIds).
        creditSpreadNodeIds(creditSpreadNodeIds).
        deliverableSwapFutureNodeIds(deliverableSwapFutureNodeIds).
        discountFactorNodeIds(discountFactorNodeIds).
        fraNodeIds(fraNodeIds).
        fxForwardNodeIds(fxForwardNodeIds).
        rateFutureNodeIds(rateFutureNodeIds).
        name(name).
        swapNodeIds(swapNodeIds).
        zeroCouponInflationNodeIds(zeroCouponInflationNodeIds).
        build();
    return idMapper;
  }

  public static FudgeMsg getMessageForField(final FudgeSerializer serializer, final Map<Tenor, CurveInstrumentProvider> idMap) {
    final MutableFudgeMsg idsMessage = serializer.newMessage();
    for (final Map.Entry<Tenor, CurveInstrumentProvider> entry : idMap.entrySet()) {
      serializer.addToMessageWithClassHeaders(idsMessage, entry.getKey().getPeriod().toString(), null, entry.getValue(), CurveInstrumentProvider.class);
    }
    return idsMessage;
  }

  public static Map<Tenor, CurveInstrumentProvider> getMapForField(final String fieldName, final FudgeDeserializer deserializer, final FudgeMsg message) {
    if (message.hasField(fieldName)) {
      final Map<Tenor, CurveInstrumentProvider> nodeIds = new HashMap<>();
      final FudgeMsg idsMessage = message.getMessage(fieldName);
      for (final FudgeField field : idsMessage.getAllFields()) {
        nodeIds.put(Tenor.of(Period.parse(field.getName())), deserializer.fieldValueToObject(CurveInstrumentProvider.class, field));
      }
      return nodeIds;
    }
    return null;
  }


}
TOP

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

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.