Package com.opengamma.financial.fudgemsg

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

/**
* 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.List;
import java.util.SortedSet;
import java.util.TreeSet;

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.analytics.math.interpolation.Interpolator1DFactory;
import com.opengamma.financial.analytics.ircurve.FixedIncomeStrip;
import com.opengamma.financial.analytics.ircurve.YieldCurveDefinition;
import com.opengamma.id.ExternalId;
import com.opengamma.id.UniqueId;
import com.opengamma.util.money.Currency;

/**
* Builder for converting {@link YieldCurveDefinition} instances to/from Fudge messages.
*/
@FudgeBuilderFor(YieldCurveDefinition.class)
public class YieldCurveDefinitionFudgeBuilder implements FudgeBuilder<YieldCurveDefinition> {
  private static final String CURRENCY_FIELD = "currency";
  private static final String REGION_FIELD = "region";
  private static final String NAME_FIELD = "name";
  private static final String INTERPOLATOR_NAME_FIELD = "interpolatorName";
  private static final String LEFT_EXTRAPOLATOR_NAME_FIELD = "leftExtrapolatorName";
  private static final String RIGHT_EXTRAPOLATOR_NAME_FIELD = "rightExtrapolatorName";
  private static final String INTERPOLATE_YIELDS_FIELD = "interpolateYields";
  private static final String STRIP_FIELD = "strip";
  private static final String UNIQUE_ID_FIELD = "uniqueId";

  private static final String DEFAULT_LEFT_EXTRAPOLATOR_NAME = Interpolator1DFactory.LINEAR_EXTRAPOLATOR;
  private static final String DEFAULT_RIGHT_EXTRAPOLATOR_NAME = Interpolator1DFactory.LINEAR_EXTRAPOLATOR;
  private static final boolean DEFAULT_INTERPOLATE_YIELD_VALUE = true;

  @Override
  public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final YieldCurveDefinition object) {
    final MutableFudgeMsg message = serializer.newMessage();
    serializer.addToMessage(message, CURRENCY_FIELD, null, object.getCurrency());
    if (object.getRegionId() != null) {
      serializer.addToMessage(message, REGION_FIELD, null, object.getRegionId());
    }
    message.add(NAME_FIELD, object.getName());
    message.add(INTERPOLATOR_NAME_FIELD, object.getInterpolatorName());
    message.add(LEFT_EXTRAPOLATOR_NAME_FIELD, object.getLeftExtrapolatorName());
    message.add(RIGHT_EXTRAPOLATOR_NAME_FIELD, object.getRightExtrapolatorName());
    message.add(INTERPOLATE_YIELDS_FIELD, object.isInterpolateYields());
    for (final FixedIncomeStrip strip : object.getStrips()) {
      serializer.addToMessage(message, STRIP_FIELD, null, strip);
    }
    serializer.addToMessageWithClassHeaders(message, UNIQUE_ID_FIELD, null, object.getUniqueId(), UniqueId.class);
    return message;
  }

  @Override
  public YieldCurveDefinition buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
    final Currency currency = deserializer.fieldValueToObject(Currency.class, message.getByName(CURRENCY_FIELD));
    ExternalId region = null;
    if (message.hasField(REGION_FIELD)) {
      region = deserializer.fieldValueToObject(ExternalId.class, message.getByName(REGION_FIELD));
    }
    final String name = message.getString(NAME_FIELD);
    final String interpolatorName = message.getString(INTERPOLATOR_NAME_FIELD);
    final List<FudgeField> allByOrdinal = message.getAllByName(STRIP_FIELD);
    final SortedSet<FixedIncomeStrip> strips = new TreeSet<FixedIncomeStrip>();
    for (final FudgeField field : allByOrdinal) {
      final FixedIncomeStrip strip = deserializer.fieldValueToObject(FixedIncomeStrip.class, field);
      strips.add(strip);
    }
    final String leftExtrapolatorName;
    if (message.hasField(LEFT_EXTRAPOLATOR_NAME_FIELD)) {
      leftExtrapolatorName = message.getString(LEFT_EXTRAPOLATOR_NAME_FIELD);
    } else {
      leftExtrapolatorName = DEFAULT_LEFT_EXTRAPOLATOR_NAME;
    }
    final String rightExtrapolatorName;
    if (message.hasField(RIGHT_EXTRAPOLATOR_NAME_FIELD)) {
      rightExtrapolatorName = message.getString(RIGHT_EXTRAPOLATOR_NAME_FIELD);
    } else {
      rightExtrapolatorName = DEFAULT_RIGHT_EXTRAPOLATOR_NAME;
    }
    final boolean interpolateYields;
    if (message.hasField(INTERPOLATE_YIELDS_FIELD)) {
      interpolateYields = message.getBoolean(INTERPOLATE_YIELDS_FIELD);
    } else {
      interpolateYields = DEFAULT_INTERPOLATE_YIELD_VALUE;
    }
    final YieldCurveDefinition curveDefinition = new YieldCurveDefinition(currency, region, name, interpolatorName,
        leftExtrapolatorName, rightExtrapolatorName, interpolateYields, strips);
    final FudgeField uniqueId = message.getByName(UNIQUE_ID_FIELD);
    if (uniqueId != null) {
      curveDefinition.setUniqueId(deserializer.fieldValueToObject(UniqueId.class, uniqueId));
    }
    return curveDefinition;
  }

}
TOP

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

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.