diff options
author | Teemu Suo-Anttila <teemusa@vaadin.com> | 2015-11-18 15:09:03 +0100 |
---|---|---|
committer | Vaadin Code Review <review@vaadin.com> | 2016-03-04 08:02:01 +0000 |
commit | d8c49d8cfeb4b392bf49bfd116d2bcf4476ed650 (patch) | |
tree | d498372c5e1d908a6a2256528f9f9ec4f4a512e0 | |
parent | b943ceffbc4fc02e73304a8a4e103738ec9daa0b (diff) | |
download | vaadin-framework-d8c49d8cfeb4b392bf49bfd116d2bcf4476ed650.tar.gz vaadin-framework-d8c49d8cfeb4b392bf49bfd116d2bcf4476ed650.zip |
Remove dead code, add test component with data communication (#19266)
Test component has simple buttons for requesting next and previous page.
The communication can be tracked through debug logging and all currently
available objects are drawn on the screen as Json
Change-Id: I850d7223e417437b4e26f236b457b939542ab623
4 files changed, 354 insertions, 26 deletions
diff --git a/client/src/com/vaadin/client/connectors/RpcDataSourceConnector.java b/client/src/com/vaadin/client/connectors/RpcDataSourceConnector.java index 6dc6ed4ea8..7a50a24b39 100644 --- a/client/src/com/vaadin/client/connectors/RpcDataSourceConnector.java +++ b/client/src/com/vaadin/client/connectors/RpcDataSourceConnector.java @@ -211,13 +211,13 @@ public class RpcDataSourceConnector extends AbstractExtensionConnector { protected void setRowData(int firstRowIndex, List<JsonObject> rowData) { super.setRowData(firstRowIndex, rowData); - /* - * Intercepting details information from the data source, rerouting - * them back to the GridConnector (as a details listener) - */ - for (int i = 0; i < rowData.size(); i++) { - detailsListener.reapplyDetailsVisibility(firstRowIndex + i, - rowData.get(i)); + // TODO: Move this out of the RpcDataSource. Should be handled + // through some more generic interface, or specifically by Grid. + if (detailsListener != null) { + for (int i = 0; i < rowData.size(); i++) { + detailsListener.reapplyDetailsVisibility(firstRowIndex + i, + rowData.get(i)); + } } } diff --git a/server/src/com/vaadin/server/communication/data/RpcDataProviderExtension.java b/server/src/com/vaadin/server/communication/data/RpcDataProviderExtension.java index 6aaeec42b0..f839437231 100644 --- a/server/src/com/vaadin/server/communication/data/RpcDataProviderExtension.java +++ b/server/src/com/vaadin/server/communication/data/RpcDataProviderExtension.java @@ -37,6 +37,7 @@ import com.vaadin.data.Property; import com.vaadin.data.Property.ValueChangeEvent; import com.vaadin.data.Property.ValueChangeListener; import com.vaadin.data.Property.ValueChangeNotifier; +import com.vaadin.server.AbstractClientConnector; import com.vaadin.server.AbstractExtension; import com.vaadin.server.ClientConnector; import com.vaadin.server.KeyMapper; @@ -44,8 +45,6 @@ import com.vaadin.shared.data.DataProviderRpc; import com.vaadin.shared.data.DataRequestRpc; import com.vaadin.shared.ui.grid.GridState; import com.vaadin.shared.ui.grid.Range; -import com.vaadin.ui.Grid; -import com.vaadin.ui.Grid.Column; import elemental.json.Json; import elemental.json.JsonArray; @@ -194,10 +193,6 @@ public class RpcDataProviderExtension extends AbstractExtension { } } - public void addColumns(Collection<Column> addedColumns) { - updateRowData(itemId); - } - private void internalAddProperties() { for (final Object propertyId : item.getItemPropertyIds()) { Property<?> property = item.getItemProperty(propertyId); @@ -207,10 +202,6 @@ public class RpcDataProviderExtension extends AbstractExtension { } } } - - public void removeColumns(Collection<Column> removedColumns) { - - } } private final Container container; @@ -397,15 +388,8 @@ public class RpcDataProviderExtension extends AbstractExtension { return rowObject; } - /** - * Makes the data source available to the given {@link Grid} component. - * - * @param component - * the remote data grid component to extend - * @param columnKeys - * the key mapper for columns - */ - public void extend(Grid component) { + @Override + public void extend(AbstractClientConnector component) { super.extend(component); } diff --git a/uitest/src/com/vaadin/tests/dataprovider/DataProviderTestUI.java b/uitest/src/com/vaadin/tests/dataprovider/DataProviderTestUI.java new file mode 100644 index 0000000000..27425fb8c8 --- /dev/null +++ b/uitest/src/com/vaadin/tests/dataprovider/DataProviderTestUI.java @@ -0,0 +1,187 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.dataprovider; + +import java.util.Collection; +import java.util.Collections; +import java.util.LinkedHashMap; +import java.util.Map; + +import com.vaadin.annotations.Widgetset; +import com.vaadin.data.Container; +import com.vaadin.data.Item; +import com.vaadin.data.Property; +import com.vaadin.data.util.AbstractContainer; +import com.vaadin.server.VaadinRequest; +import com.vaadin.server.communication.data.DataGenerator; +import com.vaadin.server.communication.data.RpcDataProviderExtension; +import com.vaadin.tests.components.AbstractTestUIWithLog; +import com.vaadin.tests.widgetset.TestingWidgetSet; +import com.vaadin.ui.AbstractComponent; + +import elemental.json.JsonObject; + +@Widgetset(TestingWidgetSet.NAME) +public class DataProviderTestUI extends AbstractTestUIWithLog { + + public static class DataProviderTester extends AbstractComponent { + + private RpcDataProviderExtension dataProvider; + + public DataProviderTester(Container c) { + dataProvider = new RpcDataProviderExtension(c); + dataProvider.extend(this); + + /* dataProvider.addDataGenerator(new DataGenerator() { + + @Override + public void generateData(Object itemId, Item item, + JsonObject rowData) { + rowData.put("key", itemId.toString()); + } + + @Override + public void destroyData(Object itemId) { + } + }); */ + } + } + + @Override + protected void setup(VaadinRequest request) { + Container c = new AbstractContainer() { + + Map<Object, Item> items = new LinkedHashMap<Object, Item>(); + + @Override + public Item getItem(Object itemId) { + return items.get(itemId); + } + + @Override + public Collection<?> getContainerPropertyIds() { + return Collections.emptySet(); + } + + @Override + public Collection<?> getItemIds() { + return items.keySet(); + } + + @Override + public Property getContainerProperty(Object itemId, + Object propertyId) { + throw new UnsupportedOperationException( + "No properties in this container."); + } + + @Override + public Class<?> getType(Object propertyId) { + throw new UnsupportedOperationException( + "No properties in this container."); + } + + @Override + public int size() { + return items.size(); + } + + @Override + public boolean containsId(Object itemId) { + return items.containsKey(itemId); + } + + @Override + public Item addItem(Object itemId) + throws UnsupportedOperationException { + final Item value = new Item() { + + @Override + public Property getItemProperty(Object id) { + throw new UnsupportedOperationException( + "No properties in this container."); + } + + @Override + public Collection<?> getItemPropertyIds() { + return Collections.emptySet(); + } + + @Override + public boolean addItemProperty(Object id, Property property) + throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "No properties in this container."); + } + + @Override + public boolean removeItemProperty(Object id) + throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "No properties in this container."); + } + }; + + items.put(itemId, value); + fireItemSetChange(); + return value; + } + + @Override + public Object addItem() throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "No id generation in this container."); + } + + @Override + public boolean removeItem(Object itemId) + throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "No removing from this container."); + } + + @Override + public boolean addContainerProperty(Object propertyId, + Class<?> type, Object defaultValue) + throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "No properties in this container."); + } + + @Override + public boolean removeContainerProperty(Object propertyId) + throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "No properties in this container."); + } + + @Override + public boolean removeAllItems() + throws UnsupportedOperationException { + throw new UnsupportedOperationException( + "No removing from this container."); + } + }; + + final DataProviderTester tester = new DataProviderTester(c); + tester.setSizeFull(); + addComponent(tester); + + for (Integer i = 0; i < 1000; ++i) { + c.addItem(i); + } + } +} diff --git a/uitest/src/com/vaadin/tests/widgetset/client/dataprovider/DataProviderTesterConnector.java b/uitest/src/com/vaadin/tests/widgetset/client/dataprovider/DataProviderTesterConnector.java new file mode 100644 index 0000000000..c96d816532 --- /dev/null +++ b/uitest/src/com/vaadin/tests/widgetset/client/dataprovider/DataProviderTesterConnector.java @@ -0,0 +1,157 @@ +/* + * Copyright 2000-2014 Vaadin Ltd. + * + * Licensed under the Apache License, Version 2.0 (the "License"); you may not + * use this file except in compliance with the License. You may obtain a copy of + * the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT + * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the + * License for the specific language governing permissions and limitations under + * the License. + */ +package com.vaadin.tests.widgetset.client.dataprovider; + +import com.google.gwt.core.client.Scheduler; +import com.google.gwt.core.client.Scheduler.ScheduledCommand; +import com.google.gwt.event.dom.client.ClickEvent; +import com.google.gwt.event.dom.client.ClickHandler; +import com.google.gwt.user.client.ui.Button; +import com.google.gwt.user.client.ui.FlowPanel; +import com.google.gwt.user.client.ui.HTML; +import com.vaadin.client.data.DataChangeHandler; +import com.vaadin.client.data.DataSource; +import com.vaadin.client.data.HasDataSource; +import com.vaadin.client.ui.AbstractComponentConnector; +import com.vaadin.shared.ui.Connect; +import com.vaadin.shared.ui.grid.Range; +import com.vaadin.tests.dataprovider.DataProviderTestUI.DataProviderTester; + +import elemental.json.JsonObject; + +@Connect(DataProviderTester.class) +public class DataProviderTesterConnector extends AbstractComponentConnector + implements HasDataSource { + + public static class DataProviderTesterWidget extends FlowPanel { + + private DataSource<JsonObject> datasource; + private Range available; + private int pageLength = 20; + private int page = 0; + + private boolean isScheduled = false; + private ScheduledCommand redrawCmd = new ScheduledCommand() { + + @Override + public void execute() { + while (getWidgetCount() > 1) { + remove(1); + } + + if (available != null) { + for (int i = available.getStart(); i < available.getEnd(); ++i) { + add(new HTML(i + ": " + datasource.getRow(i).toJson())); + } + } + + isScheduled = false; + } + }; + + public DataProviderTesterWidget() { + final FlowPanel w = new FlowPanel(); + add(w); + final Button previous = new Button("<"); + previous.addClickHandler(new ClickHandler() { + @Override + public void onClick(ClickEvent event) { + if (page > 0) { + --page; + requestData(); + } + } + }); + final Button next = new Button(">"); + next.addClickHandler(new ClickHandler() { + + @Override + public void onClick(ClickEvent event) { + if (page < (datasource.size() / pageLength) - 1) { + ++page; + requestData(); + } + } + + }); + + w.add(previous); + w.add(next); + } + + public void setDataSource(DataSource<JsonObject> ds) { + + datasource = ds; + ds.setDataChangeHandler(new DataChangeHandler() { + + @Override + public void resetDataAndSize(int estimatedNewDataSize) { + redraw(); + } + + @Override + public void dataUpdated(int firstRowIndex, int numberOfRows) { + redraw(); + } + + @Override + public void dataRemoved(int firstRowIndex, int numberOfRows) { + redraw(); + } + + @Override + public void dataAvailable(int firstRowIndex, int numberOfRows) { + available = Range.withLength(firstRowIndex, numberOfRows); + } + + @Override + public void dataAdded(int firstRowIndex, int numberOfRows) { + redraw(); + } + }); + + datasource.ensureAvailability(0, pageLength); + } + + protected void requestData() { + datasource + .ensureAvailability(page * pageLength, Math.min( + datasource.size() - page * pageLength, pageLength)); + } + + protected void redraw() { + if (!isScheduled) { + Scheduler.get().scheduleFinally(redrawCmd); + isScheduled = true; + } + } + } + + @Override + public DataProviderTesterWidget getWidget() { + return (DataProviderTesterWidget) super.getWidget(); + } + + @Override + protected void init() { + super.init(); + } + + @Override + public void setDataSource(DataSource<JsonObject> ds) { + getWidget().setDataSource(ds); + } +} |