blob: 9f2045cd953dbfc82e9445e2d34962a4de1d850e [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2008, 2009 IBM Corporation and others.
* All rights reserved. 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 available at
* http://www.eclipse.org/legal/epl-v10.html
*
* Contributors:
* IBM Corporation - initial API and implementation
*******************************************************************************/
package org.eclipse.equinox.internal.p2.ui.dialogs;
import org.eclipse.equinox.p2.core.UIServices.AuthenticationInfo;
import org.eclipse.equinox.internal.p2.ui.ProvUIMessages;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.swt.SWT;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.*;
/**
* A dialog to prompt the user for login information such as user name and password.
*/
public class UserValidationDialog extends Dialog {
private Text username;
private Text password;
private AuthenticationInfo result = null;
private Button saveButton;
private String titleMessage;
private Image titleImage;
private String message;
private int dialogImageType;
/**
* Creates a new validation dialog that prompts the user for login credentials.
*
* @param parentShell the parent shell of this dialog
* @param titleMessage the message to be displayed by this dialog's window
* @param titleImage the image of this shell, may be <code>null</code>
* @param message the message to prompt to the user
*/
public UserValidationDialog(Shell parentShell, String titleMessage, Image titleImage, String message) {
this(null, parentShell, titleMessage, titleImage, message, SWT.ICON_QUESTION);
}
/**
* Creates a new validation dialog that prompts the user for login credentials.
*
* @param lastUsed the authentication information that was originally as an attempt to login
* @param parentShell the parent shell of this dialog
* @param titleMessage the message to be displayed by this dialog's window
* @param titleImage the image of this shell, may be <code>null</code>
* @param message the message to prompt to the user
*/
public UserValidationDialog(AuthenticationInfo lastUsed, Shell parentShell, String titleMessage, Image titleImage, String message) {
this(lastUsed, parentShell, titleMessage, titleImage, message, SWT.ICON_WARNING);
}
private UserValidationDialog(AuthenticationInfo lastUsed, Shell parentShell, String titleMessage, Image titleImage, String message, int dialogImageType) {
super(parentShell);
result = lastUsed;
this.titleMessage = titleMessage;
this.titleImage = titleImage;
this.message = message;
this.dialogImageType = dialogImageType;
}
protected void configureShell(Shell newShell) {
super.configureShell(newShell);
newShell.setText(titleMessage);
newShell.setImage(titleImage);
}
protected Control createDialogArea(Composite parent) {
Composite composite = (Composite) super.createDialogArea(parent);
Composite container = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout(2, false);
container.setLayout(layout);
container.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
createImageSection(container);
createFieldsSection(container);
Dialog.applyDialogFont(composite);
return composite;
}
private void createImageSection(Composite composite) {
Image image = composite.getDisplay().getSystemImage(dialogImageType);
if (image != null) {
Label label = new Label(composite, SWT.NONE);
label.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false));
label.setImage(image);
}
}
private void createFieldsSection(Composite composite) {
Composite fieldContainer = new Composite(composite, SWT.NONE);
GridLayout layout = new GridLayout();
layout.numColumns = 2;
fieldContainer.setLayout(layout);
GridData layoutData = new GridData();
fieldContainer.setLayoutData(layoutData);
Label label = new Label(fieldContainer, SWT.WRAP | SWT.LEAD);
GridData data = new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1);
data.widthHint = convertHorizontalDLUsToPixels(IDialogConstants.MINIMUM_MESSAGE_AREA_WIDTH);
label.setLayoutData(data);
label.setText(message);
label = new Label(fieldContainer, SWT.NONE);
label.setText(ProvUIMessages.UserValidationDialog_UsernameLabel);
username = new Text(fieldContainer, SWT.BORDER);
layoutData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
username.setLayoutData(layoutData);
username.setText(getUserName());
label = new Label(fieldContainer, SWT.NONE);
label.setText(ProvUIMessages.UserValidationDialog_PasswordLabel);
password = new Text(fieldContainer, SWT.PASSWORD | SWT.BORDER);
layoutData = new GridData(SWT.FILL, SWT.BEGINNING, true, false);
password.setLayoutData(layoutData);
password.setText(getPassword());
saveButton = new Button(fieldContainer, SWT.CHECK);
saveButton.setLayoutData(new GridData(SWT.BEGINNING, SWT.BEGINNING, false, false, 2, 1));
saveButton.setText(ProvUIMessages.UserValidationDialog_SavePasswordButton);
saveButton.setSelection(saveResult());
}
protected void okPressed() {
this.result = new AuthenticationInfo(username.getText(), password.getText(), saveButton.getSelection());
super.okPressed();
}
/**
* Returns the authentication information given by the user, or null if the user cancelled
* @return the authentication information given by the user, or null if the user cancelled
*/
public AuthenticationInfo getResult() {
return result;
}
private String getUserName() {
return result != null ? result.getUserName() : ""; //$NON-NLS-1$
}
private String getPassword() {
return result != null ? result.getPassword() : ""; //$NON-NLS-1$
}
private boolean saveResult() {
return result != null ? result.saveResult() : false;
}
}