Package com.opengamma.financial.security.swap

Source Code of com.opengamma.financial.security.swap.SwapLegFudgeBuilder$FloatingInterestRateLegBuilder

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

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.financial.convention.businessday.BusinessDayConvention;
import com.opengamma.financial.convention.daycount.DayCount;
import com.opengamma.financial.convention.frequency.Frequency;
import com.opengamma.id.ExternalIdFudgeBuilder;
import com.opengamma.util.fudgemsg.AbstractFudgeBuilder;

/**
* A Fudge builder for {@code SwapLeg} implementations.
*/
public class SwapLegFudgeBuilder extends AbstractFudgeBuilder {

  /** Field name. */
  public static final String DAY_COUNT_FIELD_NAME = "dayCount";
  /** Field name. */
  public static final String FREQUENCY_FIELD_NAME = "frequency";
  /** Field name. */
  public static final String REGION_IDENTIFIER_FIELD_NAME = "regionIdentifier";
  /** Field name. */
  public static final String BUSINESS_DAY_CONVENTION_FIELD_NAME = "businessDayConvention";
  /** Field name. */
  public static final String NOTIONAL_FIELD_NAME = "notional";
  /** Field name. */
  public static final String IS_EOM_FIELD_NAME = "isEOM";

  /** Field name. */
  public static final String FLOATING_REFERENCE_RATE_IDENTIFIER_FIELD_NAME = "floatingReferenceRateIdentifier";
  /** Field name. */
  public static final String INITIAL_FLOATING_RATE_FIELD_NAME = "initialFloatingRate";
  /** Field name. */
  public static final String FLOATING_RATE_TYPE_FIELD_NAME = "floatingRateType";

  public static void toFudgeMsg(final FudgeSerializer serializer, final SwapLeg object, final MutableFudgeMsg msg) {
    addToMessage(msg, DAY_COUNT_FIELD_NAME, object.getDayCount());
    addToMessage(msg, FREQUENCY_FIELD_NAME, object.getFrequency());
    addToMessage(msg, REGION_IDENTIFIER_FIELD_NAME, ExternalIdFudgeBuilder.toFudgeMsg(serializer, object.getRegionId()));
    addToMessage(msg, BUSINESS_DAY_CONVENTION_FIELD_NAME, object.getBusinessDayConvention());
    addToMessage(serializer, msg, NOTIONAL_FIELD_NAME, object.getNotional(), Notional.class);
    addToMessage(msg, IS_EOM_FIELD_NAME, object.isEom());
  }

  public static void toFudgeMsg(final FudgeSerializer serializer, final FloatingInterestRateLeg object, final MutableFudgeMsg msg) {
    toFudgeMsg(serializer, (SwapLeg) object, msg);
    addToMessage(msg, FLOATING_REFERENCE_RATE_IDENTIFIER_FIELD_NAME, ExternalIdFudgeBuilder.toFudgeMsg(serializer, object.getFloatingReferenceRateId()));
    if (object.getInitialFloatingRate() != null) {
      addToMessage(msg, INITIAL_FLOATING_RATE_FIELD_NAME, object.getInitialFloatingRate());
    }
    addToMessage(msg, FLOATING_RATE_TYPE_FIELD_NAME, object.getFloatingRateType().name());
  }

