com.motorola.studio.android.common.utilities.ui.PasswordInputDialog.java Source code

Java tutorial

Introduction

Here is the source code for com.motorola.studio.android.common.utilities.ui.PasswordInputDialog.java

Source

/*
* Copyright (C) 2012 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License");
* you may not use this file except in compliance with the License.
* You may obtain a copy of the License at
*
*      http://www.apache.org/licenses/LICENSE-2.0
*
* Unless required by applicable law or agreed to in writing, software
* distributed under the License is distributed on an "AS IS" BASIS,
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
* See the License for the specific language governing permissions and
* limitations under the License.
*/
package com.motorola.studio.android.common.utilities.ui;

import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
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.ISharedImages;
import org.eclipse.ui.PlatformUI;

import com.motorola.studio.android.common.utilities.i18n.UtilitiesNLS;

public class PasswordInputDialog extends Dialog {
    private static final int SMALL_TEXT_SIZE = 64;

    private String newPassword = null;

    private String oldPassword = null;

    private final boolean changePassword;

    private Text newPasswordConfirmText;

    private Text newPasswordText;

    private Text oldPasswordText;

    private Label message;

    private Label image;

    private final String description;

    private Button saveCheckBox;

    private boolean needToStorePassword = true;

    private int passwordMinimumSize = 1; //1 is default, it is recommended to change in the constructor

