/**
* 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() + "]";
}
}