com.byterefinery.rmbench.dialogs.export.ExportWizard.java Source code

Java tutorial

Introduction

Here is the source code for com.byterefinery.rmbench.dialogs.export.ExportWizard.java

Source

/*
 * created 20.02.2006
 *
 * Copyright 2009, ByteRefinery
 * 
 * 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
 * 
 * $Id$
 */
package com.byterefinery.rmbench.dialogs.export;

import java.io.IOException;
import java.util.HashSet;
import java.util.Set;

import org.eclipse.core.resources.IFile;
import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.wizard.IWizardContainer;
import org.eclipse.jface.wizard.IWizardPage;
import org.eclipse.swt.graphics.Image;
import org.eclipse.swt.graphics.RGB;
import org.eclipse.swt.widgets.Composite;
import org.eclipse.ui.IEditorPart;
import org.eclipse.ui.IExportWizard;
import org.eclipse.ui.IWorkbench;
import org.eclipse.ui.IWorkbenchWindow;

import com.byterefinery.rmbench.RMBenchPlugin;
import com.byterefinery.rmbench.dialogs.Messages;
import com.byterefinery.rmbench.editors.DiagramEditor;
import com.byterefinery.rmbench.editparts.DiagramEditPart;
import com.byterefinery.rmbench.external.IExportable;
import com.byterefinery.rmbench.util.ImageConstants;

/**
 * wizard that implements the export functionality for RMBench. The general export types
 * are
 * <ul>
 * <li>image export for diagrams</li>
 * <li>model export</li>
 * </ul>
 * Model exports can be added through extension points. The wizard dynamically displays the
 * configuration pages for the currently selected model export
 * 
 * @author cse
 */
public class ExportWizard implements IExportWizard {

    private final String windowTitle = Messages.ExportWizard_mainTitle;
    private final ImageDescriptor defaultImageDescriptor = RMBenchPlugin
            .getImageDescriptor(ImageConstants.MODEL_WIZARD);

    private IWizardContainer container;

    private Image defaultImage;

    private IWizardPage[] pages;
    private IWizardPage[] modelPages;

    private Set<IWizardPage> pageDump = new HashSet<IWizardPage>();

    private NoExportPage noExportPage;
    private ExportSelectionPage exportSelectionPage;
    private ExportFilePage imageExportPage;
    private ExportDirectoryPage modelExportPage;

    private IExportable.DiagramExport diagramExport;
    private IExportable.ModelExport modelExport;

    public void init(IWorkbench workbench, IStructuredSelection selection) {
        if (!selection.isEmpty()) {
            IExportable exportable = (IExportable) selection.getFirstElement();
            diagramExport = exportable.getDiagramExport();
            modelExport = exportable.getModelExport();
        }
        if (diagramExport == null) {
            IWorkbenchWindow ww = workbench.getActiveWorkbenchWindow();
            if (ww != null && ww.getActivePage() != null) {
                IEditorPart ep = ww.getActivePage().getActiveEditor();
                if (ep instanceof DiagramEditor) {
                    DiagramEditor de = (DiagramEditor) ep;
                    diagramExport = de.getDiagramPart();
                }
            }
        }
        if (modelExport == null)
            modelExport = RMBenchPlugin.getDefault().getModelExport();
    }

    public void initDiagramExport(DiagramEditPart diagramPart) {
        diagramExport = diagramPart.getDiagramExport();
    }

    public void initModelExport(IExportable.ModelExport modelExport) {
        this.modelExport = modelExport;
    }

    public void addPages() {
        if (diagramExport == null && modelExport == null) {
            noExportPage = NoExportPage.noExport();
            noExportPage.setWizard(this);
        } else {
            exportSelectionPage = new ExportSelectionPage(diagramExport, modelExport);
            exportSelectionPage.setWizard(this);
            if (diagramExport != null) {
                imageExportPage = new ExportFilePage();
                imageExportPage.setWizard(this);
            }
            if (modelExport != null) {
                modelExportPage = new ExportDirectoryPage();
                modelExportPage.setWizard(this);
            }
        }
    }

    public boolean performFinish() {
        if (exportSelectionPage.isImageExport()) {
            IFile imageFile = imageExportPage.createImageFile(exportSelectionPage.getImageExporter(),
                    exportSelectionPage.getExportFigure());
            return imageFile != null;
        } else {
            try {
                exportSelectionPage.getModelExporter().export(modelExportPage.getDirectory());
            } catch (IOException e) {
                RMBenchPlugin.logError(e);
                return false;
            }
            return true;
        }
    }

    public boolean canFinish() {
        computePagesIfNeeded();
        for (int i = 0; i < pages.length; i++) {
            if (!pages[i].isPageComplete())
                return false;
        }
        return true;
    }

