Browse Source

Support non-indexed containers in RpcDataProvider (#19266)

Any other type of container is supported by getting all the item ids and
finding out the part we need to send to the client. This is not optimal,
but should work.

Change-Id: I02f05f31beddf506fc47a64bc21c98d142e809e0
feature/databinding
Teemu Suo-Anttila 8 years ago
parent
commit
3ecb2cab7c

+ 13
- 5
server/src/com/vaadin/server/communication/data/RpcDataProviderExtension.java View File

@@ -26,7 +26,7 @@ import java.util.List;
import java.util.Map;
import java.util.Set;

import com.vaadin.data.Container.Indexed;
import com.vaadin.data.Container;
import com.vaadin.data.Container.Indexed.ItemAddEvent;
import com.vaadin.data.Container.Indexed.ItemRemoveEvent;
import com.vaadin.data.Container.ItemSetChangeEvent;
@@ -213,7 +213,7 @@ public class RpcDataProviderExtension extends AbstractExtension {
}
}

private final Indexed container;
private final Container container;

private DataProviderRpc rpc;

@@ -275,7 +275,7 @@ public class RpcDataProviderExtension extends AbstractExtension {
* @param container
* the container to make available
*/
public RpcDataProviderExtension(Indexed container) {
public RpcDataProviderExtension(Container container) {
this.container = container;
rpc = getRpcProxy(DataProviderRpc.class);

@@ -356,8 +356,16 @@ public class RpcDataProviderExtension extends AbstractExtension {
fullRange = newRange.combineWith(cached);
}

List<?> itemIds = container.getItemIds(fullRange.getStart(),
fullRange.length());
List<?> itemIds;
if (container instanceof Container.Indexed) {
itemIds = ((Container.Indexed) container).getItemIds(
fullRange.getStart(), fullRange.length());
} else {
// This is nowhere near optimal. You should really use Indexed
// containers.
itemIds = new ArrayList<Object>(container.getItemIds()).subList(
fullRange.getStart(), fullRange.getEnd());
}

JsonArray rows = Json.createArray();


Loading…
Cancel
Save