com.ebmwebsourcing.petals.services.su.export.SuBulkExportWizardPage.java Source code

Java tutorial

Introduction

Here is the source code for com.ebmwebsourcing.petals.services.su.export.SuBulkExportWizardPage.java

Source

/******************************************************************************
 * Copyright (c) 2010-2013, Linagora
 *
 * 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:
 *       Linagora - initial API and implementation
 *******************************************************************************/

package com.ebmwebsourcing.petals.services.su.export;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.eclipse.core.resources.IProject;
import org.eclipse.core.resources.IWorkspaceRoot;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.window.Window;
import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.events.ModifyEvent;
import org.eclipse.swt.events.ModifyListener;
import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.events.SelectionListener;
import org.eclipse.swt.graphics.Image;
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.DirectoryDialog;
import org.eclipse.swt.widgets.Display;
import org.eclipse.swt.widgets.Label;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.swt.widgets.Spinner;
import org.eclipse.swt.widgets.Text;
import org.eclipse.ui.ISharedImages;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.dialogs.ElementListSelectionDialog;
import org.eclipse.ui.model.WorkbenchLabelProvider;

import com.ebmwebsourcing.petals.common.internal.provisional.utils.PlatformUtils;
import com.ebmwebsourcing.petals.services.PetalsServicesPlugin;
import com.ebmwebsourcing.petals.services.utils.ServiceProjectRelationUtils;

/**
 * @author Vincent Zurczak - EBM WebSourcing
 */
public class SuBulkExportWizardPage extends WizardPage {

    private File outputDirectory;
    private IProject suProject;
    private int startId = 0, endId = 10;
    private String suffix = "";
    private boolean keepSrv = false, override = false;

    private boolean complete = false;
    private Image folderImg, projectImg, propertiesImg;

