diff --git a/bundles/org.eclipse.remote.console/.project b/bundles/org.eclipse.remote.console/.project
index 0d4f3afa834..da0bcc42ec2 100644
--- a/bundles/org.eclipse.remote.console/.project
+++ b/bundles/org.eclipse.remote.console/.project
@@ -20,9 +20,15 @@
+
+ org.eclipse.pde.api.tools.apiAnalysisBuilder
+
+
+
org.eclipse.pde.PluginNature
org.eclipse.jdt.core.javanature
+ org.eclipse.pde.api.tools.apiAnalysisNature
diff --git a/bundles/org.eclipse.remote.console/META-INF/MANIFEST.MF b/bundles/org.eclipse.remote.console/META-INF/MANIFEST.MF
index 07fd923b4ba..581674f3964 100644
--- a/bundles/org.eclipse.remote.console/META-INF/MANIFEST.MF
+++ b/bundles/org.eclipse.remote.console/META-INF/MANIFEST.MF
@@ -2,13 +2,14 @@ Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: %pluginName
Bundle-SymbolicName: org.eclipse.remote.console;singleton:=true
-Bundle-Version: 1.0.0.qualifier
+Bundle-Version: 1.1.0.qualifier
Bundle-Activator: org.eclipse.remote.internal.console.Activator
Bundle-Localization: plugin
Bundle-RequiredExecutionEnvironment: JavaSE-1.7
Bundle-ActivationPolicy: lazy
Bundle-Vendor: %pluginProvider
-Export-Package: org.eclipse.remote.console
+Export-Package: org.eclipse.remote.console,
+ org.eclipse.remote.console.actions
Import-Package: org.eclipse.core.commands,
org.eclipse.core.runtime,
org.eclipse.core.runtime.jobs,
diff --git a/bundles/org.eclipse.remote.console/plugin.xml b/bundles/org.eclipse.remote.console/plugin.xml
index 592289c59f4..c016588a867 100644
--- a/bundles/org.eclipse.remote.console/plugin.xml
+++ b/bundles/org.eclipse.remote.console/plugin.xml
@@ -1,6 +1,7 @@
+
org.eclipse.remote.console
- 1.0.0-SNAPSHOT
+ 1.1.0-SNAPSHOT
eclipse-plugin
diff --git a/bundles/org.eclipse.remote.console/schema/consoleToolbar.exsd b/bundles/org.eclipse.remote.console/schema/consoleToolbar.exsd
new file mode 100644
index 00000000000..0b1adee0416
--- /dev/null
+++ b/bundles/org.eclipse.remote.console/schema/consoleToolbar.exsd
@@ -0,0 +1,116 @@
+
+
+
+
+
+
+
+
+ [Enter description of this extension point.]
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ Identifier for this action
+
+
+
+
+
+
+ The connection type this Action applies to
+
+
+
+
+
+
+ A class implementing IConsoleActionFactory to be called to create the Action
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+ [Enter the first release in which this extension point appears.]
+
+
+
+
+
+
+
+
+ [Enter extension point usage example here.]
+
+
+
+
+
+
+
+
+ [Enter API information here.]
+
+
+
+
+
+
+
+
+ [Enter information about supplied implementation of this extension point.]
+
+
+
+
+
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/TerminalConsoleUtility.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/TerminalConsoleUtility.java
index a9af9f255e6..ff532694f83 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/TerminalConsoleUtility.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/TerminalConsoleUtility.java
@@ -17,13 +17,15 @@ import org.eclipse.remote.internal.console.TerminalConsoleFactory;
import org.eclipse.ui.console.IConsole;
/**
- * A collection of public API utility methods to open
- * consoles to IRemoteConnection objects
+ * A collection of public API utility methods to open consoles to
+ * IRemoteConnection objects
+ *
+ * @since 1.1
*/
public class TerminalConsoleUtility {
/**
- * Opens a dialog to allow selection of an IRemoteConnection,
- * encoding, etc. and then open a console to it.
+ * Opens a dialog to allow selection of an IRemoteConnection, encoding, etc.
+ * and then open a console to it.
*/
public void openConsole() {
new TerminalConsoleFactory().openConsole();
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleAction.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/actions/ConsoleAction.java
similarity index 67%
rename from bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleAction.java
rename to bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/actions/ConsoleAction.java
index 9df1416479b..0b5d60c97d6 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleAction.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/actions/ConsoleAction.java
@@ -8,13 +8,16 @@
* Contributors:
* QNX Software Systems - Initial API and implementation
*******************************************************************************/
-package org.eclipse.remote.internal.console.actions;
+package org.eclipse.remote.console.actions;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.resource.ImageRegistry;
import org.eclipse.remote.internal.console.Activator;
+/**
+ * @since 1.1
+ */
public abstract class ConsoleAction extends Action {
public ConsoleAction(String id) {
this(id, 0);
@@ -25,27 +28,20 @@ public abstract class ConsoleAction extends Action {
setId(id);
}
- protected void setupAction(String text, String tooltip,
- String image, String enabledImage, String disabledImage,
+ protected void setupAction(String text, String tooltip, String image, String enabledImage, String disabledImage,
boolean enabled) {
ImageRegistry imageRegistry = Activator.getDefault().getImageRegistry();
setupAction(text, tooltip, image, enabledImage, disabledImage, enabled, imageRegistry);
}
- protected void setupAction(String text, String tooltip,
- String hoverImage, String enabledImage, String disabledImage,
- boolean enabled, ImageRegistry imageRegistry) {
- setupAction(text,
- tooltip,
- imageRegistry.getDescriptor(hoverImage),
- imageRegistry.getDescriptor(enabledImage),
- imageRegistry.getDescriptor(disabledImage),
- enabled);
+ protected void setupAction(String text, String tooltip, String hoverImage, String enabledImage,
+ String disabledImage, boolean enabled, ImageRegistry imageRegistry) {
+ setupAction(text, tooltip, imageRegistry.getDescriptor(hoverImage), imageRegistry.getDescriptor(enabledImage),
+ imageRegistry.getDescriptor(disabledImage), enabled);
}
- protected void setupAction(String text, String tooltip,
- ImageDescriptor hoverImage, ImageDescriptor enabledImage, ImageDescriptor disabledImage,
- boolean enabled) {
+ protected void setupAction(String text, String tooltip, ImageDescriptor hoverImage, ImageDescriptor enabledImage,
+ ImageDescriptor disabledImage, boolean enabled) {
setText(text);
setToolTipText(tooltip);
setEnabled(enabled);
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/actions/IConsoleActionFactory.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/actions/IConsoleActionFactory.java
new file mode 100644
index 00000000000..fff843a7a30
--- /dev/null
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/console/actions/IConsoleActionFactory.java
@@ -0,0 +1,20 @@
+/*******************************************************************************
+ * Copyright (c) 2016 QNX Software Systems 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:
+ * QNX Software Systems - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.remote.console.actions;
+
+import org.eclipse.core.runtime.IAdaptable;
+
+/**
+ * @since 1.1
+ */
+public interface IConsoleActionFactory {
+ public ConsoleAction createAction(String actionId, String connectionType, IAdaptable adapter);
+}
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsole.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsole.java
index 8fdfc7b3d7a..011ad72b278 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsole.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsole.java
@@ -20,7 +20,6 @@ import org.eclipse.ui.console.IConsoleView;
import org.eclipse.ui.part.IPageBookViewPage;
import org.eclipse.ui.progress.UIJob;
-@SuppressWarnings("restriction")
public class TerminalConsole extends AbstractConsole {
private final String encoding;
private final TerminalConsoleConnector terminalConnector;
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsoleExtensionManager.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsoleExtensionManager.java
new file mode 100644
index 00000000000..f9cbdb6e9f9
--- /dev/null
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsoleExtensionManager.java
@@ -0,0 +1,89 @@
+/*******************************************************************************
+ * Copyright (c) 2016 QNX Software Systems 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:
+ * QNX Software Systems - Initial API and implementation
+ *******************************************************************************/
+package org.eclipse.remote.internal.console;
+
+import java.util.ArrayList;
+import java.util.HashMap;
+import java.util.LinkedHashMap;
+import java.util.List;
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IConfigurationElement;
+import org.eclipse.core.runtime.IExtension;
+import org.eclipse.core.runtime.IExtensionPoint;
+import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.Platform;
+import org.eclipse.remote.console.actions.IConsoleActionFactory;
+
+public class TerminalConsoleExtensionManager {
+ private static TerminalConsoleExtensionManager instance;
+ private Map> actions;
+ private Map factories;
+ private Map elements;
+
+ private TerminalConsoleExtensionManager() {
+ }
+
+ public static TerminalConsoleExtensionManager getInstance() {
+ if (instance == null) {
+ instance = new TerminalConsoleExtensionManager();
+ }
+ return instance;
+ }
+
+ public List getActionsForType(String id) {
+ initialize();
+ List list = actions.get(id);
+ return list == null ? new ArrayList() : list;
+ }
+
+ public IConsoleActionFactory getFactory(String id) {
+ return factories.get(id);
+ }
+
+ private void initialize() {
+ if (actions == null) {
+ actions = new LinkedHashMap<>();
+ elements = new LinkedHashMap<>();
+ factories = new HashMap<>();
+ IExtensionRegistry registry = Platform.getExtensionRegistry();
+ IExtensionPoint point = registry
+ .getExtensionPoint(Activator.getDefault().getBundle().getSymbolicName() + ".toolbar");
+ for (IExtension extension : point.getExtensions()) {
+ for (IConfigurationElement element : extension.getConfigurationElements()) {
+ String id = element.getAttribute("id"); //$NON-NLS-1$
+ if (id != null) {
+ elements.put(id, element);
+ IConsoleActionFactory factory = null;
+ try {
+ factory = (IConsoleActionFactory) element.createExecutableExtension("actionFactory");
+ } catch (CoreException e) {
+ Activator.log(e);
+ }
+ if (factory != null) {
+ String connectionType = element.getAttribute("connectionType");
+ if (connectionType != null) {
+ List actionList = actions.get(connectionType);
+ if (actionList == null) {
+ actionList = new ArrayList<>();
+ }
+ actionList.add(id);
+ actions.put(connectionType, actionList);
+ factories.put(id, factory);
+ }
+ }
+ }
+ }
+ }
+ }
+ }
+}
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java
index c426ecf77c5..4e10ee677cd 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/TerminalConsolePage.java
@@ -11,7 +11,9 @@
package org.eclipse.remote.internal.console;
import java.io.UnsupportedEncodingException;
+import java.util.List;
+import org.eclipse.core.runtime.IAdaptable;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
@@ -20,6 +22,9 @@ import org.eclipse.jface.action.GroupMarker;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.osgi.util.NLS;
+import org.eclipse.remote.console.actions.ConsoleAction;
+import org.eclipse.remote.console.actions.IConsoleActionFactory;
+import org.eclipse.remote.core.IRemoteConnection;
import org.eclipse.remote.internal.console.actions.ConsoleActionConnect;
import org.eclipse.remote.internal.console.actions.ConsoleActionDisconnect;
import org.eclipse.remote.internal.console.actions.ConsoleActionScrollLock;
@@ -40,9 +45,9 @@ import org.eclipse.ui.part.IPageSite;
import org.eclipse.ui.part.Page;
import org.eclipse.ui.progress.UIJob;
-@SuppressWarnings("restriction")
-public class TerminalConsolePage extends Page {
+public class TerminalConsolePage extends Page implements IAdaptable {
public static final String TOOLBAR_GROUP_ID = "org.eclipse.remote.internal.terminal.console.Toolbar"; //$NON-NLS-1$
+ public static final String CONTRIBUTIONS_GROUP_ID = "org.eclipse.remote.internal.terminal.console.Toolbar.contributions"; //$NON-NLS-1$
private final ConsoleActionConnect connectAction;
private final ConsoleActionDisconnect disconnectAction;
@@ -89,10 +94,29 @@ public class TerminalConsolePage extends Page {
super.init(pageSite);
IToolBarManager toolBarManager = pageSite.getActionBars().getToolBarManager();
toolBarManager.insertBefore(IConsoleConstants.OUTPUT_GROUP, new GroupMarker(TOOLBAR_GROUP_ID));
+
toolBarManager.appendToGroup(TOOLBAR_GROUP_ID, connectAction);
toolBarManager.appendToGroup(TOOLBAR_GROUP_ID, disconnectAction);
toolBarManager.appendToGroup(TOOLBAR_GROUP_ID, new ConsoleActionScrollLock(this));
toolBarManager.appendToGroup(TOOLBAR_GROUP_ID, new CloseConsoleAction(terminalConsole));
+
+ toolBarManager.insertAfter(TOOLBAR_GROUP_ID, new GroupMarker(CONTRIBUTIONS_GROUP_ID));
+
+ addToolbarContributions(toolBarManager);
+ }
+
+ private void addToolbarContributions(IToolBarManager toolBarManager) {
+ String connectionType = terminalConsole.getConnection().getConnectionType().getId();
+ List actions = TerminalConsoleExtensionManager.getInstance().getActionsForType(connectionType);
+ for (String id : actions) {
+ IConsoleActionFactory factory = TerminalConsoleExtensionManager.getInstance().getFactory(id);
+ if (factory != null) {
+ ConsoleAction action = factory.createAction(id, connectionType, this);
+ if (action != null) {
+ toolBarManager.appendToGroup(CONTRIBUTIONS_GROUP_ID, action);
+ }
+ }
+ }
}
@Override
@@ -175,4 +199,22 @@ public class TerminalConsolePage extends Page {
return Status.OK_STATUS;
}
}
+
+ /* (non-Javadoc)
+ * @see org.eclipse.core.runtime.IAdaptable#getAdapter(java.lang.Class)
+ */
+ @SuppressWarnings("unchecked")
+ @Override
+ public T getAdapter(Class adapter) {
+ if (adapter.equals(IRemoteConnection.class)) {
+ return (T) terminalConsole.getConnection();
+ }
+ if (adapter.equals(TerminalConsole.class)) {
+ return (T) terminalConsole;
+ }
+ if (adapter.equals(TerminalConsolePage.class)) {
+ return (T) this;
+ }
+ return null;
+ }
}
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionConnect.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionConnect.java
index e3c97bf1f26..a830e8099e7 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionConnect.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionConnect.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.remote.internal.console.actions;
+import org.eclipse.remote.console.actions.ConsoleAction;
import org.eclipse.remote.internal.console.ImageConsts;
import org.eclipse.remote.internal.console.TerminalConsole;
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionDisconnect.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionDisconnect.java
index b567063320b..3bece3b02ee 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionDisconnect.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionDisconnect.java
@@ -10,6 +10,7 @@
*******************************************************************************/
package org.eclipse.remote.internal.console.actions;
+import org.eclipse.remote.console.actions.ConsoleAction;
import org.eclipse.remote.internal.console.ImageConsts;
import org.eclipse.remote.internal.console.TerminalConsole;
diff --git a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionScrollLock.java b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionScrollLock.java
index 28c7e4a3fb2..19c4596d787 100644
--- a/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionScrollLock.java
+++ b/bundles/org.eclipse.remote.console/src/org/eclipse/remote/internal/console/actions/ConsoleActionScrollLock.java
@@ -11,6 +11,7 @@
package org.eclipse.remote.internal.console.actions;
import org.eclipse.jface.action.IAction;
+import org.eclipse.remote.console.actions.ConsoleAction;
import org.eclipse.remote.internal.console.ImageConsts;
import org.eclipse.remote.internal.console.TerminalConsolePage;
diff --git a/features/org.eclipse.remote.console-feature/feature.xml b/features/org.eclipse.remote.console-feature/feature.xml
index 14ed3912518..49d35e74d2d 100644
--- a/features/org.eclipse.remote.console-feature/feature.xml
+++ b/features/org.eclipse.remote.console-feature/feature.xml
@@ -2,7 +2,7 @@
diff --git a/features/org.eclipse.remote.console-feature/pom.xml b/features/org.eclipse.remote.console-feature/pom.xml
index df3490c9d6b..b472f1db86a 100644
--- a/features/org.eclipse.remote.console-feature/pom.xml
+++ b/features/org.eclipse.remote.console-feature/pom.xml
@@ -12,7 +12,7 @@
org.eclipse.remote.features
org.eclipse.remote.console
- 2.0.2-SNAPSHOT
+ 2.1.0-SNAPSHOT
eclipse-feature