diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java index d6806e54495..9b686d52580 100644 --- a/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java +++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/Messages.java @@ -22,16 +22,26 @@ public class Messages extends NLS { public static String ConnectionsPreferencePage_Add; + public static String ConnectionsPreferencePage_closed; + + public static String ConnectionsPreferencePage_Close; + public static String ConnectionsPreferencePage_Connection_Name; public static String ConnectionsPreferencePage_Edit; public static String ConnectionsPreferencePage_Host; + public static String ConnectionsPreferencePage_open; + + public static String ConnectionsPreferencePage_Open; + public static String ConnectionsPreferencePage_Remote_Services; public static String ConnectionsPreferencePage_Remove; + public static String ConnectionsPreferencePage_Status; + public static String ConnectionsPreferencePage_User; public static String LocalUIConnectionManager_0; diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties b/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties index a9ad1a40690..c47fe19d153 100644 --- a/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties +++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/messages/messages.properties @@ -8,11 +8,16 @@ AbstractRemoteUIConnectionManager_Could_not_open_connection=Could not open conne ############################################################################### AbstractRemoteUIConnectionManager_Connection_Error=Connection Error ConnectionsPreferencePage_Add=Add +ConnectionsPreferencePage_Close=Close +ConnectionsPreferencePage_closed=closed ConnectionsPreferencePage_Connection_Name=Connection Name ConnectionsPreferencePage_Edit=Edit ConnectionsPreferencePage_Host=Host +ConnectionsPreferencePage_open=open +ConnectionsPreferencePage_Open=Open ConnectionsPreferencePage_Remote_Services=Remote Services: ConnectionsPreferencePage_Remove=Remove +ConnectionsPreferencePage_Status=Status ConnectionsPreferencePage_User=User LocalUIConnectionManager_0=Connection Error LocalUIConnectionManager_1=Could not open connection diff --git a/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/preferences/ConnectionsPreferencePage.java b/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/preferences/ConnectionsPreferencePage.java index 64777b26e82..66cb2f644f6 100644 --- a/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/preferences/ConnectionsPreferencePage.java +++ b/bundles/org.eclipse.remote.ui/src/org/eclipse/internal/remote/ui/preferences/ConnectionsPreferencePage.java @@ -98,10 +98,12 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe IRemoteConnection connection = (IRemoteConnection) element; switch (columnIndex) { case 0: - return connection.getName(); + return connection.isOpen() ? Messages.ConnectionsPreferencePage_open : Messages.ConnectionsPreferencePage_closed; case 1: - return connection.getAddress(); + return connection.getName(); case 2: + return connection.getAddress(); + case 3: return connection.getUsername(); } return null; @@ -139,6 +141,10 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe editConnection(); } else if (source == fRemoveButton) { removeConnections(); + } else if (source == fOpenButton) { + toggleConnection(); + } else if (source == fCloseButton) { + toggleConnection(); } else if (source == fConnectionTable) { selectConnection(); } else if (source == fServicesCombo) { @@ -149,16 +155,18 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe } - private final String[] fTableColumnHeaders = { Messages.ConnectionsPreferencePage_Connection_Name, + private final String[] fTableColumnHeaders = { Messages.ConnectionsPreferencePage_Status, Messages.ConnectionsPreferencePage_Connection_Name, Messages.ConnectionsPreferencePage_Host, Messages.ConnectionsPreferencePage_User }; - private final ColumnLayoutData[] fTableColumnLayouts = { new ColumnWeightData(30), new ColumnWeightData(50), - new ColumnWeightData(20) }; + private final ColumnLayoutData[] fTableColumnLayouts = { new ColumnWeightData(15), new ColumnWeightData(35), + new ColumnWeightData(30), new ColumnWeightData(20) }; private Combo fServicesCombo; private Button fAddButton; private Button fEditButton; private Button fRemoveButton; + private Button fOpenButton; + private Button fCloseButton; private Table fConnectionTable; private TableViewer fConnectionViewer; private EventHandler fEventHandler; @@ -289,6 +297,16 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe fRemoveButton.setText(Messages.ConnectionsPreferencePage_Remove); fRemoveButton.addSelectionListener(fEventHandler); fRemoveButton.setEnabled(false); + fOpenButton = new Button(buttonPane, SWT.PUSH); + setButtonLayoutData(fOpenButton); + fOpenButton.setText(Messages.ConnectionsPreferencePage_Open); + fOpenButton.addSelectionListener(fEventHandler); + fOpenButton.setEnabled(false); + fCloseButton = new Button(buttonPane, SWT.PUSH); + setButtonLayoutData(fCloseButton); + fCloseButton.setText(Messages.ConnectionsPreferencePage_Close); + fCloseButton.addSelectionListener(fEventHandler); + fCloseButton.setEnabled(false); String id = Preferences.getString(IRemotePreferenceConstants.PREF_REMOTE_SERVICES_ID); if ("".equals(id)) { //$NON-NLS-1$ @@ -337,10 +355,6 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe return name; } - private Set invalidConnectionNames() { - return fWorkingCopies.keySet(); - } - private void initWorkingConnections() { fWorkingCopies.clear(); for (IRemoteConnection conn : fConnectionManager.getConnections()) { @@ -348,6 +362,10 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe } } + private Set invalidConnectionNames() { + return fWorkingCopies.keySet(); + } + @Override protected void performDefaults() { initWorkingConnections(); @@ -389,14 +407,12 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe */ private void selectConnection() { TableItem[] selection = fConnectionTable.getSelection(); - fEditButton.setEnabled(false); - fRemoveButton.setEnabled(false); if (selection.length > 0) { fSelectedConnection = (IRemoteConnection) selection[0].getData(); - IRemoteServices services = fSelectedConnection.getRemoteServices(); - fEditButton.setEnabled((services.getCapabilities() & IRemoteServices.CAPABILITY_EDIT_CONNECTIONS) != 0); - fRemoveButton.setEnabled((services.getCapabilities() & IRemoteServices.CAPABILITY_REMOVE_CONNECTIONS) != 0); + } else { + fSelectedConnection = null; } + updateEnablement(); } private void selectServices(String id) { @@ -411,6 +427,27 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe fIsDirty = false; } + /** + * Toggle the connection + */ + private void toggleConnection() { + TableItem[] items = fConnectionTable.getSelection(); + if (items.length > 0) { + IRemoteConnection conn = (IRemoteConnection) items[0].getData(); + if (conn.isOpen()) { + conn.close(); + } else { + IRemoteUIConnectionManager mgr = RemoteUIServices.getRemoteUIServices(conn.getRemoteServices()) + .getUIConnectionManager(); + if (mgr != null) { + mgr.openConnectionWithProgress(getShell(), null, conn); + } + } + fConnectionViewer.refresh(); + updateEnablement(); + } + } + /** * Update the connection manager with changes to the connections. */ @@ -437,4 +474,19 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe } initWorkingConnections(); } + + private void updateEnablement() { + fEditButton.setEnabled(false); + fRemoveButton.setEnabled(false); + fOpenButton.setEnabled(false); + fCloseButton.setEnabled(false); + if (fSelectedConnection != null) { + fEditButton + .setEnabled((fSelectedConnection.getRemoteServices().getCapabilities() & IRemoteServices.CAPABILITY_EDIT_CONNECTIONS) != 0); + fRemoveButton + .setEnabled((fSelectedConnection.getRemoteServices().getCapabilities() & IRemoteServices.CAPABILITY_REMOVE_CONNECTIONS) != 0); + fOpenButton.setEnabled(!fSelectedConnection.isOpen()); + fCloseButton.setEnabled(fSelectedConnection.isOpen()); + } + } }