Bug 578303: [NiConsole] Convert Cancel handler to scope handler

  - Add AbstractToolScopeHandler

Change-Id: If6ce3067886289145dc0c87cc46b5489d1a65727
diff --git a/r/org.eclipse.statet.nico.ui/plugin.xml b/r/org.eclipse.statet.nico.ui/plugin.xml
index c1a52e8..91256fe 100644
--- a/r/org.eclipse.statet.nico.ui/plugin.xml
+++ b/r/org.eclipse.statet.nico.ui/plugin.xml
@@ -135,6 +135,36 @@
       </command>
    </extension>
    <extension
+         point="org.eclipse.ui.handlers">
+      <handler
+            commandId="org.eclipse.statet.nico.commands.CancelCurrent"
+            class="org.eclipse.statet.internal.nico.ui.actions.CancelRunnableScopeHandler$WorkbenchHandler">
+         <enabledWhen>
+            <with
+                  variable="org.eclipse.statet.activeTool">
+            </with>
+         </enabledWhen>
+      </handler>
+      <handler
+            commandId="org.eclipse.statet.nico.commands.CancelCurrentAndPause"
+            class="org.eclipse.statet.internal.nico.ui.actions.CancelRunnableScopeHandler$WorkbenchHandler">
+         <enabledWhen>
+            <with
+                  variable="org.eclipse.statet.activeTool">
+            </with>
+         </enabledWhen>
+      </handler>
+      <handler
+            commandId="org.eclipse.statet.nico.commands.CancelAll"
+            class="org.eclipse.statet.internal.nico.ui.actions.CancelRunnableScopeHandler$WorkbenchHandler">
+         <enabledWhen>
+            <with
+                  variable="org.eclipse.statet.activeTool">
+            </with>
+         </enabledWhen>
+      </handler>
+   </extension>
+   <extension
          point="org.eclipse.ui.bindings">
       <key
             commandId="org.eclipse.statet.nico.commands.CancelCurrent"
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/actions/CancelRunnableScopeHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/actions/CancelRunnableScopeHandler.java
new file mode 100644
index 0000000..3cd7b78
--- /dev/null
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/actions/CancelRunnableScopeHandler.java
@@ -0,0 +1,124 @@
+/*=============================================================================#
+ # Copyright (c) 2007, 2021 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.internal.nico.ui.actions;
+
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.core.runtime.IExecutableExtension;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.commands.IElementUpdater;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+
+import org.eclipse.statet.ecommons.ui.actions.AbstractScopeHandler;
+import org.eclipse.statet.ecommons.ui.actions.WorkbenchScopingHandler;
+
+import org.eclipse.statet.nico.core.runtime.ToolController;
+import org.eclipse.statet.nico.core.runtime.ToolProcess;
+import org.eclipse.statet.nico.ui.NicoUI;
+import org.eclipse.statet.nico.ui.actions.AbstractToolScopeHandler;
+
+
+/**
+ * Handler to cancel tool tasks.
+ */
+@NonNullByDefault
+public class CancelRunnableScopeHandler extends AbstractToolScopeHandler<ToolProcess> {
+	
+	
+	public static final String MENU_ID= "org.eclipse.statet.nico.menus.Cancel"; //$NON-NLS-1$
+	
+	public static final String PAR_OPTIONS= "options"; //$NON-NLS-1$
+	
+	
+	private final int options;
+	
+	
+	public CancelRunnableScopeHandler(final Object scope, final String commandId) {
+		super(scope, commandId);
+		
+		switch (commandId) {
+		case NicoUI.CANCEL_CURRENT_COMMAND_ID:
+			this.options= ToolController.CANCEL_CURRENT;
+			break;
+		case NicoUI.CANCEL_CURRENT_PAUSE_COMMAND_ID:
+			this.options= ToolController.CANCEL_CURRENT | ToolController.CANCEL_PAUSE;
+			break;
+		case NicoUI.CANCEL_ALL_COMMAND_ID:
+			this.options= ToolController.CANCEL_ALL;
+			break;
+		default:
+			throw new IllegalArgumentException("commandId= " + commandId);
+		}
+	}
+	
+	
+	@Override
+	protected boolean evaluateIsEnabled(final ToolProcess tool) {
+		return (!tool.isTerminated());
+	}
+	
+	@Override
+	public @Nullable Object execute(final ExecutionEvent event,
+			final ToolProcess tool, final IEvaluationContext evalContext)
+			throws ExecutionException {
+		final String optionsParameter= event.getParameter(PAR_OPTIONS);
+		int options= this.options;
+		if (optionsParameter != null) {
+			try {
+				options= Integer.decode(optionsParameter);
+			}
+			catch (final NumberFormatException e) {
+				throw new ExecutionException(String.format("Invalid parameter '%1$s'.", PAR_OPTIONS),
+						e );
+			}
+		}
+		
+		final ToolController controller= (tool != null) ? tool.getController() : null;
+		if (controller == null) {
+			return null;
+		}
+		
+		if (!controller.cancelTask(options)) {
+			Display.getCurrent().beep();
+		}
+		
+		return null;
+	}
+	
+	
+	public static class WorkbenchHandler extends WorkbenchScopingHandler
+			implements IElementUpdater, IExecutableExtension {
+		
+		
+		/** For instantiation via plugin.xml */
+		public WorkbenchHandler() {
+		}
+		
+		
+		@Override
+		protected AbstractScopeHandler createScopeHandler(final Object scope) {
+			final String commandId= nonNullAssert(getCommandId());
+			return new CancelRunnableScopeHandler(scope, commandId);
+		}
+		
+		
+	}
+	
+}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/actions/NicoWindowContributions.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/actions/NicoWindowContributions.java
index 645e33c..7baaf68 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/actions/NicoWindowContributions.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/internal/nico/ui/actions/NicoWindowContributions.java
@@ -19,9 +19,7 @@
 
 import org.eclipse.statet.ecommons.ui.actions.WindowContributionsProvider;
 
