/** * 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.Collection; 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.opengamma.engine.function.FunctionParameters; import com.opengamma.engine.function.blacklist.FunctionBlacklistRule; import com.opengamma.engine.target.ComputationTargetReference; import com.opengamma.engine.value.ValueSpecification; /** * Fudge builder for {@link FunctionBlacklistRule}. * * <pre> * message FunctionBlacklistRule { * optional string functionId; // function identifier to match on * optional FunctionParameters functionParameters; // function parameters to match on * optional ComputationTargetSpecification target; // target to match on * optional ValueSpecification[] inputs; // inputs to match on * optional ValueSpecification[] outputs; // outputs to match on * } * </pre> */ @FudgeBuilderFor(FunctionBlacklistRule.class) public class FunctionBlacklistRuleFudgeBuilder implements FudgeBuilder<FunctionBlacklistRule> { private static final String FUNCTION_ID_FIELD = "functionId"; private static final String FUNCTION_PARAMETERS_FIELD = "functionParameters"; private static final String TARGET_FIELD = "target"; private static final String INPUTS_FIELD = "inputs"; private static final String OUTPUTS_FIELD = "outputs"; @Override public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FunctionBlacklistRule object) { final MutableFudgeMsg msg = serializer.newMessage(); serializer.addToMessage(msg, FUNCTION_ID_FIELD, null, object.getFunctionIdentifier()); serializer.addToMessageWithClassHeaders(msg, FUNCTION_PARAMETERS_FIELD, null, object.getFunctionParameters(), FunctionParameters.class); serializer.addToMessage(msg, TARGET_FIELD, null, object.getTarget()); if (object.getInputs() != null) { final MutableFudgeMsg inputs = msg.addSubMessage(INPUTS_FIELD, null); for (ValueSpecification input : object.getInputs()) { serializer.addToMessage(inputs, null, null, input); } } if (object.getOutputs() != null) { final MutableFudgeMsg outputs = msg.addSubMessage(OUTPUTS_FIELD, null); for (ValueSpecification output : object.getOutputs()) { serializer.addToMessage(outputs, null, null, output); } } return msg; } @Override public FunctionBlacklistRule buildObject(final FudgeDeserializer deserializer, final FudgeMsg message) { final FunctionBlacklistRule rule = new FunctionBlacklistRule(); FudgeField field = message.getByName(FUNCTION_ID_FIELD); if (field != null) { rule.setFunctionIdentifier(message.getFieldValue(String.class, field)); } field = message.getByName(FUNCTION_PARAMETERS_FIELD); if (field != null) { rule.setFunctionParameters(deserializer.fieldValueToObject(FunctionParameters.class, field)); } field = message.getByName(TARGET_FIELD); if (field != null) { rule.setTarget(deserializer.fieldValueToObject(ComputationTargetReference.class, field).getSpecification()); } field = message.getByName(INPUTS_FIELD); if (field != null) { final FudgeMsg fieldValue = message.getFieldValue(FudgeMsg.class, field); final Collection<ValueSpecification> inputs = new ArrayList<ValueSpecification>(fieldValue.getNumFields()); for (FudgeField input : fieldValue) { inputs.add(deserializer.fieldValueToObject(ValueSpecification.class, input)); } rule.setInputs(inputs); } field = message.getByName(OUTPUTS_FIELD); if (field != null) { final FudgeMsg fieldValue = message.getFieldValue(FudgeMsg.class, field); final Collection<ValueSpecification> outputs = new ArrayList<ValueSpecification>(fieldValue.getNumFields()); for (FudgeField output : fieldValue) { outputs.add(deserializer.fieldValueToObject(ValueSpecification.class, output)); } rule.setOutputs(outputs); } return rule; } }