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