    /**
     * Constructor.
     * @param selection
     */
    public SuBulkExportWizardPage(IStructuredSelection selection) {

        super("SU Bulk Export Page");
        setTitle("Bulk Services Export"); //NON-NLS-1
        setDescription("Create n Petals services from one Service Unit project."); //NON-NLS-1

        if (!selection.isEmpty()) {
            IProject project = PlatformUtils.getAdaptedProject(selection.getFirstElement());
            if (project != null && ServiceProjectRelationUtils.isSuProject(project))
                this.suProject = project;
        }

        try {
            ImageDescriptor desc = PlatformUI.getWorkbench().getSharedImages()
                    .getImageDescriptor(ISharedImages.IMG_OBJ_FOLDER);
            if (desc != null)
                this.folderImg = desc.createImage();

        } catch (Exception e) {
            PetalsServicesPlugin.log(e, IStatus.WARNING);
        }

        try {
            ImageDescriptor desc = PlatformUI.getWorkbench().getSharedImages()
                    .getImageDescriptor(org.eclipse.ui.ide.IDE.SharedImages.IMG_OBJ_PROJECT);
            if (desc != null)
                this.projectImg = desc.createImage();

        } catch (Exception e) {
            PetalsServicesPlugin.log(e, IStatus.WARNING);
        }

        try {
            ImageDescriptor desc = PetalsServicesPlugin.getImageDescriptor("icons/obj16/properties.gif");
            if (desc != null)
                this.propertiesImg = desc.createImage();

        } catch (Exception e) {
            PetalsServicesPlugin.log(e, IStatus.WARNING);
        }
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.dialogs.DialogPage#dispose()
     */
    @Override
    public void dispose() {

        if (this.projectImg != null) {
            this.projectImg.dispose();
            this.projectImg = null;
        }

        if (this.propertiesImg != null) {
            this.propertiesImg.dispose();
            this.propertiesImg = null;
        }

        if (this.folderImg != null) {
            this.folderImg.dispose();
            this.folderImg = null;
        }

        super.dispose();
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.dialogs.IDialogPage
     * #createControl(org.eclipse.swt.widgets.Composite)
     */
    public void createControl(Composite parent) {

        Composite container = new Composite(parent, SWT.NONE);
        GridLayout layout = new GridLayout();
        layout.marginHeight = 10;
        layout.marginWidth = 10;
        container.setLayout(layout);
        container.setLayoutData(new GridData(GridData.FILL_BOTH));

        // SU selection
        Composite subContainer = new Composite(container, SWT.NONE);
        layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        subContainer.setLayout(layout);
        subContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        new Label(subContainer, SWT.NONE).setImage(this.projectImg);
        new Label(subContainer, SWT.NONE).setText("Select the Service Unit project to derivate:");

        subContainer = new Composite(container, SWT.NONE);
        layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        subContainer.setLayout(layout);
        subContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        final Text projectText = new Text(subContainer, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
        projectText.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
        projectText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        if (this.suProject != null)
            projectText.setText(this.suProject.getName());

        Button browseButton = new Button(subContainer, SWT.PUSH);
        browseButton.setText("Browse...");
        browseButton.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                widgetDefaultSelected(e);
            }

            public void widgetDefaultSelected(SelectionEvent e) {

                // List the projects
                List<IProject> suProjects = new ArrayList<IProject>();
                IWorkspaceRoot iwr = ResourcesPlugin.getWorkspace().getRoot();
                for (IProject p : iwr.getProjects()) {
                    if (ServiceProjectRelationUtils.isSuProject(p))
                        suProjects.add(p);
                }

                // Let the user choose
                ElementListSelectionDialog dlg = new ElementListSelectionDialog(new Shell(),
                        new WorkbenchLabelProvider());
                dlg.setAllowDuplicates(false);
                dlg.setElements(suProjects.toArray());
                dlg.setEmptyListMessage("The workspace does not contain any valid Service Unit project.");
                dlg.setMatchEmptyString(true);
                dlg.setMultipleSelection(false);
                dlg.setTitle("Service Unit Project Selection");
                dlg.setMessage("Select a Service Unit project.");
                if (SuBulkExportWizardPage.this.suProject == null)
                    dlg.setFilter("*");
                else
                    dlg.setFilter(SuBulkExportWizardPage.this.suProject.getName());

                if (dlg.open() == Window.OK) {
                    SuBulkExportWizardPage.this.suProject = (IProject) dlg.getFirstResult();
                    projectText.setText(SuBulkExportWizardPage.this.suProject.getName());
                    validate();
                }
            }
        });

        // Output selection
        subContainer = new Composite(container, SWT.NONE);
        layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        subContainer.setLayout(layout);

        GridData layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.verticalIndent = 14;
        subContainer.setLayoutData(layoutData);

        new Label(subContainer, SWT.NONE).setImage(this.folderImg);
        new Label(subContainer, SWT.NONE).setText("Select the output directory:");

        subContainer = new Composite(container, SWT.NONE);
        layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        subContainer.setLayout(layout);
        subContainer.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));

        final Text outputText = new Text(subContainer, SWT.SINGLE | SWT.BORDER | SWT.READ_ONLY);
        outputText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        outputText.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));

        browseButton = new Button(subContainer, SWT.PUSH);
        browseButton.setText("Browse...");
        browseButton.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                widgetDefaultSelected(e);
            }

            public void widgetDefaultSelected(SelectionEvent e) {

                DirectoryDialog dlg = new DirectoryDialog(new Shell());
                dlg.setText("Output Directory");
                dlg.setMessage("Select the directory in which the derviated services will be saved.");
                if (SuBulkExportWizardPage.this.outputDirectory != null)
                    dlg.setFilterPath(SuBulkExportWizardPage.this.outputDirectory.getAbsolutePath());

                String path = dlg.open();
                if (path != null) {
                    SuBulkExportWizardPage.this.outputDirectory = new File(path);
                    outputText.setText(path);
                    outputText.setSelection(path.length());
                    validate();
                }
            }
        });

        // Other elements
        subContainer = new Composite(container, SWT.NONE);
        layout = new GridLayout(2, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        subContainer.setLayout(layout);

        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.verticalIndent = 14;
        subContainer.setLayoutData(layoutData);

        new Label(subContainer, SWT.NONE).setImage(this.propertiesImg);
        new Label(subContainer, SWT.NONE).setText("Edit the generation properties:");

        // Cheating: align the right-border of the Text with the browsing ones
        subContainer = new Composite(container, SWT.NONE);
        layout = new GridLayout(3, false);
        layout.marginHeight = 0;
        layout.marginWidth = 0;
        subContainer.setLayout(layout);

        layoutData = new GridData(GridData.FILL_HORIZONTAL);
        layoutData.verticalIndent = 3;
        subContainer.setLayoutData(layoutData);

        new Label(subContainer, SWT.NONE).setText("Suffix:");
        final Text suffixText = new Text(subContainer, SWT.SINGLE | SWT.BORDER);
        suffixText.setLayoutData(new GridData(GridData.FILL_HORIZONTAL));
        suffixText.setToolTipText(
                "The generated service will be named <baseName>-<suffix>-<id> with 'startId <= id <= endId'");
        suffixText.addModifyListener(new ModifyListener() {
            public void modifyText(ModifyEvent e) {
                SuBulkExportWizardPage.this.suffix = suffixText.getText();
                validate();
            }
        });

        Button cheatingButton = new Button(subContainer, SWT.PUSH);
        cheatingButton.setText("Browse...");
        cheatingButton.setVisible(false);

        new Label(subContainer, SWT.NONE).setText("Start ID:");
        final Spinner startSpinner = new Spinner(subContainer, SWT.BORDER | SWT.READ_ONLY);
        startSpinner.setValues(this.startId, 0, Integer.MAX_VALUE, 0, 1, 100);
        startSpinner.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
        startSpinner.setToolTipText(
                "The generated service will be named <baseName>-<suffix>-<id> with 'startId <= id <= endId'");
        startSpinner.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                widgetDefaultSelected(e);
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                SuBulkExportWizardPage.this.startId = startSpinner.getSelection();
                validate();
            }
        });

        layoutData = new GridData();
        layoutData.horizontalSpan = 2;
        layoutData.widthHint = 120;
        startSpinner.setLayoutData(layoutData);

        new Label(subContainer, SWT.NONE).setText("End ID:");
        final Spinner endSpinner = new Spinner(subContainer, SWT.BORDER | SWT.READ_ONLY);
        endSpinner.setValues(this.endId, 1, Integer.MAX_VALUE, 0, 1, 100);
        endSpinner.setBackground(Display.getDefault().getSystemColor(SWT.COLOR_WHITE));
        endSpinner.setToolTipText(
                "The generated service will be named <baseName>-<suffix>-<id> with 'startId <= id <= endId'");
        endSpinner.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                widgetDefaultSelected(e);
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                SuBulkExportWizardPage.this.endId = endSpinner.getSelection();
                validate();
            }
        });

        layoutData = new GridData();
        layoutData.horizontalSpan = 2;
        layoutData.widthHint = 120;
        endSpinner.setLayoutData(layoutData);

        // Last options
        final Button keepSrvButton = new Button(container, SWT.CHECK);
        keepSrvButton.setText("Keep the same service name");
        keepSrvButton.setToolTipText("Keep the same service name for all the derivated services");
        keepSrvButton.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                SuBulkExportWizardPage.this.keepSrv = keepSrvButton.getSelection();
                validate();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                SuBulkExportWizardPage.this.keepSrv = keepSrvButton.getSelection();
                validate();
            }
        });

        final Button overrideButton = new Button(container, SWT.CHECK);
        overrideButton.setText("Override (skip by default)");
        overrideButton.addSelectionListener(new SelectionListener() {
            public void widgetSelected(SelectionEvent e) {
                SuBulkExportWizardPage.this.override = overrideButton.getSelection();
            }

            public void widgetDefaultSelected(SelectionEvent e) {
                SuBulkExportWizardPage.this.override = overrideButton.getSelection();
            }
        });

        // Last UI details
        projectText.setFocus();
        setControl(container);
    }

    /**
     * Validates the page entries.
     */
    private void validate() {

        if (this.suProject == null)
            updateStatus("You have to select a Service Unit project.");
        else if (this.outputDirectory == null)
            updateStatus("You have to select the output directory.");
        else if (!this.suffix.matches("(\\w)*"))
            updateStatus("The suffix contains illegal characters.");
        else if (this.startId > this.endId)
            updateStatus("The end ID must be greater or equals to the start ID.");
        else
            updateStatus(null);
    }

    /**
     * Updates the page status.
     * @param msg
     */
    private void updateStatus(String msg) {
        setErrorMessage(msg);
        setPageComplete(msg == null);
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.wizard.WizardPage
     * #isPageComplete()
     */
    @Override
    public boolean isPageComplete() {
        return this.complete;
    }

    /*
     * (non-Javadoc)
     * @see org.eclipse.jface.wizard.WizardPage
     * #setPageComplete(boolean)
     */
    @Override
    public void setPageComplete(boolean complete) {
        this.complete = complete;
        super.setPageComplete(complete);
    }

    /**
     * @return the outputDirectory
     */
    public File getOutputDirectory() {
        return this.outputDirectory;
    }

    /**
     * @return the suProject
     */
    public IProject getSuProject() {
        return this.suProject;
    }

    /**
     * @return the startId
     */
    public int getStartId() {
        return this.startId;
    }

    /**
     * @return the endId
     */
    public int getEndId() {
        return this.endId;
    }

    /**
     * @return the suffix
     */
    public String getSuffix() {
        return this.suffix;
    }

    /**
     * @return the keepSrv
     */
    public boolean isKeepSrv() {
        return this.keepSrv;
    }

    /**
     * @return the override
     */
    public boolean isOverride() {
        return this.override;
    }
}