Package com.opengamma.core.position

Source Code of com.opengamma.core.position.PortfolioFudgeBuilder

/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.core.position;

import java.util.Map.Entry;

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.fudgemsg.wire.types.FudgeWireType;

import com.opengamma.core.position.impl.SimplePortfolio;
import com.opengamma.core.position.impl.SimplePortfolioNode;
import com.opengamma.id.UniqueId;

/**
* Fudge message builder for {@code Portfolio}.
*/
@GenericFudgeBuilderFor(Portfolio.class)
public class PortfolioFudgeBuilder implements FudgeBuilder<Portfolio> {

  /** Field name. */
  public static final String IDENTIFIER_FIELD_NAME = "identifier";
  /** Field name. */
  public static final String NAME_FIELD_NAME = "name";
  /** Field name. */
  public static final String ROOT_FIELD_NAME = "root";
  /** Field name. */
  public static final String ATTRIBUTES_FIELD_NAME = "attributes";

  @Override
  public MutableFudgeMsg buildMessage(FudgeSerializer serializer, Portfolio portfolio) {
    final MutableFudgeMsg message = serializer.newMessage();
    serializer.addToMessage(message, IDENTIFIER_FIELD_NAME, null, portfolio.getUniqueId());
    message.add(NAME_FIELD_NAME, portfolio.getName());
    serializer.addToMessage(message, ROOT_FIELD_NAME, null, portfolio.getRootNode());
    if (haveAttributes(portfolio)) {
      final MutableFudgeMsg attributesMsg = serializer.newMessage();
      for (Entry<String, String> entry : portfolio.getAttributes().entrySet()) {
        attributesMsg.add(entry.getKey(), entry.getValue());
      }
      serializer.addToMessage(message, ATTRIBUTES_FIELD_NAME, null, attributesMsg);
    }
    message.add(null, FudgeSerializer.TYPES_HEADER_ORDINAL, FudgeWireType.STRING, Portfolio.class.getName());
    return message;
  }

  private boolean haveAttributes(Portfolio portfolio) {
    return portfolio.getAttributes() != null && !portfolio.getAttributes().isEmpty();
  }

  @Override
  public Portfolio buildObject(FudgeDeserializer deserializer, FudgeMsg message) {
    FudgeField idField = message.getByName(IDENTIFIER_FIELD_NAME);
    final UniqueId id = idField != null ? deserializer.fieldValueToObject(UniqueId.class, idField) : null;
    final String name = message.getFieldValue(String.class, message.getByName(NAME_FIELD_NAME));
    final PortfolioNode node = deserializer.fieldValueToObject(PortfolioNode.class, message.getByName(ROOT_FIELD_NAME));
   
    SimplePortfolio portfolio = new SimplePortfolio(name);
    if (id != null) {
      portfolio.setUniqueId(id);
    }
    portfolio.setRootNode((SimplePortfolioNode) node);
    if (message.hasField(ATTRIBUTES_FIELD_NAME)) {
      FudgeMsg attributesMsg = message.getMessage(ATTRIBUTES_FIELD_NAME);
      for (FudgeField fudgeField : attributesMsg) {
        String key = fudgeField.getName();
        Object value = fudgeField.getValue();
        if (key != null && value != null) {
          portfolio.addAttribute(key, (String) value);
        }
      }
    }
    return portfolio;
  }

}
TOP

Related Classes of com.opengamma.core.position.PortfolioFudgeBuilder

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.