View Javadoc
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   * Functionality common to Magnolia-specific {@link com.vaadin.ui.Grid} implementations.
11   * @param <T>
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  }