diff --git a/rse/examples/org.eclipse.rse.examples.daytime/plugin.xml b/rse/examples/org.eclipse.rse.examples.daytime/plugin.xml index 5fddd541215..bd7be527d88 100644 --- a/rse/examples/org.eclipse.rse.examples.daytime/plugin.xml +++ b/rse/examples/org.eclipse.rse.examples.daytime/plugin.xml @@ -32,6 +32,7 @@ Martin Oberhuber (Wind River) - initial API and implementation category="files" class="org.eclipse.rse.subsystems.files.ftp.FTPFileSubSystemConfiguration" vendor="Eclipse.org" + priority="100" id="ftp.files"> @@ -47,6 +48,7 @@ Martin Oberhuber (Wind River) - initial API and implementation category="daytime" class="org.eclipse.rse.examples.daytime.subsystems.DaytimeSubSystemConfiguration" vendor="Wind River Systems" + priority="40000" id="daytime.tcp"> diff --git a/rse/examples/org.eclipse.rse.examples.tutorial/plugin.xml b/rse/examples/org.eclipse.rse.examples.tutorial/plugin.xml index b9da65c1226..70d67dcebb5 100644 --- a/rse/examples/org.eclipse.rse.examples.tutorial/plugin.xml +++ b/rse/examples/org.eclipse.rse.examples.tutorial/plugin.xml @@ -64,7 +64,7 @@ Martin Oberhuber (Wind River) - Adapted original tutorial code to Open RSE. description="Example Developer Subsystem" iconlive="icons/systemconnectionlive.gif" icon="icons/systemconnection.gif" - > + priority="50000"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.dstore/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.files.dstore/plugin.xml index cee0d66b459..80eb5d3ef6c 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.dstore/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.files.dstore/plugin.xml @@ -29,6 +29,7 @@ Contributors: category="files" class="org.eclipse.rse.subsystems.files.dstore.subsystem.DStoreFileSubSystemConfiguration" vendor="Eclipse.org" + priority="100" id="dstore.files"> @@ -41,6 +42,7 @@ Contributors: category="files" class="org.eclipse.rse.subsystems.files.dstore.subsystem.DStoreWindowsFileSubSystemConfiguration" vendor="Eclipse.org" + priority="100" id="dstore.windows.files"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.ftp/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.files.ftp/plugin.xml index 342239ed774..add577e62e3 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.ftp/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.files.ftp/plugin.xml @@ -30,6 +30,7 @@ Javier Montalvo Orus (Symbian) - add Windows to list of valid FTP systems category="files" class="org.eclipse.rse.subsystems.files.ftp.FTPFileSubSystemConfiguration" vendor="Eclipse.org" + priority="100" id="ftp.files"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.local/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.files.local/plugin.xml index dbed9576aed..76b1505d9f4 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.local/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.files.local/plugin.xml @@ -29,6 +29,7 @@ Contributors: category="files" class="org.eclipse.rse.subsystems.files.local.LocalFileSubSystemConfiguration" vendor="Eclipse.org" + priority="100" id="local.files"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.files.ssh/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.files.ssh/plugin.xml index 7538324f56e..c104edfda17 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.files.ssh/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.files.ssh/plugin.xml @@ -22,6 +22,7 @@ Martin Oberhuber - initial API and implementation category="files" class="org.eclipse.rse.subsystems.files.ssh.SftpFileSubSystemConfiguration" vendor="%providerName" + priority="100" id="ssh.files"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.processes.dstore/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.processes.dstore/plugin.xml index 66d617b27a8..05b9a355ab3 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.processes.dstore/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.processes.dstore/plugin.xml @@ -33,6 +33,7 @@ Contributors: category="processes" class="org.eclipse.rse.subsystems.processes.dstore.DStoreProcessSubSystemConfiguration" vendor="Eclipse.org" + priority="200" id="dstore.processes"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.processes.local/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.processes.local/plugin.xml index 9f37e5c654d..9b3b4e738c1 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.processes.local/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.processes.local/plugin.xml @@ -33,6 +33,7 @@ Contributors: category="processes" class="org.eclipse.rse.subsystems.processes.local.LocalProcessSubSystemFactory" vendor="Eclipse.org" + priority="200" id="local.processes"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.shells.dstore/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.shells.dstore/plugin.xml index cd887741317..51fcf5c88ec 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.shells.dstore/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.shells.dstore/plugin.xml @@ -30,6 +30,7 @@ Contributors: category="shells" class="org.eclipse.rse.subsystems.shells.dstore.DStoreShellSubSystemConfiguration" vendor="Eclipse.org" + priority="300" id="dstore.shells"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.shells.local/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.shells.local/plugin.xml index 1d0a33b954f..817e93ccba3 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.shells.local/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.shells.local/plugin.xml @@ -33,6 +33,7 @@ Contributors: category="shells" class="org.eclipse.rse.subsystems.shells.local.LocalShellSubSystemConfiguration" vendor="Eclipse.org" + priority="300" id="local.shells"> diff --git a/rse/plugins/org.eclipse.rse.subsystems.shells.ssh/plugin.xml b/rse/plugins/org.eclipse.rse.subsystems.shells.ssh/plugin.xml index 891135aafcc..3595e664d45 100644 --- a/rse/plugins/org.eclipse.rse.subsystems.shells.ssh/plugin.xml +++ b/rse/plugins/org.eclipse.rse.subsystems.shells.ssh/plugin.xml @@ -22,6 +22,7 @@ Martin Oberhuber - initial API and implementation category="shells" class="org.eclipse.rse.subsystems.shells.ssh.SshShellSubSystemConfiguration" vendor="%providerName" + priority="300" id="ssh.shells"> diff --git a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/RSEUIPlugin.java b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/RSEUIPlugin.java index b32103c3898..01a871599f9 100644 --- a/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/RSEUIPlugin.java +++ b/rse/plugins/org.eclipse.rse.ui/UI/org/eclipse/rse/ui/RSEUIPlugin.java @@ -18,6 +18,7 @@ package org.eclipse.rse.ui; import java.net.InetAddress; import java.net.URL; +import java.util.Arrays; import java.util.Vector; import org.eclipse.core.resources.IProject; @@ -36,6 +37,7 @@ import org.eclipse.rse.core.comm.ISystemKeystoreProvider; import org.eclipse.rse.core.comm.SystemCommunicationsDaemon; import org.eclipse.rse.core.comm.SystemKeystoreProviderManager; import org.eclipse.rse.core.internal.subsystems.SubSystemConfigurationProxy; +import org.eclipse.rse.core.internal.subsystems.SubSystemConfigurationProxyComparator; import org.eclipse.rse.core.subsystems.ISubSystemConfiguration; import org.eclipse.rse.core.subsystems.ISubSystemConfigurationProxy; import org.eclipse.rse.internal.model.SystemProfileManager; @@ -1086,6 +1088,9 @@ public class RSEUIPlugin extends SystemBasePlugin implements ISystemMessageProvi subsystemFactories[idx] = (ISubSystemConfigurationProxy)v.elementAt(idx); } } + + Arrays.sort(subsystemFactories, new SubSystemConfigurationProxyComparator()); + return subsystemFactories; } diff --git a/rse/plugins/org.eclipse.rse.ui/schema/subsystemConfiguration.exsd b/rse/plugins/org.eclipse.rse.ui/schema/subsystemConfiguration.exsd index c841e248d44..f7a89d2bd59 100644 --- a/rse/plugins/org.eclipse.rse.ui/schema/subsystemConfiguration.exsd +++ b/rse/plugins/org.eclipse.rse.ui/schema/subsystemConfiguration.exsd @@ -157,13 +157,20 @@ category of "database". - Optional. + Optional. + + + + This optional attribute determines the order in which subsystems appear in the New Connection wizard and RSE views. The lower the number, the higher the priority. + + + diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/SubSystemConfigurationProxy.java b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/SubSystemConfigurationProxy.java index d9a4e1b3988..5e0b06ee5c2 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/SubSystemConfigurationProxy.java +++ b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/SubSystemConfigurationProxy.java @@ -42,6 +42,7 @@ import org.osgi.framework.Bundle; public class SubSystemConfigurationProxy implements ISubSystemConfigurationProxy { private String name,description,id,types,vendor, category, systemClassName; + private int priority; private String[] systemTypes; private List typesArray; private boolean allTypes = false; @@ -65,6 +66,21 @@ public class SubSystemConfigurationProxy implements ISubSystemConfigurationProxy this.vendor = element.getAttribute("vendor"); this.category = element.getAttribute("category"); this.systemClassName = element.getAttribute("systemClass"); + this.priority = Integer.MAX_VALUE; + + String priorityStr = element.getAttribute("priority"); + + try { + + if (priorityStr != null) { + priority = Integer.parseInt(priorityStr); + } + } + catch (NumberFormatException e) { + priority = Integer.MAX_VALUE; + RSEUIPlugin.logError("Exception reading priority for subsystem configuration " + name + " defined in plugin " + element.getDeclaringExtension().getNamespaceIdentifier(), e); + } + String className = element.getAttribute("class"); if (vendor == null) vendor = "Unknown"; if (category == null) category = "Unknown"; @@ -156,8 +172,16 @@ public class SubSystemConfigurationProxy implements ISubSystemConfigurationProxy return liveImage; else return image; - } + } + /** + * @see org.eclipse.rse.core.subsystems.ISubSystemConfigurationProxy#getPriority() + */ + public int getPriority() { + return priority; + } + + /** * Return true if this extension's systemTypes attribute matches the given system type */ public boolean appliesToSystemType(String type) diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/SubSystemConfigurationProxyComparator.java b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/SubSystemConfigurationProxyComparator.java new file mode 100644 index 00000000000..7f97789d2df --- /dev/null +++ b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/internal/subsystems/SubSystemConfigurationProxyComparator.java @@ -0,0 +1,38 @@ +package org.eclipse.rse.core.internal.subsystems; + +import java.util.Comparator; + +import org.eclipse.rse.core.subsystems.ISubSystemConfigurationProxy; + +public class SubSystemConfigurationProxyComparator implements Comparator { + + /** + * Constructor. + */ + public SubSystemConfigurationProxyComparator() { + } + + /** + * Compares priorities of subsystem configuration proxies. + */ + public int compare(Object o1, Object o2) { + + if (o1 instanceof ISubSystemConfigurationProxy && o2 instanceof ISubSystemConfigurationProxy) { + ISubSystemConfigurationProxy proxy1 = (ISubSystemConfigurationProxy)o1; + ISubSystemConfigurationProxy proxy2 = (ISubSystemConfigurationProxy)o2; + + if (proxy1.getPriority() < proxy2.getPriority()) { + return -1; + } + else if (proxy1.getPriority() > proxy2.getPriority()) { + return 1; + } + else { + return 0; + } + } + else { + return 0; + } + } +} \ No newline at end of file diff --git a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/ISubSystemConfigurationProxy.java b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/ISubSystemConfigurationProxy.java index 56944019782..7c26d0c3a4a 100644 --- a/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/ISubSystemConfigurationProxy.java +++ b/rse/plugins/org.eclipse.rse.ui/subsystems/org/eclipse/rse/core/subsystems/ISubSystemConfigurationProxy.java @@ -74,6 +74,12 @@ public interface ISubSystemConfigurationProxy * Return true if the subsystem factory has been instantiated yet */ public boolean isSubSystemConfigurationActive(); + + /** + * Returns the priority of the subsystem configuration. + */ + public int getPriority(); + /** * Return the subsystem factory singleton instance. Will instantiate if not already. */