blob: 6709f6ae68d60b7e8ec7f9f69273366788277329 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2009 IBM Corporation and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - Base Code
* Red Hat - Refactor for CNF
*******************************************************************************/
package org.eclipse.wst.server.ui.internal.cnf;
import java.util.Iterator;
import org.eclipse.debug.core.ILaunchManager;
import org.eclipse.jface.action.*;
import org.eclipse.jface.bindings.TriggerSequence;
import org.eclipse.jface.viewers.*;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.*;
import org.eclipse.ui.actions.ActionFactory;
import org.eclipse.ui.keys.IBindingService;
import org.eclipse.ui.navigator.*;
import org.eclipse.wst.server.core.IModule;
import org.eclipse.wst.server.core.IServer;
import org.eclipse.wst.server.core.ServerPort;
import org.eclipse.wst.server.core.model.ServerDelegate;
import org.eclipse.wst.server.ui.internal.Messages;
import org.eclipse.wst.server.ui.internal.ServerUIPlugin;
import org.eclipse.wst.server.ui.internal.Trace;
import org.eclipse.wst.server.ui.internal.actions.NewServerWizardAction;
import org.eclipse.wst.server.ui.internal.view.servers.*;
public class ServerActionProvider extends CommonActionProvider {
public static final String NEW_MENU_ID = "org.eclipse.wst.server.ui.internal.cnf.newMenuId";
public static final String SHOW_IN_MENU_ID = "org.eclipse.ui.navigate.showInQuickMenu";
public static final String TOP_SECTION_START_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.topSectionStart";
public static final String TOP_SECTION_END_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.topSectionEnd";
public static final String EDIT_SECTION_START_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnfeditSectionStart";
public static final String EDIT_SECTION_END_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.editSectionEnd";
public static final String CONTROL_SERVER_SECTION_START_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.controlServerSectionStart";
public static final String CONTROL_SERVER_SECTION_END_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.controlServerSectionEnd";
public static final String SERVER_ETC_SECTION_START_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.serverEtcSectionStart";
public static final String SERVER_ETC_SECTION_END_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.serverEtcSectionEnd";
public static final String CONTROL_MODULE_SECTION_START_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.controlModuleSectionStart";
public static final String CONTROL_MODULE_SECTION_END_SEPARATOR = "org.eclipse.wst.server.ui.internal.cnf.controlModuleSectionEnd";
private ICommonActionExtensionSite actionSite;
private Clipboard clipboard;
public ServerActionProvider() {
super();
}
public void init(ICommonActionExtensionSite aSite) {
super.init(aSite);
this.actionSite = aSite;
ICommonViewerSite site = aSite.getViewSite();
if( site instanceof ICommonViewerWorkbenchSite ) {
StructuredViewer v = aSite.getStructuredViewer();
if( v instanceof CommonViewer ) {
CommonViewer cv = (CommonViewer)v;
ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite)site;
addListeners(cv);
makeServerActions(cv, wsSite.getSelectionProvider());
}
}
}
// actions on a server
protected Action[] actions;
protected Action actionModifyModules;
protected Action openAction, showInConsoleAction, showInDebugAction, propertiesAction, monitorPropertiesAction;
protected Action copyAction, pasteAction, globalDeleteAction, renameAction;
protected Action noneAction = new Action(Messages.dialogMonitorNone) {
// dummy action
};
private void addListeners(CommonViewer tableViewer) {
tableViewer.addOpenListener(new IOpenListener() {
public void open(OpenEvent event) {
try {
IStructuredSelection sel = (IStructuredSelection) event.getSelection();
Object data = sel.getFirstElement();
if (!(data instanceof IServer))
return;
IServer server = (IServer) data;
ServerUIPlugin.editServer(server);
} catch (Exception e) {
Trace.trace(Trace.SEVERE, "Could not open server", e);
}
}
});
}
private void makeServerActions(CommonViewer tableViewer, ISelectionProvider provider) {
clipboard = new Clipboard(tableViewer.getTree().getDisplay());
Shell shell = tableViewer.getTree().getShell();
actions = new Action[6];
// create the start actions
actions[0] = new StartAction(shell, provider, ILaunchManager.DEBUG_MODE);
actions[1] = new StartAction(shell, provider, ILaunchManager.RUN_MODE);
actions[2] = new StartAction(shell, provider, ILaunchManager.PROFILE_MODE);
// create the stop action
actions[3] = new StopAction(shell, provider);
// create the publish actions
actions[4] = new PublishAction(shell, provider);
actions[5] = new PublishCleanAction(shell, provider);
// create the open action
openAction = new OpenAction(provider);
// create copy, paste, and delete actions
pasteAction = new PasteAction(shell, provider, clipboard);
copyAction = new CopyAction(provider, clipboard, pasteAction);
globalDeleteAction = new GlobalDeleteAction(shell, provider);
renameAction = new RenameAction(shell, tableViewer, provider);
// create the other actions
actionModifyModules = new ModuleSloshAction(shell, provider);
showInConsoleAction = new ShowInConsoleAction(provider);
showInDebugAction = new ShowInDebugAction(provider);
// create the properties action
propertiesAction = new PropertiesAction(shell, provider);
monitorPropertiesAction = new PropertiesAction(shell, "org.eclipse.wst.server.ui.properties.monitor", provider);
}
public void fillActionBars(IActionBars actionBars) {
actionBars.setGlobalActionHandler("org.eclipse.wst.server.debug", actions[0]);
actionBars.setGlobalActionHandler("org.eclipse.wst.server.run", actions[1]);
actionBars.setGlobalActionHandler("org.eclipse.wst.server.stop", actions[3]);
actionBars.setGlobalActionHandler("org.eclipse.wst.server.publish", actions[4]);
actionBars.setGlobalActionHandler("org.eclipse.ui.navigator.Open", openAction);
actionBars.setGlobalActionHandler(ActionFactory.PROPERTIES.getId(), propertiesAction);
actionBars.updateActionBars();
actionBars.setGlobalActionHandler(ActionFactory.COPY.getId(), copyAction);
actionBars.setGlobalActionHandler(ActionFactory.PASTE.getId(), pasteAction);
actionBars.setGlobalActionHandler(ActionFactory.DELETE.getId(), globalDeleteAction);
actionBars.setGlobalActionHandler(ActionFactory.RENAME.getId(), renameAction);
IContributionManager cm = actionBars.getToolBarManager();
cm.removeAll();
for (int i = 0; i < actions.length - 1; i++)
cm.add(actions[i]);
}
public void fillContextMenu(IMenuManager menu) {
// This is a temp workaround to clean up the default group that are provided by CNF
menu.removeAll();
ICommonViewerSite site = actionSite.getViewSite();
IStructuredSelection selection = null;
Shell shell = actionSite.getViewSite().getShell();
if( site instanceof ICommonViewerWorkbenchSite ) {
ICommonViewerWorkbenchSite wsSite = (ICommonViewerWorkbenchSite)site;
selection = (IStructuredSelection) wsSite.getSelectionProvider().getSelection();
}
IServer server = null;
IModule[] module = null;
if (selection != null && !selection.isEmpty()) {
Iterator iterator = selection.iterator();
Object obj = iterator.next();
if (obj instanceof IServer)
server = (IServer) obj;
if (obj instanceof ModuleServer) {
ModuleServer ms = (ModuleServer) obj;
server = ms.server;
module = ms.module;
}
if (iterator.hasNext()) {
server = null;
module = null;
}
}
menu.add(invisibleSeparator(TOP_SECTION_START_SEPARATOR));
addTopSection(menu, server, module);
menu.add(invisibleSeparator(TOP_SECTION_END_SEPARATOR));
menu.add(new Separator());
if (server != null && module == null) {
menu.add(invisibleSeparator(EDIT_SECTION_START_SEPARATOR));
menu.add(copyAction);
menu.add(pasteAction);
menu.add(globalDeleteAction);
menu.add(renameAction);
menu.add(invisibleSeparator(EDIT_SECTION_END_SEPARATOR));
menu.add(new Separator());
menu.add(invisibleSeparator(CONTROL_SERVER_SECTION_START_SEPARATOR));
for (int i = 0; i < actions.length; i++)
menu.add(actions[i]);
menu.add(invisibleSeparator(CONTROL_SERVER_SECTION_END_SEPARATOR));
menu.add(new Separator());
menu.add(invisibleSeparator(SERVER_ETC_SECTION_START_SEPARATOR));
menu.add(actionModifyModules);
addMonitor(server, menu, shell);
menu.add(invisibleSeparator(SERVER_ETC_SECTION_END_SEPARATOR));
menu.add(new Separator());
} else if (server != null && module != null) {
menu.add(invisibleSeparator(CONTROL_MODULE_SECTION_START_SEPARATOR));
menu.add(new StartModuleAction(server, module));
menu.add(new StopModuleAction(server, module));
menu.add(new RestartModuleAction(server, module));
if(module.length == 1) {
menu.add(new RemoveModuleAction(shell, server, module[0]));
}
menu.add(invisibleSeparator(CONTROL_MODULE_SECTION_END_SEPARATOR));
}
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS));
menu.add(new Separator(IWorkbenchActionConstants.MB_ADDITIONS+"-end"));
menu.add(propertiesAction);
}
protected void addTopSection(IMenuManager menu, IServer server, IModule[] module) {
MenuManager newMenu = new MenuManager(Messages.actionNew, NEW_MENU_ID);
IAction newServerAction = new NewServerWizardAction();
newServerAction.setText(Messages.actionNewServer);
newMenu.add(newServerAction);
menu.add(newMenu);
// open action
if (server != null && module == null) {
menu.add(openAction);
String text = Messages.actionShowIn;
final IWorkbench workbench = PlatformUI.getWorkbench();
final IBindingService bindingService = (IBindingService) workbench
.getAdapter(IBindingService.class);
final TriggerSequence[] activeBindings = bindingService
.getActiveBindingsFor(SHOW_IN_MENU_ID);
if (activeBindings.length > 0) {
text += "\t" + activeBindings[0].format();
}
MenuManager showInMenu = new MenuManager(text, SHOW_IN_MENU_ID);
showInMenu.add(showInConsoleAction);
showInMenu.add(showInDebugAction);
menu.add(showInMenu);
}
}
protected void addMonitor(IServer server, IMenuManager menu, Shell shell) {
if (server.getServerType() != null) {
final MenuManager menuManager = new MenuManager(Messages.actionMonitor);
final IServer server2 = server;
final Shell shell2 = shell;
menuManager.addMenuListener(new IMenuListener() {
public void menuAboutToShow(IMenuManager manager) {
menuManager.removeAll();
if (server2.getAdapter(ServerDelegate.class) != null) {
ServerPort[] ports = server2.getServerPorts(null);
if (ports != null) {
int size = ports.length;
for (int i = 0; i < size; i++) {
if (!ports[i].isAdvanced())
menuManager.add(new MonitorServerPortAction(shell2, server2, ports[i]));
}
}
}
if (menuManager.isEmpty())
menuManager.add(noneAction);
menuManager.add(new Separator());
menuManager.add(monitorPropertiesAction);
}
});
// add an initial menu item so that the menu appears correctly
noneAction.setEnabled(false);
menuManager.add(noneAction);
menu.add(menuManager);
}
}
private Separator invisibleSeparator(String s) {
Separator sep = new Separator(s);
sep.setVisible(false);
return sep;
}
}