org.eclipse.mylyn.internal.builds.ui.view.ParametersDialog.java Source code

Java tutorial

Introduction

Here is the source code for org.eclipse.mylyn.internal.builds.ui.view.ParametersDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2010 Eike Stepper 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:
 *     Eike Stepper - initial API and implementation
 *     Tasktop Technologies - improvements
 *******************************************************************************/

package org.eclipse.mylyn.internal.builds.ui.view;

import java.util.HashMap;
import java.util.Map;

import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.TitleAreaDialog;
import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.mylyn.builds.core.IParameterDefinition;
import org.eclipse.mylyn.builds.internal.core.BooleanParameterDefinition;
import org.eclipse.mylyn.builds.internal.core.BuildParameterDefinition;
import org.eclipse.mylyn.builds.internal.core.BuildPlan;
import org.eclipse.mylyn.builds.internal.core.ChoiceParameterDefinition;
import org.eclipse.mylyn.builds.internal.core.FileParameterDefinition;
import org.eclipse.mylyn.builds.internal.core.PasswordParameterDefinition;
import org.eclipse.mylyn.builds.internal.core.StringParameterDefinition;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.FocusAdapter;
import org.eclipse.swt.events.FocusEvent;
import org.eclipse.swt.layout.GridData;
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Combo;
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;

/**
 * @author Eike Stepper
 * @author Steffen Pingel
 */
public class ParametersDialog extends TitleAreaDialog {

    private final Map<String, Control> controls = new HashMap<String, Control>();

    private final BuildPlan plan;

    private Map<String, String> parameters;

    public ParametersDialog(Shell parentShell, BuildPlan plan) {
        super(parentShell);
        this.plan = plan;
        setHelpAvailable(false);
    }

    public Map<String, String> getParameters() {
        return parameters;
    }

    @Override
    protected void configureShell(Shell newShell) {
        super.configureShell(newShell);
        newShell.setText("Run Build");
    }

    @Override
    protected Control createDialogArea(Composite parent) {
        Composite composite = (Composite) super.createDialogArea(parent);

        setTitle(NLS.bind("Build Plan {0}", plan.getLabel()));

        Composite pane = new Composite(composite, SWT.NONE);
        pane.setLayoutData(new GridData(GridData.FILL_BOTH));
        pane.setLayout(new GridLayout(2, false));

        for (final IParameterDefinition definition : plan.getParameterDefinitions()) {
            String name = definition.getName();

            Label label = new Label(pane, SWT.NONE);
            label.setText(name);

            Control control = addParameter(pane, definition);
            if (control instanceof Text) {
                GridDataFactory.fillDefaults()
                        .hint(convertVerticalDLUsToPixels(IDialogConstants.ENTRY_FIELD_WIDTH), SWT.DEFAULT)
                        .applyTo(control);
            }
            control.addFocusListener(new FocusAdapter() {
                private boolean firstTime = true;

                @Override
                public void focusGained(FocusEvent e) {
                    if (firstTime) {
                        setMessage("Provide build parameters.");
                        firstTime = false;
                    } else {
                        setMessage(definition.getDescription());
                    }
                }
            });

            controls.put(name, control);
        }

        return composite;
    }

    private Control addParameter(Composite pane, IParameterDefinition definition) {
        if (definition instanceof ChoiceParameterDefinition) {
            ChoiceParameterDefinition def = (ChoiceParameterDefinition) definition;
            Combo control = new Combo(pane, SWT.SINGLE | SWT.BORDER);
            for (String option : def.getOptions()) {
                control.add(option);
            }
            if (def.getDefaultValue() != null) {
                int i = control.indexOf(def.getDefaultValue());
                if (i != -1) {
                    control.select(i);
                }
            }
            return control;
        } else if (definition instanceof BooleanParameterDefinition) {
            BooleanParameterDefinition def = (BooleanParameterDefinition) definition;
            Button control = new Button(pane, SWT.CHECK | SWT.BORDER);
            control.setSelection(def.isDefaultValue());
            return control;
        } else if (definition instanceof StringParameterDefinition) {
            StringParameterDefinition def = (StringParameterDefinition) definition;
            Text control = new Text(pane, SWT.BORDER);
            control.setText(toValue(def.getDefaultValue()));
            return control;
        } else if (definition instanceof PasswordParameterDefinition) {
            PasswordParameterDefinition def = (PasswordParameterDefinition) definition;
            Text control = new Text(pane, SWT.BORDER);
            control.setEchoChar('*');
            control.setText(toValue(def.getDefaultValue()));
            return control;
        } else if (definition instanceof BuildParameterDefinition) {
            BuildParameterDefinition def = (BuildParameterDefinition) definition;
            Text control = new Text(pane, SWT.BORDER);
            control.setText(toValue(def.getBuildPlanId()));
            return control;
        } else if (definition instanceof FileParameterDefinition) {
            Text control = new Text(pane, SWT.BORDER);
            return control;
        }

        throw new IllegalArgumentException("Unexpected definition type: " + definition.getClass().getName());
    }

    private String toValue(String defaultValue) {
        return (defaultValue != null) ? defaultValue : "";
    }

    @Override
    protected void okPressed() {
        parameters = new HashMap<String, String>();
        for (final IParameterDefinition definition : plan.getParameterDefinitions()) {
            String name = definition.getName();
            Control control = controls.get(name);
            String parameter = getParameter(control);
            if (parameter != null) {
                parameters.put(name, parameter);
            }
        }

        super.okPressed();
    }

    private String getParameter(Control control) {
        if (control instanceof Combo) {
            Combo combo = (Combo) control;
            return combo.getText();
        }

        if (control instanceof Button) {
            Button button = (Button) control;
            if (button.getSelection()) {
                return "on";
            }

            return null;
        }

        if (control instanceof Text) {
            Text text = (Text) control;
            return text.getText();
        }

        throw new IllegalArgumentException("Unexpected control type: " + control.getClass().getName());
    }

}