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.sa.commands; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; 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.jface.dialogs.ErrorDialog; import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.swt.widgets.Shell; import org.eclipse.ui.IWorkbench; import org.eclipse.ui.PlatformUI; import org.eclipse.ui.progress.IProgressService; import com.ebmwebsourcing.petals.common.internal.provisional.utils.ResourceUtils; import com.ebmwebsourcing.petals.common.internal.provisional.utils.StatusUtils; import com.ebmwebsourcing.petals.services.PetalsServicesPlugin; import com.ebmwebsourcing.petals.services.utils.ExportUtils; import com.ebmwebsourcing.petals.services.utils.ServiceProjectRelationUtils; /** * The "Fast Export" command handler. * @author Vincent Zurczak - EBM WebSourcing */ public class SaFastExportCommandHandler extends AbstractHandler { private final List<IProject> saProjects = new ArrayList<IProject>(); /* * (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler * #execute(org.eclipse.core.commands.ExecutionEvent) */ @Override public Object execute(final ExecutionEvent event) throws ExecutionException { // Define the objects processing final List<IStatus> errors = new ArrayList<IStatus>(); final List<IResource> resourcesToSelect = new ArrayList<IResource>(); IRunnableWithProgress op = new IRunnableWithProgress() { @Override public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException { monitor.beginTask("Service Assembly export in progress...", IProgressMonitor.UNKNOWN); try { for (IProject p : SaFastExportCommandHandler.this.saProjects) { monitor.subTask(p.getName()); String outputDirectoryLocation = p.getLocation().toString(); IStatus s = ExportUtils.exportSaProject(outputDirectoryLocation, p, monitor); if (!s.isOK()) errors.add(s); monitor.worked(5); resourcesToSelect.add(p.getFile(p.getName() + ".zip")); } } finally { monitor.done(); } } }; // Start processing IWorkbench wb = PlatformUI.getWorkbench(); IProgressService ps = wb.getProgressService(); try { ps.runInUI(ps, op, null); } catch (InvocationTargetException e) { IStatus status = StatusUtils.createStatus(e, ""); errors.add(status); } catch (InterruptedException e) { // nothing } // Select the resulting files for (IResource res : resourcesToSelect) { try { res.getProject().refreshLocal(IResource.DEPTH_INFINITE, null); } catch (CoreException e) { PetalsServicesPlugin.log(e, IStatus.ERROR); } } IResource[] resources = new IResource[resourcesToSelect.size()]; ResourceUtils.selectResourceInPetalsExplorer(true, resourcesToSelect.toArray(resources)); // Errors to display if (!errors.isEmpty()) { IStatus[] children = new IStatus[errors.size()]; MultiStatus status = new MultiStatus(PetalsServicesPlugin.PLUGIN_ID, 0, errors.toArray(children), (errors.size() > 1 ? "Errors" : "An error") + " occured during the export.", null); PetalsServicesPlugin.getDefault().getLog().log(status); ErrorDialog dlg = new ErrorDialog(new Shell(), "Export Errors", status.getMessage(), status, IStatus.ERROR); dlg.open(); } return null; } /* * (non-Javadoc) * @see org.eclipse.core.commands.AbstractHandler * #setEnabled(java.lang.Object) */ @Override public void setEnabled(Object evaluationContext) { // Check the selection this.saProjects.clear(); ISelection s = null; try { s = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage().getSelection(); } catch (Exception e1) { // nothing } if (s instanceof IStructuredSelection) { for (Iterator<?> it = ((IStructuredSelection) s).iterator(); it.hasNext();) { Object element = it.next(); IProject p; if (element instanceof IProject && (p = (IProject) element).isAccessible() && ServiceProjectRelationUtils.isSaProject(p)) this.saProjects.add(p); } } super.setBaseEnabled(!this.saProjects.isEmpty()); } }