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.actionbar;
35
36 import info.magnolia.ui.actionbar.builder.ActionbarFactory;
37 import info.magnolia.ui.actionbar.definition.ActionbarDefinition;
38 import info.magnolia.ui.vaadin.actionbar.Actionbar;
39 import info.magnolia.ui.vaadin.actionbar.ActionbarView;
40
41 import org.slf4j.Logger;
42 import org.slf4j.LoggerFactory;
43
44 import com.vaadin.server.Resource;
45
46
47
48
49 public class ActionbarPresenter implements ActionbarView.Listener {
50
51
52
53
54 public interface Listener {
55
56 void onActionbarItemClicked(String itemName);
57
58 String getLabel(String itemName);
59
60 String getIcon(String itemName);
61
62 }
63
64 private static final Logger log = LoggerFactory.getLogger(ActionbarPresenter.class);
65
66 private static final String PREVIEW_SECTION_NAME = "preview";
67
68 private ActionbarDefinition definition;
69
70 private ActionbarView actionbar;
71
72 private Listener listener;
73
74 public ActionbarPresenter() {
75 }
76
77 public void setListener(Listener listener) {
78 this.listener = listener;
79 }
80
81
82
83
84
85 public ActionbarView start(final ActionbarDefinition definition) {
86 this.definition = definition;
87 actionbar = ActionbarFactory.build(definition, listener);
88 actionbar.setListener(this);
89 return actionbar;
90 }
91
92 public void setPreview(final Resource previewResource) {
93 if (previewResource != null) {
94 if (!((Actionbar) actionbar).getSections().containsKey(PREVIEW_SECTION_NAME)) {
95 actionbar.addSection(PREVIEW_SECTION_NAME, "Preview");
96 }
97 actionbar.setSectionPreview(previewResource, PREVIEW_SECTION_NAME);
98 } else {
99 if (((Actionbar) actionbar).getSections().containsKey(PREVIEW_SECTION_NAME)) {
100 actionbar.removeSection(PREVIEW_SECTION_NAME);
101 }
102 }
103 }
104
105
106
107 public void enable(String... actionNames) {
108 if (actionbar != null) {
109 for (String action : actionNames) {
110 actionbar.setActionEnabled(action, true);
111 }
112 }
113 }
114
115 public void disable(String... actionNames) {
116 if (actionbar != null) {
117 for (String action : actionNames) {
118 actionbar.setActionEnabled(action, false);
119 }
120 }
121 }
122
123 public void enableGroup(String groupName) {
124 if (actionbar != null) {
125 actionbar.setGroupEnabled(groupName, true);
126 }
127 }
128
129 public void disableGroup(String groupName) {
130 if (actionbar != null) {
131 actionbar.setGroupEnabled(groupName, false);
132 }
133 }
134
135 public void enableGroup(String groupName, String sectionName) {
136 if (actionbar != null) {
137 actionbar.setGroupEnabled(groupName, sectionName, true);
138 }
139 }
140
141 public void disableGroup(String groupName, String sectionName) {
142 if (actionbar != null) {
143 actionbar.setGroupEnabled(groupName, sectionName, false);
144 }
145 }
146
147 public void showSection(String... sectionNames) {
148 if (actionbar != null) {
149 for (String section : sectionNames) {
150 actionbar.setSectionVisible(section, true);
151 }
152 }
153 }
154
155 public void hideSection(String... sectionNames) {
156 if (actionbar != null) {
157 for (String section : sectionNames) {
158 actionbar.setSectionVisible(section, false);
159 }
160 }
161 }
162
163
164
165 @Override
166 public void onActionbarItemClicked(String actionToken) {
167 String actionName = getActionName(actionToken);
168 listener.onActionbarItemClicked(actionName);
169 }
170
171 private String getActionName(String actionToken) {
172 final String[] chunks = actionToken.split(":");
173 if (chunks.length != 2) {
174 log.warn("Invalid actionToken [{}]: it is expected to be in the form sectionName:actionName. Action name cannot be resolved. Please check actionbar definition.", actionToken);
175 return null;
176 }
177 final String sectionName = chunks[0];
178 final String actionName = chunks[1];
179
180 return actionName;
181 }
182 }