ext.org.eclipse.jdt.internal.ui.jarpackager.JarRefactoringDialog.java Source code

Java tutorial

Introduction

Here is the source code for ext.org.eclipse.jdt.internal.ui.jarpackager.JarRefactoringDialog.java

Source

/*******************************************************************************
 * Copyright (c) 2006, 2011 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 ext.org.eclipse.jdt.internal.ui.jarpackager;

import java.util.HashSet;
import java.util.Set;

import org.eclipse.swt.SWT;
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.core.runtime.Assert;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;

import org.eclipse.jdt.ui.jarpackager.JarPackageData;
import org.eclipse.jface.dialogs.Dialog;
import org.eclipse.jface.dialogs.IDialogConstants;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.TrayDialog;

import org.eclipse.ui.PlatformUI;

import org.eclipse.ltk.core.refactoring.RefactoringDescriptorProxy;
import org.eclipse.ltk.core.refactoring.history.RefactoringHistory;
import org.eclipse.ltk.ui.refactoring.RefactoringUI;
import org.eclipse.ltk.ui.refactoring.history.ISortableRefactoringHistoryControl;
import org.eclipse.ltk.ui.refactoring.history.RefactoringHistoryControlConfiguration;

import ext.org.eclipse.jdt.internal.ui.IJavaHelpContextIds;

/**
 * Dialog to configure the refactorings to export.
 *
 * @since 3.2
 */
public final class JarRefactoringDialog extends TrayDialog {

    /** The sort dialog setting */
    private static final String SETTING_SORT = "org.eclipse.jdt.ui.jar.export.sortRefactorings"; //$NON-NLS-1$

    /** The jar package data */
    private final JarPackageData fData;

    /** The export structural button */
    private Button fExportStructural = null;

    /** The refactoring history */
    private final RefactoringHistory fHistory;

    /** The refactoring history control */
    private ISortableRefactoringHistoryControl fHistoryControl = null;

    /** The dialog settings */
    private final IDialogSettings fSettings;

    /**
     * Creates a new jar refactoring dialog.
     *
     * @param shell
     *            the parent shell
     * @param settings
     *            the dialog settings, or <code>null</code>
     * @param data
     *            the jar package data
     * @param history
     *            the refactoring history
     */
    public JarRefactoringDialog(final Shell shell, final IDialogSettings settings, final JarPackageData data,
            final RefactoringHistory history) {
        super(shell);
        Assert.isNotNull(data);
        Assert.isNotNull(history);
        fSettings = settings;
        fData = data;
        fHistory = history;
    }

    /*
     * @see org.eclipse.jface.dialogs.Dialog#isResizable()
     * @since 3.4
     */
    @Override
    protected boolean isResizable() {
        return true;
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void buttonPressed(final int buttonId) {
        if (buttonId == IDialogConstants.OK_ID) {
            fData.setRefactoringAware(true);
            final RefactoringDescriptorProxy[] descriptors = fHistoryControl.getCheckedDescriptors();
            Set<IProject> set = new HashSet<IProject>();
            IWorkspaceRoot root = ResourcesPlugin.getWorkspace().getRoot();
            for (int index = 0; index < descriptors.length; index++) {
                final String project = descriptors[index].getProject();
                if (project != null && !"".equals(project)) //$NON-NLS-1$
                    set.add(root.getProject(project));
            }
            fData.setRefactoringProjects(set.toArray(new IProject[set.size()]));
            fData.setRefactoringDescriptors(descriptors);
            fData.setExportStructuralOnly(fExportStructural.getSelection());
            final IDialogSettings settings = fSettings;
            if (settings != null)
                settings.put(SETTING_SORT, fHistoryControl.isSortByProjects());
        }
        super.buttonPressed(buttonId);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected void configureShell(final Shell shell) {
        super.configureShell(shell);
        shell.setText(JarPackagerMessages.JarRefactoringDialog_dialog_title);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(shell,
                IJavaHelpContextIds.JARPACKAGER_REFACTORING_DIALOG);
    }

    /**
     * {@inheritDoc}
     */
    @Override
    public void create() {
        super.create();
        getButton(OK).setEnabled(!fHistory.isEmpty());
    }

    /**
     * {@inheritDoc}
     */
    @Override
    protected Control createDialogArea(final Composite parent) {
        final Composite container = (Composite) super.createDialogArea(parent);
        initializeDialogUnits(container);
        final Composite composite = new Composite(container, SWT.NULL);
        final GridLayout layout = new GridLayout();
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        composite.setLayout(layout);
        composite.setLayoutData(new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL));
        final RefactoringHistoryControlConfiguration configuration = new RefactoringHistoryControlConfiguration(
                null, true, true) {

            @Override
            public final String getWorkspaceCaption() {
                return JarPackagerMessages.JarRefactoringDialog_workspace_caption;
            }
        };
        fHistoryControl = (ISortableRefactoringHistoryControl) RefactoringUI
                .createSortableRefactoringHistoryControl(composite, configuration);
        fHistoryControl.createControl();
        boolean sortProjects = true;
        final IDialogSettings settings = fSettings;
        if (settings != null)
            sortProjects = settings.getBoolean(SETTING_SORT);
        if (sortProjects)
            fHistoryControl.sortByProjects();
        else
            fHistoryControl.sortByDate();
        GridData data = new GridData(GridData.FILL_HORIZONTAL | GridData.FILL_VERTICAL);
        data.heightHint = convertHeightInCharsToPixels(32);
        data.widthHint = convertWidthInCharsToPixels(72);
        fHistoryControl.getControl().setLayoutData(data);
        fHistoryControl.setInput(fHistory);
        fHistoryControl.setCheckedDescriptors(fData.getRefactoringDescriptors());
        createPlainLabel(composite, JarPackagerMessages.JarPackageWizardPage_options_label);
        createOptionsGroup(composite);
        Dialog.applyDialogFont(parent);
        return composite;
    }

    /**
     * Create the export option group.
     *
     * @param parent
     *            the parent composite
     */
    protected void createOptionsGroup(Composite parent) {
        Composite optionsGroup = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = 0;
        optionsGroup.setLayout(layout);

        fExportStructural = new Button(optionsGroup, SWT.CHECK | SWT.LEFT);
        fExportStructural.setText(JarPackagerMessages.JarRefactoringDialog_export_structural);
        fExportStructural.setSelection(fData.isExportStructuralOnly());
    }

    /**
     * Creates a new label.
     *
     * @param parent
     *            the parent control
     * @param text
     *            the label text
     * @return the new label control
     */
    protected Label createPlainLabel(Composite parent, String text) {
        Label label = new Label(parent, SWT.NONE);
        label.setText(text);
        label.setFont(parent.getFont());
        GridData data = new GridData();
        data.verticalAlignment = GridData.FILL;
        data.horizontalAlignment = GridData.FILL;
        label.setLayoutData(data);
        return label;
    }
}