/** * 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.FudgeField; import org.fudgemsg.FudgeMsg; import org.fudgemsg.MutableFudgeMsg; import org.fudgemsg.mapping.FudgeBuilder; import org.fudgemsg.mapping.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.fudgemsg.mapping.GenericFudgeBuilderFor; import com.opengamma.engine.value.ComputedValue; import com.opengamma.engine.view.ViewComputationResultModel; import com.opengamma.engine.view.impl.InMemoryViewComputationResultModel; import com.opengamma.engine.view.impl.InMemoryViewResultModel; /** */ @GenericFudgeBuilderFor(ViewComputationResultModel.class) public class ViewComputationResultModelFudgeBuilder extends ViewResultModelFudgeBuilder implements FudgeBuilder<ViewComputationResultModel> { private static final String FIELD_LIVEDATA = "liveData"; @Override public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final ViewComputationResultModel resultModel) { final MutableFudgeMsg message = ViewResultModelFudgeBuilder.createResultModelMessage(serializer, resultModel); // Prevent subclass headers from being added to the message later, ensuring that this builder will be used for deserialization FudgeSerializer.addClassHeader(message, ViewComputationResultModel.class); final MutableFudgeMsg liveDataMsg = message.addSubMessage(FIELD_LIVEDATA, null); for (final ComputedValue value : resultModel.getAllMarketData()) { serializer.addToMessage(liveDataMsg, null, 1, value); } return message; } @Override public ViewComputationResultModel buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) { final InMemoryViewComputationResultModel resultModel = (InMemoryViewComputationResultModel) bootstrapCommonDataFromMessage(deserializer, message); for (final FudgeField field : message.getFieldValue(FudgeMsg.class, message.getByName(FIELD_LIVEDATA))) { final ComputedValue liveData = deserializer.fieldValueToObject(ComputedValue.class, field); resultModel.addMarketData(liveData); } return resultModel; } @Override protected InMemoryViewResultModel constructImpl() { return new InMemoryViewComputationResultModel(); } }