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.framework.tools;
35
36 import info.magnolia.objectfactory.ComponentProvider;
37 import info.magnolia.ui.api.app.SubAppContext;
38 import info.magnolia.ui.api.app.SubAppDescriptor;
39 import info.magnolia.ui.framework.app.BaseSubApp;
40
41 import java.util.Map;
42
43 import javax.inject.Inject;
44
45 import org.apache.commons.collections4.MapUtils;
46
47
48
49
50
51
52
53
54 public class ToolsSubApp extends BaseSubApp<ToolsSubAppView> {
55
56 private final SubAppContext subAppContext;
57 private final ToolsSubAppView subAppView;
58 private final ComponentProvider componentProvider;
59
60 @Inject
61 public ToolsSubApp(SubAppContext subAppContext, ToolsSubAppView subAppView, ComponentProvider componentProvider) {
62 super(subAppContext, subAppView);
63
64 this.subAppContext = subAppContext;
65 this.subAppView = subAppView;
66 this.componentProvider = componentProvider;
67 }
68
69 @Override
70 protected void onSubAppStart() {
71 SubAppDescriptor subAppDescriptor = subAppContext.getSubAppDescriptor();
72
73 if (!(subAppDescriptor instanceof ToolsSubAppDescriptor)) {
74 throw new IllegalArgumentException(String.format("Cannot start ToolsSubApp '%s', expected ToolsSubAppDescriptor but got %s.", subAppDescriptor.getName(), subAppDescriptor.getClass().getSimpleName()));
75 }
76
77 ToolsSubAppDescriptor toolsSubAppDescriptor = (ToolsSubAppDescriptor) subAppDescriptor;
78
79 subAppView.setDescription(toolsSubAppDescriptor.getDescription());
80
81 Map<String, ToolDefinition> toolDefinitions = toolsSubAppDescriptor.getTools();
82 if (MapUtils.isEmpty(toolDefinitions) || toolDefinitions.containsKey(null)) {
83 throw new IllegalArgumentException(String.format("Cannot start ToolsSubApp '%s', 'tools' (ToolDefinitions) are not configured.", subAppDescriptor.getName()));
84 }
85
86 for (ToolDefinition toolDefinition : toolDefinitions.values()) {
87 if (toolDefinition.getPresenterClass() == null) {
88 throw new IllegalArgumentException(String.format("Cannot start ToolPresenter '%s', 'presenterClass' is not configured.", toolDefinition.getName()));
89 }
90
91 ToolPresenter toolPresenter = componentProvider.newInstance(toolDefinition.getPresenterClass());
92 subAppView.addToolView(toolDefinition.getLabel(), toolPresenter.start(toolDefinition));
93 }
94 }
95 }