/** * 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.LinkedList; 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 com.google.common.collect.Lists; import com.opengamma.engine.function.config.FunctionConfigurationDefinition; import com.opengamma.engine.function.config.ParameterizedFunctionConfiguration; import com.opengamma.engine.function.config.StaticFunctionConfiguration; /** * Fudge message builder for {@link FunctionConfigurationDefinition}. */ @FudgeBuilderFor(FunctionConfigurationDefinition.class) public class FunctionConfigurationDefinitionFudgeBuilder implements FudgeBuilder<FunctionConfigurationDefinition> { private static final String NAME_FIELD = "name"; private static final String FUNCTION_CONFIG_DEFINITION_FIELD = "configName"; private static final String STATIC_FUNCTION_FIELD = "staticFunction"; private static final String PARAMETERIZED_FUNCTION_FIELD = "parameterizedFunction"; @Override public MutableFudgeMsg buildMessage(FudgeSerializer serializer, FunctionConfigurationDefinition functionConfig) { MutableFudgeMsg message = serializer.newMessage(); message.add(NAME_FIELD, null, functionConfig.getName()); List<String> configurationDefinitions = functionConfig.getFunctionConfigurationDefinitions(); if (!configurationDefinitions.isEmpty()) { for (String functionConfigName : configurationDefinitions) { message.add(FUNCTION_CONFIG_DEFINITION_FIELD, null, functionConfigName); } } List<StaticFunctionConfiguration> staticFunctions = functionConfig.getStaticFunctions(); if (!staticFunctions.isEmpty()) { for (StaticFunctionConfiguration staticFunctionConfiguration : staticFunctions) { message.add(STATIC_FUNCTION_FIELD, null, staticFunctionConfiguration.getDefinitionClassName()); } } List<ParameterizedFunctionConfiguration> parameterizedFunctions = functionConfig.getParameterizedFunctions(); if (!parameterizedFunctions.isEmpty()) { for (ParameterizedFunctionConfiguration configuration : parameterizedFunctions) { MutableFudgeMsg parametizedMsg = serializer.newMessage(); parametizedMsg.add("func", null, configuration.getDefinitionClassName()); for (String parameter : configuration.getParameter()) { parametizedMsg.add("param", null, parameter); } message.add(PARAMETERIZED_FUNCTION_FIELD, null, parametizedMsg); } } return message; } @Override public FunctionConfigurationDefinition buildObject(FudgeDeserializer deserializer, FudgeMsg message) { final String name = message.getString(NAME_FIELD); final List<String> functionConfigurationDefinitions = new LinkedList<String>(); final List<StaticFunctionConfiguration> staticFunctions = new LinkedList<StaticFunctionConfiguration>(); final List<ParameterizedFunctionConfiguration> parameterizedFunctions = new LinkedList<ParameterizedFunctionConfiguration>(); if (message.hasField(FUNCTION_CONFIG_DEFINITION_FIELD)) { List<FudgeField> allConfigs = message.getAllByName(FUNCTION_CONFIG_DEFINITION_FIELD); for (FudgeField fudgeField : allConfigs) { functionConfigurationDefinitions.add((String) fudgeField.getValue()); } } if (message.hasField(STATIC_FUNCTION_FIELD)) { List<FudgeField> allStaticFunctions = message.getAllByName(STATIC_FUNCTION_FIELD); for (FudgeField fudgeField : allStaticFunctions) { staticFunctions.add(new StaticFunctionConfiguration((String) fudgeField.getValue())); } } if (message.hasField(PARAMETERIZED_FUNCTION_FIELD)) { List<FudgeField> allConfigs = message.getAllByName(PARAMETERIZED_FUNCTION_FIELD); for (FudgeField configField : allConfigs) { FudgeMsg parameterizedMsg = (FudgeMsg) configField.getValue(); String definitionClassName = parameterizedMsg.getString("func"); List<FudgeField> parameterFields = parameterizedMsg.getAllByName("param"); List<String> parameters = Lists.newArrayList(); for (FudgeField parameterField : parameterFields) { parameters.add((String) parameterField.getValue()); } parameterizedFunctions.add(new ParameterizedFunctionConfiguration(definitionClassName, parameters)); } } return new FunctionConfigurationDefinition(name, functionConfigurationDefinitions, staticFunctions, parameterizedFunctions); } }