/******************************************************************************* * Copyright (c) 2008, 2010 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; } @Override protected void configureShell(Shell newShell) { super.configureShell(newShell); newShell.setText(titleMessage); newShell.setImage(titleImage); } @Override 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()); } @Override 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; } }