/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.fudgemsg;
import org.apache.commons.lang.Validate;
import org.fudgemsg.FudgeField;
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.engine.value.ComputedValue;
import com.opengamma.engine.value.ValueSpecification;
import com.opengamma.util.fudgemsg.WriteReplaceHelper;
/**
* Fudge message builder for {@code ComputedValue}.
*/
@FudgeBuilderFor(ComputedValue.class)
public class ComputedValueFudgeBuilder implements FudgeBuilder<ComputedValue> {
/**
* Fudge field name.
*/
private static final String SPECIFICATION_KEY = "specification";
/**
* Fudge field name.
*/
private static final String VALUE_KEY = "value";
@Override
public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final ComputedValue object) {
final MutableFudgeMsg msg = serializer.newMessage();
appendToMsg(serializer, object, msg);
return msg;
}
/*package*/static void appendToMsg(final FudgeSerializer serializer, final ComputedValue object, final MutableFudgeMsg msg) {
final ValueSpecification specification = object.getSpecification();
if (specification != null) {
serializer.addToMessage(msg, SPECIFICATION_KEY, null, specification);
}
final Object value = object.getValue();
if (value != null) {
serializer.addToMessageWithClassHeaders(msg, VALUE_KEY, null, WriteReplaceHelper.writeReplace(value));
}
}
@Override
public ComputedValue buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
final ValueSpecification valueSpec = getValueSpecification(deserializer, msg);
final Object valueObject = getValueObject(deserializer, msg);
return new ComputedValue(valueSpec, valueObject);
}
/*package*/static ValueSpecification getValueSpecification(final FudgeDeserializer deserializer, final FudgeMsg msg) {
final FudgeField fudgeField = msg.getByName(SPECIFICATION_KEY);
Validate.notNull(fudgeField, "Fudge message is not a ComputedValue - field 'specification' is not present");
final ValueSpecification valueSpec = deserializer.fieldValueToObject(ValueSpecification.class, fudgeField);
return valueSpec;
}
/*package*/static Object getValueObject(final FudgeDeserializer deserializer, final FudgeMsg msg) {
FudgeField fudgeField;
fudgeField = msg.getByName(VALUE_KEY);
if (fudgeField == null) {
return null;
}
//Validate.notNull(fudgeField, "Fudge message is not a ComputedValue - field 'value' is not present");
final Object valueObject = deserializer.fieldValueToObject(fudgeField);
return valueObject;
}
}