Package com.opengamma.master.portfolio.impl

Source Code of com.opengamma.master.portfolio.impl.CombinedPortfolioMaster$PortfolioSearchStrategy

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

import java.util.List;

import com.google.common.collect.Lists;
import com.opengamma.core.change.ChangeManager;
import com.opengamma.id.UniqueId;
import com.opengamma.master.AbstractDocumentsResult;
import com.opengamma.master.CombinedMaster;
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;

/**
* A {@link PortfolioMaster} that combines the behavior of the masters
* in the session, user and global contexts.
*/
public class CombinedPortfolioMaster extends CombinedMaster<PortfolioDocument, PortfolioMaster> implements PortfolioMaster {

  public CombinedPortfolioMaster(final List<PortfolioMaster> masterList) {
    super(masterList);
  }

  @Override
  public ChangeManager changeManager() {
    throw new UnsupportedOperationException();
  }

  @Override
  public PortfolioSearchResult search(PortfolioSearchRequest overallRequest) {
    final PortfolioSearchResult overallResult = new PortfolioSearchResult();
   
    pagedSearch(new PortfolioSearchStrategy() {
     
      @Override
      public AbstractDocumentsResult<PortfolioDocument> search(PortfolioMaster master, PortfolioSearchRequest searchRequest) {
        PortfolioSearchResult masterResult = master.search(searchRequest);
        overallResult.setVersionCorrection(masterResult.getVersionCorrection());
        return masterResult;
      }
    }, overallResult, overallRequest);
   
    return overallResult;

  }
 
  /**
   * Callback interface for portfolio searches
   */
  private interface PortfolioSearchStrategy extends SearchStrategy<PortfolioDocument, PortfolioMaster, PortfolioSearchRequest> { }

 
  /**
   * Callback interface for the search operation to sort, filter and process results.
   */
  public interface SearchCallback extends CombinedMaster.SearchCallback<PortfolioDocument, PortfolioMaster> {
  }

  public void search(final PortfolioSearchRequest request, final SearchCallback callback) {
    // TODO: parallel operation of any search requests
    List<PortfolioSearchResult> results = Lists.newArrayList();
    for (PortfolioMaster master : getMasterList()) {
      results.add(master.search(request));
    }
    search(results, callback);
  }

  @Override
  public PortfolioHistoryResult history(final PortfolioHistoryRequest request) {
    final PortfolioMaster master = getMasterByScheme(request.getObjectId().getScheme());
    if (master != null) {
      return master.history(request);
    }
    return (new Try<PortfolioHistoryResult>() {
      @Override
      public PortfolioHistoryResult tryMaster(final PortfolioMaster master) {
        return master.history(request);
      }
    }).each(request.getObjectId().getScheme());
  }

  @Override
  public ManageablePortfolioNode getNode(final UniqueId nodeId) {
    final PortfolioMaster master = getMasterByScheme(nodeId.getScheme());
    if (master != null) {
      return master.getNode(nodeId);
    }
    return (new Try<ManageablePortfolioNode>() {
      @Override
      public ManageablePortfolioNode tryMaster(final PortfolioMaster master) {
        return master.getNode(nodeId);
      }
    }).each(nodeId.getScheme());
  }

}
TOP

Related Classes of com.opengamma.master.portfolio.impl.CombinedPortfolioMaster$PortfolioSearchStrategy

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.