/** * 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.ArrayList; import java.util.EnumSet; import java.util.List; 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 org.fudgemsg.types.IndicatorType; import org.fudgemsg.wire.types.FudgeWireType; import com.opengamma.engine.exec.DefaultAggregatedExecutionLog; import com.opengamma.engine.view.ExecutionLogWithContext; import com.opengamma.util.log.LogLevel; /** * Fudge message builder for {@link DefaultAggregatedExecutionLog}. */ @FudgeBuilderFor(DefaultAggregatedExecutionLog.class) public class DefaultAggregatedExecutionLogFudgeBuilder implements FudgeBuilder<DefaultAggregatedExecutionLog> { private static final String LOG_LEVEL_FIELD_NAME = "logLevel"; private static final String EXECUTION_LOGS_COLLECTED_FIELD_NAME = "executionLogsCollected"; private static final String EXECUTION_LOG_FIELD_NAME = "executionLog"; private static final String EMPTY_ROOT_FIELD_NAME = "emptyRoot"; @Override public MutableFudgeMsg buildMessage(FudgeSerializer serializer, DefaultAggregatedExecutionLog object) { MutableFudgeMsg msg = serializer.newMessage(); if (!object.getLogLevels().isEmpty()) { for (LogLevel logLevel : object.getLogLevels()) { serializer.addToMessage(msg, LOG_LEVEL_FIELD_NAME, null, logLevel.name()); } } if (object.getLogs() != null) { msg.add(EXECUTION_LOGS_COLLECTED_FIELD_NAME, null, FudgeWireType.INDICATOR, IndicatorType.INSTANCE); if (object.getRootLog() == null) { msg.add(EMPTY_ROOT_FIELD_NAME, null, FudgeWireType.INDICATOR, IndicatorType.INSTANCE); } for (ExecutionLogWithContext log : object.getLogs()) { serializer.addToMessage(msg, EXECUTION_LOG_FIELD_NAME, null, log); } } return msg; } @Override public DefaultAggregatedExecutionLog buildObject(FudgeDeserializer deserializer, FudgeMsg message) { final EnumSet<LogLevel> logLevels = EnumSet.noneOf(LogLevel.class); for (FudgeField levelField : message.getAllByName(LOG_LEVEL_FIELD_NAME)) { logLevels.add(LogLevel.valueOf((String) levelField.getValue())); } final boolean executionLogsCollected = message.hasField(EXECUTION_LOGS_COLLECTED_FIELD_NAME); final boolean emptyRoot = message.hasField(EMPTY_ROOT_FIELD_NAME); final List<ExecutionLogWithContext> logs; if (executionLogsCollected) { logs = new ArrayList<ExecutionLogWithContext>(); for (FudgeField logField : message.getAllByName(EXECUTION_LOG_FIELD_NAME)) { logs.add(deserializer.fieldValueToObject(ExecutionLogWithContext.class, logField)); } } else { logs = null; } return new DefaultAggregatedExecutionLog(logLevels, logs, emptyRoot); } }