Skip to content

Commit 9eac0cf

Browse files
Copilotlaeubi
andcommitted
Migrate commands and handlers from E3 to E4
Co-authored-by: laeubi <1331477+laeubi@users.noreply.github.com>
1 parent d966cd6 commit 9eac0cf

File tree

10 files changed

+133
-157
lines changed

10 files changed

+133
-157
lines changed

terminal/bundles/org.eclipse.terminal.view.ui/META-INF/MANIFEST.MF

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,7 +14,12 @@ Require-Bundle: org.eclipse.core.expressions;bundle-version="[3.9.0,4.0.0)",
1414
org.eclipse.ui.ide;bundle-version="[3.22.0,4.0.0)";resolution:=optional,
1515
org.eclipse.ui.editors;bundle-version="[3.20.0,4.0.0)";resolution:=optional,
1616
org.eclipse.text;bundle-version="[3.14.0,4.0.0)";resolution:=optional,
17-
org.eclipse.terminal.view.core;bundle-version="[1.0.0,2.0.0)"
17+
org.eclipse.terminal.view.core;bundle-version="[1.0.0,2.0.0)",
18+
org.eclipse.e4.core.contexts;bundle-version="[1.10.0,2.0.0)",
19+
org.eclipse.e4.core.di;bundle-version="[1.9.0,2.0.0)",
20+
org.eclipse.e4.ui.di;bundle-version="[1.5.0,2.0.0)",
21+
org.eclipse.e4.ui.model.workbench;bundle-version="[2.4.0,3.0.0)",
22+
org.eclipse.e4.ui.workbench;bundle-version="[1.15.0,2.0.0)"
1823
Bundle-RequiredExecutionEnvironment: JavaSE-17
1924
Bundle-ActivationPolicy: lazy
2025
Bundle-Localization: plugin
@@ -32,7 +37,9 @@ Export-Package: org.eclipse.terminal.view.ui;version="1.0.100",
3237
org.eclipse.terminal.view.ui.launcher;version="1.0.100",
3338
org.eclipse.terminal.view.ui.streams;version="1.0.100"
3439
Automatic-Module-Name: org.eclipse.terminal.view.ui
35-
Import-Package: org.eclipse.terminal.connector;version="[1.0.0,2.0.0)",
40+
Import-Package: jakarta.annotation;version="[2.1.0,3.0.0)",
41+
jakarta.inject;version="[2.0.0,3.0.0)",
42+
org.eclipse.terminal.connector;version="[1.0.0,2.0.0)",
3643
org.eclipse.terminal.connector.provider;version="[1.0.0,2.0.0)",
3744
org.eclipse.terminal.control;version="[1.0.0,2.0.0)",
3845
org.eclipse.terminal.model;version="[1.0.0,2.0.0)"

