Java tutorial
/****************************************************************************** * 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; } }