/*******************************************************************************
* Copyright (c) 2008 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 com.aptana.ide.security.internal.linux;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.PlatformUI;
import com.aptana.ide.security.linux.Activator;
public class StorageLoginDialog extends TitleAreaDialog {
private static final String DIALOG_SETTINGS_SECTION_NEW = "StorageLoginDialogNew"; //$NON-NLS-1$
private static final String DIALOG_SETTINGS_SECTION_OLD = "StorageLoginDialogOld"; //$NON-NLS-1$
private static final String HELP_ID = Activator.PLUGIN_ID + ".StorageLoginDialog"; //$NON-NLS-1$
private static final ImageDescriptor dlgImageDescriptor = ImageDescriptor.createFromFile(StorageLoginDialog.class, "/icons/storage/login_wiz.png"); //$NON-NLS-1$
protected Text password;
protected Text confirm;
protected Button showPassword;
protected Button okButton;
protected String generatedPassword;
final protected boolean confirmPassword;
final protected boolean passwordChange;
private Image dlgTitleImage = null;
public StorageLoginDialog(Shell parentShell, boolean confirmPassword, boolean passwordChange) {
super(parentShell);
this.confirmPassword = confirmPassword;
this.passwordChange = passwordChange;
}
public String getPassword() {
return generatedPassword;
}
protected void createButtonsForButtonBar(Composite parent) {
okButton = createButton(parent, IDialogConstants.OK_ID, Messages.buttonLogin, true);
okButton.setEnabled(false);
createButton(parent, IDialogConstants.CANCEL_ID, Messages.buttonExit, false);
}
protected IDialogSettings getDialogBoundsSettings() {
IDialogSettings settings = Activator.getDefault().getDialogSettings();
String settingsID = (confirmPassword) ? DIALOG_SETTINGS_SECTION_NEW : DIALOG_SETTINGS_SECTION_OLD;
IDialogSettings section = settings.getSection(settingsID);
if (section == null)
section = settings.addNewSection(settingsID);
return section;
}
protected boolean isResizable() {
return true;
}
protected void configureShell(Shell shell) {
super.configureShell(shell);
shell.setText(Messages.generalDialogTitle);
PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, HELP_ID);
}
protected Control createContents(Composite parent) {
Control contents = super.createContents(parent);
dlgTitleImage = dlgImageDescriptor.createImage();
setTitleImage(dlgTitleImage);
return contents;
}
protected Control createDialogArea(Composite parent) {
Composite compositeTop = (Composite) super.createDialogArea(parent);
String titleMsg;
if (confirmPassword)
titleMsg = Messages.passwordChangeTitle;
else if (passwordChange)
titleMsg = Messages.messageLoginChange;
else
titleMsg = Messages.dialogTitle;
setTitle(titleMsg);
Composite composite = new Composite(compositeTop, SWT.NONE);
new Label(composite, SWT.LEFT).setText(Messages.labelPassword);
password = new Text(composite, SWT.LEFT | SWT.BORDER);
password.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
okButton.setEnabled(validatePassword());
}
});
if (confirmPassword) {
new Label(composite, SWT.LEFT).setText(Messages.labelConfirm);
confirm = new Text(composite, SWT.LEFT | SWT.BORDER);
confirm.addModifyListener(new ModifyListener() {
public void modifyText(ModifyEvent event) {
okButton.setEnabled(validatePassword());
}
});
} else
confirm = null;
new Label(composite, SWT.LEFT); // filler
showPassword = new Button(composite, SWT.CHECK | SWT.RIGHT);
showPassword.setText(Messages.showPassword);
showPassword.addSelectionListener(new SelectionListener() {
public void widgetSelected(SelectionEvent e) {
passwordVisibility();
}
public void widgetDefaultSelected(SelectionEvent e) {
passwordVisibility();
}
});
showPassword.setLayoutData(new GridData(SWT.RIGHT, SWT.CENTER, false, false));
// by default don't display password as clear text
showPassword.setSelection(false);
passwordVisibility();
composite.setLayoutData(new GridData(SWT.FILL, SWT.FILL, true, true));
GridLayoutFactory.swtDefaults().numColumns(2).generateLayout(composite);
return compositeTop;
}
protected void passwordVisibility() {
boolean selected = showPassword.getSelection();
if (selected) {
password.setEchoChar('\0');
if (confirm != null)
confirm.setEchoChar('\0');
} else {
password.setEchoChar('*');
if (confirm != null)
confirm.setEchoChar('*');
}
}
protected boolean validatePassword() {
String password1 = password.getText();
if ((password1 == null) || (password1.length() == 0)) {
setMessage(Messages.messageEmptyPassword, IMessageProvider.ERROR);
return false;
}
if (confirm != null) {
String password2 = confirm.getText();
if (!password1.equals(password2)) {
setMessage(Messages.messageNoMatch, IMessageProvider.WARNING);
return false;
}
}
setMessage("", IMessageProvider.NONE); //$NON-NLS-1$
return true;
}
protected void okPressed() {
generatedPassword = password.getText();
super.okPressed();
}
}