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 addStateChangeHandler("appGroups", new StateChangeHandler() {
69 @Override
70 public void onStateChanged(StateChangeEvent stateChangeEvent) {
71 }
72 });
73
74 addStateChangeHandler("appGroups", new StateChangeHandler() {
75 @Override
76 public void onStateChanged(StateChangeEvent stateChangeEvent) {
77
78 List<AppGroup> groups = new ArrayList<AppGroup>(getState().appGroups.values());
79 Collections.sort(groups, new Comparator<AppGroup>() {
80 @Override
81 public int compare(AppGroup o1, AppGroup o2) {
82 Integer idx1 = getState().groupsOrder.indexOf(o1.getName());
83 Integer idx2 = getState().groupsOrder.indexOf(o2.getName());
84 return idx1.compareTo(idx2);
85 }
86 });
87
88
89 view.clear();
90 for (final AppGroup appGroup : groups) {
91 view.addAppGroup(appGroup);
92 for (final AppTile tile : appGroup.getAppTiles()) {
93 view.addAppTile(tile, appGroup);
94 }
95 }
96
97 updateRunningAppTiles();
98 }
99 });
100
101 addStateChangeHandler("runningApps", new StateChangeHandler() {
102 @Override
103 public void onStateChanged(StateChangeEvent stateChangeEvent) {
104 updateRunningAppTiles();
105 }
106 });
107 }
108
109 private void updateRunningAppTiles() {
110 for (final AppGroup appGroup : getState().appGroups.values()) {
111 for (final AppTile tile : appGroup.getAppTiles()) {
112 if (getState().runningApps.contains(tile.getName())) {
113 view.setAppActive(tile.getName(), true);
114 } else {
115 view.setAppActive(tile.getName(), false);
116 }
117
118 }
119 }
120 }
121
122 @Override
123 public Widget getWidget() {
124 return super.getWidget();
125 }
126
127 @Override
128 protected Widget createWidget() {
129 this.view = new AppLauncherViewImpl(eventBus);
130 this.view.setPresenter(new Presenter() {
131 @Override
132 public void activateApp(String appName) {
133 History.newItem("app:" + appName, true);
134 }
135 });
136 return view.asWidget();
137 }
138
139 @Override
140 public AppLauncherState getState() {
141 return (AppLauncherState) super.getState();
142 }
143
144 @Override
145 protected AppLauncherState createState() {
146 return new AppLauncherState();
147 }
148
149 }