-import org.eclipse.statet.nico.core.runtime.ToolController;
 import org.eclipse.statet.nico.ui.NicoUI;
-import org.eclipse.statet.nico.ui.actions.CancelHandler;
 import org.eclipse.statet.nico.ui.actions.WindowToolProvider;
 
 
@@ -45,13 +43,6 @@
 					new DisconnectEngineHandler(new WindowToolProvider(window), window)));
 			add(handlerService.activateHandler(NicoUI.RECONNECT_COMMAND_ID,
 					new ReconnectEngineHandler(new WindowToolProvider(window), window)));
-			
-			add(handlerService.activateHandler(NicoUI.CANCEL_ALL_COMMAND_ID,
-					new CancelHandler(new WindowToolProvider(window), ToolController.CANCEL_ALL)));
-			add(handlerService.activateHandler(NicoUI.CANCEL_CURRENT_COMMAND_ID,
-					new CancelHandler(new WindowToolProvider(window), ToolController.CANCEL_CURRENT)));
-			add(handlerService.activateHandler(NicoUI.CANCEL_PAUSE_COMMAND_ID,
-					new CancelHandler(new WindowToolProvider(window), ToolController.CANCEL_CURRENT | ToolController.CANCEL_PAUSE)));
 		}
 		
 	}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUI.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUI.java
index 515dbbf..894a1a1 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUI.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUI.java
@@ -36,13 +36,13 @@
 	public static final String HISTORY_VIEW_ID= "org.eclipse.statet.nico.views.HistoryView"; //$NON-NLS-1$
 	public static final String QUEUE_VIEW_ID= "org.eclipse.statet.nico.views.QueueView"; //$NON-NLS-1$
 	
-	public static final String PAUSE_COMMAND_ID= "org.eclipse.statet.nico.commands.PauseEngine"; //$NON-NLS-1$
 	public static final String DISCONNECT_COMMAND_ID= "org.eclipse.statet.nico.commands.DisconnectEngine"; //$NON-NLS-1$
 	public static final String RECONNECT_COMMAND_ID= "org.eclipse.statet.nico.commands.ReconnectEngine"; //$NON-NLS-1$
 	
+	public static final String PAUSE_COMMAND_ID= "org.eclipse.statet.nico.commands.PauseEngine"; //$NON-NLS-1$
 	public static final String CANCEL_CURRENT_COMMAND_ID= "org.eclipse.statet.nico.commands.CancelCurrent"; //$NON-NLS-1$
+	public static final String CANCEL_CURRENT_PAUSE_COMMAND_ID= "org.eclipse.statet.nico.commands.CancelCurrentAndPause"; //$NON-NLS-1$
 	public static final String CANCEL_ALL_COMMAND_ID= "org.eclipse.statet.nico.commands.CancelAll"; //$NON-NLS-1$
