org.eclipse.tcf.te.ui.dialogs.NameValuePairDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.tcf.te.ui.dialogs.NameValuePairDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2011, 2013 Wind River Systems, Inc. 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:
 * Wind River Systems - initial API and implementation
 *******************************************************************************/
package org.eclipse.tcf.te.ui.dialogs;

import java.util.Arrays;
import java.util.Set;

import org.eclipse.core.runtime.Assert;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.osgi.util.NLS;
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.Composite;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Text;
import org.eclipse.tcf.te.ui.help.IContextHelpIds;
import org.eclipse.tcf.te.ui.jface.dialogs.CustomTitleAreaDialog;
import org.eclipse.tcf.te.ui.nls.Messages;
import org.eclipse.tcf.te.ui.swt.SWTControlUtil;

/**
 * Dialog implementation allowing to enter the data for name/value pairs.
 */
public class NameValuePairDialog extends CustomTitleAreaDialog {

    private String name;
    private String value;

    private String dialogTitle;
    private String title;
    private String message;
    private String[] fieldLabels;
    private String[] initialValues;
    private Set<String> usedNames;

    private Text nameText;
    private Text valueText;

    /**
     * Constructor.
     *
     * @param shell The parent shell or <code>null</code>.
     * @param dialogTitle The dialog title. Must not be <code>null</code>.
     * @param title The title. Must not be <code>null</code>.
     * @param message The dialogs default message. Must not be <code>null</code>.
     * @param fieldLabels The field labels. Must not be <code>null</code>.
     * @param initialValues The field initial values. Must not be <code>null</code>.
     * @param usedNames The list of used names. Must not be <code>null</code>.
     */
    public NameValuePairDialog(Shell shell, String dialogTitle, String title, String message, String[] fieldLabels,
            String[] initialValues, Set<String> usedNames) {
        super(shell, IContextHelpIds.NAME_VALUE_PAIR_DIALOG);

        Assert.isNotNull(dialogTitle);
        Assert.isNotNull(title);
        Assert.isNotNull(message);
        Assert.isNotNull(fieldLabels);
        Assert.isNotNull(initialValues);
        Assert.isNotNull(usedNames);

        this.dialogTitle = dialogTitle;
        this.title = title;
        this.message = message;
        this.fieldLabels = Arrays.copyOf(fieldLabels, fieldLabels.length);
        this.initialValues = Arrays.copyOf(initialValues, initialValues.length);
        this.usedNames = usedNames;
    }

    /* (non-Javadoc)
     * @see org.eclipse.tcf.te.ui.jface.dialogs.CustomTitleAreaDialog#createDialogAreaContent(org.eclipse.swt.widgets.Composite)
     */
    @Override
    protected void createDialogAreaContent(Composite parent) {
        super.createDialogAreaContent(parent);

        setDialogTitle(dialogTitle);
        setTitle(title);
        setDefaultMessage(message, IMessageProvider.NONE);

        Composite panel = new Composite(parent, SWT.NONE);
        panel.setLayout(new GridLayout(2, false));
        panel.setLayoutData(new GridData(SWT.FILL, SWT.CENTER, true, false));

        Label label = new Label(panel, SWT.NONE);
        label.setText(fieldLabels[0]);

        nameText = new Text(panel, SWT.BORDER | SWT.SINGLE);
        nameText.setText(initialValues[0]);
        GridData layoutData = new GridData(SWT.FILL, SWT.CENTER, true, false);
        layoutData.widthHint = 300;
        nameText.setLayoutData(layoutData);
        nameText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                updateButtons();
            }
        });

        label = new Label(panel, SWT.NONE);
        label.setText(fieldLabels[1]);

        valueText = new Text(panel, SWT.BORDER | SWT.SINGLE);
        valueText.setText(initialValues[1]);
        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.widthHint = 300;
        valueText.setLayoutData(layoutData);
        valueText.addModifyListener(new ModifyListener() {
            @Override
            public void modifyText(ModifyEvent e) {
                updateButtons();
            }
        });

        applyDialogFont(panel);
    }

    /**
    * Return the name/value pair entered in this dialog.
    * <p>
    * If the cancel button was hit, both will be <code>null</code>.
    */
    public String[] getNameValuePair() {
        return new String[] { name, value };
    }

    /* (non-Javadoc)
     * @see org.eclipse.tcf.te.ui.jface.dialogs.CustomTitleAreaDialog#create()
     */
    @Override
    public void create() {
        super.create();
        updateButtons();
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.dialogs.Dialog#buttonPressed(int)
     */
    @Override
    protected void buttonPressed(int buttonId) {
        if (buttonId == IDialogConstants.OK_ID) {
            name = SWTControlUtil.getText(nameText).trim();
            value = SWTControlUtil.getText(valueText).trim();
        } else {
            name = null;
            value = null;
        }
        super.buttonPressed(buttonId);
    }

    /**
     * Enable the OK button if valid input
     */
    protected void updateButtons() {
        String name = SWTControlUtil.getText(nameText).trim();
        String value = SWTControlUtil.getText(valueText).trim();

        if (name.trim().length() == 0) {
            setMessage(getErrorMissingName(), IMessageProvider.INFORMATION);
        } else if (usedNames.contains(name.trim())) {
            setMessage(NLS.bind(getErrorUsedOrIllegalName(), name), IMessageProvider.ERROR);
        } else if (value.trim().length() == 0) {
            setMessage(NLS.bind(getErrorMissingValue(), name), IMessageProvider.INFORMATION);
        } else {
            setMessage(message, IMessageProvider.NONE);
        }
        getButton(IDialogConstants.OK_ID).setEnabled(getMessageType() == IMessageProvider.NONE);
    }

    /**
     * Returns the text to show as missing name error.
     */
    protected String getErrorMissingName() {
        return Messages.NameValuePairDialog_missingName_error;
    }

    /**
     * Returns the text to show as used or illegal name error.
     */
    protected String getErrorUsedOrIllegalName() {
        return Messages.NameValuePairDialog_usedOrIllegalName_error;
    }

    /**
     * Returns the text to show as missing value error.
     */
    protected String getErrorMissingValue() {
        return Messages.NameValuePairDialog_missingValue_error;
    }
}