mirror of
https://github.com/eclipse-cdt/cdt
synced 2025-07-26 10:25:32 +02:00
Check for changes before opening connection.
Signed-off-by: Greg Watson <g.watson@computer.org>
This commit is contained in:
parent
c22656936a
commit
ec96e61198
7 changed files with 152 additions and 3 deletions
|
@ -22,36 +22,91 @@ public class LocalConnectionWorkingCopy extends LocalConnection implements IRemo
|
|||
fOriginal = connection;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#getOriginal()
|
||||
*/
|
||||
@Override
|
||||
public IRemoteConnection getOriginal() {
|
||||
return fOriginal;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#isDirty()
|
||||
*/
|
||||
@Override
|
||||
public boolean isDirty() {
|
||||
return false;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#save()
|
||||
*/
|
||||
@Override
|
||||
public IRemoteConnection save() {
|
||||
return fOriginal;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setAddress(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setAddress(String address) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setAttribute(java.lang.String, java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setAttribute(String key, String value) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setName(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setName(String name) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setPassword(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setPassword(String password) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setPort(int)
|
||||
*/
|
||||
@Override
|
||||
public void setPort(int port) {
|
||||
// Do nothing
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setUsername(java.lang.String)
|
||||
*/
|
||||
@Override
|
||||
public void setUsername(String username) {
|
||||
// Do nothing
|
||||
|
|
|
@ -11,6 +11,20 @@
|
|||
package org.eclipse.remote.core;
|
||||
|
||||
public interface IRemoteConnectionWorkingCopy extends IRemoteConnection {
|
||||
/**
|
||||
* Returns the original connection this working copy was created from.
|
||||
*
|
||||
* @return original connection
|
||||
*/
|
||||
public IRemoteConnection getOriginal();
|
||||
|
||||
/**
|
||||
* Returns whether this connection has been modified since it was last saved or created.
|
||||
*
|
||||
* @return true if the connection has been modified
|
||||
*/
|
||||
public boolean isDirty();
|
||||
|
||||
/**
|
||||
* Saves this working copy to its original connection and returns a handle to the resulting connection. Has no effect if this
|
||||
* connection does not need saving.
|
||||
|
|
|
@ -97,6 +97,10 @@ public class JSchConnection implements IRemoteConnection {
|
|||
if (logging) {
|
||||
System.out.println("promptPassword:" + message); //$NON-NLS-1$
|
||||
}
|
||||
if (firstTry && !getPassword().equals("")) { //$NON-NLS-1$
|
||||
firstTry = false;
|
||||
return true;
|
||||
}
|
||||
if (fAuthenticator != null) {
|
||||
PasswordAuthentication auth = fAuthenticator.prompt(null, message);
|
||||
if (auth == null) {
|
||||
|
@ -117,11 +121,11 @@ public class JSchConnection implements IRemoteConnection {
|
|||
return true;
|
||||
}
|
||||
if (fAuthenticator != null) {
|
||||
String[] results = fAuthenticator.prompt("", "", message, new String[] { message }, new boolean[] { true }); //$NON-NLS-1$//$NON-NLS-2$
|
||||
if (results == null) {
|
||||
PasswordAuthentication auth = fAuthenticator.prompt(null, message);
|
||||
if (auth == null) {
|
||||
return false;
|
||||
}
|
||||
fAttributes.setSecureAttribute(JSchConnectionAttributes.PASSPHRASE_ATTR, results[0]);
|
||||
fAttributes.setSecureAttribute(JSchConnectionAttributes.PASSPHRASE_ATTR, new String(auth.getPassword()));
|
||||
}
|
||||
return true;
|
||||
}
|
||||
|
|
|
@ -23,11 +23,13 @@ import org.eclipse.remote.core.IRemoteConnectionWorkingCopy;
|
|||
public class JSchConnectionWorkingCopy extends JSchConnection implements IRemoteConnectionWorkingCopy {
|
||||
private final JSchConnectionAttributes fWorkingAttributes;
|
||||
private final JSchConnection fOriginal;
|
||||
private boolean fIsDirty;
|
||||
|
||||
public JSchConnectionWorkingCopy(JSchConnection connection) {
|
||||
super(connection.getName(), connection.getRemoteServices());
|
||||
fWorkingAttributes = connection.getInfo().copy();
|
||||
fOriginal = connection;
|
||||
fIsDirty = false;
|
||||
}
|
||||
|
||||
/*
|
||||
|
@ -65,6 +67,15 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
return fWorkingAttributes.getName();
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#getOriginal()
|
||||
*/
|
||||
public IRemoteConnection getOriginal() {
|
||||
return fOriginal;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -125,6 +136,15 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
return this;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#isDirty()
|
||||
*/
|
||||
public boolean isDirty() {
|
||||
return fIsDirty;
|
||||
}
|
||||
|
||||
/*
|
||||
* (non-Javadoc)
|
||||
*
|
||||
|
@ -153,6 +173,7 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
}
|
||||
info.save();
|
||||
getManager().add(fOriginal);
|
||||
fIsDirty = false;
|
||||
return fOriginal;
|
||||
}
|
||||
|
||||
|
@ -162,6 +183,7 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setAddress(java.lang.String)
|
||||
*/
|
||||
public void setAddress(String address) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(JSchConnectionAttributes.ADDRESS_ATTR, address);
|
||||
}
|
||||
|
||||
|
@ -171,14 +193,17 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setAttribute(java.lang.String, java.lang.String)
|
||||
*/
|
||||
public void setAttribute(String key, String value) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(key, value);
|
||||
}
|
||||
|
||||
public void setIsPasswordAuth(boolean flag) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(JSchConnectionAttributes.IS_PASSWORD_ATTR, Boolean.toString(flag));
|
||||
}
|
||||
|
||||
public void setKeyFile(String keyFile) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(JSchConnectionAttributes.KEYFILE_ATTR, keyFile);
|
||||
}
|
||||
|
||||
|
@ -193,10 +218,12 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setName(java.lang.String)
|
||||
*/
|
||||
public void setName(String name) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setName(name);
|
||||
}
|
||||
|
||||
public void setPassphrase(String passphrase) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setSecureAttribute(JSchConnectionAttributes.PASSPHRASE_ATTR, passphrase);
|
||||
}
|
||||
|
||||
|
@ -206,6 +233,7 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setPassword(java.lang.String)
|
||||
*/
|
||||
public void setPassword(String password) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setSecureAttribute(JSchConnectionAttributes.PASSWORD_ATTR, password);
|
||||
}
|
||||
|
||||
|
@ -215,14 +243,17 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setPort(int)
|
||||
*/
|
||||
public void setPort(int port) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(JSchConnectionAttributes.PORT_ATTR, Integer.toString(port));
|
||||
}
|
||||
|
||||
public void setTimeout(int timeout) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(JSchConnectionAttributes.TIMEOUT_ATTR, Integer.toString(timeout));
|
||||
}
|
||||
|
||||
public void setUseLoginShell(boolean flag) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(JSchConnectionAttributes.USE_LOGIN_SHELL_ATTR, Boolean.toString(flag));
|
||||
}
|
||||
|
||||
|
@ -232,6 +263,7 @@ public class JSchConnectionWorkingCopy extends JSchConnection implements IRemote
|
|||
* @see org.eclipse.remote.core.IRemoteConnectionWorkingCopy#setUsername(java.lang.String)
|
||||
*/
|
||||
public void setUsername(String userName) {
|
||||
fIsDirty = true;
|
||||
fWorkingAttributes.setAttribute(JSchConnectionAttributes.USERNAME_ATTR, userName);
|
||||
}
|
||||
}
|
||||
|
|
|
@ -26,6 +26,8 @@ public class Messages extends NLS {
|
|||
|
||||
public static String ConnectionsPreferencePage_Close;
|
||||
|
||||
public static String ConnectionsPreferencePage_Confirm_Actions;
|
||||
|
||||
public static String ConnectionsPreferencePage_Connection_Name;
|
||||
|
||||
public static String ConnectionsPreferencePage_Edit;
|
||||
|
@ -42,6 +44,8 @@ public class Messages extends NLS {
|
|||
|
||||
public static String ConnectionsPreferencePage_Status;
|
||||
|
||||
public static String ConnectionsPreferencePage_This_connection_contains_unsaved_changes;
|
||||
|
||||
public static String ConnectionsPreferencePage_User;
|
||||
|
||||
public static String LocalUIConnectionManager_0;
|
||||
|
|
|
@ -10,6 +10,7 @@ AbstractRemoteUIConnectionManager_Connection_Error=Connection Error
|
|||
ConnectionsPreferencePage_Add=Add
|
||||
ConnectionsPreferencePage_Close=Close
|
||||
ConnectionsPreferencePage_closed=closed
|
||||
ConnectionsPreferencePage_Confirm_Actions=Confirm Actions
|
||||
ConnectionsPreferencePage_Connection_Name=Connection Name
|
||||
ConnectionsPreferencePage_Edit=Edit
|
||||
ConnectionsPreferencePage_Host=Host
|
||||
|
@ -18,6 +19,7 @@ ConnectionsPreferencePage_Open=Open
|
|||
ConnectionsPreferencePage_Remote_Services=Remote Services:
|
||||
ConnectionsPreferencePage_Remove=Remove
|
||||
ConnectionsPreferencePage_Status=Status
|
||||
ConnectionsPreferencePage_This_connection_contains_unsaved_changes=This connection contains unsaved changes. Do you wish to save before opening the connection?
|
||||
ConnectionsPreferencePage_User=User
|
||||
LocalUIConnectionManager_0=Connection Error
|
||||
LocalUIConnectionManager_1=Could not open connection
|
||||
|
|
|
@ -19,6 +19,8 @@ import org.eclipse.internal.remote.core.RemoteServicesDescriptor;
|
|||
import org.eclipse.internal.remote.core.RemoteServicesImpl;
|
||||
import org.eclipse.internal.remote.core.preferences.Preferences;
|
||||
import org.eclipse.internal.remote.ui.messages.Messages;
|
||||
import org.eclipse.jface.dialogs.IDialogConstants;
|
||||
import org.eclipse.jface.dialogs.MessageDialog;
|
||||
import org.eclipse.jface.preference.PreferencePage;
|
||||
import org.eclipse.jface.resource.ImageDescriptor;
|
||||
import org.eclipse.jface.viewers.ColumnLayoutData;
|
||||
|
@ -41,6 +43,8 @@ import org.eclipse.remote.ui.IRemoteUIConnectionWizard;
|
|||
import org.eclipse.remote.ui.RemoteUIServices;
|
||||
import org.eclipse.remote.ui.widgets.RemoteConnectionWidget;
|
||||
import org.eclipse.swt.SWT;
|
||||
import org.eclipse.swt.events.MouseEvent;
|
||||
import org.eclipse.swt.events.MouseListener;
|
||||
import org.eclipse.swt.events.SelectionAdapter;
|
||||
import org.eclipse.swt.events.SelectionEvent;
|
||||
import org.eclipse.swt.graphics.Image;
|
||||
|
@ -262,6 +266,21 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe
|
|||
fConnectionTable.setLayoutData(data);
|
||||
fConnectionTable.setFont(parent.getFont());
|
||||
fConnectionTable.addSelectionListener(fEventHandler);
|
||||
fConnectionTable.addMouseListener(new MouseListener() {
|
||||
public void mouseDoubleClick(MouseEvent e) {
|
||||
if (fSelectedConnection != null && !fSelectedConnection.isOpen()) {
|
||||
editConnection();
|
||||
}
|
||||
}
|
||||
|
||||
public void mouseDown(MouseEvent e) {
|
||||
// Nothing
|
||||
}
|
||||
|
||||
public void mouseUp(MouseEvent e) {
|
||||
// Nothing
|
||||
}
|
||||
});
|
||||
|
||||
TableLayout tableLayout = new TableLayout();
|
||||
fConnectionTable.setLayout(tableLayout);
|
||||
|
@ -438,6 +457,25 @@ public class ConnectionsPreferencePage extends PreferencePage implements IWorkbe
|
|||
if (conn.isOpen()) {
|
||||
conn.close();
|
||||
} else {
|
||||
if (conn instanceof IRemoteConnectionWorkingCopy) {
|
||||
IRemoteConnectionWorkingCopy wc = (IRemoteConnectionWorkingCopy) conn;
|
||||
if (wc.isDirty()) {
|
||||
MessageDialog dialog = new MessageDialog(getShell(), Messages.ConnectionsPreferencePage_Confirm_Actions, null,
|
||||
Messages.ConnectionsPreferencePage_This_connection_contains_unsaved_changes,
|
||||
MessageDialog.QUESTION, new String[] { IDialogConstants.YES_LABEL, IDialogConstants.NO_LABEL,
|
||||
IDialogConstants.CANCEL_LABEL }, 0);
|
||||
switch (dialog.open()) {
|
||||
case 0:
|
||||
wc.save();
|
||||
break;
|
||||
case 1:
|
||||
conn = wc.getOriginal();
|
||||
break;
|
||||
case 2:
|
||||
return;
|
||||
}
|
||||
}
|
||||
}
|
||||
IRemoteUIConnectionManager mgr = RemoteUIServices.getRemoteUIServices(conn.getRemoteServices())
|
||||
.getUIConnectionManager();
|
||||
if (mgr != null) {
|
||||
|
|
Loading…
Add table
Reference in a new issue