1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34 package info.magnolia.ui.contentapp;
35
36 import static java.util.stream.Collectors.*;
37
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.objectfactory.Components;
40 import info.magnolia.ui.api.i18n.I18NAuthoringSupport;
41 import info.magnolia.ui.availability.AvailabilityChecker;
42 import info.magnolia.ui.contentapp.browser.ListPresenter;
43 import info.magnolia.ui.contentapp.configuration.GridViewDefinition;
44 import info.magnolia.ui.contentapp.configuration.column.ColumnDefinition;
45 import info.magnolia.ui.contentapp.observation.JcrDataSourceObservation;
46 import info.magnolia.ui.datasource.DatasourceDefinition;
47 import info.magnolia.ui.datasource.jcr.JcrDatasource;
48 import info.magnolia.ui.datasource.jcr.JcrDatasourceDefinition;
49 import info.magnolia.ui.editor.JcrItemPropertySet;
50
51 import java.util.List;
52
53 import javax.inject.Inject;
54 import javax.jcr.Item;
55 import javax.jcr.Node;
56
57 import com.vaadin.data.PropertySet;
58
59
60
61
62 public class JcrListPresenter extends ListPresenter<Node> {
63
64 private final JcrItemInteractionAvailability interactionAvailability;
65 private final I18NAuthoringSupport<Item> i18NAuthoringSupport;
66 private final JcrDatasourceDefinition datasourceDefinition;
67
68 @Inject
69 JcrListPresenter(
70 GridViewDefinition<Node> definition,
71 ComponentProvider componentProvider,
72 AvailabilityChecker<Node> availabilityChecker,
73 JcrDatasource datasource,
74 JcrDataSourceObservation datasourceObservation, I18NAuthoringSupport<Item> i18NAuthoringSupport, JcrDatasourceDefinition datasourceDefinition) {
75 super(definition, componentProvider, availabilityChecker, (Datasource) datasource, datasourceObservation);
76 this.interactionAvailability = new JcrItemInteractionAvailability(datasource);
77 this.i18NAuthoringSupport = i18NAuthoringSupport;
78 this.datasourceDefinition = datasourceDefinition;
79 }
80
81
82
83
84 @Deprecated
85 public JcrListPresenter(GridViewDefinition<Node> definition, ComponentProvider componentProvider, AvailabilityChecker availabilityChecker, JcrDatasource datasource, JcrDataSourceObservation datasourceObservation) {
86 this(definition, componentProvider, availabilityChecker, datasource, datasourceObservation, Components.getComponent(I18NAuthoringSupport.class), (JcrDatasourceDefinition) Components.getComponent(DatasourceDefinition.class));
87 }
88
89 @Override
90 public FilterableListDataProvider<Node> createDataProvider() {
91 return FilterableListDataProvider.wrap(componentProvider.newInstance(JcrDataProvider.class));
92 }
93
94 @Override
95 protected PropertySet<Node> createPropertySet() {
96 final List<JcrItemPropertySet.JcrPropertyDescriptor> propertyDescriptors = definition.getColumns().stream().collect(toMap(ColumnDefinition::getName, ColumnDefinition::getType))
97 .entrySet().stream()
98 .map(entry -> JcrItemPropertySet.JcrPropertyDescriptor.builder()
99 .type((Class) entry.getValue())
100 .name(entry.getKey())
101 .nodeNameProperty(datasourceDefinition.getNodeNameProperty())
102 .build())
103 .collect(toList());
104 return (PropertySet) new JcrItemPropertySet(propertyDescriptors, i18NAuthoringSupport);
105 }
106
107 @Override
108 public boolean isItemAvailable(Node item) {
109 return this.interactionAvailability.isItemAvailable(item);
110 }
111 }