/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.component;
import java.net.URI;
import java.util.ArrayList;
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.joda.beans.BeanBuilder;
import org.threeten.bp.Instant;
import com.opengamma.util.fudgemsg.AbstractFudgeBuilder;
/**
* A Fudge builder for {@code ComponentServer}.
* <p>
* This converts the data to and from the Fudge message protocol format.
*/
@FudgeBuilderFor(ComponentServer.class)
public class ComponentServerFudgeBuilder extends AbstractFudgeBuilder implements FudgeBuilder<ComponentServer> {
/** Field name. */
public static final String URI_FIELD_NAME = "uri";
/** Field name. */
public static final String VERSION_FIELD_NAME = "version";
/** Field name. */
public static final String BUILD_FIELD_NAME = "build";
/** Field name. */
public static final String CURRENT_INSTANT_FIELD_NAME = "currentInstant";
/** Field name. */
public static final String INFOS_FIELD_NAME = "infos";
@Override
public MutableFudgeMsg buildMessage(FudgeSerializer serializer, ComponentServer object) {
final MutableFudgeMsg msg = serializer.newMessage();
ComponentServerFudgeBuilder.toFudgeMsg(serializer, object, msg);
return msg;
}
public static void toFudgeMsg(FudgeSerializer serializer, ComponentServer object, final MutableFudgeMsg msg) {
MutableFudgeMsg infos = serializer.newMessage();
if (object.getUri() != null) {
addToMessage(msg, URI_FIELD_NAME, object.getUri().toString());
}
if (object.getUri() != null) {
addToMessage(msg, VERSION_FIELD_NAME, object.getVersion());
}
if (object.getUri() != null) {
addToMessage(msg, BUILD_FIELD_NAME, object.getBuild());
}
if (object.getUri() != null) {
addToMessage(msg, CURRENT_INSTANT_FIELD_NAME, object.getCurrentInstant());
}
for (ComponentInfo info : object.getComponentInfos()) {
infos.add(null, null, ComponentInfoFudgeBuilder.toFudgeMsg(serializer, info));
}
addToMessage(msg, INFOS_FIELD_NAME, infos);
}
@Override
public ComponentServer buildObject(FudgeDeserializer deserializer, FudgeMsg msg) {
BeanBuilder<? extends ComponentServer> builder = ComponentServer.meta().builder();
ComponentServerFudgeBuilder.fromFudgeMsg(deserializer, msg, builder);
return builder.build();
}
public static void fromFudgeMsg(FudgeDeserializer deserializer, FudgeMsg msg, BeanBuilder<? extends ComponentServer> builder) {
String uriStr = msg.getString(URI_FIELD_NAME);
if (uriStr != null) {
builder.set(ComponentServer.meta().uri(), URI.create(uriStr));
}
String versionStr = msg.getString(VERSION_FIELD_NAME);
if (versionStr != null) {
builder.set(ComponentServer.meta().version(), versionStr);
}
String buildStr = msg.getString(BUILD_FIELD_NAME);
if (buildStr != null) {
builder.set(ComponentServer.meta().build(), buildStr);
}
Instant instant = msg.getValue(Instant.class, CURRENT_INSTANT_FIELD_NAME);
if (instant != null) {
builder.set(ComponentServer.meta().currentInstant(), instant);
}
FudgeMsg infoMsgs = msg.getMessage(INFOS_FIELD_NAME);
List<ComponentInfo> infos = new ArrayList<>();
for (FudgeField field : infoMsgs) {
if (field.getValue() instanceof FudgeMsg) {
ComponentInfo info = ComponentInfoFudgeBuilder.fromFudgeMsg(deserializer, (FudgeMsg) field.getValue());
if (info.getType() != ClassNotFoundException.class) {
infos.add(info);
}
}
}
builder.set(ComponentServer.meta().componentInfos(), infos);
}
}