    public void createPageControls(Composite pageContainer) {

        if (noExportPage != null)
            noExportPage.createControl(pageContainer);
        else {
            if (exportSelectionPage != null)
                exportSelectionPage.createControl(pageContainer);
            if (imageExportPage != null) {
                imageExportPage.createControl(pageContainer);
                imageExportPage.getControl().setVisible(false);
            }
            if (modelExportPage != null) {
                modelExportPage.createControl(pageContainer);
                modelExportPage.getControl().setVisible(false);
            }
        }
    }

    public void dispose() {
        if (noExportPage != null)
            noExportPage.dispose();
        else {
            if (exportSelectionPage != null)
                exportSelectionPage.dispose();
            if (imageExportPage != null)
                imageExportPage.dispose();
            if (modelExportPage != null)
                modelExportPage.dispose();
        }
        if (modelPages != null) {
            for (int i = 0; i < modelPages.length; i++) {
                pageDump.add(modelPages[i]);
            }
        }
        for (IWizardPage page : pageDump) {
            page.dispose();
        }
        if (defaultImage != null)
            defaultImage.dispose();
    }

    public IWizardContainer getContainer() {
        return container;
    }

    public Image getDefaultPageImage() {
        if (defaultImage == null)
            defaultImage = defaultImageDescriptor.createImage(true);
        return defaultImage;
    }

    public IDialogSettings getDialogSettings() {
        return null;
    }

    public IWizardPage getNextPage(IWizardPage page) {
        if (page == noExportPage)
            return null;
        else if (page == exportSelectionPage) {
            if (modelPages != exportSelectionPage.getModelPages()) {
                replaceModelPages(exportSelectionPage.getModelPages());
            }
            if (modelPages != null)
                return modelPages[0];
            else {
                if (exportSelectionPage.isImageExport())
                    return imageExportPage;
                else
                    return modelExportPage;
            }
        } else if (modelPages != null) {
            for (int i = 0; i < modelPages.length; i++) {
                if (page == modelPages[i])
                    return i < modelPages.length - 1 ? modelPages[i + 1] : modelExportPage;
            }
        }
        return null;
    }

    public IWizardPage getPreviousPage(IWizardPage page) {
        if (page == modelExportPage) {
            if (modelPages != null)
                return modelPages[modelPages.length - 1];
            else
                return exportSelectionPage;
        } else if (page == imageExportPage)
            return exportSelectionPage;
        else if (modelPages != null) {
            for (int i = 0; i < modelPages.length; i++) {
                if (page == modelPages[i])
                    return i > 0 ? modelPages[i - 1] : exportSelectionPage;
            }
        }
        return null;
    }

    private void replaceModelPages(IWizardPage[] newPages) {
        pages = null;
        if (modelPages != null) {
            for (int i = 0; i < modelPages.length; i++) {
                pageDump.add(modelPages[i]);
                if (modelPages[i].getControl() != null)
                    modelPages[i].getControl().setVisible(false);
            }
        }
        modelPages = newPages;
        if (modelPages != null) {
            for (int i = 0; i < newPages.length; i++) {
                modelPages[i].setWizard(this);
            }
        }
    }

    public IWizardPage getPage(String pageName) {
        computePagesIfNeeded();
        for (int i = 0; i < pages.length; i++) {
            if (pages[i].getName().equals(pageName))
                return pages[i];
        }
        return null;
    }

    public int getPageCount() {
        return getPages().length;
    }

    public IWizardPage[] getPages() {
        computePagesIfNeeded();
        return pages;
    }

    private void computePagesIfNeeded() {
        if (pages != null)
            return;

        if (noExportPage != null) {
            pages = new IWizardPage[] { noExportPage };
            return;
        }

        if (modelPages != null) {
            pages = new IWizardPage[modelPages.length + 2];
            pages[0] = exportSelectionPage;
            System.arraycopy(modelPages, 0, pages, 1, modelPages.length);
        } else {
            pages = new IWizardPage[2];
            pages[0] = exportSelectionPage;
        }
        if (exportSelectionPage.isImageExport())
            pages[pages.length - 1] = imageExportPage;
        else
            pages[pages.length - 1] = modelExportPage;
    }

    public IWizardPage getStartingPage() {
        return getPages()[0];
    }

    public RGB getTitleBarColor() {
        return null;
    }

    public String getWindowTitle() {
        return windowTitle;
    }

    public boolean isHelpAvailable() {
        return false;
    }

    public boolean needsPreviousAndNextButtons() {
        return getPageCount() > 1;
    }

    public boolean needsProgressMonitor() {
        return false;
    }

    public boolean performCancel() {
        return true;
    }

    public void setContainer(IWizardContainer wizardContainer) {
        this.container = wizardContainer;
    }
}