1 package info.magnolia.ui.contentapp.browser;
2
3 import info.magnolia.ui.contentapp.Datasource;
4
5 import java.util.Set;
6 import java.util.function.Predicate;
7
8 import com.vaadin.ui.Grid;
9 import com.vaadin.ui.components.grid.MultiSelectionModelImpl;
10 import com.vaadin.ui.components.grid.SingleSelectionModelImpl;
11
12
13
14
15 class MagnoliaGridDecoration {
16
17 static <T> void addCommonConfiguration(Grid<T> grid,
18 Predicate<T> itemInteractionAvailability,
19 Datasource<T> datasource) {
20 grid.getEditor().addOpenListener(e -> {
21 if (!itemInteractionAvailability.test(e.getBean())) {
22 grid.getEditor().cancel();
23 grid.getDataProvider().refreshAll();
24 }
25 });
26 grid.addSelectionListener(e -> e.getAllSelectedItems().forEach(item -> {
27 if (!itemInteractionAvailability.test(item)) {
28 grid.deselect(item);
29 }
30 }));
31 }
32
33 static class MultiSelectionModel<T> extends MultiSelectionModelImpl<T> {
34 @Override
35 protected void updateSelection(Set<T> addedItems, Set<T> removedItems, boolean userOriginated) {
36 super.updateSelection(addedItems, removedItems, userOriginated);
37 }
38 }
39
40 static class SingleSelectionModel<T> extends SingleSelectionModelImpl<T> {
41 @Override
42 protected void setSelectedFromClient(String key) {
43 super.setSelectedFromClient(key);
44 }
45
46 @Override
47 protected T getData(String key) {
48 return super.getData(key);
49 }
50 }
51 }