Package com.opengamma.financial.analytics.fudgemsg

Source Code of com.opengamma.financial.analytics.fudgemsg.MathSurface$FunctionalDoublesSurfaceBuilder

/**
* 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.math.function.Function;
import com.opengamma.analytics.math.interpolation.Interpolator2D;
import com.opengamma.analytics.math.surface.ConstantDoublesSurface;
import com.opengamma.analytics.math.surface.FunctionalDoublesSurface;
import com.opengamma.analytics.math.surface.InterpolatedDoublesSurface;

/**
*
*/
final class MathSurface {

  private MathSurface() {
  }

  /**
   * Fudge builder for {@code ConstantDoublesSurface}
   */
  @FudgeBuilderFor(ConstantDoublesSurface.class)
  public static final class ConstantDoublesSurfaceBuilder extends AbstractFudgeBuilder<ConstantDoublesSurface> {
    private static final String Z_VALUE_FIELD_NAME = "z value";
    private static final String SURFACE_NAME_FIELD_NAME = "surface name";

    @Override
    public ConstantDoublesSurface buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      return ConstantDoublesSurface.from(message.getFieldValue(Double.class, message.getByName(Z_VALUE_FIELD_NAME)), message.getFieldValue(String.class, message.getByName(SURFACE_NAME_FIELD_NAME)));
    }

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final ConstantDoublesSurface object) {
      message.add(Z_VALUE_FIELD_NAME, null, object.getZValue(0., 0.));
      message.add(SURFACE_NAME_FIELD_NAME, null, object.getName());
    }

  }

  /**
   * Fudge builder for {@code InterpolatedDoublesSurface}
   */
  @FudgeBuilderFor(InterpolatedDoublesSurface.class)
  public static final class InterpolatedDoublesSurfaceBuilder extends AbstractFudgeBuilder<InterpolatedDoublesSurface> {
    private static final String X_DATA_FIELD_NAME = "x data";
    private static final String Y_DATA_FIELD_NAME = "y data";
    private static final String Z_DATA_FIELD_NAME = "z data";
    private static final String INTERPOLATOR_FIELD_NAME = "interpolator";
    private static final String SURFACE_NAME_FIELD_NAME = "surface name";

    @Override
    public InterpolatedDoublesSurface buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final double[] x = deserializer.fieldValueToObject(double[].class, message.getByName(X_DATA_FIELD_NAME));
      final double[] y = deserializer.fieldValueToObject(double[].class, message.getByName(Y_DATA_FIELD_NAME));
      final double[] z = deserializer.fieldValueToObject(double[].class, message.getByName(Z_DATA_FIELD_NAME));
      final Interpolator2D interpolator = deserializer.fieldValueToObject(Interpolator2D.class, message.getByName(INTERPOLATOR_FIELD_NAME));
      final String name = deserializer.fieldValueToObject(String.class, message.getByName(SURFACE_NAME_FIELD_NAME));
      return InterpolatedDoublesSurface.from(x, y, z, interpolator, name);
    }

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final InterpolatedDoublesSurface object) {
      serializer.addToMessage(message, X_DATA_FIELD_NAME, null, object.getXDataAsPrimitive());
      serializer.addToMessage(message, Y_DATA_FIELD_NAME, null, object.getYDataAsPrimitive());
      serializer.addToMessage(message, Z_DATA_FIELD_NAME, null, object.getZDataAsPrimitive());
      serializer.addToMessage(message, INTERPOLATOR_FIELD_NAME, null, object.getInterpolator());
      serializer.addToMessage(message, SURFACE_NAME_FIELD_NAME, null, object.getName());
    }
  }

  @FudgeBuilderFor(FunctionalDoublesSurface.class)
  public static final class FunctionalDoublesSurfaceBuilder extends AbstractFudgeBuilder<FunctionalDoublesSurface> {
    private static final String SURFACE_FUNCTION_FIELD_NAME = "function";
    private static final String SURFACE_NAME_FIELD_NAME = "name";

    @SuppressWarnings("unchecked")
    @Override
    public FunctionalDoublesSurface buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
      final String name = deserializer.fieldValueToObject(String.class, message.getByName(SURFACE_NAME_FIELD_NAME));
      final Object function = deserializer.fieldValueToObject(message.getByName(SURFACE_FUNCTION_FIELD_NAME));
      if (function instanceof Function) {
        return FunctionalDoublesSurface.from((Function) function, name);
      }
      throw new OpenGammaRuntimeException("Expected serialized Function, got " + function);
    }

    @Override
    protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final FunctionalDoublesSurface object) {
      serializer.addToMessage(message, SURFACE_NAME_FIELD_NAME, null, object.getName());
      serializer.addToMessage(message, SURFACE_FUNCTION_FIELD_NAME, null, substituteObject(object.getFunction()));
      return;
    }

  }
}
TOP

Related Classes of com.opengamma.financial.analytics.fudgemsg.MathSurface$FunctionalDoublesSurfaceBuilder

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.