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.renderer;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.ui.api.action.ActionDefinition;
38 import info.magnolia.ui.api.availability.AvailabilityChecker;
39 import info.magnolia.ui.api.availability.AvailabilityDefinition;
40 import info.magnolia.ui.api.event.ChooseDialogEventBus;
41 import info.magnolia.ui.api.view.View;
42 import info.magnolia.ui.dialog.actionarea.ActionListener;
43 import info.magnolia.ui.dialog.actionarea.renderer.DefaultEditorActionRenderer;
44 import info.magnolia.ui.framework.overlay.ViewAdapter;
45 import info.magnolia.ui.workbench.event.SelectionChangedEvent;
46
47 import java.util.Collections;
48 import java.util.Set;
49
50 import javax.inject.Inject;
51 import javax.inject.Named;
52
53 import com.google.common.collect.Lists;
54 import com.vaadin.ui.Component;
55
56
57
58
59
60
61 public class SelectionSensitiveActionRenderer extends DefaultEditorActionRenderer {
62
63 private final EventBus chooseDialogEventBus;
64 private final AvailabilityChecker availabilityChecker;
65
66 @Inject
67 public SelectionSensitiveActionRenderer(@Named(ChooseDialogEventBus.NAME) EventBus chooseDialogEventBus, AvailabilityChecker availabilityChecker) {
68 this.chooseDialogEventBus = chooseDialogEventBus;
69 this.availabilityChecker = availabilityChecker;
70 }
71
72 @Override
73 public View start(final ActionDefinition definition, ActionListener listener) {
74 View view = super.start(definition, listener);
75 final Component button = view.asVaadinComponent();
76 chooseDialogEventBus.addHandler(SelectionChangedEvent.class, new SelectionChangedEvent.Handler() {
77
78 @Override
79 public void onSelectionChanged(SelectionChangedEvent event) {
80 Set<Object> itemIds = event.getItemIds();
81 if (itemIds == null || itemIds.isEmpty()) {
82 itemIds = Collections.emptySet();
83 }
84
85 AvailabilityDefinition availability = definition.getAvailability();
86 button.setEnabled(availabilityChecker.isAvailable(availability, Lists.newLinkedList(itemIds)));
87 }
88 });
89 return new ViewAdapter(button);
90 }
91
92 }