1
0
Fork 0
mirror of https://github.com/eclipse-cdt/cdt synced 2025-07-11 19:15:22 +02:00

[168977][api][refactor] - stage 2.4

- introduce "credentials" terminology to methods that needed it
- began moving "requiresUserId" and "requiresPassword" from connector service API to credentials providers
This commit is contained in:
David Dykstal 2007-03-20 15:09:08 +00:00
parent 41c71f3360
commit 178f374a52
12 changed files with 141 additions and 109 deletions

View file

@ -952,7 +952,7 @@ public class DStoreConnectorService extends AbstractConnectorService implements
{ {
try try
{ {
promptForPassword(true); acquireCredentials(true);
} }
catch (InterruptedException e) catch (InterruptedException e)
{ {
@ -1064,7 +1064,7 @@ public class DStoreConnectorService extends AbstractConnectorService implements
{ {
try try
{ {
promptForPassword(true); acquireCredentials(true);
} }
catch (InterruptedException e) catch (InterruptedException e)
{ {

View file

@ -36,4 +36,10 @@ public class BasicCredentialsProvider implements ICredentialsProvider {
return false; return false;
} }
public void acquireCredentials(boolean reacquire) {
}
public void clearCredentials() {
}
} }

View file

@ -165,6 +165,41 @@ public interface IConnectorService extends IRSEModelObject {
*/ */
public void setIsUsingSSL(boolean flag); public void setIsUsingSSL(boolean flag);
/**
* Reports if this connector service can use a user identifier.
* Returns true in default implementation.
* Typically used to indicate if a login dialog needs to be presented when connecting.
* @return true if and only if the connector service can use a user id.
*/
public boolean supportsUserId();
/**
* Determines if this connector service understand the concept of a
* password.
* The default implementation of this interface should return true.
* @return true if the connector service can use a password,
* false if a password is irrelevant.
*/
public boolean supportsPassword();
/**
* Reports if this connector service requires a user id.
* Returns true in default implementation.
* Typically used to indicate if a login dialog can allow an empty user id.
* Must be ignored if supportsUserId() is false.
* @return true or false to indicate if the connector service requires a user id.
*/
public boolean requiresUserId();
/**
* Determines if a password is required for this connector service.
* Must be ignored if {@link #supportsPassword()} returns false.
* The default implementation of this interface should return true.
* @return true if the connector service requires a password,
* false if a password may be empty.
*/
public boolean requiresPassword();
/** /**
* @return the userId that will be used by this connector when * @return the userId that will be used by this connector when
* establishing its connection. * establishing its connection.
@ -178,19 +213,6 @@ public interface IConnectorService extends IRSEModelObject {
*/ */
public void setUserId(String userId); public void setUserId(String userId);
/**
* Acquire the password for this connector service.
* <p>
* Implementations may retain a remembered password or
* use this acquire the password using some implementation defined means.
* <p>
* Throws InterruptedException if acquisition of the
* password is canceled for some reason.
* @param reacquire if true will force the connector service to discard
* any remembered value and reacquire the password.
*/
public void promptForPassword(boolean reacquire) throws InterruptedException;
/** /**
* Sets the password used by this connector service. * Sets the password used by this connector service.
* Can be used if the connector service acquires a password by some external * Can be used if the connector service acquires a password by some external
@ -201,13 +223,6 @@ public interface IConnectorService extends IRSEModelObject {
*/ */
public void setPassword(String matchingUserId, String password, boolean persist); public void setPassword(String matchingUserId, String password, boolean persist);
/**
* Clears the userId held by this service.
* Should be called if there is a change to the user id for
* any using subsystem.
*/
public void clearUserId();
/** /**
* Clear password held by this service and optionally * Clear password held by this service and optionally
* clear its persistent form. * clear its persistent form.
@ -237,6 +252,49 @@ public interface IConnectorService extends IRSEModelObject {
*/ */
public boolean sharesCredentials(); public boolean sharesCredentials();
/**
* Clears the credentials held by this service.
* Should be called if there is a change to any part of the credentials
* expected by any using subsystem.
*/
public void clearCredentials();
/**
* Acquire the credentials for this connector service.
* Acquisition may be temporarily suppressed
* by using the {@link #setSuppressed(boolean)}.
* <p>
* Implementations may retain a remembered credentials or
* use this acquire the credentials using some implementation defined means.
* <p>
* Throws InterruptedException if acquisition of the
* credentials is canceled or is being suppressed.
* @param refresh if true will force the connector service to discard
* any remembered value and reacquire the credentials.
*/
public void acquireCredentials(boolean refresh) throws InterruptedException;
/**
* @return true if the acquisition of credentials is being suppressed.
*/
public boolean isSuppressed();
/**
* Suppresses the acquisition of a credentials by the connector service.
* Causes {@link #acquireCredentials(boolean)} to immediately
* throw an InterruptedException.
* <p>
* The intent is to allow tool writers to prevent multiple
* attempts to acquire credentials during a set period of time.
* <b>It is the callers responsibility to set this value
* back to false when the tool no longer needs to suppress
* acquisition credentials.</b>
*
* @param suppress <code>true</code> if acquisition is to be suppressed.
* <code>false</code> if acquisition is to be allowed.
*/
public void setSuppressed(boolean suppress);
/** /**
* Register a communications listener. These listeners will be informed * Register a communications listener. These listeners will be informed
* of connect and disconnect events. * of connect and disconnect events.
@ -250,27 +308,6 @@ public interface IConnectorService extends IRSEModelObject {
*/ */
public void removeCommunicationsListener(ICommunicationsListener listener); public void removeCommunicationsListener(ICommunicationsListener listener);
/**
* @return true if the password acquisition is to be suppressed.
*/
public boolean isSuppressSignonPrompt();
/**
* Suppresses the acquisition of a password by the connector service.
* Causes {@link #promptForPassword(boolean)} to immediately
* throw an InterruptedException.
* <p>
* The intent is to allow tool writers to prevent multiple
* attempts to acquire a password during a set period of time.
* <b>It is the callers responsibility to set this value
* back to false when the tool no longer needs to suppress
* acquisition of the password.</b>
*
* @param suppressSignonPrompt <code>true</code> if acquisition is to be suppressed.
* <code>false</code> if acquisition is to be allowed.
*/
public void setSuppressSignonPrompt(boolean suppressSignonPrompt);
/** /**
* This methods returns the enablement state of a server launch type. * This methods returns the enablement state of a server launch type.
* If {@link RemoteServerLauncher#enableServerLaunchType(ServerLaunchType, boolean)} has not been * If {@link RemoteServerLauncher#enableServerLaunchType(ServerLaunchType, boolean)} has not been
@ -326,39 +363,4 @@ public interface IConnectorService extends IRSEModelObject {
*/ */
IServerLauncher getRemoteServerLauncher(); IServerLauncher getRemoteServerLauncher();
/**
* Reports if this connector service can use a user identifier.
* Returns true in default implementation.
* Typically used to indicate if a login dialog needs to be presented when connecting.
* @return true if and only if the connector service can use a user id.
*/
public boolean supportsUserId();
/**
* Reports if this connector service requires a user id.
* Returns true in default implementation.
* Typically used to indicate if a login dialog can allow an empty user id.
* Must be ignored if supportsUserId() is false.
* @return true or false to indicate if the connector service requires a user id.
*/
public boolean requiresUserId();
/**
* Determines if this connector service understand the concept of a
* password.
* The default implementation of this interface should return true.
* @return true if the connector service can use a password,
* false if a password is irrelevant.
*/
public boolean supportsPassword();
/**
* Determines if a password is required for this connector service.
* Must be ignored if {@link #supportsPassword()} returns false.
* The default implementation of this interface should return true.
* @return true if the connector service requires a password,
* false if a password may be empty.
*/
public boolean requiresPassword();
} }

View file

@ -19,4 +19,8 @@ public interface ICredentialsProvider {
boolean requiresUserId(); boolean requiresUserId();
void acquireCredentials(boolean reacquire);
void clearCredentials();
} }

View file

@ -1,5 +1,5 @@
/******************************************************************************** /********************************************************************************
* Copyright (c) 2006 IBM Corporation. All rights reserved. * Copyright (c) 2006, 2007 IBM Corporation. All rights reserved.
* This program and the accompanying materials are made available under the terms * 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 * of the Eclipse Public License v1.0 which accompanies this distribution, and is
* available at http://www.eclipse.org/legal/epl-v10.html * available at http://www.eclipse.org/legal/epl-v10.html
@ -11,7 +11,7 @@
* Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley. * Emily Bruner, Mazen Faraj, Adrian Storisteanu, Li Ding, and Kent Hawley.
* *
* Contributors: * Contributors:
* {Name} (company) - description of contribution. * David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.eclipse.filesystem; package org.eclipse.rse.eclipse.filesystem;
@ -130,7 +130,7 @@ public class RSEFileSystem extends FileSystem
{ {
fs.getConnectorService().promptForPassword(false); fs.getConnectorService().acquireCredentials(false);
fs.getConnectorService().connect(new NullProgressMonitor()); fs.getConnectorService().connect(new NullProgressMonitor());
//fs.connect(shell); //fs.connect(shell);
} }

View file

@ -41,13 +41,14 @@ import org.eclipse.swt.widgets.Text;
/** /**
* Prompt user for password. * Prompt user for password.
* This class is final due to the sensitive nature of the information being prompted for. * This class is final due to the sensitive nature of the
* information being prompted for.
*/ */
public final class SystemPasswordPromptDialog extends SystemPromptDialog implements ISystemPasswordPromptDialog { public final class SystemPasswordPromptDialog extends SystemPromptDialog implements ISystemPasswordPromptDialog {
// labels are not as big as text fields so we need to set the height for the system type // labels are not as big as text fields so we need to set the height for the system type
// and hostname labels so they are equally spaced with the user ID and password entry fields // and hostname labels so they are equally spaced with the user ID and password entry fields
// private static final int LABEL_HEIGHT = 17; // private static final int LABEL_HEIGHT = 17;
private Text textPassword; private Text textPassword;
private Text textUserId; private Text textUserId;
@ -61,6 +62,8 @@ public final class SystemPasswordPromptDialog extends SystemPromptDialog impleme
private boolean forceToUpperCase; private boolean forceToUpperCase;
private boolean userIdChanged = false; private boolean userIdChanged = false;
private boolean validate = true; private boolean validate = true;
private boolean requiresPassword;
private boolean requiresUserId;
private ISystemValidator userIdValidator; private ISystemValidator userIdValidator;
private ISystemValidator passwordValidator; private ISystemValidator passwordValidator;
private ICredentialsValidator signonValidator; private ICredentialsValidator signonValidator;
@ -69,10 +72,18 @@ public final class SystemPasswordPromptDialog extends SystemPromptDialog impleme
/** /**
* Constructor for SystemPasswordPromptDialog * Constructor for SystemPasswordPromptDialog
* @param shell The shell in which to base this dialog. * @param shell The shell in which to base this dialog.
* @param requiresUserId true if the userid field of the dialog must not be empty.
* Used only if there is no validator specified for
* {@link #setUserIdValidator(ISystemValidator)}.
* @param requiresPassword true if the password field of the dialog must not be empty.
* Used only if there is no password validator specified using
* {@link #setPasswordValidator(ISystemValidator)}.
*/ */
public SystemPasswordPromptDialog(Shell shell) { public SystemPasswordPromptDialog(Shell shell, boolean requiresUserId, boolean requiresPassword) {
super(shell, SystemResources.RESID_PASSWORD_TITLE); super(shell, SystemResources.RESID_PASSWORD_TITLE);
setHelp(RSEUIPlugin.HELPPREFIX + "pwdp0000"); //$NON-NLS-1$ setHelp(RSEUIPlugin.HELPPREFIX + "pwdp0000"); //$NON-NLS-1$
this.requiresPassword = requiresPassword;
this.requiresUserId = requiresUserId;
} }
/** /**
@ -341,7 +352,7 @@ public final class SystemPasswordPromptDialog extends SystemPromptDialog impleme
if (connectorService.supportsUserId() && validate) { if (connectorService.supportsUserId() && validate) {
if (userIdValidator != null) { if (userIdValidator != null) {
m = userIdValidator.validate(userId); m = userIdValidator.validate(userId);
} else if (connectorService.requiresUserId() && userId.length() == 0) { } else if (requiresUserId && userId.length() == 0) {
m = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_VALIDATE_USERID_EMPTY); m = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_VALIDATE_USERID_EMPTY);
} }
} }
@ -366,7 +377,7 @@ public final class SystemPasswordPromptDialog extends SystemPromptDialog impleme
} }
okButton.setEnabled(m == null); okButton.setEnabled(m == null);
if (savePasswordCB != null) { if (savePasswordCB != null) {
savePasswordCB.setEnabled(!(connectorService.requiresPassword() && password.length() == 0)); savePasswordCB.setEnabled(!(requiresPassword && password.length() == 0));
} }
} }
@ -379,7 +390,7 @@ public final class SystemPasswordPromptDialog extends SystemPromptDialog impleme
if (connectorService.supportsPassword() && validate) { if (connectorService.supportsPassword() && validate) {
if (passwordValidator != null) { if (passwordValidator != null) {
m = passwordValidator.validate(password); m = passwordValidator.validate(password);
} else if (connectorService.requiresPassword() && password.length() == 0) { } else if (requiresPassword && password.length() == 0) {
m = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_VALIDATE_PASSWORD_EMPTY); m = RSEUIPlugin.getPluginMessage(ISystemMessages.MSG_VALIDATE_PASSWORD_EMPTY);
} }
} }

View file

@ -14,6 +14,7 @@
* Michael Scharf (Wind River) - patch for an NPE in getSubSystemConfigurations() * Michael Scharf (Wind River) - patch for an NPE in getSubSystemConfigurations()
* David Dykstal (IBM) - moved SystemsPreferencesManager to a new package * David Dykstal (IBM) - moved SystemsPreferencesManager to a new package
* Uwe Stieber (Wind River) - bugfixing * Uwe Stieber (Wind River) - bugfixing
* David Dykstal (IBM) - 168977: refactoring IConnectorService and ServerLauncher hierarchies
********************************************************************************/ ********************************************************************************/
package org.eclipse.rse.model; package org.eclipse.rse.model;
@ -2538,7 +2539,7 @@ public class SystemRegistry implements ISystemRegistryUI, ISystemModelChangeEven
if (subsystems[idx].isConnected()) subsystems[idx].disconnect(); // MJB: added conditional for defect 45754 if (subsystems[idx].isConnected()) subsystems[idx].disconnect(); // MJB: added conditional for defect 45754
if (defaultUserIdChanged) if (defaultUserIdChanged)
{ {
subsystems[idx].getConnectorService().clearUserId(); subsystems[idx].getConnectorService().clearCredentials();
} }
subsystems[idx].getConnectorService().clearPassword(false); subsystems[idx].getConnectorService().clearPassword(false);
} }

View file

@ -146,7 +146,7 @@ public abstract class AbstractConnectorService extends SuperAbstractConnectorSer
* the next call to getUserId() it is requeried from subsystem. * the next call to getUserId() it is requeried from subsystem.
* Also clears the password. * Also clears the password.
*/ */
final public void clearUserId() { final public void clearCredentials() {
_userId = null; _userId = null;
clearPassword(false); clearPassword(false);
} }
@ -157,7 +157,7 @@ public abstract class AbstractConnectorService extends SuperAbstractConnectorSer
* change his userId. * change his userId.
* *
* @param onDisk if this is true, clear the password from the disk cache as well * @param onDisk if this is true, clear the password from the disk cache as well
* @see #clearUserId() * @see #clearCredentials()
*/ */
final public void clearPassword(boolean onDisk) { final public void clearPassword(boolean onDisk) {
setPasswordInformation(null); setPasswordInformation(null);
@ -227,11 +227,11 @@ public abstract class AbstractConnectorService extends SuperAbstractConnectorSer
* @param forcePrompt if true then present the prompt even if the password was found and is valid. * @param forcePrompt if true then present the prompt even if the password was found and is valid.
* @throws InterruptedException if user is prompted and user cancels that prompt or if isSuppressSignonPrompt is true. * @throws InterruptedException if user is prompted and user cancels that prompt or if isSuppressSignonPrompt is true.
*/ */
public void promptForPassword(boolean forcePrompt) throws InterruptedException { public void acquireCredentials(boolean forcePrompt) throws InterruptedException {
// dy: March 24, 2003: check if prompting is temporarily suppressed by a tool // dy: March 24, 2003: check if prompting is temporarily suppressed by a tool
// vendor, this should only be suppressed if the user cancelled a previous signon // vendor, this should only be suppressed if the user cancelled a previous signon
// dialog (or some other good reason) // dialog (or some other good reason)
if (isSuppressSignonPrompt()) { if (isSuppressed()) {
throw new InterruptedException(); throw new InterruptedException();
} }
@ -462,7 +462,7 @@ public abstract class AbstractConnectorService extends SuperAbstractConnectorSer
*/ */
protected final ISystemPasswordPromptDialog getPasswordPromptDialog(Shell shell) protected final ISystemPasswordPromptDialog getPasswordPromptDialog(Shell shell)
{ {
ISystemPasswordPromptDialog dlg = new SystemPasswordPromptDialog(shell); ISystemPasswordPromptDialog dlg = new SystemPasswordPromptDialog(shell, requiresUserId(), requiresPassword());
dlg.setForceToUpperCase(forcePasswordToUpperCase()); dlg.setForceToUpperCase(forcePasswordToUpperCase());
dlg.setUserIdValidator(getUserIdValidator()); dlg.setUserIdValidator(getUserIdValidator());
dlg.setPasswordValidator(getPasswordValidator()); dlg.setPasswordValidator(getPasswordValidator());
@ -629,7 +629,7 @@ public abstract class AbstractConnectorService extends SuperAbstractConnectorSer
* *
* @return boolean * @return boolean
*/ */
public boolean isSuppressSignonPrompt() public boolean isSuppressed()
{ {
return _suppressSignonPrompt; return _suppressSignonPrompt;
} }
@ -646,7 +646,7 @@ public abstract class AbstractConnectorService extends SuperAbstractConnectorSer
* *
* @param suppressSignonPrompt * @param suppressSignonPrompt
*/ */
public void setSuppressSignonPrompt(boolean suppressSignonPrompt) public void setSuppressed(boolean suppressSignonPrompt)
{ {
_suppressSignonPrompt = suppressSignonPrompt; _suppressSignonPrompt = suppressSignonPrompt;
} }

View file

@ -63,11 +63,11 @@ public abstract class AbstractDelegatingConnectorService implements IDelegatingC
} }
} }
public void clearUserId() { public void clearCredentials() {
IConnectorService conServ = getRealConnectorService(); IConnectorService conServ = getRealConnectorService();
if (conServ != null) if (conServ != null)
{ {
conServ.clearUserId(); conServ.clearCredentials();
} }
} }
@ -318,11 +318,11 @@ public abstract class AbstractDelegatingConnectorService implements IDelegatingC
return false; return false;
} }
public boolean isSuppressSignonPrompt() { public boolean isSuppressed() {
IConnectorService conServ = getRealConnectorService(); IConnectorService conServ = getRealConnectorService();
if (conServ != null) if (conServ != null)
{ {
return conServ.isSuppressSignonPrompt(); return conServ.isSuppressed();
} }
return false; return false;
} }
@ -336,12 +336,12 @@ public abstract class AbstractDelegatingConnectorService implements IDelegatingC
return false; return false;
} }
public void promptForPassword(boolean forcePrompt) public void acquireCredentials(boolean forcePrompt)
throws InterruptedException { throws InterruptedException {
IConnectorService conServ = getRealConnectorService(); IConnectorService conServ = getRealConnectorService();
if (conServ != null) if (conServ != null)
{ {
conServ.promptForPassword(forcePrompt); conServ.acquireCredentials(forcePrompt);
} }
} }
@ -446,11 +446,11 @@ public abstract class AbstractDelegatingConnectorService implements IDelegatingC
} }
} }
public void setSuppressSignonPrompt(boolean suppressSignonPrompt) { public void setSuppressed(boolean suppressSignonPrompt) {
IConnectorService conServ = getRealConnectorService(); IConnectorService conServ = getRealConnectorService();
if (conServ != null) if (conServ != null)
{ {
conServ.setSuppressSignonPrompt(suppressSignonPrompt); conServ.setSuppressed(suppressSignonPrompt);
} }
} }

