Package com.opengamma.financial.analytics.fudgemsg

Source Code of com.opengamma.financial.analytics.fudgemsg.YieldCurveBundleBuilder

/**
* Copyright (C) 2013 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.analytics.fudgemsg;

import java.util.LinkedHashMap;
import java.util.List;
import java.util.Map;

import org.fudgemsg.FudgeField;
import org.fudgemsg.FudgeMsg;
import org.fudgemsg.MutableFudgeMsg;
import org.fudgemsg.mapping.FudgeBuilderFor;
import org.fudgemsg.mapping.FudgeDeserializer;
import org.fudgemsg.mapping.FudgeSerializer;

import com.google.common.collect.Maps;
import com.opengamma.analytics.financial.forex.method.FXMatrix;
import com.opengamma.analytics.financial.interestrate.YieldCurveBundle;
import com.opengamma.analytics.financial.model.interestrate.curve.YieldAndDiscountCurve;
import com.opengamma.util.money.Currency;

/**
* Fudge builder for {@code YieldCurveBundle}.
*/
@FudgeBuilderFor(YieldCurveBundle.class)
public final class YieldCurveBundleBuilder extends AbstractFudgeBuilder<YieldCurveBundle> {
  private static final String CURVES_FIELD_NAME = "curve";
  private static final String CURVES_NAME_FIELD_NAME = "curveName";
  private static final String CURRENCY_FIELD_NAME = "ccy";
  private static final String CURRENCY_CURVE_FIELD_NAME = "ccyCurve";
  private static final String FX_MATRIX_FIELD_NAME = "FXMatrix";


  @Override
  public YieldCurveBundle buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
    // note name in curve & name in bundle may be different!
    final List<FudgeField> curveFields = message.getAllByName(CURVES_FIELD_NAME);
    final List<FudgeField> curveNameFields = message.getAllByName(CURVES_NAME_FIELD_NAME);
    final List<FudgeField> ccyFields = message.getAllByName(CURRENCY_FIELD_NAME);
    final List<FudgeField> ccyCurveFields = message.getAllByName(CURRENCY_CURVE_FIELD_NAME);
    final Map<String, YieldAndDiscountCurve> curves = new LinkedHashMap<>(curveFields.size());
    final Map<String, Currency> curveCurrencys = Maps.newHashMapWithExpectedSize(ccyFields.size());
    final FXMatrix fxMatrix = deserializer.fieldValueToObject(FXMatrix.class, message.getByName(FX_MATRIX_FIELD_NAME));
    for (int i = 0; i < curveFields.size(); i++) {
      final YieldAndDiscountCurve curve = deserializer.fieldValueToObject(YieldAndDiscountCurve.class, curveFields.get(i));
      final String name = deserializer.fieldValueToObject(String.class, curveNameFields.get(i));
      curves.put(name, curve);
    }
    for (int i = 0; i < ccyFields.size(); i++) {
      final String name = deserializer.fieldValueToObject(String.class, ccyCurveFields.get(i));
      final Currency ccy = deserializer.fieldValueToObject(Currency.class, ccyFields.get(i));
      curveCurrencys.put(name, ccy);
    }

    return new YieldCurveBundle(fxMatrix, curveCurrencys, curves);
  }

  @Override
  protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final YieldCurveBundle object) {
    serializer.addToMessageWithClassHeaders(message, FX_MATRIX_FIELD_NAME, null, object.getFxRates());
    for (final String curve : object.getAllNames()) {
      serializer.addToMessageWithClassHeaders(message, CURVES_FIELD_NAME, null, object.getCurve(curve));
      serializer.addToMessageWithClassHeaders(message, CURVES_NAME_FIELD_NAME, null, curve);
    }
    for (Map.Entry<String, Currency> ccyEntry : object.getCurrencyMap().entrySet()) {
      serializer.addToMessage(message, CURRENCY_CURVE_FIELD_NAME, null, ccyEntry.getKey());
      serializer.addToMessageWithClassHeaders(message, CURRENCY_FIELD_NAME, null, ccyEntry.getValue());
    }
  }
}
TOP

Related Classes of com.opengamma.financial.analytics.fudgemsg.YieldCurveBundleBuilder

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.