From 34dc467f08440e2b1a4e563ede205590002ac64e Mon Sep 17 00:00:00 2001 From: Johannes Dahlström Date: Thu, 8 Sep 2016 21:26:35 +0300 Subject: Reimplement Grid selection model in terms of AbstractSingleSelection Change-Id: Id21cb0df32e07bd01f90a29a814dcf0775067bfa --- server/src/main/java/com/vaadin/ui/Grid.java | 48 ++++++++++++++++++++++++---- 1 file changed, 42 insertions(+), 6 deletions(-) (limited to 'server/src/main') diff --git a/server/src/main/java/com/vaadin/ui/Grid.java b/server/src/main/java/com/vaadin/ui/Grid.java index c895ad08c3..705a9ca890 100644 --- a/server/src/main/java/com/vaadin/ui/Grid.java +++ b/server/src/main/java/com/vaadin/ui/Grid.java @@ -29,11 +29,11 @@ import java.util.LinkedHashSet; import java.util.List; import java.util.Map; import java.util.Objects; +import java.util.Optional; import java.util.Set; import java.util.function.Function; import java.util.stream.Stream; -import com.vaadin.data.selection.SingleSelection; import com.vaadin.event.ConnectorEvent; import com.vaadin.event.EventListener; import com.vaadin.server.KeyMapper; @@ -41,7 +41,6 @@ import com.vaadin.server.data.SortOrder; import com.vaadin.shared.MouseEventDetails; import com.vaadin.shared.Registration; import com.vaadin.shared.data.DataCommunicatorConstants; -import com.vaadin.shared.data.selection.SelectionModel; import com.vaadin.shared.data.sort.SortDirection; import com.vaadin.shared.ui.grid.ColumnState; import com.vaadin.shared.ui.grid.GridConstants; @@ -67,8 +66,7 @@ import elemental.json.JsonValue; * @param * the grid bean type */ -public class Grid extends AbstractListing> - implements HasComponents { +public class Grid extends AbstractSingleSelect implements HasComponents { @Deprecated private static final Method ITEM_CLICK_METHOD = ReflectTools @@ -197,7 +195,7 @@ public class Grid extends AbstractListing> * * @param */ - public static abstract class AbstractGridExtension + public abstract static class AbstractGridExtension extends AbstractListingExtension { @Override @@ -776,6 +774,44 @@ public class Grid extends AbstractListing> } } + private final class SingleSelection extends AbstractSingleSelection { + private T selectedItem = null; + + SingleSelection() { + addDataGenerator((item, json) -> { + if (isSelected(item)) { + json.put(DataCommunicatorConstants.SELECTED, true); + } + }); + } + + @Override + public Optional getSelectedItem() { + return Optional.ofNullable(selectedItem); + } + + @Override + protected boolean isKeySelected(String key) { + return Objects.equals(key, getSelectedKey()); + } + + @Override + protected String getSelectedKey() { + return itemToKey(selectedItem); + } + + @Override + protected void doSetSelectedKey(String key) { + if (selectedItem != null) { + getDataCommunicator().refresh(selectedItem); + } + selectedItem = keyToItem(key); + if (selectedItem != null) { + getDataCommunicator().refresh(selectedItem); + } + } + } + private KeyMapper> columnKeys = new KeyMapper<>(); private Set> columnSet = new LinkedHashSet<>(); private List>> sortOrder = new ArrayList<>(); @@ -788,7 +824,7 @@ public class Grid extends AbstractListing> * Constructor for the {@link Grid} component. */ public Grid() { - setSelectionModel(new SingleSelection<>(this)); + setSelectionModel(new SingleSelection()); registerRpc(new GridServerRpcImpl()); detailsManager = new DetailsManager<>(); addExtension(detailsManager); -- cgit v1.2.3