ext.org.eclipse.jdt.internal.ui.javadocexport.JavadocSpecificsWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for ext.org.eclipse.jdt.internal.ui.javadocexport.JavadocSpecificsWizardPage.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 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.javadocexport;

import java.io.File;

import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
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.Combo;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.swt.widgets.Control;
import org.eclipse.swt.widgets.Text;

import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Path;

import org.eclipse.jface.dialogs.Dialog;

import org.eclipse.ui.PlatformUI;

import org.eclipse.jdt.core.JavaCore;

import ext.org.eclipse.jdt.internal.ui.IJavaHelpContextIds;
import ext.org.eclipse.jdt.internal.ui.dialogs.StatusInfo;
import ext.org.eclipse.jdt.internal.ui.dialogs.StatusUtil;
import ext.org.eclipse.jdt.internal.ui.util.SWTUtil;

public class JavadocSpecificsWizardPage extends JavadocWizardPage {

    private Button fAntBrowseButton;
    private Button fCheckbrowser;
    private Text fAntText;
    private Button fOverViewButton;
    private Button fOverViewBrowseButton;
    private Button fAntButton;
    private Combo fSourceCombo;

    private Composite fLowerComposite;
    private Text fOverViewText;
    private Text fExtraOptionsText;
    private Text fVMOptionsText;

    private StatusInfo fOverviewStatus;
    private StatusInfo fAntStatus;

    private JavadocTreeWizardPage fFirstPage;

    private JavadocOptionsManager fStore;

    private final int OVERVIEWSTATUS = 1;
    private final int ANTSTATUS = 2;

    protected JavadocSpecificsWizardPage(String pageName, JavadocTreeWizardPage firstPage,
            JavadocOptionsManager store) {
        super(pageName);
        setDescription(JavadocExportMessages.JavadocSpecificsWizardPage_description);

        fStore = store;

        fOverviewStatus = new StatusInfo();
        fAntStatus = new StatusInfo();
        fFirstPage = firstPage;
    }

    /*
     * @see IDialogPage#createControl(Composite)
     */
    public void createControl(Composite parent) {
        initializeDialogUnits(parent);

        fLowerComposite = new Composite(parent, SWT.NONE);
        fLowerComposite.setLayoutData(createGridData(GridData.FILL_BOTH, 1, 0));

        GridLayout layout = createGridLayout(3);
        layout.marginHeight = 0;
        fLowerComposite.setLayout(layout);

        createExtraOptionsGroup(fLowerComposite);
        createAntGroup(fLowerComposite);

        setControl(fLowerComposite);
        Dialog.applyDialogFont(fLowerComposite);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(fLowerComposite,
                IJavaHelpContextIds.JAVADOC_SPECIFICS_PAGE);

    } //end method createControl

