/**
* Copyright (C) 2012 - present by OpenGamma Inc. and the OpenGamma group of companies
*
* Please see distribution for license.
*/
package com.opengamma.web.analytics;
import java.util.List;
import java.util.concurrent.locks.ReadWriteLock;
import java.util.concurrent.locks.ReentrantReadWriteLock;
import com.opengamma.core.position.Portfolio;
import com.opengamma.engine.value.ValueRequirement;
import com.opengamma.engine.view.ViewResultModel;
import com.opengamma.engine.view.compilation.CompiledViewDefinition;
import com.opengamma.engine.view.cycle.ViewCycle;
import com.opengamma.id.UniqueId;
import com.opengamma.util.ArgumentChecker;
import com.opengamma.web.analytics.formatting.TypeFormatter.Format;
/**
* Wraps another {@link AnalyticsView} and protects it from concurrent access. The methods that can mutate the state of
* the underlying view are locked with a write lock, the getters are locked with a read lock.
* @see com.opengamma.web.analytics Package concurrency notes
*/
/* package */ class LockingAnalyticsView implements AnalyticsView {
private final AnalyticsView _delegate;
private final ReadWriteLock _lock = new ReentrantReadWriteLock();
/**
* @param delegate The delegate view (presumably not a thread safe implementation)
*/
/* package */ LockingAnalyticsView(AnalyticsView delegate) {
ArgumentChecker.notNull(delegate, "delegate");
_delegate = delegate;
}
@Override
public List<String> updateStructure(CompiledViewDefinition compiledViewDefinition, Portfolio portfolio) {
try {
_lock.writeLock().lock();
return _delegate.updateStructure(compiledViewDefinition, portfolio);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public String viewCompilationFailed(Throwable t) {
try {
_lock.writeLock().lock();
return _delegate.viewCompilationFailed(t);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public List<String> updateResults(ViewResultModel results, ViewCycle viewCycle) {
try {
_lock.writeLock().lock();
return _delegate.updateResults(results, viewCycle);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public GridStructure getGridStructure(GridType gridType, int viewportId) {
try {
_lock.readLock().lock();
return _delegate.getGridStructure(gridType, viewportId);
} finally {
_lock.readLock().unlock();
}
}
@Override
public GridStructure getInitialGridStructure(GridType gridType) {
try {
_lock.readLock().lock();
return _delegate.getInitialGridStructure(gridType);
} finally {
_lock.readLock().unlock();
}
}
@Override
public boolean createViewport(int requestId, GridType gridType, int viewportId, String callbackId, String structureCallbackId, ViewportDefinition viewportDefinition) {
try {
_lock.writeLock().lock();
return _delegate.createViewport(requestId, gridType, viewportId, callbackId, structureCallbackId, viewportDefinition);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public String updateViewport(GridType gridType, int viewportId, ViewportDefinition viewportDefinition) {
try {
_lock.writeLock().lock();
return _delegate.updateViewport(gridType, viewportId, viewportDefinition);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public void deleteViewport(GridType gridType, int viewportId) {
try {
_lock.writeLock().lock();
_delegate.deleteViewport(gridType, viewportId);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public ViewportResults getData(GridType gridType, int viewportId) {
try {
_lock.readLock().lock();
return _delegate.getData(gridType, viewportId);
} finally {
_lock.readLock().unlock();
}
}
@Override
public void openDependencyGraph(int requestId, GridType gridType, int graphId, String callbackId, int row, int col) {
try {
_lock.writeLock().lock();
_delegate.openDependencyGraph(requestId, gridType, graphId, callbackId, row, col);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public void openDependencyGraph(int requestId,
GridType gridType,
int graphId,
String callbackId,
String calcConfigName,
ValueRequirement valueRequirement) {
try {
_lock.writeLock().lock();
_delegate.openDependencyGraph(requestId, gridType, graphId, callbackId, calcConfigName, valueRequirement);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public void closeDependencyGraph(GridType gridType, int graphId) {
try {
_lock.writeLock().lock();
_delegate.closeDependencyGraph(gridType, graphId);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public GridStructure getGridStructure(GridType gridType, int graphId, int viewportId) {
try {
_lock.readLock().lock();
return _delegate.getGridStructure(gridType, graphId, viewportId);
} finally {
_lock.readLock().unlock();
}
}
@Override
public GridStructure getInitialGridStructure(GridType gridType, int graphId) {
try {
_lock.readLock().lock();
return _delegate.getInitialGridStructure(gridType, graphId);
} finally {
_lock.readLock().unlock();
}
}
@Override
public boolean createViewport(int requestId, GridType gridType, int graphId, int viewportId, String callbackId, String structureCallbackId, ViewportDefinition viewportDefinition) {
try {
_lock.writeLock().lock();
return _delegate.createViewport(requestId, gridType, graphId, viewportId, callbackId, structureCallbackId, viewportDefinition);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public String updateViewport(GridType gridType, int graphId, int viewportId, ViewportDefinition viewportDefinition) {
try {
_lock.writeLock().lock();
return _delegate.updateViewport(gridType, graphId, viewportId, viewportDefinition);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public void deleteViewport(GridType gridType, int graphId, int viewportId) {
try {
_lock.writeLock().lock();
_delegate.deleteViewport(gridType, graphId, viewportId);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public ViewportResults getData(GridType gridType, int graphId, int viewportId) {
try {
_lock.readLock().lock();
return _delegate.getData(gridType, graphId, viewportId);
} finally {
_lock.readLock().unlock();
}
}
@Override
public List<String> entityChanged(MasterChangeNotification<?> notification) {
try {
_lock.writeLock().lock();
return _delegate.entityChanged(notification);
} finally {
_lock.writeLock().unlock();
}
}
@Override
public List<String> portfolioChanged() {
try {
_lock.writeLock().lock();
return _delegate.portfolioChanged();
} finally {
_lock.writeLock().unlock();
}
}
@Override
public ViewportResults getAllGridData(GridType gridType, Format format) {
try {
_lock.readLock().lock();
return _delegate.getAllGridData(gridType, format);
} finally {
_lock.readLock().unlock();
}
}
@Override
public UniqueId getViewDefinitionId() {
try {
_lock.readLock().lock();
return _delegate.getViewDefinitionId();
} finally {
_lock.readLock().unlock();
}
}
@Override
public List<ErrorInfo> getErrors() {
try {
_lock.readLock().lock();
return _delegate.getErrors();
} finally {
_lock.readLock().unlock();
}
}
@Override
public void deleteError(long id) {
try {
_lock.writeLock().lock();
_delegate.deleteError(id);
} finally {
_lock.writeLock().unlock();
}
}
}