Package com.opengamma.engine.fudgemsg

Source Code of com.opengamma.engine.fudgemsg.FunctionBlacklistPolicyFudgeBuilder

/**
* 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);
  }

}
TOP

Related Classes of com.opengamma.engine.fudgemsg.FunctionBlacklistPolicyFudgeBuilder

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.