private Collection<T> data;
private Collection<TypedDataGenerator<T>> generators = new LinkedHashSet<TypedDataGenerator<T>>();
+ private DataProviderClientRpc rpc;
/**
* Creates a new DataProvider with the given Collection.
*/
protected DataProvider(Collection<T> data) {
this.data = data;
+
+ rpc = getRpcProxy(DataProviderClientRpc.class);
registerRpc(createRpc());
}
data.set(i++, getDataObject(item));
}
- getRpcProxy(DataProviderClientRpc.class).setData(firstIndex, data);
+ rpc.setData(firstIndex, data);
}
/**
return new DataRequestRpcImpl();
}
+ /**
+ * Informs the DataProvider that an item has been added. It is assumed to be
+ * the last item in the collection.
+ *
+ * @param item
+ * item added to collection
+ */
+ public void add(T item) {
+ rpc.add(getDataObject(item));
+ }
+
+ /**
+ * Informs the DataProvider that an item has been removed.
+ *
+ * @param item
+ * item removed from collection
+ */
+ public void remove(T item) {
+ rpc.drop(getDataObject(item));
+ }
+
}
import com.vaadin.shared.communication.ClientRpc;
import elemental.json.JsonArray;
+import elemental.json.JsonObject;
/**
* RPC interface used by DataProvider to send data to the client-side.
*/
void setData(long firstIndex, JsonArray data);
+ /**
+ * Adds a new data object to the client-side DataSource. The new data object
+ * is added at the end of the data source.
+ *
+ * @param dataObject
+ * single added data object
+ */
+ void add(JsonObject dataObject);
+
+ /**
+ * Removes data from the client-side DataSource.
+ *
+ * @param dataObject
+ * single removed data object
+ */
+ void drop(JsonObject dataObject);
+
}
*/
package com.vaadin.tests.dataprovider;
+import java.util.ArrayList;
import java.util.Collection;
-import java.util.LinkedHashSet;
+import java.util.List;
import java.util.Random;
import com.vaadin.annotations.Widgetset;
import com.vaadin.tests.fieldgroup.ComplexPerson;
import com.vaadin.tests.widgetset.TestingWidgetSet;
import com.vaadin.ui.AbstractComponent;
+import com.vaadin.ui.Button;
+import com.vaadin.ui.Button.ClickEvent;
+import com.vaadin.ui.Button.ClickListener;
+import com.vaadin.ui.HorizontalLayout;
import elemental.json.JsonObject;
public static class DummyDataComponent extends AbstractComponent {
private DataProvider<ComplexPerson> dataProvider;
+ private Collection<ComplexPerson> data;
public DummyDataComponent(Collection<ComplexPerson> data) {
+ this.data = data;
dataProvider = DataProvider.create(data, this);
dataProvider
.addDataGenerator(new TypedDataGenerator<ComplexPerson>() {
});
}
+ void addItem(ComplexPerson person) {
+ if (data.add(person)) {
+ dataProvider.add(person);
+ }
+ }
+
+ void removeItem(ComplexPerson person) {
+ if (data.remove(person)) {
+ dataProvider.remove(person);
+ }
+ }
}
+ private Random r = new Random(1337);
+ private List<ComplexPerson> persons = getPersons(20);
+ private DummyDataComponent dummy;
+
@Override
protected void setup(VaadinRequest request) {
- addComponent(new DummyDataComponent(getPersons(20)));
+ dummy = new DummyDataComponent(persons);
+
+ Button remove = new Button("Remove third", new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ dummy.removeItem(persons.get(2));
+ }
+ });
+ Button add = new Button("Add new", new ClickListener() {
+
+ @Override
+ public void buttonClick(ClickEvent event) {
+ dummy.addItem(ComplexPerson.create(r));
+ }
+ });
+ addComponent(new HorizontalLayout(add, remove));
+ addComponent(dummy);
}
- private Collection<ComplexPerson> getPersons(int count) {
- Random r = new Random(1337);
- Collection<ComplexPerson> c = new LinkedHashSet<ComplexPerson>();
+ private List<ComplexPerson> getPersons(int count) {
+ List<ComplexPerson> c = new ArrayList<ComplexPerson>();
for (int i = 0; i < count; ++i) {
c.add(ComplexPerson.create(r));
}