/** * Copyright (C) 2009 - 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.Collection; 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.FudgeDeserializer; import org.fudgemsg.mapping.FudgeSerializer; import org.fudgemsg.mapping.GenericFudgeBuilderFor; import org.threeten.bp.Instant; import com.opengamma.core.position.Portfolio; import com.opengamma.engine.view.ViewDefinition; import com.opengamma.engine.view.compilation.CompiledViewCalculationConfiguration; import com.opengamma.engine.view.compilation.CompiledViewDefinition; import com.opengamma.engine.view.compilation.CompiledViewDefinitionImpl; import com.opengamma.id.VersionCorrection; /** * Fudge message builder for {@link CompiledViewDefinition} */ @GenericFudgeBuilderFor(CompiledViewDefinition.class) public class CompiledViewDefinitionFudgeBuilder implements FudgeBuilder<CompiledViewDefinition> { private static final String VERSION_CORRECTION_FIELD = "versionCorrection"; private static final String COMPILATION_IDENTIFIER_FIELD = "compilationId"; private static final String VIEW_DEFINITION_FIELD = "viewDefinition"; private static final String PORTFOLIO_FIELD = "portfolio"; private static final String COMPILED_CALCULATION_CONFIGURATIONS_FIELD = "compiledCalculationConfigurations"; private static final String EARLIEST_VALIDITY_FIELD = "earliestValidity"; private static final String LATEST_VALIDITY_FIELD = "latestValidity"; @Override public MutableFudgeMsg buildMessage(FudgeSerializer serializer, CompiledViewDefinition object) { MutableFudgeMsg msg = serializer.newMessage(); serializer.addToMessage(msg, VERSION_CORRECTION_FIELD, null, object.getResolverVersionCorrection()); serializer.addToMessage(msg, COMPILATION_IDENTIFIER_FIELD, null, object.getCompilationIdentifier()); serializer.addToMessage(msg, VIEW_DEFINITION_FIELD, null, object.getViewDefinition()); serializer.addToMessage(msg, PORTFOLIO_FIELD, null, object.getPortfolio()); // Serialise manually for more control on deserialisation for (CompiledViewCalculationConfiguration compiledCalculationConfiguration : object.getCompiledCalculationConfigurations()) { serializer.addToMessage(msg, COMPILED_CALCULATION_CONFIGURATIONS_FIELD, null, compiledCalculationConfiguration); } serializer.addToMessage(msg, EARLIEST_VALIDITY_FIELD, null, object.getValidFrom()); serializer.addToMessage(msg, LATEST_VALIDITY_FIELD, null, object.getValidTo()); return msg; } @Override public CompiledViewDefinition buildObject(FudgeDeserializer deserializer, FudgeMsg message) { VersionCorrection versionCorrection = deserializer.fieldValueToObject(VersionCorrection.class, message.getByName(VERSION_CORRECTION_FIELD)); String compilationId = message.getString(COMPILATION_IDENTIFIER_FIELD); ViewDefinition viewDefinition = deserializer.fieldValueToObject(ViewDefinition.class, message.getByName(VIEW_DEFINITION_FIELD)); FudgeField portfolioField = message.getByName(PORTFOLIO_FIELD); Portfolio portfolio = portfolioField != null ? deserializer.fieldValueToObject(Portfolio.class, portfolioField) : null; // Deserialise each instance specifically into the required type Collection<CompiledViewCalculationConfiguration> compiledCalculationConfigurations = new ArrayList<CompiledViewCalculationConfiguration>(); List<FudgeField> calcConfigFields = message.getAllByName(COMPILED_CALCULATION_CONFIGURATIONS_FIELD); for (FudgeField field : calcConfigFields) { compiledCalculationConfigurations.add(deserializer.fieldValueToObject(CompiledViewCalculationConfiguration.class, field)); } FudgeField earliestValidityField = message.getByName(EARLIEST_VALIDITY_FIELD); Instant earliestValidity = earliestValidityField != null ? deserializer.fieldValueToObject(Instant.class, earliestValidityField) : null; FudgeField latestValidityField = message.getByName(LATEST_VALIDITY_FIELD); Instant latestValidity = latestValidityField != null ? deserializer.fieldValueToObject(Instant.class, latestValidityField) : null; return new CompiledViewDefinitionImpl(versionCorrection, compilationId, viewDefinition, portfolio, compiledCalculationConfigurations, earliestValidity, latestValidity); } }