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.vaadin.applauncher;
35
36 import info.magnolia.icons.MagnoliaAppIcon;
37 import info.magnolia.icons.MagnoliaIcons;
38 import info.magnolia.ui.vaadin.gwt.client.applauncher.connector.AppLauncherState;
39 import info.magnolia.ui.vaadin.gwt.client.applauncher.rpc.AppLauncherServerRpc;
40 import info.magnolia.ui.vaadin.gwt.client.applauncher.shared.AppGroup;
41 import info.magnolia.ui.vaadin.gwt.client.applauncher.shared.AppTile;
42
43 import java.util.List;
44 import java.util.function.Consumer;
45
46 import com.vaadin.server.ResourceReference;
47 import com.vaadin.shared.communication.URLReference;
48 import com.vaadin.ui.AbstractComponent;
49
50
51
52
53 public class AppLauncher extends AbstractComponent {
54
55 public AppLauncher(Consumer<String> openAppHandler) {
56 super();
57 addStyleName("v-app-launcher");
58 registerRpc((AppLauncherServerRpc) openAppHandler::accept);
59 }
60
61 public void addAppGroup(String name, String caption, String color, boolean isPermanent, boolean clientGroup) {
62 getState().appGroups.put(name, new AppGroup(name, caption, color, isPermanent, clientGroup));
63 getState().groupsOrder.add(name);
64 }
65
66 @Override
67 protected AppLauncherState getState() {
68 return (AppLauncherState) super.getState();
69 }
70
71 public void addAppTile(String name, String caption, String icon, String groupName) {
72 final AppGroup group = getState().appGroups.get(groupName);
73 if (group != null) {
74 URLReference iconReference = MagnoliaAppIcon.forName(icon)
75 .or(MagnoliaIcons::forCssClass)
76 .or(MagnoliaIcons.APP)
77 .resolve()
78 .map(resource -> ResourceReference.create(resource, this, icon))
79 .orElse(null);
80 group.addAppTile(new AppTile(name, caption, iconReference));
81 }
82 }
83
84 public void clear() {
85 getState().groupsOrder.clear();
86 getState().appGroups.clear();
87 getState().runningApps.clear();
88 }
89
90 public void setAppActive(String appName, boolean isActive) {
91 final List<String> runningApps = getState().runningApps;
92 if (isActive && !runningApps.contains(appName)) {
93 runningApps.add(appName);
94 } else {
95 runningApps.remove(appName);
96 }
97 }
98 }