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.
*/