1 package info.magnolia.ui.contentapp.browser;
2
3 import info.magnolia.ui.contentapp.Datasource;
4
5 import java.util.function.Predicate;
6
7 import com.vaadin.ui.Grid;
8
9
10
11
12
13 class MagnoliaGridDecoration<T> {
14
15 private final Grid<T> grid;
16 private Predicate<T> itemInteractionAvailability;
17 private Datasource<T> datasource;
18
19 private MagnoliaGridDecoration(Grid<T> grid,
20 Predicate<T> itemInteractionAvailability,
21 Datasource<T> datasource) {
22 this.itemInteractionAvailability = itemInteractionAvailability;
23 this.datasource = datasource;
24 this.grid = grid;
25 }
26
27 static <T> void addCommonConfiguration(Grid<T> grid,
28 Predicate<T> itemInteractionAvailability,
29 Datasource<T> datasource) {
30 grid.getEditor().addOpenListener(e -> {
31 if (!itemInteractionAvailability.test(e.getBean())) {
32 grid.getEditor().cancel();
33 grid.getDataProvider().refreshAll();
34 }
35 });
36
37 grid.getEditor().addSaveListener(event -> datasource.commit(event.getBean()));
38
39 grid.addSelectionListener(e -> e.getAllSelectedItems().forEach(item -> {
40 if (!itemInteractionAvailability.test(item)) {
41 grid.deselect(item);
42 }
43 }));
44 }
45
46 }