terminal/bundles/org.eclipse.terminal.view.ui/build.properties

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@ bin.includes = META-INF/,\
1818
about.html,\
1919
icons/,\
2020
contexts.xml,\
21-
OSGI-INF/
21+
OSGI-INF/,\
22+
fragment.e4xmi
2223
src.includes = schema/,\
2324
about.html
Lines changed: 17 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,17 @@
1+
<?xml version="1.0" encoding="ASCII"?>
2+
<fragment:ModelFragments xmi:version="2.0" xmlns:xmi="http://www.omg.org/XMI" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:commands="http://www.eclipse.org/ui/2010/UIModel/application/commands" xmlns:fragment="http://www.eclipse.org/ui/2010/UIModel/fragment" xmi:id="_fragment">
3+
<fragments xsi:type="fragment:StringModelFragment" xmi:id="_commands_fragment" featurename="commands" parentElementId="org.eclipse.e4.legacy.ide.application">
4+
<elements xsi:type="commands:Command" xmi:id="_command_launch" elementId="org.eclipse.terminal.view.ui.command.launch" commandName="Launch Terminal" description="Launch Terminal"/>
5+
<elements xsi:type="commands:Command" xmi:id="_command_launchConsole" elementId="org.eclipse.terminal.view.ui.command.launchConsole" commandName="Launch Terminal" description="Launch Terminal"/>
6+
<elements xsi:type="commands:Command" xmi:id="_command_launchToolbar" elementId="org.eclipse.terminal.view.ui.command.launchToolbar" commandName="Open a Terminal" description="Open a Terminal"/>
7+
<elements xsi:type="commands:Command" xmi:id="_command_disconnect" elementId="org.eclipse.terminal.view.ui.command.disconnect" commandName="Disconnect" description="Disconnect Terminal"/>
8+
<elements xsi:type="commands:Command" xmi:id="_command_newview" elementId="org.eclipse.terminal.view.ui.command.newview" commandName="New Terminal View" description="New Terminal View"/>
9+
</fragments>
10+
<fragments xsi:type="fragment:StringModelFragment" xmi:id="_handlers_fragment" featurename="handlers" parentElementId="org.eclipse.e4.legacy.ide.application">
11+
<elements xsi:type="commands:Handler" xmi:id="_handler_launch" elementId="org.eclipse.terminal.view.ui.handler.launch" contributionURI="bundleclass://org.eclipse.terminal.view.ui/org.eclipse.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler" command="_command_launch"/>
12+
<elements xsi:type="commands:Handler" xmi:id="_handler_launchConsole" elementId="org.eclipse.terminal.view.ui.handler.launchConsole" contributionURI="bundleclass://org.eclipse.terminal.view.ui/org.eclipse.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler" command="_command_launchConsole"/>
13+
<elements xsi:type="commands:Handler" xmi:id="_handler_launchToolbar" elementId="org.eclipse.terminal.view.ui.handler.launchToolbar" contributionURI="bundleclass://org.eclipse.terminal.view.ui/org.eclipse.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler" command="_command_launchToolbar"/>
14+
<elements xsi:type="commands:Handler" xmi:id="_handler_disconnect" elementId="org.eclipse.terminal.view.ui.handler.disconnect" contributionURI="bundleclass://org.eclipse.terminal.view.ui/org.eclipse.terminal.view.ui.internal.handler.DisconnectTerminalCommandHandler" command="_command_disconnect"/>
15+
<elements xsi:type="commands:Handler" xmi:id="_handler_newview" elementId="org.eclipse.terminal.view.ui.handler.newview" contributionURI="bundleclass://org.eclipse.terminal.view.ui/org.eclipse.terminal.view.ui.internal.handler.NewTerminalViewHandler" command="_command_newview"/>
16+
</fragments>
17+
</fragment:ModelFragments>

terminal/bundles/org.eclipse.terminal.view.ui/plugin.xml

Lines changed: 9 additions & 91 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,15 @@
1212

1313
<plugin>
1414

15+
<!-- E4 model fragment -->
16+
<extension
17+
id="fragment"
18+
point="org.eclipse.e4.workbench.model">
19+
<fragment
20+
uri="fragment.e4xmi">
21+
</fragment>
22+
</extension>
23+
1524
<!-- Extension points -->
1625
<extension-point id="launcherDelegates" name="%ExtensionPoint.launcherDelegates.name" schema="schema/launcherDelegates.exsd"/>
1726

@@ -309,104 +318,13 @@
309318
</menuContribution>
310319

