/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.financial.user;
import java.util.Collection;
import java.util.List;
import java.util.Map;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.id.ObjectIdentifiable;
import com.opengamma.id.UniqueId;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.AbstractChangeProvidingMaster;
import com.opengamma.master.ChangeProvidingDecorator;
import com.opengamma.master.portfolio.ManageablePortfolioNode;
import com.opengamma.master.portfolio.PortfolioDocument;
import com.opengamma.master.portfolio.PortfolioHistoryRequest;
import com.opengamma.master.portfolio.PortfolioHistoryResult;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.master.portfolio.PortfolioSearchRequest;
import com.opengamma.master.portfolio.PortfolioSearchResult;
/**
* Wraps a portfolio master to trap calls to record user based information to allow clean up and
* hooks for access control logics if needed.
*/
public class FinancialUserPortfolioMaster extends AbstractFinancialUserMaster<PortfolioDocument> implements PortfolioMaster {
/**
* The underlying master.
*/
private final PortfolioMaster _underlying;
private final AbstractChangeProvidingMaster<PortfolioDocument> _changeProvidingMaster;
/**
* Creates an instance.
*
* @param userName the user name, not null
* @param clientName the client name, not null
* @param tracker the tracker, not null
* @param underlying the underlying master, not null
*/
public FinancialUserPortfolioMaster(String userName, String clientName, FinancialUserDataTracker tracker, PortfolioMaster underlying) {
super(userName, clientName, tracker, FinancialUserDataType.PORTFOLIO);
_underlying = underlying;
_changeProvidingMaster = ChangeProvidingDecorator.wrap(underlying);
}
/**
* Creates an instance.
*
* @param client the client, not null
* @param underlying the underlying master, not null
*/
public FinancialUserPortfolioMaster(FinancialClient client, PortfolioMaster underlying) {
super(client, FinancialUserDataType.PORTFOLIO);
_underlying = underlying;
_changeProvidingMaster = ChangeProvidingDecorator.wrap(underlying);
init();
}
public PortfolioDocument add(PortfolioDocument document) {
return _changeProvidingMaster.add(document);
}
public UniqueId addVersion(ObjectIdentifiable objectId, PortfolioDocument documentToAdd) {
return _changeProvidingMaster.addVersion(objectId, documentToAdd);
}
public PortfolioDocument correct(PortfolioDocument document) {
return _changeProvidingMaster.correct(document);
}
@Override
public PortfolioDocument get(ObjectIdentifiable objectId, VersionCorrection versionCorrection) {
return _changeProvidingMaster.get(objectId, versionCorrection);
}
@Override
public PortfolioDocument get(UniqueId uniqueId) {
return _changeProvidingMaster.get(uniqueId);
}
public Map<UniqueId, PortfolioDocument> get(Collection<UniqueId> uniqueIds) {
return _changeProvidingMaster.get(uniqueIds);
}
@Override
public void remove(ObjectIdentifiable objectIdentifiable) {
_changeProvidingMaster.remove(objectIdentifiable);
}
@Override
public void removeVersion(UniqueId uniqueId) {
_changeProvidingMaster.removeVersion(uniqueId);
}
public List<UniqueId> replaceAllVersions(ObjectIdentifiable objectId, List<PortfolioDocument> replacementDocuments) {
return _changeProvidingMaster.replaceAllVersions(objectId, replacementDocuments);
}
public UniqueId replaceVersion(PortfolioDocument replacementDocument) {
return _changeProvidingMaster.replaceVersion(replacementDocument);
}
public List<UniqueId> replaceVersion(UniqueId uniqueId, List<PortfolioDocument> replacementDocuments) {
return _changeProvidingMaster.replaceVersion(uniqueId, replacementDocuments);
}
public List<UniqueId> replaceVersions(ObjectIdentifiable objectId, List<PortfolioDocument> replacementDocuments) {
return _changeProvidingMaster.replaceVersions(objectId, replacementDocuments);
}
public PortfolioDocument update(PortfolioDocument document) {
return _changeProvidingMaster.update(document);
}
@Override
public ChangeManager changeManager() {
return _changeProvidingMaster.changeManager();
}
@Override
public ManageablePortfolioNode getNode(UniqueId nodeId) {
return _underlying.getNode(nodeId);
}
@Override
public PortfolioHistoryResult history(PortfolioHistoryRequest request) {
return _underlying.history(request);
}
@Override
public PortfolioSearchResult search(PortfolioSearchRequest request) {
return _underlying.search(request);
}
}