View file

@ -448,7 +448,7 @@ public abstract class SubSystem extends RSEModelObject implements IAdaptable, IS
RSEPreferencesManager.clearUserId(previousUserIdKey); RSEPreferencesManager.clearUserId(previousUserIdKey);
IConnectorService system = getConnectorService(); IConnectorService system = getConnectorService();
if (system != null) if (system != null)
system.clearUserId(); system.clearCredentials();
} }
/** /**
@ -2394,7 +2394,7 @@ public abstract class SubSystem extends RSEModelObject implements IAdaptable, IS
//dwd if (runnableContext instanceof ProgressMonitorDialog) { //dwd if (runnableContext instanceof ProgressMonitorDialog) {
//dwd ((ProgressMonitorDialog) runnableContext).setCancelable(true); //dwd ((ProgressMonitorDialog) runnableContext).setCancelable(true);
//dwd } //dwd }
getConnectorService().promptForPassword(forcePrompt); // prompt for userid and password getConnectorService().acquireCredentials(forcePrompt); // prompt for userid and password
ConnectJob job = new ConnectJob(this); ConnectJob job = new ConnectJob(this);
scheduleJob(job, null); scheduleJob(job, null);
} }
@ -2438,7 +2438,7 @@ public abstract class SubSystem extends RSEModelObject implements IAdaptable, IS
try try
{ {
getConnectorService().promptForPassword(force); // prompt for password getConnectorService().acquireCredentials(force); // prompt for password
doConnection = true; doConnection = true;
ok = true; ok = true;
} }

View file

@ -60,4 +60,12 @@ public class StandardCredentialsProvider implements ICredentialsProvider {
return connectorService.getHost(); return connectorService.getHost();
} }
public void acquireCredentials(boolean reacquire) {
// TODO Auto-generated method stub
}
public void clearCredentials() {
// TODO Auto-generated method stub
}
} }