runjettyrun.tabs.action.helper.ProjectSelectionDialog.java Source code

Java tutorial

Introduction

Here is the source code for runjettyrun.tabs.action.helper.ProjectSelectionDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2010 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 runjettyrun.tabs.action.helper;

import java.util.Arrays;
import java.util.List;

import org.eclipse.jdt.debug.ui.IJavaDebugUIConstants;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.viewers.ArrayContentProvider;
import org.eclipse.jface.viewers.CheckStateChangedEvent;
import org.eclipse.jface.viewers.CheckboxTableViewer;
import org.eclipse.jface.viewers.ICheckStateListener;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.jface.viewers.StructuredViewer;
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.widgets.Button;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Table;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ListSelectionDialog;
import org.eclipse.ui.dialogs.SelectionDialog;

/**
 * A dialog for selecting projects to add to a classpath or source
 * lookup path. Optionally specifies whether
 * exported entries and required projects should also be added.
 */
public class ProjectSelectionDialog extends SelectionDialog {

    private boolean fAddExportedEntries = true;
    private boolean fAddRequiredProjects = true;

    private List<?> fProjects;

    protected CheckboxTableViewer fViewer = null;

    /**
     * @see ListSelectionDialog
     */
    public ProjectSelectionDialog(Shell parentShell, List<?> projects) {
        super(parentShell);
        setShellStyle(getShellStyle() | SWT.RESIZE);
        fProjects = projects;
    }

    protected void okPressed() {
        Object[] elements = fViewer.getCheckedElements();
        setResult(Arrays.asList(elements));
        super.okPressed();
    }

    protected CheckboxTableViewer createViewer(Composite parent) {
        //by default return a checkbox table viewer
        Table table = new Table(parent, SWT.BORDER | SWT.SINGLE | SWT.CHECK);
        GridData gd = new GridData(GridData.FILL_BOTH);
        gd.heightHint = 150;
        gd.widthHint = 250;
        table.setLayoutData(gd);
        return new CheckboxTableViewer(table);
    }

    protected Control createDialogArea(Composite parent) {
        initializeDialogUnits(parent);
        Composite comp = (Composite) super.createDialogArea(parent);
        String label = getMessage();
        if (label != null && !"".equals(label)) {
            SWTFactory.createWrapLabel(comp, label, 1);
        }
        label = getViewerLabel();
        if (label != null && !"".equals(label)) {
            SWTFactory.createWrapLabel(comp, label, 1);
        }
        fViewer = createViewer(comp);
        fViewer.setLabelProvider(new ProjectLabelProvider());
        fViewer.setContentProvider(new ArrayContentProvider());
        fViewer.setInput(getViewerInput());
        List<?> selectedElements = getInitialElementSelections();
        if (selectedElements != null && !selectedElements.isEmpty()) {
            fViewer.setSelection(new StructuredSelection(selectedElements));
        }
        addViewerListeners(fViewer);
        addCustomFotterControls(comp);
        Dialog.applyDialogFont(comp);
        String help = getHelpContextId();
        if (help != null) {
            PlatformUI.getWorkbench().getHelpSystem().setHelp(comp, help);
        }
        return comp;
    }

    protected void addViewerListeners(StructuredViewer viewer) {
        fViewer.addCheckStateListener(new ICheckStateListener() {
            public void checkStateChanged(CheckStateChangedEvent event) {
                getButton(IDialogConstants.OK_ID).setEnabled(isValid());
            }
        });
    }

    protected boolean isValid() {
        return fViewer.getCheckedElements().length > 0;
    }

    private void addCustomFotterControls(Composite parent) {
        Composite comp = SWTFactory.createComposite(parent, 2, 1, GridData.FILL_HORIZONTAL);
        GridData gd = (GridData) comp.getLayoutData();
        gd.horizontalAlignment = SWT.END;
        Button button = SWTFactory.createPushButton(comp, "&Select All", null);
        button.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                fViewer.setAllChecked(true);
                getButton(IDialogConstants.OK_ID).setEnabled(isValid());
            }
        });
        button = SWTFactory.createPushButton(comp, "&Deselect All", null);
        button.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                fViewer.setAllChecked(false);
                getButton(IDialogConstants.OK_ID).setEnabled(isValid());
            }
        });
    }

    /**
     * Returns whether the user has selected to add exported entries.
     *
     * @return whether the user has selected to add exported entries
     */
    public boolean isAddExportedEntries() {
        return fAddExportedEntries;
    }

    /**
     * Returns whether the user has selected to add required projects.
     *
     * @return whether the user has selected to add required projects
     */
    public boolean isAddRequiredProjects() {
        return fAddRequiredProjects;
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getDialogSettingsId()
     */
    protected String getDialogSettingsId() {
        return IJavaDebugUIConstants.PLUGIN_ID + ".PROJECT_SELECTION_DIALOG_SECTION"; //$NON-NLS-1$
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getHelpContextId()
     */
    protected String getHelpContextId() {
        return "select_project_dialog";
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getViewerInput()
     */
    protected Object getViewerInput() {
        return fProjects;
    }

    /* (non-Javadoc)
     * @see org.eclipse.debug.internal.ui.launchConfigurations.AbstractDebugSelectionDialog#getViewerLabel()
     */
    protected String getViewerLabel() {
        return "Choose &project(s) to add:";
    }
}