/** * 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.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.mapping.GenericFudgeBuilderFor; import org.fudgemsg.types.IndicatorType; import org.fudgemsg.wire.types.FudgeWireType; import com.opengamma.engine.function.blacklist.DefaultFunctionBlacklistPolicy; import com.opengamma.engine.function.blacklist.FunctionBlacklistPolicy; import com.opengamma.engine.function.blacklist.FunctionBlacklistPolicy.Entry; import com.opengamma.id.UniqueId; import com.opengamma.id.UniqueIdFudgeSecondaryType; /** * Fudge builder for {@link FunctionBlacklistPolicy}. * * <pre> * message FunctionBlacklistPolicy { * required UniqueId uniqueId; // unique identifier * required string name; // symbolic name * required long ttl; // default entry activation period * repeated Entry entry; // entries * * message Entry { * optional long ttl; // ttl if different to the policy * optional indicator functionIdentifier; // match on function identifier * optional indicator functionParameters; // match on function parameters * optional indicator target; // match on target * optional indicator inputs; // match on function inputs * optional indicator outputs; // match on function outputs * } * * } * </pre> */ @GenericFudgeBuilderFor(FunctionBlacklistPolicy.class) public class FunctionBlacklistPolicyFudgeBuilder implements FudgeBuilder<FunctionBlacklistPolicy> { /** * Fudge builder for {@link Entry}. */ @FudgeBuilderFor(Entry.class) public static class EntryFudgeBuilder implements FudgeBuilder<Entry> { public static void buildMessageImpl(final MutableFudgeMsg msg, final Entry object) { if (!object.isDefaultActivationPeriod()) { msg.add("ttl", null, FudgeWireType.LONG, object.getActivationPeriod()); } if (object.isMatchFunctionIdentifier()) { msg.add("functionIdentifier", null, FudgeWireType.INDICATOR, IndicatorType.INSTANCE); } if (object.isMatchFunctionParameters()) { msg.add("functionParameters", null, FudgeWireType.INDICATOR, IndicatorType.INSTANCE); } if (object.isMatchTarget()) { msg.add("target", null, FudgeWireType.INDICATOR, IndicatorType.INSTANCE); } if (object.isMatchInputs()) { msg.add("inputs", null, FudgeWireType.INDICATOR, IndicatorType.INSTANCE); } if (object.isMatchOutputs()) { msg.add("outputs", null, FudgeWireType.INDICATOR, IndicatorType.INSTANCE); } } @Override public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final Entry object) { final MutableFudgeMsg msg = serializer.newMessage(); buildMessageImpl(msg, object); return msg; } public static Entry buildObjectImpl(final FudgeMsg msg) { Entry e = Entry.WILDCARD; final Integer ttl = msg.getInt("ttl"); if (ttl != null) { e = e.activationPeriod(ttl); } if (msg.hasField("functionIdentifier")) { e = e.matchFunctionIdentifier(); } if (msg.hasField("functionParameters")) { e = e.matchFunctionParameters(); } if (msg.hasField("target")) { e = e.matchTarget(); } if (msg.hasField("inputs")) { e = e.matchInputs(); } if (msg.hasField("outputs")) { e = e.matchOutputs(); } return e; } @Override public Entry buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) { return buildObjectImpl(msg); } } @Override public MutableFudgeMsg buildMessage(final FudgeSerializer serializer, final FunctionBlacklistPolicy object) { final MutableFudgeMsg msg = serializer.newMessage(); msg.add("uniqueId", null, UniqueIdFudgeSecondaryType.INSTANCE, object.getUniqueId()); msg.add("name", null, FudgeWireType.STRING, object.getName()); msg.add("ttl", null, FudgeWireType.LONG, object.getDefaultEntryActivationPeriod()); for (Entry entry : object.getEntries()) { final MutableFudgeMsg entryMsg = msg.addSubMessage("entry", null); EntryFudgeBuilder.buildMessageImpl(entryMsg, entry); } return msg; } @Override public FunctionBlacklistPolicy buildObject(final FudgeDeserializer deserializer, final FudgeMsg msg) { final UniqueId uniqueId = msg.getValue(UniqueId.class, "uniqueId"); final String name = msg.getString("name"); final int ttl = msg.getInt("ttl"); final List<FudgeField> entryFields = msg.getAllByName("entry"); final List<Entry> entries = new ArrayList<Entry>(entryFields.size()); for (FudgeField entryField : entryFields) { entries.add(EntryFudgeBuilder.buildObjectImpl((FudgeMsg) entryField.getValue())); } return new DefaultFunctionBlacklistPolicy(uniqueId, name, ttl, entries); } }