Bug 407554 - All context menus in scout explorer are disabled in Kepler
M7 

https://bugs.eclipse.org/bugs/show_bug.cgi?id=407554

Change-Id: Ib57b397e0858e31ec847b3cc6b92e9e73bd609e5
Reviewed-on: https://git.eclipse.org/r/12638
Reviewed-by: Matthias Villiger <mvi@bsiag.com>
IP-Clean: Matthias Villiger <mvi@bsiag.com>
Tested-by: Matthias Villiger <mvi@bsiag.com>
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java
index d64f8f9..99c9a95 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/action/AbstractScoutHandler.java
@@ -17,14 +17,14 @@
 import org.eclipse.core.commands.ExecutionException;
 import org.eclipse.jdt.core.IJavaElement;
 import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.jface.viewers.ISelection;
 import org.eclipse.jface.viewers.IStructuredSelection;
+import org.eclipse.scout.sdk.ui.internal.ScoutSdkUi;
+import org.eclipse.scout.sdk.ui.view.outline.IScoutExplorerPart;
 import org.eclipse.scout.sdk.ui.view.outline.pages.IPage;
 import org.eclipse.scout.sdk.util.type.TypeUtility;
 import org.eclipse.scout.sdk.workspace.IScoutBundle;
 import org.eclipse.scout.sdk.workspace.type.ScoutTypeUtility;
 import org.eclipse.swt.widgets.Shell;
-import org.eclipse.ui.handlers.HandlerUtil;
 
 public abstract class AbstractScoutHandler extends AbstractHandler implements IScoutHandler {
   private String m_label;
@@ -137,21 +137,23 @@
   @SuppressWarnings("unchecked")
   @Override
   public final Object execute(ExecutionEvent event) throws ExecutionException {
-    ISelection selection = HandlerUtil.getActiveWorkbenchWindow(event).getActivePage().getSelection();
-    if (selection instanceof IStructuredSelection) {
-      Shell shell = HandlerUtil.getActiveShell(event);
-      IStructuredSelection strucSelection = (IStructuredSelection) selection;
+    IScoutExplorerPart explorer = ScoutSdkUi.getExplorer(false);
+    if (explorer != null) {
+      IStructuredSelection selection = explorer.getSelection();
+      if (selection != null && explorer.getSite() != null) {
+        Shell shell = explorer.getSite().getShell();
 
-      IPage[] selectedPages = new IPage[strucSelection.size()];
+        IPage[] selectedPages = new IPage[selection.size()];
 
-      // iterator can only contain IPage's. this is ensured by the MenuVisibilityTester class
-      Iterator<IPage> it = strucSelection.iterator();
-      int index = 0;
-      while (it.hasNext()) {
-        selectedPages[index++] = it.next();
+        // iterator can only contain IPage's. this is ensured by the MenuVisibilityTester class
+        Iterator<IPage> it = selection.iterator();
+        int index = 0;
+        while (it.hasNext()) {
+          selectedPages[index++] = it.next();
+        }
+
+        return execute(shell, selectedPages, event);
       }
-
-      return execute(shell, selectedPages, event);
     }
     return null;
   }
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java
index 49648b8..11e0e5a 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/menu/MenuVisibilityTester.java
@@ -91,6 +91,8 @@
             IScoutHandler currentMenu = ScoutMenuContributionItemFactory.getMenuInstance(currentMenuClass);
             if (currentMenu == null) return false; // no instance could be created -> do not show the menu
 
+            cmd.setHandler(currentMenu);
+
             // check for multi select
             if (!currentMenu.isMultiSelectSupported() && selectedNodes.length > 1) return false;
 
diff --git a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java
index 7f32a00..1ec76db 100644
--- a/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java
+++ b/org.eclipse.scout.sdk.ui/src/org/eclipse/scout/sdk/ui/view/outline/IScoutExplorerPart.java
@@ -12,13 +12,25 @@
 
 import org.eclipse.jface.viewers.IStructuredSelection;
 import org.eclipse.scout.sdk.ui.view.outline.pages.IPage;
+import org.eclipse.ui.IWorkbenchPartSite;
 
 /**
- * <h3>IScoutExplorerPart</h3> ...
+ * <h3>IScoutExplorerPart</h3>
  */
 public interface IScoutExplorerPart {
 
   /**
+   * Returns the site for this workbench part. The site can be <code>null</code> while the workbench part is being
+   * initialized. After
+   * the initialization is complete, this value must be non-<code>null</code> for the remainder of the part's life
+   * cycle.
+   * 
+   * @return The part site; this value may be <code>null</code> if the part
+   *         has not yet been initialized
+   */
+  IWorkbenchPartSite getSite();
+
+  /**
    * gets the current selection of the scout explorer tree.
    * 
    * @return The structured selection of the tree.