/**
* 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.net.URI;
import java.util.Stack;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import com.opengamma.DataNotFoundException;
import com.opengamma.id.UniqueId;
import com.opengamma.master.portfolio.ManageablePortfolioNode;
import com.opengamma.master.portfolio.PortfolioDocument;
/**
* RESTful resource for all nodes in a portfolio version.
*/
@Path("/portfolios/{portfolioId}/versions/{versionId}/nodes")
public class WebPortfolioVersionNodesResource extends WebPortfolioNodesResource {
/**
* Creates the resource.
* @param parent the parent resource, not null
*/
public WebPortfolioVersionNodesResource(AbstractWebPortfolioResource parent) {
super(parent);
}
//-------------------------------------------------------------------------
@Override
@Path("{nodeId}")
public WebPortfolioNodeResource findNode(@PathParam("nodeId") String idStr) {
data().setUriNodeId(idStr);
UniqueId oid = UniqueId.parse(idStr);
PortfolioDocument portfolioDoc = data().getVersioned();
Stack<ManageablePortfolioNode> nodes = portfolioDoc.getPortfolio().getRootNode().findNodeStackByObjectId(oid);
if (nodes.isEmpty()) {
throw new DataNotFoundException("PortfolioNode not found: " + idStr);
}
data().setNode(nodes.pop());
if (nodes.size() > 0) {
data().setParentNode(nodes.pop());
}
return new WebPortfolioVersionNodeResource(this);
}
//-------------------------------------------------------------------------
/**
* Builds a URI for this resource.
* @param data the data, not null
* @return the URI, not null
*/
public static URI uri(final WebPortfoliosData data) {
String portfolioId = data.getBestPortfolioUriId(null);
return data.getUriInfo().getBaseUriBuilder().path(WebPortfolioNodesResource.class).build(portfolioId);
}
}