gov.redhawk.ui.wizards.RenameDialog.java Source code

Java tutorial

Introduction

Here is the source code for gov.redhawk.ui.wizards.RenameDialog.java

Source

/**
 * This file is protected by Copyright. 
 * Please refer to the COPYRIGHT file distributed with this source distribution.
 * 
 * This file is part of REDHAWK IDE.
 * 
 * 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.
 *
 */
/*******************************************************************************
 * Copyright (c) 2000, 2006 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 gov.redhawk.ui.wizards;

import gov.redhawk.internal.ui.HelpContextIds;
import gov.redhawk.ui.RedhawkUiActivator;

import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IInputValidator;
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.PlatformUI;
import org.eclipse.ui.dialogs.SelectionStatusDialog;

/**
 * The Class RenameDialog.
 * 
 * @since 2.0
 */
public class RenameDialog extends SelectionStatusDialog {
    private List<String> oldNames;
    private String oldName;
    private String newName;
    private Text renameText;
    private IStatus status;
    private final boolean isCaseSensitive;
    private IInputValidator fValidator;

    /**
     * Create a new rename dialog instance for the given window.
     * 
     * @param shell The parent of the dialog
     * @param oldName Current name of the item being renamed
     */
    public RenameDialog(final Shell shell, final String oldName) {
        super(shell);
        this.isCaseSensitive = false;
        initialize();
        setOldName(oldName);
    }

    /**
     * Create a new rename dialog instance for the given window.
     * 
     * @param shell The parent of the dialog
     * @param isCaseSensitive Flags whether dialog will perform case sensitive
     *            checks against old names
     * @param names Set of names which the user should not be allowed to rename
     *            to
     * @param oldName Current name of the item being renamed
     */
    public RenameDialog(final Shell shell, final boolean isCaseSensitive, final String[] names,
            final String oldName) {
        super(shell);
        this.isCaseSensitive = isCaseSensitive;
        initialize();
        if (names != null) {
            for (int i = 0; i < names.length; i++) {
                addOldName(names[i]);
            }
        }
        setOldName(oldName);
    }

    /**
     * Initialize.
     */
    public void initialize() {
        this.oldNames = new ArrayList<String>();
        setStatusLineAboveButtons(true);
    }

    /**
     * Adds the old name.
     * 
     * @param oldName the old name
     */
    public void addOldName(final String oldName) { // SUPPRESS CHECKSTYLE HiddenField
        if (!this.oldNames.contains(oldName)) {
            this.oldNames.add(oldName);
        }

    }

    /**
     * Sets the old name.
     * 
     * @param oldName the new old name
     */
    public void setOldName(final String oldName) {
        this.oldName = oldName;
        addOldName(oldName);
        if (this.renameText != null) {
            this.renameText.setText(oldName);
        }
        this.newName = oldName;
    }

    /*
     * @see org.eclipse.jface.window.Window#configureShell(Shell)
     */
    /**
     * {@inheritDoc}
     */
    @Override
    protected void configureShell(final Shell shell) {
        super.configureShell(shell);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(shell, HelpContextIds.RENAME_DIALOG);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected Control createDialogArea(final Composite parent) {
        final Composite container = new Composite(parent, SWT.NULL);
        final GridLayout layout = new GridLayout();
        layout.numColumns = 2;
        layout.marginWidth = 9; // SUPPRESS CHECKSTYLE MagicNumber
        layout.marginHeight = layout.marginWidth;
        container.setLayout(layout);

        GridData gd = new GridData(GridData.FILL_BOTH);
        container.setLayoutData(gd);

        final Label label = new Label(container, SWT.NULL);
        label.setText("&Enter new name:");

        this.renameText = new Text(container, SWT.SINGLE | SWT.BORDER);
        this.renameText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(final ModifyEvent e) {
                textChanged(RenameDialog.this.renameText.getText());
            }
        });
        gd = new GridData(GridData.FILL_HORIZONTAL);
        this.renameText.setLayoutData(gd);
        Dialog.applyDialogFont(container);
        return container;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public int open() {
        this.renameText.setText(this.oldName);
        this.renameText.selectAll();
        final Button okButton = getButton(IDialogConstants.OK_ID);

        this.status = new Status(IStatus.OK, RedhawkUiActivator.getPluginId(), IStatus.OK, "", //$NON-NLS-1$
                null);
        updateStatus(this.status);
        okButton.setEnabled(false);
        return super.open();
    }

    /**
     * Text changed.
     * 
     * @param text the text
     */
    private void textChanged(final String text) {
        final Button okButton = getButton(IDialogConstants.OK_ID);
        if (this.fValidator != null) {
            final String message = this.fValidator.isValid(text);
            if (message != null) {
                this.status = new Status(IStatus.ERROR, RedhawkUiActivator.getPluginId(), IStatus.ERROR, message,
                        null);
                updateStatus(this.status);
                okButton.setEnabled(false);
                return;
            }
        }
        for (int i = 0; i < this.oldNames.size(); i++) {
            if ((this.isCaseSensitive && text.equals(this.oldNames.get(i)))
                    || (!this.isCaseSensitive && text.equalsIgnoreCase(this.oldNames.get(i).toString()))) {
                this.status = new Status(IStatus.ERROR, RedhawkUiActivator.getPluginId(), IStatus.ERROR,
                        "Name already exists.", null);
                updateStatus(this.status);
                okButton.setEnabled(false);
                break;
            }
            okButton.setEnabled(true);
            this.status = new Status(IStatus.OK, RedhawkUiActivator.getPluginId(), IStatus.OK, "", //$NON-NLS-1$
                    null);
            updateStatus(this.status);
        }
    }

    /**
     * Gets the new name.
     * 
     * @return the new name
     */
    public String getNewName() {
        return this.newName;
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.jface.dialogs.Dialog#okPressed()
     */
    /**
     * {@inheritDoc}
     */
    @Override
    protected void okPressed() {
        this.newName = this.renameText.getText().trim();
        super.okPressed();
    }

    /*
     * (non-Javadoc)
     * 
     * @see org.eclipse.ui.dialogs.SelectionStatusDialog#computeResult()
     */
    /**
     * {@inheritDoc}
     */
    @Override
    protected void computeResult() {
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void setTitle(final String title) {
        getShell().setText(title);
    }

    /**
     * Sets the input validator.
     * 
     * @param validator the new input validator
     */
    public void setInputValidator(final IInputValidator validator) {
        this.fValidator = validator;
    }
}