From 964ebc8a2c4024f2a4fe60e9eec140e351c724bb Mon Sep 17 00:00:00 2001 From: Leif Åstrand Date: Fri, 30 May 2014 09:50:40 +0300 Subject: Move ActiveRowHandler to the data provider extension (#13334) This makes GridConnector include information about what rows are cached when more data is requested instead of the previous way of synchronizing this separately every time a scroll event occurs. This new approach makes it possible to have rows cached even if they are not in view. It also improves performance since there's no need to do an RPC every time scrolling changes what is visible. Change-Id: Ibfe8a69586dfc397591f56efa8ef351e274f0116 --- .../src/com/vaadin/client/data/AbstractRemoteDataSource.java | 9 +++++++++ client/src/com/vaadin/client/data/RpcDataSourceConnector.java | 5 ++++- client/src/com/vaadin/client/ui/grid/GridConnector.java | 11 ----------- 3 files changed, 13 insertions(+), 12 deletions(-) (limited to 'client') diff --git a/client/src/com/vaadin/client/data/AbstractRemoteDataSource.java b/client/src/com/vaadin/client/data/AbstractRemoteDataSource.java index 48026abb49..40f5111f8a 100644 --- a/client/src/com/vaadin/client/data/AbstractRemoteDataSource.java +++ b/client/src/com/vaadin/client/data/AbstractRemoteDataSource.java @@ -320,4 +320,13 @@ public abstract class AbstractRemoteDataSource implements DataSource { Profiler.leave("AbstractRemoteDataSource.insertRowData"); } + + /** + * Gets the current range of cached rows + * + * @return the range of currently cached rows + */ + public Range getCachedRange() { + return cached; + } } diff --git a/client/src/com/vaadin/client/data/RpcDataSourceConnector.java b/client/src/com/vaadin/client/data/RpcDataSourceConnector.java index f44a541083..e07d2297c9 100644 --- a/client/src/com/vaadin/client/data/RpcDataSourceConnector.java +++ b/client/src/com/vaadin/client/data/RpcDataSourceConnector.java @@ -25,6 +25,7 @@ import com.vaadin.shared.data.DataProviderRpc; import com.vaadin.shared.data.DataProviderState; import com.vaadin.shared.data.DataRequestRpc; import com.vaadin.shared.ui.Connect; +import com.vaadin.shared.ui.grid.Range; /** * Connects a Vaadin server-side container data source to a Grid. This is @@ -41,8 +42,10 @@ public class RpcDataSourceConnector extends AbstractExtensionConnector { private final AbstractRemoteDataSource dataSource = new AbstractRemoteDataSource() { @Override protected void requestRows(int firstRowIndex, int numberOfRows) { + Range cached = getCachedRange(); + getRpcProxy(DataRequestRpc.class).requestRows(firstRowIndex, - numberOfRows); + numberOfRows, cached.getStart(), cached.length()); } }; diff --git a/client/src/com/vaadin/client/ui/grid/GridConnector.java b/client/src/com/vaadin/client/ui/grid/GridConnector.java index 9f0585f2f9..8685180d38 100644 --- a/client/src/com/vaadin/client/ui/grid/GridConnector.java +++ b/client/src/com/vaadin/client/ui/grid/GridConnector.java @@ -32,7 +32,6 @@ import com.vaadin.shared.ui.grid.ColumnGroupRowState; import com.vaadin.shared.ui.grid.ColumnGroupState; import com.vaadin.shared.ui.grid.GridClientRpc; import com.vaadin.shared.ui.grid.GridColumnState; -import com.vaadin.shared.ui.grid.GridServerRpc; import com.vaadin.shared.ui.grid.GridState; import com.vaadin.shared.ui.grid.ScrollDestination; @@ -95,16 +94,6 @@ public class GridConnector extends AbstractComponentConnector { @Override protected void init() { super.init(); - getWidget().addRowVisibilityChangeHandler( - new RowVisibilityChangeHandler() { - @Override - public void onRowVisibilityChange( - RowVisibilityChangeEvent event) { - getRpcProxy(GridServerRpc.class).setVisibleRows( - event.getFirstVisibleRow(), - event.getVisibleRowCount()); - } - }); registerRpc(GridClientRpc.class, new GridClientRpc() { @Override -- cgit v1.2.3