Package com.opengamma.master.position.impl

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

/**
* Copyright (C) 2013 - 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 org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.collect.Lists;
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.core.position.impl.DelegatingPositionSource;
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.PositionSearchRequest;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.PublicSPI;

/**
* A {@code PositionSource} implemented using an underlying {@code PositionMaster} and {@code DelegatingPositionSource}.
* <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 DelegatingPositionSource}.
*/
@PublicSPI
public class MasterDelegatingPositionSource extends AbstractMasterPositionSource implements PositionSource {
 
  private static final Logger s_logger = LoggerFactory.getLogger(MasterDelegatingPositionSource.class);
  private final DelegatingPositionSource _delegatingPositionSource;
 
  public MasterDelegatingPositionSource(PortfolioMaster portfolioMaster, DelegatingPositionSource positionSource) {
    super(portfolioMaster);
    ArgumentChecker.notNull(positionSource, "positionSource");
   
    _delegatingPositionSource = positionSource;
  }
 
  protected Collection<Position> positions(PositionSearchRequest positionSearch) {
    s_logger.debug("findPositions.positionSearchRequest {}", positionSearch);
    List<Position> positions = Lists.newArrayList();
    for (ObjectId positionObjectId : positionSearch.getPositionObjectIds()) {
      Position position = getDelegatingPositionSource().getPosition(positionObjectId, VersionCorrection.LATEST);
      if (position != null) {
        positions.add(position);
      } else {
        s_logger.warn("Position {} cannot be found in DelegatingPositionSource {}", positionObjectId, getDelegatingPositionSource());
      }
    }
    return positions;
  }

  @Override
  public Position getPosition(UniqueId uniqueId) {
    ArgumentChecker.notNull(uniqueId, "uniqueId");
    return getDelegatingPositionSource().getPosition(uniqueId);
  }

  @Override
  public Position getPosition(ObjectId objectId, VersionCorrection versionCorrection) {
    ArgumentChecker.notNull(objectId, "objectId");
    ArgumentChecker.notNull(versionCorrection, "versionCorrection");
    return getDelegatingPositionSource().getPosition(objectId, versionCorrection);
  }

  @Override
  public Trade getTrade(UniqueId uniqueId) {
    ArgumentChecker.notNull(uniqueId, "uniqueId");
    return getDelegatingPositionSource().getTrade(uniqueId);
  }

  /**
   * Gets the delegatingPositionSource.
   * @return the delegatingPositionSource
   */
  public DelegatingPositionSource getDelegatingPositionSource() {
    return _delegatingPositionSource;
  }

  @Override
  protected ChangeProvider[] changeProviders() {
    return new ChangeProvider[] {getPortfolioMaster()};
  }
 
  //-------------------------------------------------------------------------
  @Override
  public String toString() {
    return getClass().getSimpleName() + "[" + getPortfolioMaster() + "," + getDelegatingPositionSource() + "]";
  }
 
}
TOP

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

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.