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.workbench;
35
36 import info.magnolia.event.EventBus;
37 import info.magnolia.i18nsystem.SimpleTranslator;
38 import info.magnolia.ui.vaadin.integration.contentconnector.ContentConnector;
39 import info.magnolia.ui.workbench.event.SelectionChangedEvent;
40
41 import java.util.Set;
42
43 import javax.inject.Inject;
44
45 import com.vaadin.ui.Alignment;
46 import com.vaadin.ui.HorizontalLayout;
47 import com.vaadin.ui.Label;
48
49
50
51
52 public class WorkbenchStatusBarPresenter {
53
54 private final StatusBarView view;
55
56 private ContentConnector contentConnector;
57
58 private EventBus eventBus;
59
60 private final Label selectionLabel = new Label();
61
62 private ContentPresenter activeContentPresenter;
63
64 private boolean rootIsSelected;
65
66 private SimpleTranslator i18n;
67
68 @Inject
69 public WorkbenchStatusBarPresenter(StatusBarView view, ContentConnector contentConnector, SimpleTranslator i18n) {
70 this.view = view;
71 this.contentConnector = contentConnector;
72 this.i18n = i18n;
73 }
74
75 private void bindHandlers() {
76 eventBus.addHandler(SelectionChangedEvent.class, new SelectionChangedEvent.Handler() {
77
78 @Override
79 public void onSelectionChanged(SelectionChangedEvent event) {
80 setSelectedItems(event.getItemIds());
81 }
82 });
83 }
84
85 public StatusBarView start(EventBus eventBus, ContentPresenter activeContentPresenter) {
86
87 this.eventBus = eventBus;
88 this.activeContentPresenter = activeContentPresenter;
89
90 view.addComponent(selectionLabel, Alignment.TOP_LEFT);
91 ((HorizontalLayout) view).setExpandRatio(selectionLabel, 1);
92
93 bindHandlers();
94
95 refresh();
96
97 return view;
98 }
99
100 public void setSelectedItems(Set<Object> itemIds) {
101 if (!itemIds.isEmpty()) {
102 Object id = itemIds.iterator().next();
103 rootIsSelected = id.equals(contentConnector.getDefaultItemId());
104 setSelectedItem(id, itemIds.size());
105 } else {
106 rootIsSelected = true;
107 setSelectedItem(contentConnector.getDefaultItemId(), itemIds.size());
108 }
109 }
110
111 public void setSelectedItem(Object itemId, int totalSelected) {
112
113 if (rootIsSelected && totalSelected > 0) {
114 totalSelected--;
115 }
116 if (totalSelected == 1) {
117 String newValue = contentConnector.getItemUrlFragment(itemId);
118 selectionLabel.setValue(newValue);
119 selectionLabel.setDescription(newValue);
120 } else {
121 String selected = i18n.translate("ui-contentapp.statusbar.selected", totalSelected);
122 selectionLabel.setValue(selected);
123 selectionLabel.setDescription(selected);
124 }
125 }
126
127 public void refresh() {
128
129 if (activeContentPresenter == null) {
130 return;
131 }
132
133 int selected = activeContentPresenter.getSelectedItemIds().size();
134 if (selected == 1) {
135 setSelectedItem(activeContentPresenter.getSelectedItemIds().get(0), selected);
136 } else {
137 setSelectedItem(null, selected);
138 }
139 }
140
141 public void setActivePresenter(ContentPresenter activePresenter) {
142 this.activeContentPresenter = activePresenter;
143 }
144
145 }