/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.financial.fudgemsg; 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.financial.model.volatility.surface.VolatilitySurface; import com.opengamma.financial.analytics.volatility.surface.FunctionalVolatilitySurfaceData; /** * Builder for converting {@link FunctionalVolatilitySurfaceData} instances to and from Fudge messages. */ @FudgeBuilderFor(FunctionalVolatilitySurfaceData.class) public class FunctionalVolatilitySurfaceDataFudgeBuilder implements FudgeBuilder<FunctionalVolatilitySurfaceData> { private static final String SURFACE_FIELD = "volatilitySurface"; private static final String X_LABEL_FIELD = "xLabel"; private static final String X_MINIMUM_FIELD = "xMinimum"; private static final String X_MAXIMUM_FIELD = "xMaximum"; private static final String X_SAMPLES_FIELD = "xSamples"; private static final String Y_LABEL_FIELD = "yLabel"; private static final String Y_MINIMUM_FIELD = "yMinimum"; private static final String Y_MAXIMUM_FIELD = "yMaximum"; private static final String Y_SAMPLES_FIELD = "ySamples"; private static final String Z_MINIMUM_FIELD = "zMinimum"; private static final String Z_MAXIMUM_FIELD = "zMaximum"; @Override public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FunctionalVolatilitySurfaceData object) { final MutableFudgeMsg message = serializer.newMessage(); serializer.addToMessageWithClassHeaders(message, SURFACE_FIELD, null, object.getSurface(), VolatilitySurface.class); message.add(X_LABEL_FIELD, object.getXLabel()); message.add(X_MINIMUM_FIELD, object.getXMinimum()); message.add(X_MAXIMUM_FIELD, object.getXMaximum()); message.add(X_SAMPLES_FIELD, object.getNXSamples()); message.add(Y_LABEL_FIELD, object.getYLabel()); message.add(Y_MINIMUM_FIELD, object.getYMinimum()); message.add(Y_MAXIMUM_FIELD, object.getYMaximum()); message.add(Y_SAMPLES_FIELD, object.getNYSamples()); message.add(Z_MINIMUM_FIELD, object.getZMinimum()); message.add(Z_MAXIMUM_FIELD, object.getZMaximum()); return message; } @Override public FunctionalVolatilitySurfaceData buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) { final VolatilitySurface surface = deserializer.fieldValueToObject(VolatilitySurface.class, message.getByName(SURFACE_FIELD)); final String xLabel = message.getString(X_LABEL_FIELD); final double xMinimum = message.getDouble(X_MINIMUM_FIELD); final double xMaximum = message.getDouble(X_MAXIMUM_FIELD); final int nX = message.getInt(X_SAMPLES_FIELD); final String yLabel = message.getString(Y_LABEL_FIELD); final double yMinimum = message.getDouble(Y_MINIMUM_FIELD); final double yMaximum = message.getDouble(Y_MAXIMUM_FIELD); final int nY = message.getInt(Y_SAMPLES_FIELD); final double zMinimum = message.getDouble(Z_MINIMUM_FIELD); final double zMaximum = message.getDouble(Z_MAXIMUM_FIELD); return new FunctionalVolatilitySurfaceData(surface, xLabel, xMinimum, xMaximum, nX, yLabel, yMinimum, yMaximum, nY, zMinimum, zMaximum); } }