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.dialog.actionarea;
35
36 import info.magnolia.objectfactory.ComponentProvider;
37 import info.magnolia.ui.api.action.ActionDefinition;
38 import info.magnolia.ui.api.context.UiContext;
39 import info.magnolia.ui.api.view.View;
40 import info.magnolia.ui.dialog.actionarea.definition.ActionRendererDefinition;
41 import info.magnolia.ui.dialog.actionarea.definition.EditorActionAreaDefinition;
42 import info.magnolia.ui.dialog.actionarea.renderer.ActionRenderer;
43 import info.magnolia.ui.dialog.actionarea.view.EditorActionAreaView;
44 import info.magnolia.ui.dialog.definition.SecondaryActionDefinition;
45
46 import java.util.HashMap;
47 import java.util.Map;
48
49 import javax.inject.Inject;
50
51
52
53
54 public class EditorActionAreaPresenterImpl implements EditorActionAreaPresenter {
55
56 private EditorActionAreaView view;
57
58 private ComponentProvider componentProvider;
59
60 @Inject
61 public EditorActionAreaPresenterImpl(EditorActionAreaView view, ComponentProvider componentProvider) {
62 this.view = view;
63 this.componentProvider = componentProvider;
64 }
65
66 @Override
67 public EditorActionAreaView start(Iterable<ActionDefinition> actions, EditorActionAreaDefinition definition, final ActionListener listener, UiContext uiContext) {
68 final Map<String, View> secondaryActions = new HashMap<>();
69 for (ActionDefinition action : actions) {
70 ActionRendererDefinition actionRendererDef = definition.getActionRenderers().get(action.getName());
71 ActionRenderer actionRenderer = actionRendererDef == null ?
72 componentProvider.getComponent(ActionRenderer.class):
73 componentProvider.newInstance(actionRendererDef.getRendererClass(), action, actionRendererDef, uiContext);
74 final View actionView = actionRenderer.start(action, listener);
75
76
77 if (definition.getSecondaryActions().stream()
78 .anyMatch(secondaryActionDefinition -> action.getName().equals(secondaryActionDefinition.getName()))) {
79
80 secondaryActions.put(action.getName(), actionView);
81 } else {
82 view.addPrimaryAction(actionView, action.getName());
83 }
84 }
85
86
87 for (final SecondaryActionDefinition secondaryActionDefinition : definition.getSecondaryActions()) {
88 final String actionName = secondaryActionDefinition.getName();
89 final View actionView = secondaryActions.get(actionName);
90 if (actionView != null) {
91 view.addSecondaryAction(actionView, actionName);
92 }
93 }
94
95 return view;
96 }
97
98 protected EditorActionAreaView getView() {
99 return view;
100 }
101 }