com.opengamma.engine.fudgemsg.ComputedValueResultFudgeBuilder.java Source code

Java tutorial

Introduction

Here is the source code for com.opengamma.engine.fudgemsg.ComputedValueResultFudgeBuilder.java

Source

/**
 * 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);
    }

}