org.fedoraproject.eclipse.packager.local.internal.ui.LocalFedoraPackagerPageThree.java Source code

Java tutorial

Introduction

Here is the source code for org.fedoraproject.eclipse.packager.local.internal.ui.LocalFedoraPackagerPageThree.java

Source

/*******************************************************************************
 * Copyright (c) 2011 Red Hat 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:
 *     Red Hat Inc. - initial API and implementation
 *******************************************************************************/
package org.fedoraproject.eclipse.packager.local.internal.ui;

import java.io.File;

import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.ComboViewer;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.linuxtools.rpmstubby.InputType;
import org.eclipse.osgi.util.NLS;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.SelectionAdapter;
import org.eclipse.swt.events.SelectionEvent;
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.Group;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Text;
import org.fedoraproject.eclipse.packager.local.LocalFedoraPackagerText;
import org.fedoraproject.eclipse.packager.local.LocalProjectType;
import org.fedoraproject.eclipse.packager.api.FileDialogRunable;

public class LocalFedoraPackagerPageThree extends WizardPage {

    private Button btnCheckStubby;
    private Button btnCheckSrpm;
    private Button btnCheckPlain;
    private Button btnSpecTemplate;
    private Button btnStubbyBrowse;
    private Button btnSrpmBrowse;
    private Button btnSpecPlainBrowse;
    private Label lblSrpm;
    private Label lblSpecPlain;
    private Text textStubby;
    private Text textSrpm;
    private Text textSpecPlain;
    private ComboViewer comboStubby;

    private InputType inputType;
    private LocalProjectType projectType;
    private File externalFile = null;
    private boolean pageCanFinish;

    /**
     * Create the wizard.
     */
    public LocalFedoraPackagerPageThree(String pageName) {
        super(pageName);
        setTitle(LocalFedoraPackagerText.LocalFedoraPackagerWizardPage_title);
        setDescription(LocalFedoraPackagerText.LocalFedoraPackagerWizardPage_description);
        setImageDescriptor(ImageDescriptor.createFromFile(getClass(),
                LocalFedoraPackagerText.LocalFedoraPackagerWizardPage_image));
    }