-	public static final String CANCEL_PAUSE_COMMAND_ID= "org.eclipse.statet.nico.commands.CancelCurrentAndPause"; //$NON-NLS-1$
 	
 	
 	public static NicoUIResources getUIResources() {
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUIResources.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUIResources.java
index de73beb..97e92a5 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUIResources.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/NicoUIResources.java
@@ -28,7 +28,7 @@
 	private static final String NS= "org.eclipse.statet.nico"; //$NON-NLS-1$
 	
 	
-	public static final String LOCTOOL_CANCEL_IMAGE_ID= NS + "/imgage/loctool/cancel";  //$NON-NLS-1$
+	public static final String LOCTOOL_CANCEL_IMAGE_ID= NS + "/image/loctool/cancel";  //$NON-NLS-1$
 	public static final String LOCTOOLD_CANCEL_IMAGE_ID= NS + "/image/loctoold/cancel";  //$NON-NLS-1$
 	
 	public static final String LOCTOOL_PAUSE_IMAGE_ID= NS + "/image/loctool/pause"; //$NON-NLS-1$
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/actions/AbstractToolScopeHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/actions/AbstractToolScopeHandler.java
new file mode 100644
index 0000000..7c22d3a
--- /dev/null
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/actions/AbstractToolScopeHandler.java
@@ -0,0 +1,135 @@
+/*=============================================================================#
+ # Copyright (c) 2022 Stephan Wahlbrink and others.
+ # 
+ # This program and the accompanying materials are made available under the
+ # terms of the Eclipse Public License 2.0 which is available at
+ # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
+ # which is available at https://www.apache.org/licenses/LICENSE-2.0.
+ # 
+ # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
+ # 
+ # Contributors:
+ #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
+ #=============================================================================*/
+
+package org.eclipse.statet.nico.ui.actions;
+
+import org.eclipse.core.commands.ExecutionEvent;
+import org.eclipse.core.commands.ExecutionException;
+import org.eclipse.core.expressions.IEvaluationContext;
+import org.eclipse.ui.IWorkbenchWindow;
+
+import org.eclipse.statet.jcommons.lang.NonNullByDefault;
+import org.eclipse.statet.jcommons.lang.Nullable;
+import org.eclipse.statet.jcommons.ts.core.ActiveToolListener;
+import org.eclipse.statet.jcommons.ts.core.ActiveToolListener.ActiveToolEvent;
+import org.eclipse.statet.jcommons.ts.core.Tool;
+import org.eclipse.statet.jcommons.ts.core.ToolProvider;
+
+import org.eclipse.statet.ecommons.ui.actions.AbstractScopeHandler;
+
+import org.eclipse.statet.nico.ui.NicoUI;
+
+
+@NonNullByDefault
+public abstract class AbstractToolScopeHandler<TTool extends Tool> extends AbstractScopeHandler {
+	
+	
+	private final ActiveToolListener toolListener= this::onToolChanged;
+	
+	private @Nullable ToolProvider toolProvider;
+	
+	private @Nullable TTool currentTool;
+	
+	
+	public AbstractToolScopeHandler(final Object scope, final @Nullable String commandId) {
+		super();
+		init(scope, commandId);
+	}
+	
+	@Override
+	protected void init(final Object scope, final @Nullable String commandId) {
+		super.init(scope, commandId);
+		
+		ToolProvider toolProvider= null;
+		if (scope instanceof ToolProvider) {
+			toolProvider= (ToolProvider)scope;
+		}
+		else if (scope instanceof IWorkbenchWindow) {
+			toolProvider= NicoUI.getToolRegistry()
+					.getToolProvider(((IWorkbenchWindow)scope).getActivePage());
+		}
+		
+		if (toolProvider != null) {
+			this.toolProvider= toolProvider;
+			toolProvider.addToolListener(this.toolListener);
+		}
+	}
+	
+	@Override
+	public void dispose() {
+		final var toolProvider= this.toolProvider;
+		if (toolProvider != null) {
+			this.toolProvider= null;
+			toolProvider.removeToolListener(this.toolListener);
+		}
+		
+		super.dispose();
+	}
+	
+	
+	protected @Nullable Tool getTool(final @Nullable IEvaluationContext evalContext) {
+		final Object scope= getScope();
+		if (scope instanceof ToolProvider) {
+			return ((ToolProvider)scope).getTool();
+		}
+		
+		return null;
+	}
+	
+	private void onToolChanged(final ActiveToolEvent event) {
+		if (this.toolProvider != null) {
+			setEnabled(null);
+		}
+	}
+	
+	protected @Nullable TTool getCurrentTool(final @Nullable IEvaluationContext evalContext) {
+		final Tool tool= getTool(evalContext);
+		@SuppressWarnings("unchecked")
+		final var currentTool= (tool == this.currentTool || (tool != null && isSupported(tool))) ?
+				(TTool)tool : null;
+		this.currentTool= currentTool;
+		return currentTool;
+	}
+	
+	protected boolean isSupported(final Tool tool) {
+		return true;
+	}
+	
+	protected boolean evaluateIsEnabled(final TTool tool) {
+		return true;
+	}
+	
+	
+	@Override
+	public void setEnabled(final @Nullable IEvaluationContext context) {
+		final var currentTool= getCurrentTool(context);
+		setBaseEnabled(currentTool != null && evaluateIsEnabled(currentTool));
+	}
+	
+	@Override
+	public @Nullable Object execute(final ExecutionEvent event, final IEvaluationContext evalContext)
+			throws ExecutionException {
+		final var currentTool= getCurrentTool(evalContext);
+		if (currentTool != null && evaluateIsEnabled(currentTool)) {
+			return execute(event, currentTool, evalContext);
+		}
+		return null;
+	}
+	
+	public abstract @Nullable Object execute(final ExecutionEvent event,
+			final TTool tool, final IEvaluationContext evalContext)
+			throws ExecutionException;
+	
+	
+}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/actions/CancelHandler.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/actions/CancelHandler.java
deleted file mode 100644
index 4dc979f..0000000
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/actions/CancelHandler.java
+++ /dev/null
@@ -1,79 +0,0 @@
-/*=============================================================================#
- # Copyright (c) 2007, 2021 Stephan Wahlbrink and others.
- # 
- # This program and the accompanying materials are made available under the
- # terms of the Eclipse Public License 2.0 which is available at
- # https://www.eclipse.org/legal/epl-2.0, or the Apache License, Version 2.0
- # which is available at https://www.apache.org/licenses/LICENSE-2.0.
- # 
- # SPDX-License-Identifier: EPL-2.0 OR Apache-2.0
- # 
- # Contributors:
- #     Stephan Wahlbrink <sw@wahlbrink.eu> - initial API and implementation
- #=============================================================================*/
-
-package org.eclipse.statet.nico.ui.actions;
-
-import org.eclipse.core.commands.ExecutionEvent;
-import org.eclipse.swt.widgets.Display;
-
-import org.eclipse.statet.jcommons.lang.NonNullByDefault;
-import org.eclipse.statet.jcommons.lang.Nullable;
-import org.eclipse.statet.jcommons.ts.core.ToolProvider;
-
-import org.eclipse.statet.nico.core.runtime.ToolController;
-import org.eclipse.statet.nico.core.runtime.ToolProcess;
-
-
-/**
- * Handler to cancel tool tasks.
- */
-@NonNullByDefault
-public class CancelHandler extends AbstractToolHandler<ToolProcess> {
-	
-	
-	public static final String MENU_ID= "org.eclipse.statet.nico.menus.Cancel"; //$NON-NLS-1$
-	
-	public static final String PAR_OPTIONS= "options"; //$NON-NLS-1$
-	
-	
-	private final int options;
-	
-	
-	public CancelHandler(final ToolProvider toolProvider, final int options) {
-		super(null, null, toolProvider, null);
-		
-		this.options= options;
-		init();
-	}
-	
-	public CancelHandler(final ToolProvider toolProvider) {
-		this(toolProvider, 0);
-	}
-	
-	
-	@Override
-	protected @Nullable Object execute(final ToolProcess tool, final ExecutionEvent event) {
-		final String optionsParameter= event.getParameter(PAR_OPTIONS);
-		int options= this.options;
-		if (optionsParameter != null) {
-			try {
-				options= Integer.decode(optionsParameter);
-			}
-			catch (final NumberFormatException e) {
-			}
-		}
-		
-		final ToolController controller= (tool != null) ? tool.getController() : null;
-		if (controller == null) {
-			return null;
-		}
-		
-		if (!controller.cancelTask(options)) {
-			Display.getCurrent().beep();
-		}
-		
-		return null;
-	}
-	
-}
diff --git a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java
index a4a9f74..6611980 100644
--- a/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java
+++ b/r/org.eclipse.statet.nico.ui/src/org/eclipse/statet/nico/ui/console/NIConsolePage.java
@@ -14,13 +14,15 @@
 
 package org.eclipse.statet.nico.ui.console;
 
+import static org.eclipse.statet.jcommons.lang.ObjectUtils.nonNullAssert;
+
 import static org.eclipse.statet.ecommons.ui.SharedUIResources.FIND_NEXT_COMMAND_ID;
 import static org.eclipse.statet.ecommons.ui.SharedUIResources.FIND_PREVIOUS_COMMAND_ID;
 import static org.eclipse.statet.ecommons.ui.actions.UIActions.ADDITIONS_GROUP_ID;
 
 import static org.eclipse.statet.nico.ui.NicoUI.CANCEL_ALL_COMMAND_ID;
 import static org.eclipse.statet.nico.ui.NicoUI.CANCEL_CURRENT_COMMAND_ID;
-import static org.eclipse.statet.nico.ui.NicoUI.CANCEL_PAUSE_COMMAND_ID;
+import static org.eclipse.statet.nico.ui.NicoUI.CANCEL_CURRENT_PAUSE_COMMAND_ID;
 
 import java.util.ArrayList;
 import java.util.HashMap;
@@ -132,6 +134,7 @@
 import org.eclipse.statet.internal.nico.ui.LocalTaskTransfer;
 import org.eclipse.statet.internal.nico.ui.Messages;
 import org.eclipse.statet.internal.nico.ui.NicoUIPlugin;
+import org.eclipse.statet.internal.nico.ui.actions.CancelRunnableScopeHandler;
 import org.eclipse.statet.internal.nico.ui.console.OutputViewer;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditor;
 import org.eclipse.statet.ltk.ui.sourceediting.SourceEditorViewerConfigurator;
@@ -142,7 +145,6 @@
 import org.eclipse.statet.nico.core.runtime.ToolProcess;
 import org.eclipse.statet.nico.core.runtime.ToolStatus;
 import org.eclipse.statet.nico.core.runtime.ToolWorkspace;
-import org.eclipse.statet.nico.ui.actions.CancelHandler;
 import org.eclipse.statet.nico.ui.util.ExportConsoleOutputWizard;
 import org.eclipse.statet.nico.ui.util.NicoWizardDialog;
 import org.eclipse.statet.nico.ui.util.OpenTrackingFilesContributionItem;
@@ -686,11 +688,11 @@
 		this.removeAllAction= new ConsoleRemoveAllTerminatedAction();
 		this.terminateAction= new TerminateToolAction(this.console.getProcess());
 		this.pageHandlers.addActivate(CANCEL_CURRENT_COMMAND_ID,
-				new CancelHandler(this, ToolController.CANCEL_CURRENT) );
+				new CancelRunnableScopeHandler(this, CANCEL_CURRENT_COMMAND_ID) );
+		this.pageHandlers.addActivate(CANCEL_CURRENT_PAUSE_COMMAND_ID,
+				new CancelRunnableScopeHandler(this, CANCEL_CURRENT_PAUSE_COMMAND_ID) );
 		this.pageHandlers.addActivate(CANCEL_ALL_COMMAND_ID,
-				new CancelHandler(this, ToolController.CANCEL_ALL) );
-		this.pageHandlers.addActivate(CANCEL_PAUSE_COMMAND_ID,
-				new CancelHandler(this, ToolController.CANCEL_CURRENT | ToolController.CANCEL_PAUSE) );
+				new CancelRunnableScopeHandler(this, CANCEL_ALL_COMMAND_ID) );
 		
 // Conflict with binding CTRL+Z (in console EOF)
 //		pageKeys.activateContext("org.eclipse.debug.ui.console");  //$NON-NLS-1$
