/**
* Copyright (C) 2012 - 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.analytics.financial.model.interestrate.curve.ForwardCurve;
import com.opengamma.analytics.financial.model.volatility.smile.fitting.sabr.ForexSmileDeltaSurfaceDataBundle;
import com.opengamma.analytics.financial.model.volatility.smile.fitting.sabr.StandardSmileSurfaceDataBundle;
/**
*
*/
/* package */final class FittedVolatilitySurfaceBuilder {
private FittedVolatilitySurfaceBuilder() {
}
@FudgeBuilderFor(StandardSmileSurfaceDataBundle.class)
public static final class StandardSmileSurfaceDataBundleBuilder extends AbstractFudgeBuilder<StandardSmileSurfaceDataBundle> {
private static final String FORWARD_CURVE_FIELD_NAME = "forwardCurveField";
private static final String EXPIRIES_FIELD_NAME = "expiriesField";
private static final String STRIKES_FIELD_NAME = "strikesField";
private static final String VOLS_FIELD_NAME = "volsField";
@Override
public StandardSmileSurfaceDataBundle buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
final ForwardCurve forwardCurve = deserializer.fieldValueToObject(ForwardCurve.class, message.getByName(FORWARD_CURVE_FIELD_NAME));
final double[] expiries = deserializer.fieldValueToObject(double[].class, message.getByName(EXPIRIES_FIELD_NAME));
final double[][] strikes = deserializer.fieldValueToObject(double[][].class, message.getByName(STRIKES_FIELD_NAME));
final double[][] vols = deserializer.fieldValueToObject(double[][].class, message.getByName(VOLS_FIELD_NAME));
return new StandardSmileSurfaceDataBundle(forwardCurve, expiries, strikes, vols);
}
@Override
protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final StandardSmileSurfaceDataBundle object) {
serializer.addToMessage(message, FORWARD_CURVE_FIELD_NAME, null, object.getForwardCurve());
serializer.addToMessage(message, EXPIRIES_FIELD_NAME, null, object.getExpiries());
serializer.addToMessage(message, STRIKES_FIELD_NAME, null, object.getStrikes());
serializer.addToMessage(message, VOLS_FIELD_NAME, null, object.getVolatilities());
}
}
@FudgeBuilderFor(ForexSmileDeltaSurfaceDataBundle.class)
public static final class ForexSmileDeltaSurfaceDataBundleBuilder extends AbstractFudgeBuilder<ForexSmileDeltaSurfaceDataBundle> {
private static final String FORWARD_CURVE_FIELD_NAME = "forwardCurveField";
private static final String EXPIRIES_FIELD_NAME = "expiriesField";
private static final String STRIKES_FIELD_NAME = "strikesField";
private static final String VOLS_FIELD_NAME = "volsField";
@Override
public ForexSmileDeltaSurfaceDataBundle buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) {
final ForwardCurve forwardCurve = deserializer.fieldValueToObject(ForwardCurve.class, message.getByName(FORWARD_CURVE_FIELD_NAME));
final double[] expiries = deserializer.fieldValueToObject(double[].class, message.getByName(EXPIRIES_FIELD_NAME));
final double[][] strikes = deserializer.fieldValueToObject(double[][].class, message.getByName(STRIKES_FIELD_NAME));
final double[][] vols = deserializer.fieldValueToObject(double[][].class, message.getByName(VOLS_FIELD_NAME));
return new ForexSmileDeltaSurfaceDataBundle(forwardCurve, expiries, strikes, vols, true);
}
@Override
protected void buildMessage(final FudgeSerializer serializer, final MutableFudgeMsg message, final ForexSmileDeltaSurfaceDataBundle object) {
serializer.addToMessage(message, FORWARD_CURVE_FIELD_NAME, null, object.getForwardCurve());
serializer.addToMessage(message, EXPIRIES_FIELD_NAME, null, object.getExpiries());
serializer.addToMessage(message, STRIKES_FIELD_NAME, null, object.getStrikes());
serializer.addToMessage(message, VOLS_FIELD_NAME, null, object.getVolatilities());
}
}
}