com.siteview.mde.internal.ui.wizards.plugin.TemplateListSelectionPage.java Source code

Java tutorial

Introduction

Here is the source code for com.siteview.mde.internal.ui.wizards.plugin.TemplateListSelectionPage.java

Source

/*******************************************************************************
 * Copyright (c) 2000, 2009 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
 *     Jakub Jurkiewicz <jakub.jurkiewicz@pl.ibm.com> - bug 185995
 *     Rudiger Herrmann <rherrmann@innoopract.com> - bug 249707
 *******************************************************************************/
package com.siteview.mde.internal.ui.wizards.plugin;

import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IExecutableExtension;
import org.eclipse.jface.viewers.*;
import org.eclipse.jface.wizard.IWizardNode;
import com.siteview.mde.internal.ui.IHelpContextIds;
import com.siteview.mde.internal.ui.MDEUIMessages;
import com.siteview.mde.internal.ui.elements.ElementList;
import com.siteview.mde.internal.ui.wizards.*;
import com.siteview.mde.ui.IBasePluginWizard;
import com.siteview.mde.ui.IPluginContentWizard;
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.ui.PlatformUI;

public class TemplateListSelectionPage extends WizardListSelectionPage
        implements ISelectionChangedListener, IExecutableExtension {
    private ContentPage fContentPage;
    private Button fUseTemplate;
    private String fInitialTemplateId;

    class WizardFilter extends ViewerFilter {
        public boolean select(Viewer viewer, Object parentElement, Object element) {
            PluginFieldData data = (PluginFieldData) fContentPage.getData();
            boolean simple = data.isSimple();
            boolean generate = data.doGenerateClass();
            boolean ui = data.isUIPlugin();
            boolean rcp = data.isRCPApplicationPlugin();
            boolean osgi = data.getOSGiFramework() != null;
            WizardElement welement = (WizardElement) element;
            boolean active = TemplateWizardHelper.isActive(welement);
            boolean uiFlag = TemplateWizardHelper.getFlag(welement, TemplateWizardHelper.FLAG_UI, true);
            boolean javaFlag = TemplateWizardHelper.getFlag(welement, TemplateWizardHelper.FLAG_JAVA, true);
            boolean rcpFlag = TemplateWizardHelper.getFlag(welement, TemplateWizardHelper.FLAG_RCP, false);
            boolean osgiFlag = TemplateWizardHelper.getFlag(welement, TemplateWizardHelper.FLAG_OSGI, false);
            boolean activatorFlag = TemplateWizardHelper.getFlag(welement, TemplateWizardHelper.FLAG_ACTIVATOR,
                    false);

            //filter out wizards from disabled activities
            if (!active)
                return false;
            //osgi projects need java
            if (osgi && simple)
                return false;
            //filter out java wizards for simple projects
            if (simple)
                return !javaFlag;
            //filter out ui wizards for non-ui plug-ins
            if (uiFlag && generate && !ui)
                return false;
            //filter out wizards that require an activator when the user specifies not to generate a class
            if (activatorFlag && !generate)
                return false;
            //filter out non-RCP wizard if RCP option is selected
            if (!osgi && (rcp != rcpFlag))
                return false;
            //filter out non-UI wizards if UI option is selected for rcp and osgi projects
            return (osgi == osgiFlag && ((!osgiFlag && !rcpFlag) || ui == uiFlag));
        }

    }

    /**
     * Constructor
     * @param wizardElements a list of TemplateElementWizard objects
     * @param page content wizard page
     * @param message message to provide to the user
     */
    public TemplateListSelectionPage(ElementList wizardElements, ContentPage page, String message) {
        super(wizardElements, message);
        fContentPage = page;
        setTitle(MDEUIMessages.WizardListSelectionPage_title);
        setDescription(MDEUIMessages.WizardListSelectionPage_desc);
    }

    /* (non-Javadoc)
     * @see org.eclipse.pde.internal.ui.wizards.WizardListSelectionPage#createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {
        super.createControl(parent);
        PlatformUI.getWorkbench().getHelpSystem().setHelp(getControl(), IHelpContextIds.NEW_PROJECT_CODE_GEN_PAGE);
    }

    public void createAbove(Composite container, int span) {
        fUseTemplate = new Button(container, SWT.CHECK);
        fUseTemplate.setText(MDEUIMessages.WizardListSelectionPage_label);
        GridData gd = new GridData();
        gd.horizontalSpan = span;
        fUseTemplate.setLayoutData(gd);
        fUseTemplate.addSelectionListener(new SelectionAdapter() {
            public void widgetSelected(SelectionEvent e) {
                wizardSelectionViewer.getControl().setEnabled(fUseTemplate.getSelection());
                if (!fUseTemplate.getSelection())
                    setDescription(""); //$NON-NLS-1$
                setDescriptionEnabled(fUseTemplate.getSelection());
                getContainer().updateButtons();
            }
        });
        fUseTemplate.setSelection(true);
    }

    protected void initializeViewer() {
        wizardSelectionViewer.addFilter(new WizardFilter());
        if (getInitialTemplateId() != null)
            selectInitialTemplate();
    }

    private void selectInitialTemplate() {
        Object[] children = wizardElements.getChildren();
        for (int i = 0; i < children.length; i++) {
            WizardElement welement = (WizardElement) children[i];
            if (welement.getID().equals(getInitialTemplateId())) {
                wizardSelectionViewer.setSelection(new StructuredSelection(welement), true);
                setSelectedNode(createWizardNode(welement));
                setDescriptionText(welement.getDescription());
                break;
            }
        }
    }

    protected IWizardNode createWizardNode(WizardElement element) {
        return new WizardNode(this, element) {
            public IBasePluginWizard createWizard() throws CoreException {
                IPluginContentWizard wizard = (IPluginContentWizard) wizardElement.createExecutableExtension();
                wizard.init(fContentPage.getData());
                return wizard;
            }
        };
    }

    public IPluginContentWizard getSelectedWizard() {
        if (fUseTemplate.getSelection())
            return super.getSelectedWizard();
        return null;
    }

    public boolean isPageComplete() {
        PluginFieldData data = (PluginFieldData) fContentPage.getData();
        boolean rcp = data.isRCPApplicationPlugin();

        return !rcp || (fUseTemplate.getSelection() && rcp && getSelectedNode() != null);
    }

    /* (non-Javadoc)
     * @see org.eclipse.jface.wizard.WizardSelectionPage#canFlipToNextPage()
     */
    public boolean canFlipToNextPage() {
        IStructuredSelection ssel = (IStructuredSelection) wizardSelectionViewer.getSelection();
        return fUseTemplate.getSelection() && ssel != null && !ssel.isEmpty();
    }

    /**
     * @return Returns the fInitialTemplateId.
     */
    public String getInitialTemplateId() {
        return fInitialTemplateId;
    }

    /**
     * @param initialTemplateId The fInitialTemplateId to set.
     */
    public void setInitialTemplateId(String initialTemplateId) {
        fInitialTemplateId = initialTemplateId;
    }

    public void setVisible(boolean visible) {
        if (visible) {
            fContentPage.updateData();
            if (((PluginFieldData) fContentPage.getData()).isRCPApplicationPlugin()) {
                fUseTemplate.setSelection(true);
                fUseTemplate.setEnabled(false);
                wizardSelectionViewer.getControl().setEnabled(true);

            } else {
                fUseTemplate.setEnabled(true);
            }
            wizardSelectionViewer.refresh();
        }
        super.setVisible(visible);
    }

    /**
     * @return Returns <code>false</code> if no Template is available,
     * and <code>true</code> otherwise.
     */
    public boolean isAnyTemplateAvailable() {
        if (wizardSelectionViewer != null) {
            wizardSelectionViewer.refresh();
            Object firstElement = wizardSelectionViewer.getElementAt(0);
            if (firstElement != null) {
                return true;
            }
        }
        return false;
    }
}