@@ -798,11 +800,11 @@
 		
 		toolBarManager.appendToGroup(IConsoleConstants.LAUNCH_GROUP, new HandlerContributionItem(
 				new CommandContributionItemParameter(serviceLocator,
-						CancelHandler.MENU_ID, CANCEL_CURRENT_COMMAND_ID, null,
+						CancelRunnableScopeHandler.MENU_ID, CANCEL_CURRENT_COMMAND_ID, null,
 						null, null, null,
 						Messages.CancelAction_name, null, Messages.CancelAction_tooltip,
 						HandlerContributionItem.STYLE_PULLDOWN, null, false),
-				this.pageHandlers ) {
+				handlers ) {
 			// Workaround for E-Bug #366528
 			@Override
 			protected void initDropDownMenu(final MenuManager menuManager) {
@@ -815,7 +817,7 @@
 										CommandContributionItem.STYLE_PUSH )));
 						menuManager.add(new CommandContributionItem(
 								new CommandContributionItemParameter(serviceLocator,
-										null, CANCEL_PAUSE_COMMAND_ID,
+										null, CANCEL_CURRENT_PAUSE_COMMAND_ID,
 										CommandContributionItem.STYLE_PUSH )));
 						menuManager.add(new CommandContributionItem(
 								new CommandContributionItemParameter(serviceLocator,
@@ -1014,7 +1016,7 @@
 	
 	@Override
 	public void addToolListener(final ActiveToolListener listener) {
-		this.toolListeners.add(listener);
+		this.toolListeners.add(nonNullAssert(listener));
 	}
 	
 	@Override