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.gwt.client.applauncher.connector;
35
36 import info.magnolia.ui.vaadin.applauncher.AppLauncher;
37 import info.magnolia.ui.vaadin.gwt.client.applauncher.shared.AppGroup;
38 import info.magnolia.ui.vaadin.gwt.client.applauncher.shared.AppTile;
39 import info.magnolia.ui.vaadin.gwt.client.applauncher.widget.AppLauncherView;
40 import info.magnolia.ui.vaadin.gwt.client.applauncher.widget.AppLauncherView.Presenter;
41 import info.magnolia.ui.vaadin.gwt.client.applauncher.widget.AppLauncherViewImpl;
42
43 import java.util.ArrayList;
44 import java.util.Collections;
45 import java.util.Comparator;
46 import java.util.List;
47
48 import com.google.gwt.user.client.History;
49 import com.google.gwt.user.client.ui.Widget;
50 import com.google.web.bindery.event.shared.EventBus;
51 import com.google.web.bindery.event.shared.SimpleEventBus;
52 import com.vaadin.client.communication.StateChangeEvent;
53 import com.vaadin.client.communication.StateChangeEvent.StateChangeHandler;
54 import com.vaadin.client.ui.AbstractComponentConnector;
55 import com.vaadin.shared.ui.Connect;
56
57
58
59
60 @Connect(AppLauncher.class)
61 public class AppLauncherConnector extends AbstractComponentConnector {
62
63 private AppLauncherView view;
64
65 private EventBus eventBus = new SimpleEventBus();
66
67 public AppLauncherConnector() {
68
69 addStateChangeHandler("appGroups", new StateChangeHandler() {
70 @Override
71 public void onStateChanged(StateChangeEvent stateChangeEvent) {
72
73 List<AppGroup> groups = new ArrayList<AppGroup>(getState().appGroups.values());
74 Collections.sort(groups, new GroupComparator(getState().groupsOrder));
75
76
77 view.clear();
78 for (final AppGroup appGroup : groups) {
79 view.addAppGroup(appGroup);
80 for (final AppTile tile : appGroup.getAppTiles()) {
81 view.addAppTile(tile, appGroup);
82 }
83 }
84
85 updateRunningAppTiles();
86 }
87 });
88
89 addStateChangeHandler("runningApps", new StateChangeHandler() {
90 @Override
91 public void onStateChanged(StateChangeEvent stateChangeEvent) {
92 updateRunningAppTiles();
93 }
94 });
95 }
96
97 private void updateRunningAppTiles() {
98 for (final AppGroup appGroup : getState().appGroups.values()) {
99 for (final AppTile tile : appGroup.getAppTiles()) {
100 if (getState().runningApps.contains(tile.getName())) {
101 view.setAppActive(tile.getName(), true);
102 } else {
103 view.setAppActive(tile.getName(), false);
104 }
105
106 }
107 }
108 }
109
110 @Override
111 public Widget getWidget() {
112 return super.getWidget();
113 }
114
115 @Override
116 protected Widget createWidget() {
117 this.view = new AppLauncherViewImpl(eventBus);
118 this.view.setPresenter(new Presenter() {
119 @Override
120 public void activateApp(String appName) {
121 History.newItem("app:" + appName, true);
122 }
123 });
124 return view.asWidget();
125 }
126
127 @Override
128 public AppLauncherState getState() {
129 return (AppLauncherState) super.getState();
130 }
131
132 @Override
133 protected AppLauncherState createState() {
134 return new AppLauncherState();
135 }
136
137
138
139
140
141 static class GroupComparator implements Comparator<AppGroup> {
142
143 private List<String> groupOrder;
144
145 public GroupComparator(List<String> groupOrder) {
146 this.groupOrder = groupOrder;
147 }
148
149 @Override
150 public int compare(AppGroup o1, AppGroup o2) {
151 boolean perm1 = o1.isPermanent();
152 boolean perm2 = o2.isPermanent();
153 if (perm1 == perm2) {
154 Integer idx1 = groupOrder.indexOf(o1.getName());
155 Integer idx2 = groupOrder.indexOf(o2.getName());
156 return idx1.compareTo(idx2);
157 }
158 return perm1 == true ? -1 : 1;
159 }
160 }
161
162 }