/**
* 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.target.ComputationTargetReference;
import com.opengamma.engine.value.ValueProperties;
import com.opengamma.engine.value.ValueRequirement;
/**
*
*/
@FudgeBuilderFor(ValueRequirement.class)
public class ValueRequirementFudgeBuilder implements FudgeBuilder<ValueRequirement> {
/**
* Fudge field name.
*/
public static final String VALUE_NAME_FIELD_NAME = "valueName";
/**
* Fudge field name.
*/
public static final String CONSTRAINTS_FIELD_NAME = "constraints";
@Override
public MutableFudgeMsg buildMessage(FudgeSerializer serializer, ValueRequirement object) {
MutableFudgeMsg msg = serializer.newMessage();
String valueName = object.getValueName();
msg.add(VALUE_NAME_FIELD_NAME, valueName);
ComputationTargetReferenceFudgeBuilder.buildMessageImpl(serializer, msg, object.getTargetReference());
if (!object.getConstraints().isEmpty()) {
serializer.addToMessage(msg, CONSTRAINTS_FIELD_NAME, null, object.getConstraints());
}
return msg;
}
@Override
public ValueRequirement buildObject(FudgeDeserializer deserializer, FudgeMsg message) {
String valueName = message.getString(VALUE_NAME_FIELD_NAME);
Validate.notNull(valueName, "Fudge message is not a ValueRequirement - field 'valueName' is not present");
ComputationTargetReference targetReference = ComputationTargetReferenceFudgeBuilder.buildObjectImpl(deserializer, message);
FudgeField constraints = message.getByName(CONSTRAINTS_FIELD_NAME);
if (constraints != null) {
return new ValueRequirement(valueName, targetReference, deserializer.fieldValueToObject(ValueProperties.class, constraints));
} else {
return new ValueRequirement(valueName, targetReference);
}
}
}