diff options
author | Mikael Grankvist <mikael.grankvist@vaadin.com> | 2017-01-26 09:01:07 +0200 |
---|---|---|
committer | Mikael Grankvist <mikael.grankvist@vaadin.com> | 2017-01-26 09:01:07 +0200 |
commit | 5703dc03dc57cf4751360b97307796519bc321b0 (patch) | |
tree | cd339036dff631e3abdf2d7de214852d47734701 | |
parent | fb2ceee075473e10eb94f0c49bc5f4b36836174d (diff) | |
download | vaadin-framework-5703dc03dc57cf4751360b97307796519bc321b0.tar.gz vaadin-framework-5703dc03dc57cf4751360b97307796519bc321b0.zip |
Add select/deselect using collection methods
Added select(Collection<T>) and deselect(Collection<T>) methods
to selection model multi.
-rw-r--r-- | server/src/main/java/com/vaadin/data/SelectionModel.java | 51 | ||||
-rw-r--r-- | server/src/test/java/com/vaadin/tests/components/grid/GridMultiSelectionModelTest.java | 30 |
2 files changed, 74 insertions, 7 deletions
diff --git a/server/src/main/java/com/vaadin/data/SelectionModel.java b/server/src/main/java/com/vaadin/data/SelectionModel.java index 397e2a1557..2f22c81aa1 100644 --- a/server/src/main/java/com/vaadin/data/SelectionModel.java +++ b/server/src/main/java/com/vaadin/data/SelectionModel.java @@ -17,12 +17,13 @@ package com.vaadin.data; import java.io.Serializable; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.LinkedHashSet; import java.util.Objects; import java.util.Optional; import java.util.Set; -import java.util.stream.Stream; +import java.util.stream.Collectors; import com.vaadin.event.selection.SelectionListener; import com.vaadin.shared.Registration; @@ -167,13 +168,33 @@ public interface SelectionModel<T> extends Serializable { */ public default void selectItems(T... items) { Objects.requireNonNull(items); - Stream.of(items).forEach(Objects::requireNonNull); + selectItems(Arrays.asList(items)); + } - updateSelection(new LinkedHashSet<>(Arrays.asList(items)), + /** + * Adds the given items to the set of currently selected items. + * <p> + * By default this does not clear any previous selection. To do that, + * use {@link #deselectAll()}. + * <p> + * If the all the items were already selected, this is a NO-OP. + * <p> + * This is a short-hand for {@link #updateSelection(Set, Set)} with + * nothing to deselect. + * + * @param items + * to add to selection, not {@code null} + */ + public default void selectItems(Collection<T> items) { + Objects.requireNonNull(items); + items.stream().forEach(Objects::requireNonNull); + + updateSelection( + new LinkedHashSet<>( + items.stream().collect(Collectors.toList())), Collections.emptySet()); } - @SuppressWarnings("unchecked") @Override public default void deselect(T item) { deselectItems(item); @@ -192,10 +213,26 @@ public interface SelectionModel<T> extends Serializable { */ public default void deselectItems(T... items) { Objects.requireNonNull(items); - Stream.of(items).forEach(Objects::requireNonNull); + deselectItems(Arrays.asList(items)); + } + + /** + * Removes the given items from the set of currently selected items. + * <p> + * If the none of the items were selected, this is a NO-OP. + * <p> + * This is a short-hand for {@link #updateSelection(Set, Set)} with + * nothing to select. + * + * @param items + * to remove from selection, not {@code null} + */ + public default void deselectItems(Collection<T> items) { + Objects.requireNonNull(items); + items.stream().forEach(Objects::requireNonNull); - updateSelection(Collections.emptySet(), - new LinkedHashSet<>(Arrays.asList(items))); + updateSelection(Collections.emptySet(), new LinkedHashSet<>( + items.stream().collect(Collectors.toList()))); } /** diff --git a/server/src/test/java/com/vaadin/tests/components/grid/GridMultiSelectionModelTest.java b/server/src/test/java/com/vaadin/tests/components/grid/GridMultiSelectionModelTest.java index c45bad66f0..27523677d6 100644 --- a/server/src/test/java/com/vaadin/tests/components/grid/GridMultiSelectionModelTest.java +++ b/server/src/test/java/com/vaadin/tests/components/grid/GridMultiSelectionModelTest.java @@ -7,6 +7,7 @@ import static org.junit.Assert.assertTrue; import java.util.ArrayList; import java.util.Arrays; +import java.util.Collection; import java.util.Collections; import java.util.LinkedHashMap; import java.util.LinkedHashSet; @@ -306,6 +307,18 @@ public class GridMultiSelectionModelTest { } @Test + public void selectItemsUsingCollection() { + Collection<Person> personCollection = Arrays.asList(PERSON_C, PERSON_B); + selectionModel.selectItems(personCollection); + + assertFalse(selectionModel.isSelected(PERSON_A)); + assertTrue(selectionModel.isSelected(PERSON_B)); + assertTrue(selectionModel.isSelected(PERSON_C)); + + assertEquals("Got more events than expected", 1, events.get()); + } + + @Test public void deselectItems() { selectionModel.selectItems(PERSON_C, PERSON_A, PERSON_B); @@ -335,6 +348,23 @@ public class GridMultiSelectionModelTest { } @Test + public void deselectItemsUsingCollection() { + selectionModel.selectItems(PERSON_C, PERSON_A, PERSON_B); + + Collection<Person> personCollection = Arrays.asList(PERSON_A, PERSON_B); + selectionModel.deselectItems(personCollection); + + assertEquals(PERSON_C, + selectionModel.getFirstSelectedItem().orElse(null)); + assertEquals(Optional.of(PERSON_C), + selectionModel.getFirstSelectedItem()); + + assertFalse(selectionModel.isSelected(PERSON_A)); + assertFalse(selectionModel.isSelected(PERSON_B)); + assertTrue(selectionModel.isSelected(PERSON_C)); + } + + @Test public void selectionEvent_newSelection_oldSelection() { selectionModel.selectItems(PERSON_C, PERSON_A, PERSON_B); |