/**
* 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 com.opengamma.sesame.config.ViewConfig;
import com.opengamma.sesame.marketdata.MarketDataEnvironment;
import com.opengamma.sesame.marketdata.scenarios.ScenarioDefinition;
import com.opengamma.util.rest.AbstractRemoteClient;
/**
* View runner implementation that executes requests on a remote view runner over REST.
*/
public class RemoteViewRunner extends AbstractRemoteClient implements ViewRunner {
/**
* @param baseUri the base URI of the remote server
*/
public RemoteViewRunner(URI baseUri) {
super(baseUri);
}
@Override
public Results runView(
ViewConfig viewConfig,
CalculationArguments calculationArguments,
MarketDataEnvironment marketData,
List<?> portfolio) {
URI uri = DataViewRunnerResource.uriRunView(getBaseUri());
RunViewArguments args = new RunViewArguments(viewConfig, calculationArguments, marketData, portfolio);
return accessRemote(uri).post(Results.class, args);
}
@Override
public ScenarioResults runScenarios(
ViewConfig viewConfig,
CalculationArguments calculationArguments,
MarketDataEnvironment baseMarketData,
ScenarioDefinition scenarioDefinition,
List<?> portfolio) {
URI uri = DataViewRunnerResource.uriRunScenarios(getBaseUri());
// As RunScenariosArguments works with List<Object>, if we call the
// portfolio method on the builder it picks the version taking
// Object... rather than the version taking List<Object>. This
// means that the portfolio gets wrapped in another list
// and fails later.
// For this reason we need to cast to enforce the correct call
@SuppressWarnings("unchecked")
List<Object> pf = (List<Object>) portfolio;
RunScenariosArguments args =
RunScenariosArguments.builder()
.viewConfig(viewConfig)
.calculationArguments(calculationArguments)
.marketData(baseMarketData)
.scenarioDefinition(scenarioDefinition)
.portfolio(pf)
.build();
return accessRemote(uri).post(ScenarioResults.class, args);
}
}