[369819] Context menu not available if server is empty
diff --git a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
index 9d3460f..fcf5337 100644
--- a/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
+++ b/plugins/org.eclipse.wst.server.ui/serverui/org/eclipse/wst/server/ui/internal/cnf/ServersView2.java
@@ -1,5 +1,5 @@
/*******************************************************************************
- * Copyright (c) 2008,2011 IBM Corporation and others.
+ * Copyright (c) 2008,2012 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
@@ -19,6 +19,10 @@
import org.eclipse.core.runtime.jobs.IJobChangeEvent;
import org.eclipse.core.runtime.jobs.Job;
import org.eclipse.core.runtime.jobs.JobChangeAdapter;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardDialog;
@@ -29,11 +33,11 @@
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
+import org.eclipse.ui.actions.ActionContext;
import org.eclipse.ui.contexts.IContextService;
import org.eclipse.ui.forms.widgets.Form;
import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.navigator.CommonNavigator;
-import org.eclipse.ui.navigator.CommonViewer;
+import org.eclipse.ui.navigator.*;
import org.eclipse.ui.part.PageBook;
import org.eclipse.wst.server.core.*;
import org.eclipse.wst.server.core.internal.Server;
@@ -115,6 +119,48 @@
}
});
+
+ // Create the context menu for the default page
+ final CommonViewer commonViewer = this.getCommonViewer();
+ if (commonViewer != null){
+ ICommonViewerSite commonViewerSite = CommonViewerSiteFactory
+ .createCommonViewerSite(this.getViewSite());
+
+ if (commonViewerSite != null){
+ // Note: actionService cannot be null
+ final NavigatorActionService actionService = new NavigatorActionService(commonViewerSite,
+ commonViewer, commonViewer.getNavigatorContentService());
+
+ MenuManager menuManager = new MenuManager("#PopupMenu");
+ menuManager.addMenuListener(new IMenuListener() {
+ public void menuAboutToShow(IMenuManager mgr) {
+ ISelection selection = commonViewer.getSelection();
+ actionService.setContext(new ActionContext(selection));
+ actionService.fillContextMenu(mgr);
+ }
+ });
+ Menu menu = menuManager.createContextMenu(body);
+
+ // It is necessary to set the menu in two places:
+ // 1. The white space in the server view
+ // 2. The text and link in the server view. If this menu is not set, if the
+ // user right clicks on the text or uses shortcut keys to open the context menu,
+ // the context menu will not come up
+ body.setMenu(menu);
+ hlink.setMenu(menu);
+ }
+ else {
+ if (Trace.FINEST) {
+ Trace.trace(Trace.STRING_FINEST, "The commonViewerSite is null");
+ }
+ }
+ }
+ else {
+ if (Trace.FINEST) {
+ Trace.trace(Trace.STRING_FINEST, "The commonViewer is null");
+ }
+ }
+
return form;
}
@@ -180,11 +226,18 @@
public void done(IJobChangeEvent event) {
Display.getDefault().asyncExec(new Runnable() {
public void run() {
- if (tableViewer.getTree().getItemCount() > 0) {
- Object obj = tableViewer.getTree().getItem(0).getData();
- tableViewer.setSelection(new StructuredSelection(obj));
- } else{
- toggleDefultPage();
+ try {
+ if (tableViewer.getTree().getItemCount() > 0) {
+ Object obj = tableViewer.getTree().getItem(0).getData();
+ tableViewer.setSelection(new StructuredSelection(obj));
+ } else{
+ toggleDefultPage();
+ }
+ }
+ catch (Exception e){
+ if (Trace.WARNING) {
+ Trace.trace(Trace.STRING_WARNING, "Failed to update the server view.", e);
+ }
}
}
});