Package com.opengamma.financial.security.option

Source Code of com.opengamma.financial.security.option.PayoffStyleFudgeBuilder$VanillaPayoffStyleBuilder

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

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.ZonedDateTime;

import com.opengamma.util.fudgemsg.AbstractFudgeBuilder;
import com.opengamma.util.time.Expiry;
import com.opengamma.util.time.ExpiryFudgeBuilder;
import com.opengamma.util.time.ZonedDateTimeFudgeBuilder;

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

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code AssetOrNothingPayoffStyle}.
   */
  @FudgeBuilderFor(AssetOrNothingPayoffStyle.class)
  public static class AssetOrNothingPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<AssetOrNothingPayoffStyle>  {

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

    @Override
    public AssetOrNothingPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      return new AssetOrNothingPayoffStyle();
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code AsymmetricPoweredPayoffStyle}.
   */
  @FudgeBuilderFor(AsymmetricPoweredPayoffStyle.class)
  public static class AsymmetricPoweredPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<AsymmetricPoweredPayoffStyle>  {
    /** Field name. */
    public static final String POWER_FIELD_NAME = "power";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, AsymmetricPoweredPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, POWER_FIELD_NAME, object.getPower());
      return msg;
    }

    @Override
    public AsymmetricPoweredPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      double power = msg.getDouble(POWER_FIELD_NAME);
      return new AsymmetricPoweredPayoffStyle(power);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code BarrierPayoffStyle}.
   */
  @FudgeBuilderFor(BarrierPayoffStyle.class)
  public static class BarrierPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<BarrierPayoffStyle>  {

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

    @Override
    public BarrierPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      return new BarrierPayoffStyle();
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code CappedPoweredPayoffStyle}.
   */
  @FudgeBuilderFor(CappedPoweredPayoffStyle.class)
  public static class CappedPoweredPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<CappedPoweredPayoffStyle>  {
    /** Field name. */
    public static final String POWER_FIELD_NAME = "power";
    /** Field name. */
    public static final String CAP_FIELD_NAME = "cap";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, CappedPoweredPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, POWER_FIELD_NAME, object.getPower());
      addToMessage(msg, CAP_FIELD_NAME, object.getCap());
      return msg;
    }

    @Override
    public CappedPoweredPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      double power = msg.getDouble(POWER_FIELD_NAME);
      double cap = msg.getDouble(CAP_FIELD_NAME);
      return new CappedPoweredPayoffStyle(power, cap);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code CashOrNothingPayoffStyle}.
   */
  @FudgeBuilderFor(CashOrNothingPayoffStyle.class)
  public static class CashOrNothingPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<CashOrNothingPayoffStyle>  {
    /** Field name. */
    public static final String PAYMENT_FIELD_NAME = "payment";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, CashOrNothingPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, PAYMENT_FIELD_NAME, object.getPayment());
      return msg;
    }

    @Override
    public CashOrNothingPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      double payment = msg.getDouble(PAYMENT_FIELD_NAME);
      return new CashOrNothingPayoffStyle(payment);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code ExtremeSpreadPayoffStyle}.
   */
  @FudgeBuilderFor(ExtremeSpreadPayoffStyle.class)
  public static class ExtremeSpreadPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<ExtremeSpreadPayoffStyle>  {
    /** Field name. */
    public static final String PERIOD_END_FIELD_NAME = "periodEnd";
    /** Field name. */
    public static final String IS_REVERSE_FIELD_NAME = "isReverse";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, ExtremeSpreadPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, PERIOD_END_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getPeriodEnd()));
      addToMessage(msg, IS_REVERSE_FIELD_NAME, object.isReverse());
      return msg;
    }

    @Override
    public ExtremeSpreadPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      ZonedDateTime periodEnd = ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(PERIOD_END_FIELD_NAME));
      boolean reverse = msg.getBoolean(IS_REVERSE_FIELD_NAME);
      return new ExtremeSpreadPayoffStyle(periodEnd, reverse);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FadeInPayoffStyle}.
   */
  @FudgeBuilderFor(FadeInPayoffStyle.class)
  public static class FadeInPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<FadeInPayoffStyle>  {
    /** Field name. */
    public static final String LOWER_BOUND_FIELD_NAME = "lowerBound";
    /** Field name. */
    public static final String UPPER_BOUND_FIELD_NAME = "upperBound";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, FadeInPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, LOWER_BOUND_FIELD_NAME, object.getUpperBound());
      addToMessage(msg, UPPER_BOUND_FIELD_NAME, object.getLowerBound());
      return msg;
    }

    @Override
    public FadeInPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      double upperBound = msg.getDouble(LOWER_BOUND_FIELD_NAME);
      double lowerBound = msg.getDouble(UPPER_BOUND_FIELD_NAME);
      return new FadeInPayoffStyle(upperBound, lowerBound);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FixedStrikeLookbackPayoffStyle}.
   */
  @FudgeBuilderFor(FixedStrikeLookbackPayoffStyle.class)
  public static class FixedStrikeLookbackPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<FixedStrikeLookbackPayoffStyle>  {

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

    @Override
    public FixedStrikeLookbackPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      return new FixedStrikeLookbackPayoffStyle();
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code FloatingStrikeLookbackPayoffStyle}.
   */
  @FudgeBuilderFor(FloatingStrikeLookbackPayoffStyle.class)
  public static class FloatingStrikeLookbackPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<FloatingStrikeLookbackPayoffStyle>  {

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

    @Override
    public FloatingStrikeLookbackPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      return new FloatingStrikeLookbackPayoffStyle();
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code GapPayoffStyle}.
   */
  @FudgeBuilderFor(GapPayoffStyle.class)
  public static class GapPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<GapPayoffStyle>  {
    /** Field name. */
    public static final String PAYMENT_FIELD_NAME = "payment";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, GapPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, PAYMENT_FIELD_NAME, object.getPayment());
      return msg;
    }

    @Override
    public GapPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      double payment = msg.getDouble(PAYMENT_FIELD_NAME);
      return new GapPayoffStyle(payment);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code PoweredPayoffStyle}.
   */
  @FudgeBuilderFor(PoweredPayoffStyle.class)
  public static class PoweredPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<PoweredPayoffStyle>  {
    /** Field name. */
    public static final String POWER_FIELD_NAME = "power";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, PoweredPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, POWER_FIELD_NAME, object.getPower());
      return msg;
    }

    @Override
    public PoweredPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      double power = msg.getDouble(POWER_FIELD_NAME);
      return new PoweredPayoffStyle(power);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code SimpleChooserPayoffStyle}.
   */
  @FudgeBuilderFor(SimpleChooserPayoffStyle.class)
  public static class SimpleChooserPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<SimpleChooserPayoffStyle>  {
    /** Field name. */
    public static final String CHOOSE_DATE_FIELD_NAME = "chooseDate";
    /** Field name. */
    public static final String UNDERLYING_STRIKE_FIELD_NAME = "underlyingStrike";
    /** Field name. */
    public static final String UNDERLYING_EXPIRY_FIELD_NAME = "underlyingExpiry";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, SimpleChooserPayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, CHOOSE_DATE_FIELD_NAME, ZonedDateTimeFudgeBuilder.toFudgeMsg(serializer, object.getChooseDate()));
      addToMessage(msg, UNDERLYING_STRIKE_FIELD_NAME, object.getUnderlyingStrike());
      addToMessage(msg, UNDERLYING_EXPIRY_FIELD_NAME, ExpiryFudgeBuilder.toFudgeMsg(serializer, object.getUnderlyingExpiry()));
      return msg;
    }

    @Override
    public SimpleChooserPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      ZonedDateTime chooseDate = ZonedDateTimeFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(CHOOSE_DATE_FIELD_NAME));
      double strike = msg.getDouble(UNDERLYING_STRIKE_FIELD_NAME);
      Expiry expiry = ExpiryFudgeBuilder.fromFudgeMsg(deserializer, msg.getMessage(UNDERLYING_EXPIRY_FIELD_NAME));
      return new SimpleChooserPayoffStyle(chooseDate, strike, expiry);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code SupersharePayoffStyle}.
   */
  @FudgeBuilderFor(SupersharePayoffStyle.class)
  public static class SupersharePayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<SupersharePayoffStyle>  {
    /** Field name. */
    public static final String LOWER_BOUND_FIELD_NAME = "lowerBound";
    /** Field name. */
    public static final String UPPER_BOUND_FIELD_NAME = "upperBound";

    @Override
    public MutableFudgeMsg buildMessage(FudgeSerializer serializer, SupersharePayoffStyle object) {
      final MutableFudgeMsg msg = serializer.newMessage();
      addToMessage(msg, LOWER_BOUND_FIELD_NAME, object.getUpperBound());
      addToMessage(msg, UPPER_BOUND_FIELD_NAME, object.getLowerBound());
      return msg;
    }

    @Override
    public SupersharePayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      double upperBound = msg.getDouble(LOWER_BOUND_FIELD_NAME);
      double lowerBound = msg.getDouble(UPPER_BOUND_FIELD_NAME);
      return new SupersharePayoffStyle(upperBound, lowerBound);
    }
  }

  //-------------------------------------------------------------------------
  /**
   * A Fudge builder for {@code VanillaPayoffStyle}.
   */
  @FudgeBuilderFor(VanillaPayoffStyle.class)
  public static class VanillaPayoffStyleBuilder extends PayoffStyleFudgeBuilder implements FudgeBuilder<VanillaPayoffStyle>  {

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

    @Override
    public VanillaPayoffStyle buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
      return new VanillaPayoffStyle();
    }
  }

}
TOP

Related Classes of com.opengamma.financial.security.option.PayoffStyleFudgeBuilder$VanillaPayoffStyleBuilder

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.