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.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Arrays; import java.util.Collection; import java.util.List; import org.eclipse.core.resources.IProject; import org.eclipse.core.resources.IResource; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.MultiStatus; import org.eclipse.core.runtime.Path; import org.eclipse.jface.dialogs.ErrorDialog; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.resource.ImageDescriptor; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.jface.wizard.Wizard; import org.eclipse.ui.IExportWizard; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.actions.WorkspaceModifyOperation; import com.ebmwebsourcing.petals.common.generation.JbiUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.ResourceUtils; import com.ebmwebsourcing.petals.services.PetalsServicesPlugin; import com.ebmwebsourcing.petals.services.utils.ExportUtils; /** * @author Vincent Zurczak - EBM WebSourcing */ public class SuExportWizard extends Wizard implements IExportWizard { private SuExportWizardPage page; private IStructuredSelection selection; private final List<IStatus> status = new ArrayList<IStatus>(); private final List<IResource> resourcesToSelect = new ArrayList<IResource>(); public enum SuExportMode { SEPARATE_IN_PROJECT, ALL_IN_ONE, SEPARATE_IN_DIRECTORY; } /** * Constructor. */ public SuExportWizard() { super(); setNeedsProgressMonitor(true); setWindowTitle("Service Unit Export"); ImageDescriptor desc = PetalsServicesPlugin.getImageDescriptor("icons/wizban/wiz_su_export.png"); setDefaultPageImageDescriptor(desc); } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard * #addPages() */ @Override public void addPages() { this.page = new SuExportWizardPage(this.selection); addPage(this.page); } /* * (non-Javadoc) * @see org.eclipse.jface.wizard.Wizard * #performFinish() */ @Override public boolean performFinish() { IRunnableWithProgress op = getExportOperation(); try { getContainer().run(true, false, op); if (this.page.getExportMode() == SuExportMode.SEPARATE_IN_PROJECT) { IResource[] res = new IResource[this.resourcesToSelect.size()]; ResourceUtils.selectResourceInPetalsExplorer(false, this.resourcesToSelect.toArray(res)); } } catch (InvocationTargetException e) { PetalsServicesPlugin.log(e, IStatus.ERROR); MessageDialog.openError(getShell(), "Export Error", "An error occurred during the export."); } catch (InterruptedException e) { // nothing } if (!this.status.isEmpty()) { IStatus[] children = new IStatus[this.status.size()]; MultiStatus s = new MultiStatus(PetalsServicesPlugin.PLUGIN_ID, 0, this.status.toArray(children), this.status.size() + " error" + (this.status.size() == 1 ? "" : "s") + " were found.", null); PetalsServicesPlugin.getDefault().getLog().log(s); ErrorDialog.openError(getShell(), "Export Error(s)", "Errors occurred during the export.", s); } return true; } /** * * @return */ private IRunnableWithProgress getExportOperation() { IRunnableWithProgress op = null; switch (this.page.getExportMode()) { case SEPARATE_IN_PROJECT: op = new WorkspaceModifyOperation() { @Override protected void execute(IProgressMonitor monitor) throws CoreException, InvocationTargetException, InterruptedException { monitor.beginTask("Export in progress...", IProgressMonitor.UNKNOWN); try { Collection<IProject> projects = SuExportWizard.this.page.getSuProjectsToExport(); for (IProject p : projects) { if (monitor.isCanceled()) break; monitor.subTask(p.getName()); String saName = JbiUtils.createSaName(p.getName()); String saFilePath = p.getLocation().append(saName + ".zip").toString(); IStatus s = ExportUtils.exportSuProject(saName, saFilePath, Arrays.asList(p), monitor); if (!s.isOK()) SuExportWizard.this.status.add(s); monitor.worked(2); try { p.refreshLocal(IResource.DEPTH_ONE, monitor); SuExportWizard.this.resourcesToSelect.add(p.getFile(saName + ".zip")); } catch (Exception e) { PetalsServicesPlugin.log(e, IStatus.ERROR); } } } finally { monitor.done(); } } }; break; case SEPARATE_IN_DIRECTORY: op = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) { monitor.beginTask("Export in progress...", IProgressMonitor.UNKNOWN); try { Collection<IProject> projects = SuExportWizard.this.page.getSuProjectsToExport(); for (IProject p : projects) { if (monitor.isCanceled()) break; monitor.subTask(p.getName()); String saName = JbiUtils.createSaName(p.getName()); String saFilePath = new File(SuExportWizard.this.page.getOutputFile(), saName + ".zip") .getAbsolutePath(); IStatus s = ExportUtils.exportSuProject(saName, saFilePath, Arrays.asList(p), monitor); if (!s.isOK()) SuExportWizard.this.status.add(s); monitor.worked(2); } } finally { monitor.done(); } } }; break; case ALL_IN_ONE: op = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) { monitor.beginTask("Export in progress...", IProgressMonitor.UNKNOWN); try { Collection<IProject> projects = SuExportWizard.this.page.getSuProjectsToExport(); String saFilePath = SuExportWizard.this.page.getOutputFile().getAbsolutePath(); String saName = new Path(saFilePath).removeFileExtension().lastSegment(); IStatus s = ExportUtils.exportSuProject(saName, saFilePath, projects, monitor); if (!s.isOK()) SuExportWizard.this.status.add(s); monitor.worked(5); } finally { monitor.done(); } } }; break; } return op; } /* * (non-Javadoc) * @see org.eclipse.ui.IWorkbenchWizard * #init(org.eclipse.ui.IWorkbench, org.eclipse.jface.viewers.IStructuredSelection) */ @Override public void init(IWorkbench workbench, IStructuredSelection selection) { this.selection = selection; } }