private void pushRowData(int firstRowToPush, int numberOfRows,
int firstCachedRowIndex, int cacheSize) {
Range newRange = Range.withLength(firstRowToPush, numberOfRows);
Range cached = Range.withLength(firstCachedRowIndex, cacheSize);
Range fullRange = newRange;
if (!cached.isEmpty()) {
fullRange = newRange.combineWith(cached);
}
List<?> itemIds = container.getItemIds(fullRange.getStart(),
fullRange.length());
JsonArray rows = Json.createArray();
int diff = 0;
if (!cached.isEmpty() && newRange.getStart() > cached.getStart()) {
diff = cached.length();
}
for (int i = 0; i < newRange.length()
&& i + diff < itemIds.size(); ++i) {
Object itemId = itemIds.get(i + diff);
Item item = container.getItem(itemId);
rows.set(i, getRowData(getGrid().getColumns(), itemId, item));
}
rpc.setRowData(firstRowToPush, rows);
activeItemHandler.addActiveItems(itemIds);
}