Package com.opengamma.engine.fudgemsg

Source Code of com.opengamma.engine.fudgemsg.ComputedValueResultFudgeBuilder

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

}
TOP

Related Classes of com.opengamma.engine.fudgemsg.ComputedValueResultFudgeBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.