/**
* 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.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.view.ResultModelDefinition;
import com.opengamma.engine.view.ResultOutputMode;
import com.opengamma.util.ArgumentChecker;
/**
* Fudge message builder for {@link ResultModelDefinition}.
*/
@FudgeBuilderFor(ResultModelDefinition.class)
public class ResultModelDefinitionFudgeBuilder implements FudgeBuilder<ResultModelDefinition> {
private static final String AGGREGATE_POSITION_OUTPUT_MODE_FIELD = "aggregatePositionOutputMode";
private static final String POSITION_OUTPUT_MODE_FIELD = "positionOutputMode";
private static final String TRADE_OUTPUT_MODE_FIELD = "tradeOutputMode";
private static final String SECURITY_OUTPUT_MODE_FIELD = "securityOutputMode";
private static final String PRIMITIVE_OUTPUT_MODE_FIELD = "primitiveOutputMode";
@Override
public MutableFudgeMsg buildMessage(FudgeSerializer serializer, ResultModelDefinition object) {
ArgumentChecker.notNull(serializer, "Fudge Context");
MutableFudgeMsg msg = serializer.newMessage();
msg.add(AGGREGATE_POSITION_OUTPUT_MODE_FIELD, object.getAggregatePositionOutputMode().name());
msg.add(POSITION_OUTPUT_MODE_FIELD, object.getPositionOutputMode().name());
msg.add(TRADE_OUTPUT_MODE_FIELD, object.getTradeOutputMode().name());
msg.add(SECURITY_OUTPUT_MODE_FIELD, object.getSecurityOutputMode().name());
msg.add(PRIMITIVE_OUTPUT_MODE_FIELD, object.getPrimitiveOutputMode().name());
return msg;
}
@Override
public ResultModelDefinition buildObject(FudgeDeserializer deserializer, FudgeMsg message) {
ResultModelDefinition result = new ResultModelDefinition();
result.setAggregatePositionOutputMode(message.getFieldValue(ResultOutputMode.class, message.getByName(AGGREGATE_POSITION_OUTPUT_MODE_FIELD)));
result.setPositionOutputMode(message.getFieldValue(ResultOutputMode.class, message.getByName(POSITION_OUTPUT_MODE_FIELD)));
ResultOutputMode tradeMode = message.getFieldValue(ResultOutputMode.class, message.getByName(TRADE_OUTPUT_MODE_FIELD)); // added later, so handle null
result.setTradeOutputMode(tradeMode == null ? ResultOutputMode.TERMINAL_OUTPUTS : tradeMode);
result.setSecurityOutputMode(message.getFieldValue(ResultOutputMode.class, message.getByName(SECURITY_OUTPUT_MODE_FIELD)));
result.setPrimitiveOutputMode(message.getFieldValue(ResultOutputMode.class, message.getByName(PRIMITIVE_OUTPUT_MODE_FIELD)));
return result;
}
}