Package com.opengamma.financial.analytics.fudgemsg

Source Code of com.opengamma.financial.analytics.fudgemsg.ModelVolatilitySurface$LocalVolatilitySurfaceMoneynessBuilder

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

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.opengamma.OpenGammaRuntimeException;
import com.opengamma.analytics.financial.model.interestrate.curve.ForwardCurve;
import com.opengamma.analytics.financial.model.volatility.local.LocalVolatilitySurfaceMoneyness;
import com.opengamma.analytics.financial.model.volatility.smile.fitting.sabr.SmileSurfaceDataBundle;
import com.opengamma.analytics.financial.model.volatility.surface.BlackVolatilitySurfaceMoneyness;
import com.opengamma.analytics.financial.model.volatility.surface.BlackVolatilitySurfaceMoneynessFcnBackedByGrid;
import com.opengamma.analytics.financial.model.volatility.surface.PureImpliedVolatilitySurface;
import com.opengamma.analytics.financial.model.volatility.surface.VolatilitySurface;
import com.opengamma.analytics.financial.model.volatility.surface.VolatilitySurfaceInterpolator;
import com.opengamma.analytics.math.surface.Surface;

/**
* Holds Fudge builders for the volatility surface model.
*/
/* package */final class ModelVolatilitySurface {

  /**
   * Restricted constructor.
   */
  private ModelVolatilitySurface() {
  }

  //-------------------------------------------------------------------------
  /**
   * Fudge builder for {@code VolatilitySurface}.
   */
  @FudgeBuilderFor(VolatilitySurface.class)
  public static final class VolatilitySurfaceBuilder extends AbstractFudgeBuilder<VolatilitySurface> {
    private static final String SURFACE_FIELD_NAME = "sigma";

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final VolatilitySurface object) {
      serializer.addToMessageWithClassHeaders(message, SURFACE_FIELD_NAME, null, substituteObject(object.getSurface()));
    }

    @SuppressWarnings("unchecked")
    @Override
    public VolatilitySurface buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final Object surface = deserializer.fieldValueToObject(message.getByName(SURFACE_FIELD_NAME));
      return new VolatilitySurface((Surface<Double, Double, Double>) surface);
    }
  }

  @FudgeBuilderFor(BlackVolatilitySurfaceMoneyness.class)
  public static final class BlackVolatilitySurfaceMoneynessBuilder extends AbstractFudgeBuilder<BlackVolatilitySurfaceMoneyness> {
    private static final String SURFACE_FIELD_NAME = "volatility";
    private static final String FORWARD_CURVE_FIELD_NAME = "forwardCurve";

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final BlackVolatilitySurfaceMoneyness object) {
      serializer.addToMessageWithClassHeaders(message, SURFACE_FIELD_NAME, null, substituteObject(object.getSurface()));
      serializer.addToMessageWithClassHeaders(message, FORWARD_CURVE_FIELD_NAME, null, substituteObject(object.getForwardCurve()));
    }

    @SuppressWarnings("unchecked")
    @Override
    public BlackVolatilitySurfaceMoneyness buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final Object surface = deserializer.fieldValueToObject(message.getByName(SURFACE_FIELD_NAME));
      final Object forwardCurve = deserializer.fieldValueToObject(message.getByName(FORWARD_CURVE_FIELD_NAME));
      if (surface instanceof Surface) {
        return new BlackVolatilitySurfaceMoneyness((Surface<Double, Double, Double>) surface, (ForwardCurve) forwardCurve);
      }
      throw new OpenGammaRuntimeException("Expected Surface, got " + surface);
    }
  }

  @FudgeBuilderFor(BlackVolatilitySurfaceMoneynessFcnBackedByGrid.class)
  public static final class BlackVolatilitySurfaceMoneynessWithGridBuilder extends AbstractFudgeBuilder<BlackVolatilitySurfaceMoneynessFcnBackedByGrid> {
    private static final String SURFACE_FIELD_NAME = "volatility";
    private static final String FORWARD_CURVE_FIELD_NAME = "forwardCurve";
    private static final String GRID_FIELD_NAME = "gridData";
    private static final String INTERPOLATOR_FIELD_NAME = "interpolator";

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final BlackVolatilitySurfaceMoneynessFcnBackedByGrid object) {
      serializer.addToMessageWithClassHeaders(message, SURFACE_FIELD_NAME, null, substituteObject(object.getSurface()));
      serializer.addToMessageWithClassHeaders(message, FORWARD_CURVE_FIELD_NAME, null, substituteObject(object.getForwardCurve()));
      serializer.addToMessageWithClassHeaders(message, GRID_FIELD_NAME, null, object.getGridData(), SmileSurfaceDataBundle.class);
      serializer.addToMessageWithClassHeaders(message, INTERPOLATOR_FIELD_NAME, null, object.getInterpolator(), VolatilitySurfaceInterpolator.class);

    }

    @SuppressWarnings("unchecked")
    @Override
    public BlackVolatilitySurfaceMoneynessFcnBackedByGrid buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final Object surface = deserializer.fieldValueToObject(message.getByName(SURFACE_FIELD_NAME));
      final Object forwardCurve = deserializer.fieldValueToObject(message.getByName(FORWARD_CURVE_FIELD_NAME));
      final SmileSurfaceDataBundle grid = deserializer.fieldValueToObject(SmileSurfaceDataBundle.class, message.getByName(GRID_FIELD_NAME));
      final VolatilitySurfaceInterpolator interpolator = deserializer.fieldValueToObject(VolatilitySurfaceInterpolator.class, message.getByName(INTERPOLATOR_FIELD_NAME));
      if (surface instanceof Surface) {
        return new BlackVolatilitySurfaceMoneynessFcnBackedByGrid((Surface<Double, Double, Double>) surface, (ForwardCurve) forwardCurve, grid, interpolator);
      }
      throw new OpenGammaRuntimeException("Expected Surface, got " + surface);
    }

  }

  @FudgeBuilderFor(LocalVolatilitySurfaceMoneyness.class)
  public static final class LocalVolatilitySurfaceMoneynessBuilder extends AbstractFudgeBuilder<LocalVolatilitySurfaceMoneyness> {
    private static final String SURFACE_FIELD_NAME = "volatility";
    private static final String FORWARD_CURVE_FIELD_NAME = "forwardCurve";

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final LocalVolatilitySurfaceMoneyness object) {
      serializer.addToMessageWithClassHeaders(message, SURFACE_FIELD_NAME, null, substituteObject(object.getSurface()));
      serializer.addToMessageWithClassHeaders(message, FORWARD_CURVE_FIELD_NAME, null, object.getForwardCurve(), ForwardCurve.class);
    }

    @SuppressWarnings("unchecked")
    @Override
    public LocalVolatilitySurfaceMoneyness buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final Object surface = deserializer.fieldValueToObject(message.getByName(SURFACE_FIELD_NAME));
      final ForwardCurve forwardCurve = deserializer.fieldValueToObject(ForwardCurve.class, message.getByName(FORWARD_CURVE_FIELD_NAME));
      if (surface instanceof Surface) {
        return new LocalVolatilitySurfaceMoneyness((Surface<Double, Double, Double>) surface, forwardCurve);
      }
      throw new OpenGammaRuntimeException("Expected Surface, got " + surface);
    }

  }

  /**
   * Fudge builder for {@code PureImpliedVolatilitySurface}
   */
  @FudgeBuilderFor(PureImpliedVolatilitySurface.class)
  public static final class PureImpliedVolatilitySurfaceBuilder extends AbstractFudgeBuilder<PureImpliedVolatilitySurface> {
    private static final String SURFACE_FIELD_NAME = "surface";

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final PureImpliedVolatilitySurface object) {
      serializer.addToMessageWithClassHeaders(message, SURFACE_FIELD_NAME, null, substituteObject(object.getSurface()));
    }

    @SuppressWarnings("unchecked")
    @Override
    public PureImpliedVolatilitySurface buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final Object surface = deserializer.fieldValueToObject(message.getByName(SURFACE_FIELD_NAME));
      return new PureImpliedVolatilitySurface((Surface<Double, Double, Double>) surface);
    }
  }
}
TOP

Related Classes of com.opengamma.financial.analytics.fudgemsg.ModelVolatilitySurface$LocalVolatilitySurfaceMoneynessBuilder

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.