Package com.opengamma.web.portfolio

Source Code of com.opengamma.web.portfolio.AbstractWebPortfolioResource

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

import java.util.ArrayList;
import java.util.Collection;
import java.util.concurrent.ExecutorService;

import javax.ws.rs.core.Context;
import javax.ws.rs.core.UriInfo;

import org.joda.beans.impl.flexi.FlexiBean;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.opengamma.OpenGammaRuntimeException;
import com.opengamma.core.security.SecurityLink;
import com.opengamma.core.security.SecuritySource;
import com.opengamma.engine.view.compilation.SecurityLinkResolver;
import com.opengamma.id.VersionCorrection;
import com.opengamma.master.portfolio.PortfolioMaster;
import com.opengamma.master.position.ManageablePosition;
import com.opengamma.master.position.PositionMaster;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.web.AbstractPerRequestWebResource;
import com.opengamma.web.WebHomeUris;
import com.opengamma.web.position.WebPositionsData;
import com.opengamma.web.position.WebPositionsUris;
import com.opengamma.web.security.WebSecuritiesData;
import com.opengamma.web.security.WebSecuritiesUris;

/**
* Abstract base class for RESTful portfolio resources.
*/
public abstract class AbstractWebPortfolioResource extends AbstractPerRequestWebResource {
  /**
   * HTML ftl directory
   */
  protected static final String HTML_DIR = "portfolios/html/";
  /**
   * JSON ftl directory
   */
  protected static final String JSON_DIR = "portfolios/json/";

  private static final Logger s_logger = LoggerFactory.getLogger(AbstractWebPortfolioResource.class);
 
  /**
   * The backing bean.
   */
  private final WebPortfoliosData _data;
  /**
   * The security link resolver.
   */
  private SecurityLinkResolver _securityLinkResolver;

  /**
   * Creates the resource.
   * @param portfolioMaster  the portfolio master, not null
   * @param positionMaster  the position master, not null
   * @param securitySource  the security source, not null
   * @param executor  the executor service, not null
   */
  protected AbstractWebPortfolioResource(final PortfolioMaster portfolioMaster, final PositionMaster positionMaster, final SecuritySource securitySource, final ExecutorService executor) {
    ArgumentChecker.notNull(portfolioMaster, "portfolioMaster");
    ArgumentChecker.notNull(positionMaster, "positionMaster");
    ArgumentChecker.notNull(securitySource, "securitySource");
    ArgumentChecker.notNull(executor, "executor");
    _data = new WebPortfoliosData();
    data().setPortfolioMaster(portfolioMaster);
    data().setPositionMaster(positionMaster);
    _securityLinkResolver = new SecurityLinkResolver(executor, securitySource, VersionCorrection.LATEST);
  }

  /**
   * Creates the resource.
   * @param parent  the parent resource, not null
   */
  protected AbstractWebPortfolioResource(final AbstractWebPortfolioResource parent) {
    super(parent);
    _data = parent._data;
    _securityLinkResolver = parent._securityLinkResolver;
  }

  /**
   * Setter used to inject the URIInfo.
   * This is a roundabout approach, because Spring and JSR-311 injection clash.
   * DO NOT CALL THIS METHOD DIRECTLY.
   * @param uriInfo  the URI info, not null
   */
  @Context
  public void setUriInfo(final UriInfo uriInfo) {
    data().setUriInfo(uriInfo);
  }

  //-------------------------------------------------------------------------
  /**
   * Creates the output root data.
   * @return the output root data, not null
   */
  protected FlexiBean createRootData() {
    FlexiBean out = getFreemarker().createRootData();
    out.put("homeUris", new WebHomeUris(data().getUriInfo()));
    out.put("uris", new WebPortfoliosUris(data()));
    WebSecuritiesData secData = new WebSecuritiesData(data().getUriInfo());
    out.put("securityUris", new WebSecuritiesUris(secData));
    WebPositionsData posData = new WebPositionsData(data().getUriInfo());
    out.put("positionUris", new WebPositionsUris(posData));
    return out;
  }

  //-------------------------------------------------------------------------
  protected void resolveSecurities(Collection<ManageablePosition> positions) {
    Collection<SecurityLink> securityLinks = new ArrayList<SecurityLink>(positions.size());
    for (ManageablePosition position : positions) {
      securityLinks.add(position.getSecurityLink());
    }
    if (!securityLinks.isEmpty()) {
      try {
        _securityLinkResolver.resolveSecurities(securityLinks);
      } catch (OpenGammaRuntimeException ex) {
        s_logger.warn("Problem resolving securities in a position", ex);
      }
    }
  }

  //-------------------------------------------------------------------------
  /**
   * Gets the backing bean.
   * @return the backing bean, not null
   */
  protected WebPortfoliosData data() {
    return _data;
  }

}
TOP

Related Classes of com.opengamma.web.portfolio.AbstractWebPortfolioResource

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.