    /**
     * Create a new Input dialog
     * @param parent: the parent shell
     * @param description: the textual description of dialog
     * @param changePassword: true if you want this dialog be a change password dialog (it will present old, new and confirm new fields). False to show only enter password field
     * @param oldPassword: null if user must enter oldpassword. Anything to create dialog with preentered password (only if changePassword is true);
     */
    public PasswordInputDialog(Shell parent, String description, boolean changePassword, String oldPassword,
            int passwordMinimumSize) {
        super(parent);
        this.changePassword = changePassword;
        this.description = description;
        if (changePassword) {
            this.oldPassword = oldPassword;
        }
        this.passwordMinimumSize = passwordMinimumSize;
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite mainComposite = new Composite(parent, SWT.NONE);
        mainComposite.setLayoutData(new GridData(GridData.FILL_BOTH));
        mainComposite.setLayout(new GridLayout(2, false));

        /**
         * The Message Area (With an image and a text)
         */
        Composite messageComposite = new Composite(mainComposite, SWT.NONE);
        GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
        messageComposite.setLayoutData(layoutData);
        GridLayout layout = new GridLayout(2, false);
        layout.marginWidth = 0;
        messageComposite.setLayout(layout);

        image = new Label(messageComposite, SWT.NONE);
        image.setVisible(false);
        layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        image.setLayoutData(layoutData);

        message = new Label(messageComposite, SWT.NONE);
        message.setText(description);
        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
        message.setLayoutData(layoutData);

        Label oldPasswordLabel = new Label(mainComposite, SWT.NONE);
        layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
        oldPasswordLabel.setLayoutData(layoutData);
        oldPasswordLabel.setText(UtilitiesNLS.Passwordinput_Enterpassword_Label);

        oldPasswordText = new Text(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD);
        oldPasswordText.setTextLimit(SMALL_TEXT_SIZE);
        layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
        layoutData.minimumWidth = 150;
        oldPasswordText.setLayoutData(layoutData);
        if (oldPassword != null) {
            oldPasswordText.setEnabled(false);
            oldPasswordText.setText(oldPassword);
            oldPasswordLabel.setEnabled(false);
        }
        oldPasswordText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                updateStatus();
            }
        });

        /**
         * If the input is to change the passwords, create all other fields
         */
        if (changePassword) {
            Label separator = new Label(mainComposite, SWT.HORIZONTAL | SWT.SEPARATOR);
            layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 2, 1);
            separator.setLayoutData(layoutData);

            /**
             * The newPassword area
             */
            Label passwordLabel = new Label(mainComposite, SWT.NONE);
            layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
            passwordLabel.setLayoutData(layoutData);
            passwordLabel.setText(UtilitiesNLS.Passwordinput_Enternewpassword_Label);

            newPasswordText = new Text(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD);
            newPasswordText.setTextLimit(SMALL_TEXT_SIZE);
            layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
            layoutData.minimumWidth = 150;
            newPasswordText.setLayoutData(layoutData);

            Label passwordConfirmLabel = new Label(mainComposite, SWT.NONE);
            layoutData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 1, 1);
            passwordConfirmLabel.setLayoutData(layoutData);
            passwordConfirmLabel.setText(UtilitiesNLS.Passwordinput_Reenterpassword_Label);

            newPasswordConfirmText = new Text(mainComposite, SWT.BORDER | SWT.SINGLE | SWT.PASSWORD);
            newPasswordConfirmText.setTextLimit(SMALL_TEXT_SIZE);
            layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false, 1, 1);
            layoutData.minimumWidth = 150;
            newPasswordConfirmText.setLayoutData(layoutData);

            newPasswordText.addModifyListener(new ModifyListener() {

                public void modifyText(ModifyEvent e) {
                    updateStatus();
                }
            });

            newPasswordConfirmText.addModifyListener(new ModifyListener() {

                public void modifyText(ModifyEvent e) {
                    updateStatus();
                }
            });
        }

        //Creates the save password checkbox
        saveCheckBox = new Button(mainComposite, SWT.CHECK);
        saveCheckBox.setText(UtilitiesNLS.PasswordProvider_SaveThisPassword);
        saveCheckBox.setSelection(false);
        GridData gridData = new GridData(SWT.LEFT, SWT.CENTER, false, false, 2, 1);
        saveCheckBox.setLayoutData(gridData);

        return mainComposite;
    }

    public void updateStatus() {
        String errorMessage = null;
        int severity = IMessageProvider.NONE;

        if (oldPasswordText.getText().length() > 0) {
            oldPassword = oldPasswordText.getText();
        } else {
            errorMessage = "";
            oldPassword = null;
        }

        if ((errorMessage == null) && changePassword) {
            if (newPasswordText.getText().length() < passwordMinimumSize) {
                errorMessage = UtilitiesNLS.bind(UtilitiesNLS.Passwordinput_Error_PasswordMinimumSize,
                        passwordMinimumSize);
                severity = IMessageProvider.ERROR;
            } else {
                if (!newPasswordText.getText().equals(newPasswordConfirmText.getText())) {
                    errorMessage = UtilitiesNLS.Passwordinput_Error_Passwordnotmatch;
                    severity = IMessageProvider.ERROR;
                } else {
                    newPassword = newPasswordText.getText();
                }
            }
        }

        setErrorMessage(errorMessage, severity);

    }

    private void setErrorMessage(String errorMsg, int severity) {
        if ((errorMsg == null) || (severity == IMessageProvider.NONE)) {
            image.setImage(null);
            image.setVisible(false);
            message.setText(description);
            getButton(OK).setEnabled(errorMsg == null);
        } else {
            message.setText(errorMsg);
            message.setVisible(true);
            switch (severity) {
            case IMessageProvider.ERROR:
                image.setImage(
                        PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
                break;

            case IMessageProvider.INFORMATION:
                image.setImage(
                        PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_INFO_TSK));
                break;

            case IMessageProvider.WARNING:
                image.setImage(
                        PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_WARN_TSK));
                break;

            default:
                image.setImage(
                        PlatformUI.getWorkbench().getSharedImages().getImage(ISharedImages.IMG_OBJS_ERROR_TSK));
                break;
            }
            image.setVisible(true);
            getButton(OK).setEnabled(false);
        }
        message.getParent().layout();
    }

    @Override
    protected void createButtonsForButtonBar(Composite parent) {
        super.createButtonsForButtonBar(parent);
        getButton(OK).setEnabled(false);
    }

    public String getNewPassword() {
        return newPassword;
    }

    public String getOldPassword() {
        return oldPassword;
    }

    public boolean needToStorePassword() {
        return needToStorePassword;
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText(UtilitiesNLS.Passwordinput_Title);
        newShell.setMinimumSize(500, 200);
        newShell.layout(true);

    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
     */
    @Override
    protected void okPressed() {
        needToStorePassword = saveCheckBox.getSelection();
        super.okPressed();
    }

}