package org.argeo.slc.client.ui.dist.commands; import java.util.Iterator; import javax.jcr.Node; import javax.jcr.Repository; import javax.jcr.RepositoryException; import javax.jcr.Session; import org.argeo.ArgeoException; import org.argeo.slc.client.ui.dist.DistPlugin; import org.argeo.slc.client.ui.dist.utils.CommandHelpers; import org.eclipse.core.commands.AbstractHandler; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.ExecutionException; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelection; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.ui.IEditorPart; import org.eclipse.ui.IWorkbenchPart; /** * Delete chosen artifacts from the current workspace. */ public class DeleteArtifacts extends AbstractHandler { // private static final Log log = LogFactory.getLog(DeleteWorkspace.class); public final static String ID = DistPlugin.ID + ".deleteArtifacts"; public final static String DEFAULT_LABEL = "Delete selected items"; public final static String DEFAULT_ICON_PATH = "icons/removeItem.gif"; /* DEPENDENCY INJECTION */ private Repository repository; public Object execute(ExecutionEvent event) throws ExecutionException { String msg = "Your are about to definitively remove these artifacts.\n" + "Do you really want to proceed ?"; boolean result = MessageDialog.openConfirm(DistPlugin.getDefault() .getWorkbench().getDisplay().getActiveShell(), "Confirm deletion", msg); if (result) { Session session = null; try { session = repository.login(); IWorkbenchPart activePart = DistPlugin.getDefault() .getWorkbench().getActiveWorkbenchWindow() .getActivePage().getActivePart(); if (activePart instanceof IEditorPart) { ISelection selector = ((IEditorPart) activePart) .getEditorSite().getSelectionProvider() .getSelection(); if (selector != null && selector instanceof IStructuredSelection) { Iterator it = ((IStructuredSelection) selector) .iterator(); while (it.hasNext()) { Node node = (Node) it.next(); node.remove(); } } session.save(); } CommandHelpers.callCommand(RefreshDistributionOverviewPage.ID); } catch (RepositoryException re) { throw new ArgeoException( "Unexpected error while deleting artifacts.", re); } finally { if (session != null) session.logout(); } } return null; } /* DEPENDENCY INJECTION */ public void setRepository(Repository repository) { this.repository = repository; } }