Added
Link Here
|
1 |
package org.eclipse.wst.server.ui.internal.view.servers.provisional; |
2 |
|
3 |
import java.util.Iterator; |
4 |
|
5 |
import org.eclipse.debug.core.ILaunchManager; |
6 |
import org.eclipse.jface.action.Action; |
7 |
import org.eclipse.jface.action.IAction; |
8 |
import org.eclipse.jface.action.IContributionManager; |
9 |
import org.eclipse.jface.action.IMenuListener; |
10 |
import org.eclipse.jface.action.IMenuManager; |
11 |
import org.eclipse.jface.action.MenuManager; |
12 |
import org.eclipse.jface.action.Separator; |
13 |
import org.eclipse.jface.bindings.TriggerSequence; |
14 |
import org.eclipse.jface.viewers.IOpenListener; |
15 |
import org.eclipse.jface.viewers.ISelection; |
16 |
import org.eclipse.jface.viewers.ISelectionProvider; |
17 |
import org.eclipse.jface.viewers.IStructuredSelection; |
18 |
import org.eclipse.jface.viewers.OpenEvent; |
19 |
import org.eclipse.jface.viewers.StructuredViewer; |
20 |
import org.eclipse.swt.dnd.Clipboard; |
21 |
import org.eclipse.swt.widgets.Shell; |
22 |
import org.eclipse.ui.IActionBars; |
23 |
import org.eclipse.ui.IWorkbench; |
24 |
import org.eclipse.ui.IWorkbenchActionConstants; |
25 |
import org.eclipse.ui.PlatformUI; |
26 |
import org.eclipse.ui.actions.ActionFactory; |
27 |
import org.eclipse.ui.keys.IBindingService; |
28 |
import org.eclipse.ui.navigator.CommonActionProvider; |
29 |
import org.eclipse.ui.navigator.CommonViewer; |
30 |
import org.eclipse.ui.navigator.ICommonActionExtensionSite; |
31 |
import org.eclipse.ui.navigator.ICommonViewerSite; |
32 |
import org.eclipse.ui.navigator.ICommonViewerWorkbenchSite; |
33 |
import org.eclipse.wst.server.core.IModule; |
34 |
import org.eclipse.wst.server.core.IServer; |
35 |
import org.eclipse.wst.server.core.ServerPort; |
36 |
import org.eclipse.wst.server.core.model.ServerDelegate; |
37 |
import org.eclipse.wst.server.ui.internal.Messages; |
38 |
import org.eclipse.wst.server.ui.internal.ServerUIPlugin; |
39 |
import org.eclipse.wst.server.ui.internal.Trace; |
40 |
import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction; |
41 |
import org.eclipse.wst.server.ui.internal.view.servers.CopyAction; |
42 |
import org.eclipse.wst.server.ui.internal.view.servers.DeleteAction; |
43 |
import org.eclipse.wst.server.ui.internal.view.servers.ModuleServer; |
44 |
import org.eclipse.wst.server.ui.internal.view.servers.ModuleSloshAction; |
45 |
import org.eclipse.wst.server.ui.internal.view.servers.MonitorServerPortAction; |
46 |
import org.eclipse.wst.server.ui.internal.view.servers.OpenAction; |
47 |
import org.eclipse.wst.server.ui.internal.view.servers.PasteAction; |
48 |
import org.eclipse.wst.server.ui.internal.view.servers.PropertiesAction; |
49 |
import org.eclipse.wst.server.ui.internal.view.servers.PublishAction; |
50 |
import org.eclipse.wst.server.ui.internal.view.servers.PublishCleanAction; |
51 |
import org.eclipse.wst.server.ui.internal.view.servers.RemoveModuleAction; |
52 |
import org.eclipse.wst.server.ui.internal.view.servers.RenameAction; |
53 |
import org.eclipse.wst.server.ui.internal.view.servers.RestartModuleAction; |
54 |
import org.eclipse.wst.server.ui.internal.view.servers.ShowInConsoleAction; |
55 |
import org.eclipse.wst.server.ui.internal.view.servers.ShowInDebugAction; |
56 |
import org.eclipse.wst.server.ui.internal.view.servers.StartAction; |
57 |
import org.eclipse.wst.server.ui.internal.view.servers.StartModuleAction; |
58 |
import org.eclipse.wst.server.ui.internal.view.servers.StopAction; |
59 |
import org.eclipse.wst.server.ui.internal.view.servers.StopModuleAction; |
60 |
|
61 |
public class ServerActionProvider extends CommonActionProvider { |
62 |
private ICommonActionExtensionSite actionSite; |
63 |
private Clipboard clipboard; |
64 |
public ServerActionProvider() { |
65 |
super(); |
66 |
} |
67 |
|
68 |
public void init(ICommonActionExtensionSite aSite) { |
69 |
super.init(aSite); |
70 |
this.actionSite = aSite; |
71 |
ICommonViewerSite site = aSite.getViewSite(); |
72 |
if( site instanceof ICommonViewerWorkbenchSite ) { |
73 |
StructuredViewer v = aSite.getStructuredViewer(); |
74 |
if( v instanceof CommonViewer ) { |
75 |
CommonViewer cv = (CommonViewer)v; |
76 |
ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite)site; |
77 |
addListeners(cv); |
78 |
makeServerActions(cv, wsSite.getSelectionProvider()); |
79 |
} |
80 |
} |
81 |
} |
82 |
|
83 |
|
84 |
// actions on a server |
85 |
protected Action[] actions; |
86 |
protected Action actionModifyModules; |
87 |
protected Action openAction, showInConsoleAction, showInDebugAction, propertiesAction, monitorPropertiesAction; |
88 |
protected Action copyAction, pasteAction, deleteAction, renameAction; |
89 |
protected Action noneAction = new Action(Messages.dialogMonitorNone) { |
90 |
// dummy action |
91 |
}; |
92 |
|
93 |
private void addListeners(CommonViewer tableViewer) { |
94 |
tableViewer.addOpenListener(new IOpenListener() { |
95 |
public void open(OpenEvent event) { |
96 |
try { |
97 |
IStructuredSelection sel = (IStructuredSelection) event.getSelection(); |
98 |
Object data = sel.getFirstElement(); |
99 |
if (!(data instanceof IServer)) |
100 |
return; |
101 |
IServer server = (IServer) data; |
102 |
ServerUIPlugin.editServer(server); |
103 |
} catch (Exception e) { |
104 |
Trace.trace(Trace.SEVERE, "Could not open server", e); |
105 |
} |
106 |
} |
107 |
}); |
108 |
} |
109 |
|
110 |
private void makeServerActions(CommonViewer tableViewer, ISelectionProvider provider) { |
111 |
clipboard = new Clipboard(tableViewer.getTree().getDisplay()); |
112 |
Shell shell = tableViewer.getTree().getShell(); |
113 |
|
114 |
actions = new Action[6]; |
115 |
// create the start actions |
116 |
actions[0] = new StartAction(shell, provider, ILaunchManager.DEBUG_MODE); |
117 |
actions[1] = new StartAction(shell, provider, ILaunchManager.RUN_MODE); |
118 |
actions[2] = new StartAction(shell, provider, ILaunchManager.PROFILE_MODE); |
119 |
|
120 |
// create the stop action |
121 |
actions[3] = new StopAction(shell, provider); |
122 |
|
123 |
// create the publish actions |
124 |
actions[4] = new PublishAction(shell, provider); |
125 |
actions[5] = new PublishCleanAction(shell, provider); |
126 |
|
127 |
// create the open action |
128 |
openAction = new OpenAction(provider); |
129 |
|
130 |
// // create copy, paste, and delete actions |
131 |
pasteAction = new PasteAction(shell, provider, clipboard); |
132 |
copyAction = new CopyAction(provider, clipboard, pasteAction); |
133 |
deleteAction = new DeleteAction(shell, provider); |
134 |
renameAction = new RenameAction(shell, tableViewer, provider); |
135 |
|
136 |
// create the other actions |
137 |
actionModifyModules = new ModuleSloshAction(shell, provider); |
138 |
showInConsoleAction = new ShowInConsoleAction(provider); |
139 |
showInDebugAction = new ShowInDebugAction(provider); |
140 |
|
141 |
// create the properties action |
142 |
propertiesAction = new PropertiesAction(shell, provider); |
143 |
monitorPropertiesAction = new PropertiesAction(shell, "org.eclipse.wst.server.ui.properties.monitor", provider); |
144 |
} |
145 |
|
146 |
public void fillActionBars(IActionBars actionBars) { |
147 |
actionBars.setGlobalActionHandler("org.eclipse.wst.server.debug", actions[0]); |
148 |
actionBars.setGlobalActionHandler("org.eclipse.wst.server.run", actions[1]); |
149 |
actionBars.setGlobalActionHandler("org.eclipse.wst.server.stop", actions[3]); |
150 |
actionBars.setGlobalActionHandler("org.eclipse.wst.server.publish", actions[4]); |
151 |
actionBars.setGlobalActionHandler("org.eclipse.ui.navigator.Open", openAction); |
152 |
actionBars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(), propertiesAction); |
153 |
actionBars.updateActionBars(); |
154 |
actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), copyAction); |
155 |
actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteAction); |
156 |
actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), deleteAction); |
157 |
actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), renameAction); |
158 |
|
159 |
IContributionManager cm = actionBars.getToolBarManager(); |
160 |
cm.removeAll(); |
161 |
|
162 |
for (int i = 0; i < actions.length - 1; i++) |
163 |
cm.add(actions[i]); |
164 |
} |
165 |
|
166 |
private static void fillNewContextMenu(Shell shell, ISelection selection, IMenuManager menu) { |
167 |
IAction newServerAction = new NewServerWizardAction(); |
168 |
newServerAction.setText(Messages.actionNewServer); |
169 |
menu.add(newServerAction); |
170 |
} |
171 |
|
172 |
public void fillContextMenu(IMenuManager menu) { |
173 |
ICommonViewerSite site = actionSite.getViewSite(); |
174 |
IStructuredSelection selection = null; |
175 |
Shell shell = actionSite.getViewSite().getShell(); |
176 |
if( site instanceof ICommonViewerWorkbenchSite ) { |
177 |
ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite)site; |
178 |
selection = (IStructuredSelection) wsSite.getSelectionProvider().getSelection(); |
179 |
} |
180 |
|
181 |
IServer server = null; |
182 |
IModule[] module = null; |
183 |
if (selection != null && !selection.isEmpty()) { |
184 |
Iterator iterator = selection.iterator(); |
185 |
Object obj = iterator.next(); |
186 |
if (obj instanceof IServer) |
187 |
server = (IServer) obj; |
188 |
if (obj instanceof ModuleServer) { |
189 |
ModuleServer ms = (ModuleServer) obj; |
190 |
server = ms.server; |
191 |
module = ms.module; |
192 |
} |
193 |
if (iterator.hasNext()) { |
194 |
server = null; |
195 |
module = null; |
196 |
} |
197 |
} |
198 |
|
199 |
// new action |
200 |
MenuManager newMenu = new MenuManager(Messages.actionNew); |
201 |
fillNewContextMenu(null, selection, newMenu); |
202 |
menu.add(newMenu); |
203 |
|
204 |
// open action |
205 |
if (server != null && module == null) { |
206 |
menu.add(openAction); |
207 |
|
208 |
String text = Messages.actionShowIn; |
209 |
final IWorkbench workbench = PlatformUI.getWorkbench(); |
210 |
final IBindingService bindingService = (IBindingService) workbench |
211 |
.getAdapter(IBindingService.class); |
212 |
final TriggerSequence[] activeBindings = bindingService |
213 |
.getActiveBindingsFor("org.eclipse.ui.navigate.showInQuickMenu"); |
214 |
if (activeBindings.length > 0) { |
215 |
text += "\t" + activeBindings[0].format(); |
216 |
} |
217 |
|
218 |
MenuManager showInMenu = new MenuManager(text); |
219 |
showInMenu.add(showInConsoleAction); |
220 |
showInMenu.add(showInDebugAction); |
221 |
//IActionBars actionBars = getViewSite().getActionBars(); |
222 |
//actionBars.setGlobalActionHandler("group.show", showInMenu); |
223 |
menu.add(showInMenu); |
224 |
menu.add(new Separator()); |
225 |
} else |
226 |
menu.add(new Separator()); |
227 |
|
228 |
if (server != null) { |
229 |
if (module == null) { |
230 |
menu.add(copyAction); |
231 |
menu.add(pasteAction); |
232 |
menu.add(deleteAction); |
233 |
menu.add(renameAction); |
234 |
} else if (module.length == 1) |
235 |
menu.add(new RemoveModuleAction(shell, server, module[0])); |
236 |
menu.add(new Separator()); |
237 |
} |
238 |
|
239 |
if (server != null && module == null) { |
240 |
// server actions |
241 |
for (int i = 0; i < actions.length; i++) |
242 |
menu.add(actions[i]); |
243 |
|
244 |
menu.add(new Separator()); |
245 |
menu.add(actionModifyModules); |
246 |
|
247 |
// monitor |
248 |
if (server.getServerType() != null) { |
249 |
final MenuManager menuManager = new MenuManager(Messages.actionMonitor); |
250 |
|
251 |
final IServer server2 = server; |
252 |
final Shell shell2 = shell; |
253 |
menuManager.addMenuListener(new IMenuListener() { |
254 |
public void menuAboutToShow(IMenuManager manager) { |
255 |
menuManager.removeAll(); |
256 |
if (server2.getAdapter(ServerDelegate.class) != null) { |
257 |
ServerPort[] ports = server2.getServerPorts(null); |
258 |
if (ports != null) { |
259 |
int size = ports.length; |
260 |
for (int i = 0; i < size; i++) { |
261 |
if (!ports[i].isAdvanced()) |
262 |
menuManager.add(new MonitorServerPortAction(shell2, server2, ports[i])); |
263 |
} |
264 |
} |
265 |
} |
266 |
|
267 |
if (menuManager.isEmpty()) |
268 |
menuManager.add(noneAction); |
269 |
|
270 |
menuManager.add(new Separator()); |
271 |
menuManager.add(monitorPropertiesAction); |
272 |
} |
273 |
}); |
274 |
|
275 |
// add an initial menu item so that the menu appears correctly |
276 |
noneAction.setEnabled(false); |
277 |
menuManager.add(noneAction); |
278 |
menu.add(menuManager); |
279 |
} |
280 |
} |
281 |
|
282 |
if (server != null && module != null) { |
283 |
menu.add(new Separator()); |
284 |
menu.add(new StartModuleAction(server, module)); |
285 |
menu.add(new StopModuleAction(server, module)); |
286 |
menu.add(new RestartModuleAction(server, module)); |
287 |
} |
288 |
|
289 |
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS)); |
290 |
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end")); |
291 |
|
292 |
if (server != null) { |
293 |
menu.add(new Separator()); |
294 |
menu.add(propertiesAction); |
295 |
} |
296 |
} |
297 |
} |