    private void createExtraOptionsGroup(Composite composite) {
        Composite c = new Composite(composite, SWT.NONE);
        c.setLayout(createGridLayout(3));
        c.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 3, 0));
        ((GridLayout) c.getLayout()).marginWidth = 0;

        fOverViewButton = createButton(c, SWT.CHECK,
                JavadocExportMessages.JavadocSpecificsWizardPage_overviewbutton_label, createGridData(1));
        fOverViewText = createText(c, SWT.SINGLE | SWT.BORDER, null,
                createGridData(GridData.FILL_HORIZONTAL, 1, 0));
        SWTUtil.setAccessibilityText(fOverViewText,
                JavadocExportMessages.JavadocSpecificsWizardPage_overviewbutton_description);
        //there really aught to be a way to specify this
        ((GridData) fOverViewText.getLayoutData()).widthHint = 200;
        fOverViewBrowseButton = createButton(c, SWT.PUSH,
                JavadocExportMessages.JavadocSpecificsWizardPage_overviewbrowse_label,
                createGridData(GridData.HORIZONTAL_ALIGN_END, 1, 0));
        SWTUtil.setButtonDimensionHint(fOverViewBrowseButton);

        String str = fStore.getOverview();
        if (str.length() == 0) {
            //default
            fOverViewText.setEnabled(false);
            fOverViewBrowseButton.setEnabled(false);
        } else {
            fOverViewButton.setSelection(true);
            fOverViewText.setText(str);
        }

        createLabel(composite, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_vmoptionsfield_label,
                createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 3, 0));
        fVMOptionsText = createText(composite, SWT.SINGLE | SWT.BORDER, null,
                createGridData(GridData.HORIZONTAL_ALIGN_FILL, 3, 0));
        fVMOptionsText.setText(fStore.getVMParams());

        createLabel(composite, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_extraoptionsfield_label,
                createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 3, 0));
        fExtraOptionsText = createText(composite, SWT.MULTI | SWT.BORDER | SWT.WRAP | SWT.H_SCROLL | SWT.V_SCROLL,
                null, createGridData(GridData.HORIZONTAL_ALIGN_FILL | GridData.FILL_VERTICAL, 3, 0));
        //fExtraOptionsText.setSize(convertWidthInCharsToPixels(60), convertHeightInCharsToPixels(10));

        fExtraOptionsText.setText(fStore.getAdditionalParams());

        Composite inner = new Composite(composite, SWT.NONE);
        inner.setLayoutData(new GridData(GridData.FILL, GridData.BEGINNING, false, false, 3, 1));
        GridLayout layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        inner.setLayout(layout);

        createLabel(inner, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_sourcecompatibility_label,
                createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 1, 0));

        fSourceCombo = createCombo(inner, SWT.NONE, fStore.getSource(), createGridData(1));
        String[] versions = { "-", //$NON-NLS-1$
                JavaCore.VERSION_1_3, JavaCore.VERSION_1_4, JavaCore.VERSION_1_5, JavaCore.VERSION_1_6,
                JavaCore.VERSION_1_7 };
        fSourceCombo.setItems(versions);
        fSourceCombo.setText(fStore.getSource());

        //Listeners
        fOverViewButton.addSelectionListener(
                new ToggleSelectionAdapter(new Control[] { fOverViewBrowseButton, fOverViewText }) {
                    @Override
                    public void validate() {
                        doValidation(OVERVIEWSTATUS);
                    }
                });

        fOverViewText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                doValidation(OVERVIEWSTATUS);
            }
        });

        fOverViewBrowseButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                handleFileBrowseButtonPressed(fOverViewText, new String[] { "*.html" }, //$NON-NLS-1$
                        JavadocExportMessages.JavadocSpecificsWizardPage_overviewbrowsedialog_title);
            }
        });

    }

    private void createAntGroup(Composite composite) {
        Composite c = new Composite(composite, SWT.NONE);
        c.setLayout(createGridLayout(3));
        c.setLayoutData(createGridData(GridData.FILL_HORIZONTAL, 3, 0));
        ((GridLayout) c.getLayout()).marginWidth = 0;

        fAntButton = createButton(c, SWT.CHECK,
                JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbutton_label, createGridData(3));
        createLabel(c, SWT.NONE, JavadocExportMessages.JavadocSpecificsWizardPage_antscripttext_label,
                createGridData(GridData.HORIZONTAL_ALIGN_BEGINNING, 1, 0));
        fAntText = createText(c, SWT.SINGLE | SWT.BORDER, null, createGridData(GridData.FILL_HORIZONTAL, 1, 0));
        //there really aught to be a way to specify this
        ((GridData) fAntText.getLayoutData()).widthHint = 200;

        fAntText.setText(fStore.getAntpath());

        fAntBrowseButton = createButton(c, SWT.PUSH,
                JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbrowse_label,
                createGridData(GridData.HORIZONTAL_ALIGN_END, 1, 0));
        SWTUtil.setButtonDimensionHint(fAntBrowseButton);
        fAntText.setEnabled(false);
        fAntBrowseButton.setEnabled(false);

        fCheckbrowser = createButton(c, SWT.CHECK,
                JavadocExportMessages.JavadocSpecificsWizardPage_openbrowserbutton_label, createGridData(3));
        fCheckbrowser.setSelection(fStore.doOpenInBrowser());

        fAntButton.addSelectionListener(new ToggleSelectionAdapter(new Control[] { fAntText, fAntBrowseButton }) {
            @Override
            public void validate() {
                doValidation(ANTSTATUS);
            }
        });

        fAntText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                doValidation(ANTSTATUS);
            }
        });

        fAntBrowseButton.addSelectionListener(new SelectionAdapter() {
            @Override
            public void widgetSelected(SelectionEvent event) {
                String temp = fAntText.getText();
                IPath path = Path.fromOSString(temp);
                String file = path.lastSegment();
                if (file == null)
                    file = "javadoc.xml";//$NON-NLS-1$
                path = path.removeLastSegments(1);

                String selected = handleFolderBrowseButtonPressed(path.toOSString(),
                        JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbrowsedialog_title,
                        JavadocExportMessages.JavadocSpecificsWizardPage_antscriptbrowsedialog_label);

                path = Path.fromOSString(selected).append(file);
                fAntText.setText(path.toOSString());

            }
        });
    } //end method createExtraOptionsGroup

    private void doValidation(int val) {
        switch (val) {

        case OVERVIEWSTATUS:
            fOverviewStatus = new StatusInfo();
            if (fOverViewButton.getSelection()) {
                String filename = fOverViewText.getText();
                if (filename.length() == 0) {
                    fOverviewStatus
                            .setError(JavadocExportMessages.JavadocSpecificsWizardPage_overviewnotfound_error);
                } else {
                    File file = new File(filename);
                    String ext = filename.substring(filename.lastIndexOf('.') + 1);
                    if (!file.isFile()) {
                        fOverviewStatus
                                .setError(JavadocExportMessages.JavadocSpecificsWizardPage_overviewnotfound_error);
                    } else if (!ext.equalsIgnoreCase("html")) { //$NON-NLS-1$
                        fOverviewStatus
                                .setError(JavadocExportMessages.JavadocSpecificsWizardPage_overviewincorrect_error);
                    }
                }
            }
            break;
        case ANTSTATUS:
            fAntStatus = new StatusInfo();
            if (fAntButton.getSelection()) {
                String filename = fAntText.getText();
                if (filename.length() == 0) {
                    fOverviewStatus
                            .setError(JavadocExportMessages.JavadocSpecificsWizardPage_antfileincorrect_error);
                } else {
                    File file = new File(filename);
                    String ext = filename.substring(filename.lastIndexOf('.') + 1);
                    if (file.isDirectory() || !(ext.equalsIgnoreCase("xml"))) //$NON-NLS-1$
                        fAntStatus
                                .setError(JavadocExportMessages.JavadocSpecificsWizardPage_antfileincorrect_error);
                    else if (file.exists())
                        fAntStatus.setWarning(
                                JavadocExportMessages.JavadocSpecificsWizardPage_antfileoverwrite_warning);
                }
            }
            break;
        }

        updateStatus(findMostSevereStatus());

    }

    /*
     * @see JavadocWizardPage#onFinish()
     */

    protected void updateStore() {

        fStore.setVMParams(fVMOptionsText.getText());
        fStore.setAdditionalParams(fExtraOptionsText.getText());

        if (fOverViewText.getEnabled())
            fStore.setOverview(fOverViewText.getText());
        else
            fStore.setOverview(""); //$NON-NLS-1$

        //for now if there are multiple then the ant file is not stored for specific projects
        if (fAntText.getEnabled()) {
            fStore.setGeneralAntpath(fAntText.getText());
        }
        fStore.setOpenInBrowser(fCheckbrowser.getSelection());
        fStore.setSource(fSourceCombo.getText());

    }

    @Override
    public void setVisible(boolean visible) {
        super.setVisible(visible);
        if (visible) {
            doValidation(OVERVIEWSTATUS);
            doValidation(ANTSTATUS);
            fCheckbrowser.setVisible(!fFirstPage.getCustom());
        } else {
            updateStore();
        }
    }

    public void init() {
        updateStatus(new StatusInfo());
    }

    private IStatus findMostSevereStatus() {
        return StatusUtil.getMostSevere(new IStatus[] { fAntStatus, fOverviewStatus });
    }

    public boolean generateAnt() {
        return fAntButton.getSelection();
    }

}