    /**
     * Create contents of the wizard.
     *
     * @param parent
     */
    @Override
    public void createControl(Composite parent) {

        Composite container = new Composite(parent, SWT.NULL);
        GridLayout layout = new GridLayout();
        container.setLayout(layout);
        layout.numColumns = 3;
        layout.verticalSpacing = 9;

        Group grpSpec = new Group(container, SWT.NONE);
        grpSpec.setLayout(new GridLayout(3, false));
        GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
        grpSpec.setLayoutData(layoutData);
        grpSpec.setText(LocalFedoraPackagerText.LocalFedoraPackagerPageThree_grpSpec);

        btnCheckStubby = createRadioButton(grpSpec,
                LocalFedoraPackagerText.LocalFedoraPackagerPageThree_btnCheckStubby);
        btnCheckStubby.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                projectType = LocalProjectType.STUBBY;
                selectControl();
            }
        });

        comboStubby = new ComboViewer(grpSpec, SWT.READ_ONLY);
        comboStubby.getControl().setLayoutData(layoutData);
        comboStubby.setContentProvider(ArrayContentProvider.getInstance());
        comboStubby.setInput(InputType.values());
        comboStubby.getCombo().select(0);
        layoutData = new GridData();
        layoutData.horizontalIndent = 25;
        comboStubby.getCombo().setLayoutData(layoutData);

        textStubby = createText(grpSpec);
        btnStubbyBrowse = createPushButton(grpSpec, LocalFedoraPackagerText.LocalFedoraPackagerPageThree_btnBrowse);
        btnStubbyBrowse.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                int comboIndex = comboStubby.getCombo().getSelectionIndex();
                inputType = InputType.valueOf(comboStubby.getCombo().getItem(comboIndex));
                String filter = null;
                switch (inputType) {
                case ECLIPSE_FEATURE:
                    filter = InputType.ECLIPSE_FEATURE.getFileNamePattern();
                    break;
                case MAVEN_POM:
                    filter = InputType.MAVEN_POM.getFileNamePattern();
                    break;
                }
                if (filter != null) {
                    fileDialog(filter, textStubby);
                }

                if (textStubby.getText().length() != 0) {
                    setPageStatus(true, true);
                }
            }
        });

        btnCheckSrpm = createRadioButton(grpSpec,
                LocalFedoraPackagerText.LocalFedoraPackagerPageThree_btnCheckSrpm);
        btnCheckSrpm.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                projectType = LocalProjectType.SRPM;
                selectControl();
            }
        });

        lblSrpm = createLabel(grpSpec, LocalFedoraPackagerText.LocalFedoraPackagerPageThree_lblSrpm);
        textSrpm = createText(grpSpec);
        btnSrpmBrowse = createPushButton(grpSpec, LocalFedoraPackagerText.LocalFedoraPackagerPageThree_btnBrowse);
        btnSrpmBrowse.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                fileDialog("*.src.rpm", textSrpm); //$NON-NLS-1$
                if (textSrpm.getText().length() != 0) {
                    setPageStatus(true, true);
                }
            }
        });

        btnCheckPlain = createRadioButton(grpSpec,
                LocalFedoraPackagerText.LocalFedoraPackagerPageThree_btnCheckPlain);
        btnCheckPlain.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                projectType = LocalProjectType.PLAIN;
                selectControl();
                btnSpecTemplate.setEnabled(true);
                setPageStatus(true, false);
            }
        });

        btnSpecTemplate = new Button(grpSpec, SWT.CHECK);
        btnSpecTemplate.setText(LocalFedoraPackagerText.LocalFedoraPackagerPageThree_btnTemplateSpec);
        layoutData = new GridData();
        layoutData.horizontalSpan = 3;
        layoutData.horizontalIndent = 25;
        btnSpecTemplate.setLayoutData(layoutData);
        btnSpecTemplate.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                if (btnSpecTemplate.getSelection()) {
                    setPlainControl(false);
                    setPageStatus(true, false);
                } else {
                    setPlainControl(true);
                    setPageStatus(false, false);
                }
            }
        });

        lblSpecPlain = createLabel(grpSpec, LocalFedoraPackagerText.LocalFedoraPackagerPageThree_lblSpecPlain);
        textSpecPlain = createText(grpSpec);
        btnSpecPlainBrowse = createPushButton(grpSpec,
                LocalFedoraPackagerText.LocalFedoraPackagerPageThree_btnBrowse);
        btnSpecPlainBrowse.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent e) {
                fileDialog("*.spec", textSpecPlain); //$NON-NLS-1$
                if (textSpecPlain.getText().length() != 0) {
                    setPageStatus(true, true);
                }
            }
        });

        selectControl();
        setPageStatus(false, false);
        setControl(container);
    }

    /**
     * Return created Text widget
     *
     * @param Group
     * @return Text
     */
    private Text createText(Group grp) {
        Text text = new Text(grp, SWT.BORDER | SWT.SINGLE);
        GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
        text.setLayoutData(layoutData);
        return text;
    }

    /**
     * Return the created Label widget
     *
     * @param Group
     * @param String label's text
     * @return Button
     */
    private Label createLabel(Group grp, String text) {
        Label label = new Label(grp, SWT.NONE);
        label.setText(text);
        GridData layoutData = new GridData();
        layoutData.horizontalIndent = 25;
        label.setLayoutData(layoutData);
        return label;
    }

    /**
     * Return the created push button widget
     *
     * @param Group
     * @param String push button's text
     * @return Button
     */
    private Button createPushButton(Group grp, String text) {
        Button button = new Button(grp, SWT.PUSH);
        button.setText(text);
        return button;
    }

    /**
     * Return the created radio button widget
     *
     * @param Group
     * @param String radio button's text
     * @return Button
     */
    private Button createRadioButton(Group grp, String text) {
        Button button = new Button(grp, SWT.RADIO);
        button.setText(text);
        GridData layoutData = new GridData();
        layoutData.horizontalSpan = 3;
        button.setLayoutData(layoutData);
        return button;
    }

    /**
     * Runs the filaDialog and sets the project type and externalFile to be
     * passed to project creator
     *
     * @param String
     *            filter for the fileDialog
     * @param Text
     *            text box for file location
     * @param String
     *            type of the project that user selected
     */
    private void fileDialog(String filter, Text text) {
        FileDialogRunable fdr = new FileDialogRunable(filter,
                NLS.bind(LocalFedoraPackagerText.LocalFedoraPackagerPageThree_fileDialog, filter));
        getShell().getDisplay().syncExec(fdr);
        String filePath = fdr.getFile();
        if (filePath != null) {
            text.setText(filePath);
            this.externalFile = new File(filePath);
        }
    }

    /**
     * Return the external file to the user's selected file
     *
     * @return File
     */
    public File getExternalFile() {
        return externalFile;
    }

    /**
     * Return the type of the populated project
     * based on the user's selection
     *
     * @return LocalProjectType
     */
    public LocalProjectType getProjectType() {
        return projectType;
    }

    /**
     * Returns the input type of the stubby_project
     *
     * @return InputType
     */
    public InputType getInputType() {
        return inputType;
    }

    /**
     * Returns the button for later reference in main wizard
     *
     * @return Button
     */
    public Button btnSpecTemplate() {
        return btnSpecTemplate;
    }

    /**
     * If Finish button can be enabled, return true
     *
     * @return pageCanFinish
     */
    public boolean pageCanFinish() {
        return pageCanFinish;
    }

    /**
     * Sets the status of page
     *
     * @param pageIsComplete
     *            next or finish can be enabled
     * @param pageCanFinish
     *            finish can be enabled
     */
    private void setPageStatus(boolean pageIsComplete, boolean pageCanFinish) {
        this.pageCanFinish = pageCanFinish;
        setPageComplete(pageIsComplete);
    }

    /**
     * Sets the enabled properties based on the selected button
     */
    protected void selectControl() {
        setPageStatus(false, false);
        btnSpecTemplate.setSelection(true);
        btnSpecTemplate.setEnabled(false);
        if (btnCheckStubby.getSelection()) {
            setStubbyControl(true);
            setSrpmControl(false);
            setPlainControl(false);
        } else if (btnCheckSrpm.getSelection()) {
            setStubbyControl(false);
            setSrpmControl(true);
            setPlainControl(false);
        } else if (btnCheckPlain.getSelection()) {
            btnSpecTemplate.setEnabled(true);
            setStubbyControl(false);
            setSrpmControl(false);
            setPlainControl(false);
        } else {
            setStubbyControl(false);
            setSrpmControl(false);
            setPlainControl(false);
        }
    }

    private void setStubbyControl(boolean bool) {
        comboStubby.getCombo().setEnabled(bool);
        textStubby.setEnabled(bool);
        btnStubbyBrowse.setEnabled(bool);
    }

    private void setSrpmControl(boolean bool) {
        lblSrpm.setEnabled(bool);
        textSrpm.setEnabled(bool);
        btnSrpmBrowse.setEnabled(bool);
        textStubby.setText("");
        textSrpm.setText("");
    }

    private void setPlainControl(boolean bool) {
        lblSpecPlain.setEnabled(bool);
        textSpecPlain.setEnabled(bool);
        btnSpecPlainBrowse.setEnabled(bool);
        textSpecPlain.setText("");
    }
}