/**
* Copyright (C) 2014 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.sesame.engine;
import java.net.URI;
import java.util.List;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.core.UriBuilder;
import com.opengamma.sesame.config.ViewConfig;
import com.opengamma.sesame.marketdata.MarketDataEnvironment;
import com.opengamma.sesame.marketdata.scenarios.ScenarioDefinition;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.rest.AbstractDataResource;
/**
* RESTful resource for exposing a remote {@link ViewRunner}.
*/
@Path("viewRunner")
public class DataViewRunnerResource extends AbstractDataResource {
/** REST path for running a calculation cycle on a view. */
public static final String RUN_VIEW_PATH = "runView";
/**
* REST path for executing multiple calculation cycles on a view for different scenarios.
* In this version the user provides all the market data for each scenario.
*/
public static final String RUN_SCENARIOS_PATH = "runScenarios";
/** The view runner that handle the remote requests. */
private final ViewRunner _viewRunner;
/**
* @param viewRunner the view runner that handle the remote requests
*/
public DataViewRunnerResource(ViewRunner viewRunner) {
_viewRunner = ArgumentChecker.notNull(viewRunner, "viewRunner");
}
/**
* Retrieve the URI for the {@link #runView(RunViewArguments)} method.
*
* @param baseUri the base URI for all requests
* @return the URI for the method
*/
public static URI uriRunView(URI baseUri) {
return createUri(baseUri, RUN_VIEW_PATH);
}
/**
* Retrieve the URI for the {@link #runScenarios(RunScenariosArguments)} method.
*
* @param baseUri the base URI for all requests
* @return the URI for the method
*/
public static URI uriRunScenarios(URI baseUri) {
return createUri(baseUri, RUN_SCENARIOS_PATH);
}
private static URI createUri(URI baseUri, String path) {
final String fullPath = "/viewRunner/" + path;
return UriBuilder.fromUri(baseUri).path(fullPath).build();
}
/**
* Exposes {@link ViewRunner#runView(ViewConfig, CalculationArguments, MarketDataEnvironment, List)} via REST.
*
* @param arguments arguments to the method call
* @return the result of calling {@link Engine#runView(ViewConfig, CalculationArguments, MarketDataEnvironment, List)}
*/
@POST
@Path(RUN_VIEW_PATH)
public Results runView(RunViewArguments arguments) {
return _viewRunner.runView(
arguments.getViewConfig(),
arguments.getCalculationArguments(),
arguments.getSuppliedData(),
arguments.getPortfolio());
}
/**
* Exposes
* {@link ViewRunner#runScenarios(ViewConfig, CalculationArguments, MarketDataEnvironment, ScenarioDefinition, List)}
* via REST.
*
* @param arguments arguments to the method call
* @return the result of calling
* {@link ViewRunner#runScenarios(ViewConfig, CalculationArguments, MarketDataEnvironment, ScenarioDefinition, List)}
*/
@POST
@Path(RUN_SCENARIOS_PATH)
public ScenarioResults runScenarios(RunScenariosArguments arguments) {
return _viewRunner.runScenarios(
arguments.getViewConfig(),
arguments.getCalculationArguments(),
arguments.getMarketData(),
arguments.getScenarioDefinition(),
arguments.getPortfolio());
}
}