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;
35
36 import static java.util.stream.Collectors.toMap;
37
38 import info.magnolia.objectfactory.ComponentProvider;
39 import info.magnolia.ui.availability.AvailabilityChecker;
40 import info.magnolia.ui.ValueContext;
41 import info.magnolia.ui.dialog.layout.DefaultEditorActionLayoutDefinition;
42 import info.magnolia.ui.framework.layout.LayoutDefinition;
43
44 import java.util.ArrayList;
45 import java.util.Arrays;
46 import java.util.Collection;
47 import java.util.HashMap;
48 import java.util.List;
49 import java.util.Map;
50
51 import javax.inject.Inject;
52
53 import com.vaadin.ui.Component;
54
55
56
57
58
59 public class EditorActionBar<T> {
60
61 private Map<String, Component> labeledControls = new HashMap<>();
62 private List<ActionExecution<T>> actionDefinitions = new ArrayList<>();
63 private LayoutDefinition<?> layoutDefinition = new DefaultEditorActionLayoutDefinition();
64
65 private final ComponentProvider componentProvider;
66 private final ValueContext<T> valueContext;
67 private final AvailabilityChecker<T> availabilityChecker;
68
69 @Inject
70 public EditorActionBar(ComponentProvider componentProvider, ValueContext<T> valueContext, AvailabilityChecker<T> availabilityChecker) {
71 this.componentProvider = componentProvider;
72 this.valueContext = valueContext;
73 this.availabilityChecker = availabilityChecker;
74 }
75
76 public EditorActionBar<T> withLayoutDefinition(LayoutDefinition<?> layoutDefinition) {
77 this.layoutDefinition = layoutDefinition;
78 return this;
79 }
80
81 public EditorActionBar<T> withActions(Collection<ActionExecution<T>> definitions) {
82 actionDefinitions.addAll(definitions);
83 return this;
84 }
85
86 public EditorActionBar<T> withActions(ActionExecution... definitions) {
87 return withActions(Arrays.asList(definitions));
88 }
89
90 public EditorActionBar<T> withLabeledControl(String label, Component control) {
91 this.labeledControls.put(label, control);
92 return this;
93 }
94
95 public Component layout() {
96 Map<String, Component> allActionControls = actionDefinitions.stream()
97 .collect(toMap(execution -> execution.getDefinition().getName(),
98 execution ->
99 componentProvider.newInstance(ActionButton.class, execution, valueContext, availabilityChecker)));
100 allActionControls.putAll(labeledControls);
101
102
103 return componentProvider.newInstance(layoutDefinition.getImplementationClass()).createLayout(layoutDefinition, allActionControls);
104 }
105
106 }