Package com.opengamma.master.position.impl

Source Code of com.opengamma.master.position.impl.MasterPositionSource

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

import java.util.Collection;
import java.util.List;

import com.google.common.collect.Lists;
import com.opengamma.DataNotFoundException;
import com.opengamma.core.change.ChangeProvider;
import com.opengamma.core.position.Position;
import com.opengamma.core.position.PositionSource;
import com.opengamma.core.position.Trade;
import com.opengamma.id.ObjectId;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.master.position.ManageablePosition;
import com.opengamma.master.position.ManageableTrade;
import com.opengamma.master.position.PositionDocument;
import com.opengamma.master.position.PositionMaster;
import com.opengamma.master.position.PositionSearchRequest;
import com.opengamma.master.position.PositionSearchResult;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.PublicSPI;

/**
* A {@code PositionSource} implemented using an underlying {@code PositionMaster} and {@code PortfolioMaster}.
* <p>
* The {@link PositionSource} interface provides portfolio and position to the engine via a narrow API. This class provides the source on top of a standard {@link PortfolioMaster} and
* {@link PositionMaster}.
*/
@PublicSPI
public class MasterPositionSource extends AbstractMasterPositionSource implements PositionSource {
  // TODO: This still needs work re versioning, as it crosses the boundary between two masters

  /**
   * The position master.
   */
  private final PositionMaster _positionMaster;

  /**
   * Creates an instance with underlying masters which does not override versions.
   *
   * @param portfolioMaster  the portfolio master, not null
   * @param positionMaster  the position master, not null
   */
  public MasterPositionSource(final PortfolioMaster portfolioMaster, final PositionMaster positionMaster) {
    super(portfolioMaster);
    ArgumentChecker.notNull(positionMaster, "positionMaster");
    _positionMaster = positionMaster;
  }

  /**
   * Gets the underlying position master.
   *
   * @return the position master, not null
   */
  public PositionMaster getPositionMaster() {
    return _positionMaster;
  }

  @Override
  public Position getPosition(final UniqueId uniqueId) {
    ArgumentChecker.notNull(uniqueId, "uniqueId");
    final ManageablePosition manPos = getPositionMaster().get(uniqueId).getPosition();
    if (manPos == null) {
      throw new DataNotFoundException("Unable to find position: " + uniqueId);
    }
    return manPos.toPosition();
  }

  @Override
  public Position getPosition(final ObjectId objectId, final VersionCorrection versionCorrection) {
    ArgumentChecker.notNull(objectId, "objectId");
    ArgumentChecker.notNull(versionCorrection, "versionCorrection");
    final ManageablePosition position = getPositionMaster().get(objectId, versionCorrection).getPosition();
    if (position == null) {
      throw new DataNotFoundException("Unable to find position: " + objectId + " at " + versionCorrection);
    }
    return position.toPosition();
  }

  @Override
  public Trade getTrade(final UniqueId uniqueId) {
    ArgumentChecker.notNull(uniqueId, "uniqueId");
    final ManageableTrade manTrade = getPositionMaster().getTrade(uniqueId);
    if (manTrade == null) {
      throw new DataNotFoundException("Unable to find trade: " + uniqueId);
    }
    return manTrade;
  }
 
  //-------------------------------------------------------------------------
  @Override
  public String toString() {
    return getClass().getSimpleName() + "[" + getPortfolioMaster() + "," + getPositionMaster() + "]";
  }

  @Override
  protected ChangeProvider[] changeProviders() {
    return new ChangeProvider[] {getPortfolioMaster(), getPositionMaster()};
  }

  @Override
  protected Collection<Position> positions(PositionSearchRequest positionSearch) {
    List<Position> result = Lists.newArrayList();
    final PositionSearchResult positions = getPositionMaster().search(positionSearch);
    for (final PositionDocument position : positions.getDocuments()) {
      result.add(position.getPosition().toPosition());
    }
    return result;
  }

}
TOP

Related Classes of com.opengamma.master.position.impl.MasterPositionSource

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.