/** * Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies * * Please see distribution for license. */ package com.opengamma.engine.fudgemsg; import java.util.Set; 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.google.common.collect.Sets; import com.opengamma.engine.calcnode.InvocationResult; import com.opengamma.engine.exec.DefaultAggregatedExecutionLog; import com.opengamma.engine.value.ComputedValueResult; import com.opengamma.engine.value.ValueSpecification; import com.opengamma.engine.view.AggregatedExecutionLog; /** * Fudge message builder for {@link ComputedValueResult}. */ @FudgeBuilderFor(ComputedValueResult.class) public class ComputedValueResultFudgeBuilder implements FudgeBuilder<ComputedValueResult> { private static final String AGGREGATED_EXECUTION_LOG_FIELD = "log"; private static final String COMPUTE_NODE_ID_FIELD = "computeNodeId"; private static final String MISSING_INPUTS_FIELD_NAME = "missingInputs"; private static final String INVOCATION_RESULT_FIELD_NAME = "result"; @Override public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final ComputedValueResult object) { final MutableFudgeMsg msg = serializer.newMessage(); ComputedValueFudgeBuilder.appendToMsg(serializer, object, msg); serializer.addToMessage(msg, AGGREGATED_EXECUTION_LOG_FIELD, null, object.getAggregatedExecutionLog()); if (object.getComputeNodeId() != null) { msg.add(COMPUTE_NODE_ID_FIELD, object.getComputeNodeId()); } if (object.getMissingInputs() != null) { final MutableFudgeMsg missingInputs = msg.addSubMessage(MISSING_INPUTS_FIELD_NAME, null); for (final ValueSpecification missingInput : object.getMissingInputs()) { serializer.addToMessage(missingInputs, null, null, missingInput); } } if (object.getInvocationResult() != null) { msg.add(INVOCATION_RESULT_FIELD_NAME, object.getInvocationResult().name()); } return msg; } @Override public ComputedValueResult buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) { final ValueSpecification valueSpec = ComputedValueFudgeBuilder.getValueSpecification(deserializer, msg); final Object valueObject = ComputedValueFudgeBuilder.getValueObject(deserializer, msg); final AggregatedExecutionLog aggregatedExecutionLog = deserializer.fieldValueToObject(DefaultAggregatedExecutionLog.class, msg.getByName(AGGREGATED_EXECUTION_LOG_FIELD)); final String computeNodeId = msg.getString(COMPUTE_NODE_ID_FIELD); final FudgeMsg missingInputsMsg = msg.getMessage(MISSING_INPUTS_FIELD_NAME); final Set<ValueSpecification> missingInputs; if (missingInputsMsg != null) { missingInputs = Sets.newHashSetWithExpectedSize(missingInputsMsg.getNumFields()); for (final FudgeField missingInput : missingInputsMsg) { missingInputs.add(deserializer.fieldValueToObject(ValueSpecification.class, missingInput)); } } else { missingInputs = null; } final String invocationResultName = msg.getString(INVOCATION_RESULT_FIELD_NAME); final InvocationResult invocationResult = invocationResultName != null ? InvocationResult.valueOf(invocationResultName) : null; return new ComputedValueResult(valueSpec, valueObject, aggregatedExecutionLog, computeNodeId, missingInputs, invocationResult); } }