/**
* Copyright (C) 2009 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.engine.view;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.opengamma.core.config.ConfigSource;
import com.opengamma.engine.cache.ViewComputationCacheSource;
import com.opengamma.engine.calcnode.JobDispatcher;
import com.opengamma.engine.depgraph.DependencyGraphBuilderFactory;
import com.opengamma.engine.exec.DependencyGraphExecutorFactory;
import com.opengamma.engine.exec.SingleNodeExecutorFactory;
import com.opengamma.engine.exec.stats.DiscardingGraphStatisticsGathererProvider;
import com.opengamma.engine.exec.stats.GraphExecutorStatisticsGathererProvider;
import com.opengamma.engine.function.CompiledFunctionService;
import com.opengamma.engine.function.resolver.DefaultFunctionResolver;
import com.opengamma.engine.function.resolver.FunctionResolver;
import com.opengamma.engine.marketdata.DummyOverrideOperationCompiler;
import com.opengamma.engine.marketdata.NamedMarketDataSpecificationRepository;
import com.opengamma.engine.marketdata.OverrideOperationCompiler;
import com.opengamma.engine.marketdata.resolver.MarketDataProviderResolver;
import com.opengamma.engine.view.impl.ViewProcessorImpl;
import com.opengamma.engine.view.listener.ViewResultListenerFactory;
import com.opengamma.engine.view.permission.DefaultViewPortfolioPermissionProvider;
import com.opengamma.engine.view.permission.ViewPermissionProvider;
import com.opengamma.engine.view.permission.ViewPortfolioPermissionProvider;
import com.opengamma.engine.view.worker.SingleThreadViewProcessWorkerFactory;
import com.opengamma.engine.view.worker.ViewProcessWorkerFactory;
import com.opengamma.engine.view.worker.cache.InMemoryViewExecutionCache;
import com.opengamma.engine.view.worker.cache.ViewExecutionCache;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.util.SingletonFactoryBean;
/**
* Spring factory bean for {@link ViewProcessor}.
*/
public class ViewProcessorFactoryBean extends SingletonFactoryBean<ViewProcessor> {
private static final Logger s_logger = LoggerFactory.getLogger(ViewProcessorFactoryBean.class);
private String _name;
private ConfigSource _configSource;
private NamedMarketDataSpecificationRepository _namedMarketDataSpecificationRepository;
private CompiledFunctionService _functionCompilationService;
private FunctionResolver _functionResolver;
private MarketDataProviderResolver _marketDataProviderResolver;
private ViewComputationCacheSource _computationCacheSource;
private JobDispatcher _computationJobDispatcher;
private ViewProcessWorkerFactory _viewProcessWorkerFactory = new SingleThreadViewProcessWorkerFactory();
private DependencyGraphBuilderFactory _dependencyGraphBuilderFactory = new DependencyGraphBuilderFactory();
private DependencyGraphExecutorFactory _dependencyGraphExecutorFactory = new SingleNodeExecutorFactory();
private GraphExecutorStatisticsGathererProvider _graphExecutionStatistics = new DiscardingGraphStatisticsGathererProvider();
private ViewPermissionProvider _viewPermissionProvider;
private ViewPortfolioPermissionProvider _viewClientPortfolioPermissionProvider =
new DefaultViewPortfolioPermissionProvider();
private OverrideOperationCompiler _overrideOperationCompiler = new DummyOverrideOperationCompiler();
private ViewResultListenerFactory _batchViewClientFactory;
private ViewExecutionCache _viewExecutionCache = new InMemoryViewExecutionCache();
private int _permissionCheckInterval;
private boolean _useAutoStartViews;
//-------------------------------------------------------------------------
public String getName() {
return _name;
}
public void setName(final String name) {
_name = name;
}
public NamedMarketDataSpecificationRepository getNamedMarketDataSpecificationRepository() {
return _namedMarketDataSpecificationRepository;
}
public void setNamedMarketDataSpecificationRepository(final NamedMarketDataSpecificationRepository namedMarketDataSpecificationRepository) {
_namedMarketDataSpecificationRepository = namedMarketDataSpecificationRepository;
}
public ConfigSource getConfigSource() {
return _configSource;
}
public void setConfigSource(final ConfigSource configSource) {
this._configSource = configSource;
}
public CompiledFunctionService getFunctionCompilationService() {
return _functionCompilationService;
}
public void setFunctionCompilationService(final CompiledFunctionService functionCompilationService) {
_functionCompilationService = functionCompilationService;
}
public FunctionResolver getFunctionResolver() {
return _functionResolver;
}
public void setFunctionResolver(final FunctionResolver functionResolver) {
_functionResolver = functionResolver;
}
public DependencyGraphBuilderFactory getDependencyGraphBuilderFactory() {
return _dependencyGraphBuilderFactory;
}
public void setDependencyGraphBuilderFactory(final DependencyGraphBuilderFactory dependencyGraphBuilderFactory) {
_dependencyGraphBuilderFactory = dependencyGraphBuilderFactory;
}
public MarketDataProviderResolver getMarketDataProviderResolver() {
return _marketDataProviderResolver;
}
public void setMarketDataProviderResolver(final MarketDataProviderResolver marketDataProviderResolver) {
_marketDataProviderResolver = marketDataProviderResolver;
}
public ViewComputationCacheSource getComputationCacheSource() {
return _computationCacheSource;
}
public void setComputationCacheSource(final ViewComputationCacheSource computationCacheSource) {
_computationCacheSource = computationCacheSource;
}
public JobDispatcher getComputationJobDispatcher() {
return _computationJobDispatcher;
}
public void setComputationJobDispatcher(final JobDispatcher computationJobDispatcher) {
_computationJobDispatcher = computationJobDispatcher;
}
public ViewProcessWorkerFactory getViewProcessWorkerFactory() {
return _viewProcessWorkerFactory;
}
public void setViewProcessWorkerFactory(final ViewProcessWorkerFactory viewProcessWorkerFactory) {
_viewProcessWorkerFactory = viewProcessWorkerFactory;
}
public DependencyGraphExecutorFactory getDependencyGraphExecutorFactory() {
return _dependencyGraphExecutorFactory;
}
public void setDependencyGraphExecutorFactory(final DependencyGraphExecutorFactory dependencyGraphExecutorFactory) {
_dependencyGraphExecutorFactory = dependencyGraphExecutorFactory;
}
public GraphExecutorStatisticsGathererProvider getGraphExecutionStatistics() {
return _graphExecutionStatistics;
}
public void setGraphExecutionStatistics(final GraphExecutorStatisticsGathererProvider graphExecutionStatistics) {
_graphExecutionStatistics = graphExecutionStatistics;
}
public ViewPermissionProvider getViewPermissionProvider() {
return _viewPermissionProvider;
}
public void setViewPermissionProvider(final ViewPermissionProvider viewPermissionProvider) {
_viewPermissionProvider = viewPermissionProvider;
}
public OverrideOperationCompiler getOverrideOperationCompiler() {
return _overrideOperationCompiler;
}
public void setOverrideOperationCompiler(final OverrideOperationCompiler overrideOperationCompiler) {
_overrideOperationCompiler = overrideOperationCompiler;
}
public ViewExecutionCache getViewExecutionCache() {
return _viewExecutionCache;
}
public void setViewExecutionCache(final ViewExecutionCache viewExecutionCache) {
_viewExecutionCache = viewExecutionCache;
}
public void setUseAutoStartViews(boolean useAutoStartViews) {
_useAutoStartViews = useAutoStartViews;
}
public void setPermissionCheckInterval(int permissionCheckInterval) {
_permissionCheckInterval = permissionCheckInterval;
}
//-------------------------------------------------------------------------
protected void checkInjectedInputs() {
s_logger.debug("Checking injected inputs.");
ArgumentChecker.notNullInjected(_name, "id");
ArgumentChecker.notNullInjected(getFunctionCompilationService(), "functionCompilationService");
if (getFunctionResolver() == null) {
setFunctionResolver(new DefaultFunctionResolver(getFunctionCompilationService()));
}
ArgumentChecker.notNullInjected(getMarketDataProviderResolver(), "marketDataProviderResolver");
ArgumentChecker.notNullInjected(getComputationCacheSource(), "computationCacheSource");
ArgumentChecker.notNullInjected(getComputationJobDispatcher(), "computationJobDispatcher");
ArgumentChecker.notNullInjected(getViewProcessWorkerFactory(), "viewComputationJobFactory");
ArgumentChecker.notNullInjected(getViewPermissionProvider(), "viewPermissionProvider");
ArgumentChecker.notNullInjected(getViewExecutionCache(), "viewExecutionCache");
}
@Override
public ViewProcessor createObject() {
checkInjectedInputs();
return new ViewProcessorImpl(
getName(),
getConfigSource(),
getNamedMarketDataSpecificationRepository(),
getFunctionCompilationService(),
getFunctionResolver(),
getMarketDataProviderResolver(),
getComputationCacheSource(),
getComputationJobDispatcher(),
getDependencyGraphBuilderFactory(),
getDependencyGraphExecutorFactory(),
getGraphExecutionStatistics(),
getViewPermissionProvider(),
getViewPortfolioPermissionProvider(),
getOverrideOperationCompiler(),
getViewResultListenerFactory(),
getViewProcessWorkerFactory(),
getViewExecutionCache(),
_permissionCheckInterval,
_useAutoStartViews);
}
public void setViewResultListenerFactory(final ViewResultListenerFactory viewResultListenerFactory) {
_batchViewClientFactory = viewResultListenerFactory;
}
public ViewResultListenerFactory getViewResultListenerFactory() {
return _batchViewClientFactory;
}
public ViewPortfolioPermissionProvider getViewPortfolioPermissionProvider() {
return _viewClientPortfolioPermissionProvider;
}
public void setViewPortfolioPermissionProvider(ViewPortfolioPermissionProvider permissionProvider) {
_viewClientPortfolioPermissionProvider = permissionProvider;
}
}