  public static void fromFudgeMsg(final FudgeDeserializer deserializer, final FudgeMsg msg, final SwapLeg object) {
    object.setDayCount(msg.getValue(DayCount.class, DAY_COUNT_FIELD_NAME));
    object.setFrequency(msg.getValue(Frequency.class, FREQUENCY_FIELD_NAME));
    object.setRegionId(ExternalIdFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(REGION_IDENTIFIER_FIELD_NAME)));
    object.setBusinessDayConvention(msg.getValue(BusinessDayConvention.class, BUSINESS_DAY_CONVENTION_FIELD_NAME));
    object.setNotional(deserializer.fudgeMsgToObject(Notional.class, msg.getMessage(NOTIONAL_FIELD_NAME)));
    object.setEom(msg.getBoolean(IS_EOM_FIELD_NAME));
  }

  public static void fromFudgeMsg(final FudgeDeserializer deserializer, final FudgeMsg msg, final FloatingInterestRateLeg object) {
    fromFudgeMsg(deserializer, msg, (SwapLeg) object);
    object.setFloatingReferenceRateId(ExternalIdFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(FLOATING_REFERENCE_RATE_IDENTIFIER_FIELD_NAME)));
    if (msg.hasField(INITIAL_FLOATING_RATE_FIELD_NAME)) {
      object.setInitialFloatingRate(msg.getDouble(INITIAL_FLOATING_RATE_FIELD_NAME));
    }
    object.setFloatingRateType(FloatingRateType.valueOf(msg.getString(FLOATING_RATE_TYPE_FIELD_NAME)));
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FixedInterestRateLeg}.
   */
  @FudgeBuilderFor(FixedInterestRateLeg.class)
  public static class FixedInterestRateLegBuilder extends SwapLegFudgeBuilder implements FudgeBuilder<FixedInterestRateLeg>  {
    /** Field name. */
    public static final String RATE_FIELD_NAME = "rate";

    @Override
    public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FixedInterestRateLeg object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      toFudgeMsg(serializer, object, msg);
      addToMessage(msg, RATE_FIELD_NAME, object.getRate());
      return msg;
    }

    @Override
    public FixedInterestRateLeg buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
      final FixedInterestRateLeg fixedInterestRateLeg = new FixedInterestRateLeg();
      fromFudgeMsg(deserializer, msg, fixedInterestRateLeg);
      fixedInterestRateLeg.setRate(msg.getDouble(RATE_FIELD_NAME));
      return fixedInterestRateLeg;
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FloatingInterestRateLeg}.
   */
  @FudgeBuilderFor(FloatingInterestRateLeg.class)
  public static class FloatingInterestRateLegBuilder extends SwapLegFudgeBuilder implements FudgeBuilder<FloatingInterestRateLeg>  {

    @Override
    public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FloatingInterestRateLeg object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      toFudgeMsg(serializer, object, msg);
      return msg;
    }

    @Override
    public FloatingInterestRateLeg buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
      final FloatingInterestRateLeg floatingInterestRateLeg = new FloatingInterestRateLeg();
      fromFudgeMsg(deserializer, msg, floatingInterestRateLeg);
      return floatingInterestRateLeg;
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FloatingSpreadIRLeg}.
   */
  @FudgeBuilderFor(FloatingSpreadIRLeg.class)
  public static class FloatingSpreadIRLegBuilder extends SwapLegFudgeBuilder implements FudgeBuilder<FloatingSpreadIRLeg>  {
    /** Field name. */
    public static final String SPREAD_FIELD_NAME = "spread";

    @Override
    public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FloatingSpreadIRLeg object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      toFudgeMsg(serializer, object, msg);
      addToMessage(msg, SPREAD_FIELD_NAME, object.getSpread());
      return msg;
    }

    @Override
    public FloatingSpreadIRLeg buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
      final FloatingSpreadIRLeg floatingSpreadIRLeg = new FloatingSpreadIRLeg();
      fromFudgeMsg(deserializer, msg, floatingSpreadIRLeg);
      floatingSpreadIRLeg.setSpread(msg.getDouble(SPREAD_FIELD_NAME));
      return floatingSpreadIRLeg;
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FloatingGearingIRLeg}.
   */
  @FudgeBuilderFor(FloatingGearingIRLeg.class)
  public static class FloatingGearingIRLegBuilder extends SwapLegFudgeBuilder implements FudgeBuilder<FloatingGearingIRLeg>  {
    /** Field name. */
    public static final String GEARING_FIELD_NAME = "gearing";

    @Override
    public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FloatingGearingIRLeg object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      toFudgeMsg(serializer, object, msg);
      addToMessage(msg, GEARING_FIELD_NAME, object.getGearing());
      return msg;
    }

    @Override
    public FloatingGearingIRLeg buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
      final FloatingGearingIRLeg floatingInterestRateLeg = new FloatingGearingIRLeg();
      fromFudgeMsg(deserializer, msg, floatingInterestRateLeg);
      floatingInterestRateLeg.setGearing(msg.getDouble(GEARING_FIELD_NAME));
      return floatingInterestRateLeg;
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FixedInflationSwapLeg}.
   */
  @FudgeBuilderFor(FixedInflationSwapLeg.class)
  public static class FixedInflationSwapLegBuilder extends SwapLegFudgeBuilder implements FudgeBuilder<FixedInflationSwapLeg>  {
    /** The rate field name */
    private static final String RATE_FIELD_NAME = "rate";

    @Override
    public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FixedInflationSwapLeg object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      toFudgeMsg(serializer, object, msg);
      addToMessage(msg, RATE_FIELD_NAME, object.getRate());
      return msg;
    }

    @Override
    public FixedInflationSwapLeg buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
      final FixedInflationSwapLeg fixedInflationSwapLeg = new FixedInflationSwapLeg();
      fromFudgeMsg(deserializer, msg, fixedInflationSwapLeg);
      fixedInflationSwapLeg.setRate(msg.getDouble(RATE_FIELD_NAME));
      return fixedInflationSwapLeg;
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code InflationIndexSwapLeg}.
   */
  @FudgeBuilderFor(InflationIndexSwapLeg.class)
  public static class InflationIndexSwapLegBuilder extends SwapLegFudgeBuilder implements FudgeBuilder<InflationIndexSwapLeg>  {
    /** The index reference id field name */
    private static final String INDEX_ID_FIELD_NAME = "indexId";
    /** The quotation lag field name */
    private static final String QUOTATION_LAG_FIELD_NAME = "quotationLagField";
    /** The conventional lag field name */
    private static final String CONVENTIONAL_LAG_FIELD_NAME = "conventionalLagField";
    /** The interpolation method field name */
    private static final String INTERPOLATION_METHOD_FIELD_NAME = "interpolationMethod";

    @Override
    public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final InflationIndexSwapLeg object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      toFudgeMsg(serializer, object, msg);
      addToMessage(msg, INDEX_ID_FIELD_NAME, ExternalIdFudgeBuilder.toFudgeMsg(serializer, object.getIndexId()));
      addToMessage(msg, QUOTATION_LAG_FIELD_NAME, object.getQuotationIndexationLag());
      addToMessage(msg, CONVENTIONAL_LAG_FIELD_NAME, object.getConventionalIndexationLag());
      addToMessage(msg, INTERPOLATION_METHOD_FIELD_NAME, object.getInterpolationMethod().name());
      return msg;
    }

    @Override
    public InflationIndexSwapLeg buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
      final InflationIndexSwapLeg inflationIndexSwapLeg = new InflationIndexSwapLeg();
      fromFudgeMsg(deserializer, msg, inflationIndexSwapLeg);
      inflationIndexSwapLeg.setIndexId(ExternalIdFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(INDEX_ID_FIELD_NAME)));
      inflationIndexSwapLeg.setQuotationIndexationLag(msg.getInt(QUOTATION_LAG_FIELD_NAME));
      inflationIndexSwapLeg.setConventionalIndexationLag(msg.getInt(CONVENTIONAL_LAG_FIELD_NAME));
      inflationIndexSwapLeg.setInterpolationMethod(InterpolationMethod.valueOf(msg.getString(INTERPOLATION_METHOD_FIELD_NAME)));
      return inflationIndexSwapLeg;
    }
  }
}
TOP

Related Classes of com.opengamma.financial.security.swap.SwapLegFudgeBuilder$FloatingInterestRateLegBuilder

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.