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.admincentral.shellapp.pulse.item.list;
35
36 import info.magnolia.objectfactory.Components;
37 import info.magnolia.registry.RegistrationException;
38 import info.magnolia.ui.admincentral.shellapp.pulse.item.ConfiguredPulseListDefinition;
39 import info.magnolia.ui.admincentral.shellapp.pulse.item.PulseListDefinition;
40 import info.magnolia.ui.admincentral.shellapp.pulse.item.detail.PulseDetailPresenter;
41 import info.magnolia.ui.admincentral.shellapp.pulse.item.detail.PulseItemCategory;
42 import info.magnolia.ui.admincentral.shellapp.pulse.item.list.footer.PulseListFooterPresenter;
43 import info.magnolia.ui.api.action.ActionDefinition;
44 import info.magnolia.ui.api.action.ActionExecutionException;
45 import info.magnolia.ui.api.availability.AvailabilityChecker;
46 import info.magnolia.ui.api.availability.AvailabilityDefinition;
47 import info.magnolia.ui.api.view.View;
48
49 import java.util.List;
50 import java.util.Set;
51
52 import org.slf4j.Logger;
53 import org.slf4j.LoggerFactory;
54
55
56
57
58 public abstract class AbstractPulseListPresenter implements PulseListPresenter, PulseDetailPresenter.Listener, PulseListView.Listener, PulseListFooterPresenter.Listener {
59
60 private static final Logger log = LoggerFactory.getLogger(AbstractPulseListPresenter.class);
61
62 protected final PulseListContainer container;
63 protected final AvailabilityChecker availabilityChecker;
64 protected final PulseListActionExecutor actionExecutor;
65 protected final PulseListFooterPresenter pulseListFooterPresenter;
66 protected PulseListDefinition definition;
67
68 protected Listener listener;
69
70
71
72
73 @Deprecated
74 protected AbstractPulseListPresenter(PulseListContainer container) {
75 this.container = container;
76 this.availabilityChecker = Components.getComponent(AvailabilityChecker.class);
77 this.actionExecutor = Components.getComponent(PulseListActionExecutor.class);
78 this.pulseListFooterPresenter = Components.getComponent(PulseListFooterPresenter.class);
79
80 log.warn("You are using a deprecated not compatible constructor. Please update your implementation to use the new one!");
81 }
82
83 protected AbstractPulseListPresenter(PulseListContainer container, ConfiguredPulseListDefinition definition,
84 AvailabilityChecker availabilityChecker, PulseListActionExecutor pulseListActionExecutor, PulseListFooterPresenter pulseListFooterPresenter) {
85 this.container = container;
86 this.availabilityChecker = availabilityChecker;
87 this.actionExecutor = pulseListActionExecutor;
88 this.pulseListFooterPresenter = pulseListFooterPresenter;
89 this.definition = definition;
90
91 this.actionExecutor.setActionsDefinition(definition.getBulkActions());
92 this.pulseListFooterPresenter.setListener(this);
93 }
94
95 @Override
96 public void setListener(Listener listener) {
97 this.listener = listener;
98 }
99
100 @Override
101 public void showList() {
102 container.refresh();
103 listener.showList();
104 }
105
106 @Override
107 public void setGrouping(boolean checked) {
108 container.setGrouping(checked);
109 }
110
111 @Override
112 public void filterByItemCategory(PulseItemCategory category) {
113 container.filterByItemCategory(category);
114 }
115
116 @Override
117 public abstract PulseItemCategory getCategory();
118
119 @Override
120 public abstract View openItem(String itemId) throws RegistrationException;
121
122 @Override
123 public abstract int getPendingItemCount();
124
125 protected abstract List<Object> getSelectedItemIds();
126
127 @Override
128 public void onSelectionChanged(Set<Object> itemIds) {
129 pulseListFooterPresenter.updateStatus(getTotalEntriesAmount(), itemIds.size());
130
131 for (ActionDefinition actionDefinition : definition.getBulkActions()) {
132 AvailabilityDefinition availability = actionDefinition.getAvailability();
133 pulseListFooterPresenter.setActionEnabled(actionDefinition.getName(), availabilityChecker.isAvailable(availability, getSelectedItemIds()));
134 }
135
136 }
137
138 @Override
139 public void onItemSetChanged(long totalEntriesAmount) {
140 if (pulseListFooterPresenter != null) {
141 pulseListFooterPresenter.updateStatus(getTotalEntriesAmount(), 0);
142 }
143 }
144
145 @Override
146 public void onBulkActionTriggered(String actionId) {
147 executeAction(actionId);
148 }
149
150 protected void executeAction(String actionName) {
151 try {
152 AvailabilityDefinition availability = actionExecutor.getActionDefinition(actionName).getAvailability();
153 if (availabilityChecker.isAvailable(availability, getSelectedItemIds())) {
154 actionExecutor.execute(actionName, new Object[]{getSelectedItemIds()});
155 }
156 } catch (ActionExecutionException e) {
157 log.error("An error occurred while executing action [{}]", actionName, e);
158 }
159 }
160
161 }