311320
</extension>
312-
<extension point="org.eclipse.ui.commands">
313-
<category
314-
id="org.eclipse.terminal.view.ui.commands.category"
315-
name="%command.category.name">
316-
</category>
317-
318-
<command
319-
categoryId="org.eclipse.terminal.view.ui.commands.category"
320-
helpContextId="org.eclipse.terminal.view.ui.command_Launch"
321-
id="org.eclipse.terminal.view.ui.command.launch"
322-
name="%command.launch.selection.name">
323-
</command>
324-
<command
325-
categoryId="org.eclipse.terminal.view.ui.commands.category"
326-
helpContextId="org.eclipse.terminal.view.ui.command_Launch"
327-
id="org.eclipse.terminal.view.ui.command.launchConsole"
328-
name="%command.launch.selection.name">
329-
</command>
330-
<command
331-
categoryId="org.eclipse.terminal.view.ui.commands.category"
332-
helpContextId="org.eclipse.terminal.view.ui.command_Launch"
333-
id="org.eclipse.terminal.view.ui.command.launchToolbar"
334-
name="%command.launch.name">
335-
</command>
336-
<command
337-
categoryId="org.eclipse.terminal.view.ui.commands.category"
338-
helpContextId="org.eclipse.terminal.view.ui.command_Disconnect"
339-
id="org.eclipse.terminal.view.ui.command.disconnect"
340-
name="%command.disconnect.name">
341-
</command>
342-
<command
343-
categoryId="org.eclipse.terminal.view.ui.commands.category"
344-
helpContextId="org.eclipse.terminal.view.ui.command_NewView"
345-
id="org.eclipse.terminal.view.ui.command.newview"
346-
name="%command.newview.name">
347-
</command>
348-
</extension>
349321
<extension point="org.eclipse.ui.bindings">
350322
<key
351323
commandId="org.eclipse.terminal.view.ui.command.launchToolbar"
352324
contextId="org.eclipse.ui.contexts.window"
353325
schemeId="org.eclipse.ui.defaultAcceleratorConfiguration"
354326
sequence="CTRL+SHIFT+M3+T"/> <!-- Bug 435111: Don't use M1 since COMMAND+Option T already taken on Mac -->
355327
</extension>
356-
<extension point="org.eclipse.ui.handlers">
357-
<handler
358-
class="org.eclipse.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler"
359-
commandId="org.eclipse.terminal.view.ui.command.launch">
360-
</handler>
361-
<handler
362-
class="org.eclipse.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler"
363-
commandId="org.eclipse.terminal.view.ui.command.launchToolbar">
364-
</handler>
365-
<handler
366-
class="org.eclipse.terminal.view.ui.internal.handler.LaunchTerminalCommandHandler"
367-
commandId="org.eclipse.terminal.view.ui.command.launchConsole">
368-
</handler>
369-
<handler
370-
class="org.eclipse.terminal.view.ui.internal.handler.DisconnectTerminalCommandHandler"
371-
commandId="org.eclipse.terminal.view.ui.command.disconnect">
372-
<enabledWhen>
373-
<with variable="activePart">
374-
<instanceof value="org.eclipse.terminal.view.ui.ITerminalsView"/>
375-
<test property="org.eclipse.terminal.view.ui.canDisconnect" value="true"/>
376-
</with>
377-
</enabledWhen>
378-
</handler>
379-
380-
<handler
381-
class="org.eclipse.terminal.view.ui.internal.handler.MaximizeViewHandler"
382-
commandId="org.eclipse.terminal.maximize">
383-
<activeWhen>
384-
<with variable="activePartId">
385-
<equals value="org.eclipse.terminal.view.ui.TerminalsView"/>
386-
</with>
387-
</activeWhen>
388-
</handler>
389-
390-
<handler
391-
class="org.eclipse.terminal.view.ui.internal.handler.QuickAccessHandler"
392-
commandId="org.eclipse.terminal.quickaccess">
393-
<activeWhen>
394-
<with variable="activePartId">
395-
<equals value="org.eclipse.terminal.view.ui.TerminalsView"/>
396-
</with>
397-
</activeWhen>
398-
</handler>
399-
400-
<handler
401-
class="org.eclipse.terminal.view.ui.internal.handler.NewTerminalViewHandler"
402-
commandId="org.eclipse.terminal.view.ui.command.newview">
403-
<activeWhen>
404-
<with variable="activePartId">
405-
<equals value="org.eclipse.terminal.view.ui.TerminalsView"/>
406-
</with>
407-
</activeWhen>
408-
</handler>
409-
</extension>
410328
<extension point="org.eclipse.help.contexts">
411329
<contexts
412330
file="contexts.xml">

terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/AbstractTriggerCommandHandler.java

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,16 @@ public abstract class AbstractTriggerCommandHandler extends AbstractHandler {
4040
* @param selection The selection to pass on to the command or <code>null</code>.
4141
*/
4242
protected void triggerCommand(String commandId, ISelection selection) {
43+
triggerCommandStatic(commandId, selection);
44+
}
45+
46+
/**
47+
* Static method to trigger a command to be executed. Can be used from E4 handlers.
48+
*
49+
* @param commandId The command id. Must not be <code>null</code>.
50+
* @param selection The selection to pass on to the command or <code>null</code>.
51+
*/
52+
protected static void triggerCommandStatic(String commandId, ISelection selection) {
4353
Assert.isNotNull(commandId);
4454

4555
ICommandService service = PlatformUI.getWorkbench().getService(ICommandService.class);

terminal/bundles/org.eclipse.terminal.view.ui/src/org/eclipse/terminal/view/ui/internal/handler/DisconnectTerminalCommandHandler.java

Lines changed: 27 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -11,36 +11,38 @@
1111
*******************************************************************************/
1212
package org.eclipse.terminal.view.ui.internal.handler;
1313

14-
import org.eclipse.core.commands.AbstractHandler;
15-
import org.eclipse.core.commands.ExecutionEvent;
16-
import org.eclipse.core.commands.ExecutionException;
14+
import jakarta.inject.Named;
15+
16+
import org.eclipse.e4.core.di.annotations.CanExecute;
17+
import org.eclipse.e4.core.di.annotations.Execute;
18+
import org.eclipse.e4.ui.model.application.ui.basic.MPart;
19+
import org.eclipse.e4.ui.services.IServiceConstants;
1720
import org.eclipse.jface.viewers.ISelection;
1821
import org.eclipse.jface.viewers.IStructuredSelection;
1922
import org.eclipse.swt.custom.CTabItem;
2023
import org.eclipse.terminal.control.ITerminalViewControl;
2124
import org.eclipse.terminal.view.ui.ITerminalsView;
2225
import org.eclipse.terminal.view.ui.internal.tabs.TabFolderManager;
23-
import org.eclipse.ui.handlers.HandlerUtil;
2426

2527
/**
2628
* Disconnect terminal connection command handler implementation.
2729
*/
28-
public class DisconnectTerminalCommandHandler extends AbstractHandler {
30+
public class DisconnectTerminalCommandHandler {
2931

30-
@Override
31-
public Object execute(ExecutionEvent event) throws ExecutionException {
32+
@Execute
33+
public void execute(@Named(IServiceConstants.ACTIVE_SELECTION) ISelection selection,
34+
@Named(IServiceConstants.ACTIVE_PART) MPart activePart) {
3235
CTabItem item = null;
3336

34-
ISelection selection = HandlerUtil.getCurrentSelection(event);
3537
if (selection instanceof IStructuredSelection && !selection.isEmpty()) {
3638
Object element = ((IStructuredSelection) selection).getFirstElement();
3739
if (element instanceof CTabItem && ((CTabItem) element).getData() instanceof ITerminalViewControl) {
3840
item = (CTabItem) element;
3941
}
4042
}
4143

42-
if (item == null && HandlerUtil.getActivePart(event) instanceof ITerminalsView) {
43-
ITerminalsView view = (ITerminalsView) HandlerUtil.getActivePart(event);
44+
if (item == null && activePart != null && activePart.getObject() instanceof ITerminalsView) {
45+
ITerminalsView view = (ITerminalsView) activePart.getObject();
4446
TabFolderManager mgr = view.getAdapter(TabFolderManager.class);
4547
if (mgr != null && mgr.getActiveTabItem() != null) {
4648
item = mgr.getActiveTabItem();
@@ -53,8 +55,22 @@ public Object execute(ExecutionEvent event) throws ExecutionException {
5355
terminal.disconnectTerminal();
5456
}
5557
}
58+
}
5659

57-
return null;
60+
@CanExecute
61+
public boolean canExecute(@Named(IServiceConstants.ACTIVE_PART) MPart activePart) {
62+
if (activePart != null && activePart.getObject() instanceof ITerminalsView) {
63+
ITerminalsView view = (ITerminalsView) activePart.getObject();
64+
TabFolderManager mgr = view.getAdapter(TabFolderManager.class);
65+
if (mgr != null && mgr.getActiveTabItem() != null) {
66+
CTabItem item = mgr.getActiveTabItem();
67+
if (item != null && item.getData() instanceof ITerminalViewControl) {
68+
ITerminalViewControl terminal = (ITerminalViewControl) item.getData();
69+
return terminal != null && !terminal.isDisposed();
70+
}
71+
}
72+
}
73+
return false;
5874
}
5975

6076
}

0 commit comments

Comments
 (0)