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.pages.app.editor.statusbar;
35
36 import info.magnolia.pages.app.editor.PagesEditorSubAppDescriptor;
37 import info.magnolia.pages.app.editor.extension.Extension;
38 import info.magnolia.pages.app.editor.extension.ExtensionFactory;
39 import info.magnolia.pages.app.editor.extension.definition.ExtensionDefinition;
40 import info.magnolia.pages.app.editor.pagebar.definition.PageBarDefinition;
41 import info.magnolia.pages.app.editor.statusbar.definition.StatusBarDefinition;
42 import info.magnolia.ui.api.app.SubAppContext;
43 import info.magnolia.ui.api.app.SubAppDescriptor;
44 import info.magnolia.ui.api.view.View;
45 import info.magnolia.ui.contentapp.detail.DetailLocation;
46 import info.magnolia.ui.contentapp.detail.DetailView;
47
48 import java.util.ArrayList;
49 import java.util.List;
50 import java.util.Map;
51
52 import javax.inject.Inject;
53
54 import org.apache.commons.collections4.MapUtils;
55 import org.slf4j.Logger;
56 import org.slf4j.LoggerFactory;
57
58
59
60
61 public class StatusBarPresenterImpl implements StatusBarPresenter, StatusBarView.Listener {
62
63 private static final Logger log = LoggerFactory.getLogger(StatusBarPresenterImpl.class);
64
65 private final StatusBarView view;
66 private final SubAppContext subAppContext;
67 private final ExtensionFactory extensionFactory;
68
69 private List<Extension> extensions = new ArrayList<>();
70
71 @Inject
72 public StatusBarPresenterImpl(StatusBarView view, SubAppContext subAppContext, ExtensionFactory extensionFactory) {
73 this.view = view;
74 this.subAppContext = subAppContext;
75 this.extensionFactory = extensionFactory;
76 }
77
78 @Override
79 public StatusBarView start(DetailLocation location) {
80 extensions = createExtensionsFromDefinition();
81 for (Extension extension : extensions) {
82 View component = extension.start(location);
83
84 component.asVaadinComponent().setSizeUndefined();
85 component.asVaadinComponent().addStyleName("statusbar-extension");
86
87 view.addStatusBarComponent(component);
88 }
89 view.setListener(this);
90
91 togglePreviewMode(location);
92 return view;
93 }
94
95
96
97
98 private List<Extension> createExtensionsFromDefinition() {
99 SubAppDescriptor subAppDescriptor = subAppContext.getSubAppDescriptor();
100 List<Extension> extensions = new ArrayList<>();
101
102 if (subAppDescriptor instanceof PagesEditorSubAppDescriptor) {
103 PagesEditorSubAppDescriptornolia/pages/app/editor/PagesEditorSubAppDescriptor.html#PagesEditorSubAppDescriptor">PagesEditorSubAppDescriptor descriptor = ((PagesEditorSubAppDescriptor) subAppDescriptor);
104 StatusBarDefinition statusBarDefinition = descriptor.getStatusBar();
105 if (statusBarDefinition != null) {
106 Map<String, ExtensionDefinition> extensionDefinitions = statusBarDefinition.getExtensions();
107 extensions.addAll(extensionFactory.createExtensions(extensionDefinitions));
108 } else {
109 log.error("No statusBar definition defined for pages detail app, no extensions will be loaded.");
110 }
111
112 PageBarDefinition pageBarDefinition = descriptor.getPageBar();
113 if (pageBarDefinition != null && MapUtils.isNotEmpty(pageBarDefinition.getExtensions())) {
114 log.warn("As of Magnolia 6.0 PageBar has been deprecated. Please define all page editor extensions under status bar.");
115 Map<String, ExtensionDefinition> extensionDefinitions = pageBarDefinition.getExtensions();
116 extensions.addAll(extensionFactory.createExtensions(extensionDefinitions));
117 }
118 } else {
119 log.error("Expected an instance of {} but got {}. No extensions will be loaded.", PagesEditorSubAppDescriptor.class.getSimpleName(), subAppDescriptor.getClass().getName());
120 }
121
122 return extensions;
123 }
124
125 @Override
126 public void onLocationUpdate(DetailLocation location) {
127 for (Extension extension : extensions) {
128 extension.onLocationUpdate(location);
129 }
130 togglePreviewMode(location);
131 }
132
133 @Override
134 public void deactivateExtensions() {
135 for (Extension extension : extensions) {
136 extension.deactivate();
137 }
138 }
139
140 @Override
141 public void stop() {
142 for (Extension extension : extensions) {
143 extension.stop();
144 }
145 }
146
147 @Override
148 public void setPageName(String pageName) {
149 view.setPageName(pageName);
150 }
151
152 @Override
153 public void setPageName(String caption, String nodePath) {
154 String pageName = caption.toUpperCase() + " - " + nodePath;
155 view.setPageName(pageName);
156 }
157
158 private void togglePreviewMode(DetailLocation location) {
159 boolean isPreview = DetailView.ViewType.VIEW.equals(location.getViewType());
160 view.togglePreviewMode(isPreview);
161 }
162 }