/******************************************************************************* * Copyright (c) 2007, 2008 IBM Corporation and others. * 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: * IBM Corporation - initial API and implementation *******************************************************************************/ package org.eclipse.ui.internal.views.markers; import java.util.ArrayList; import java.util.List; import org.eclipse.core.commands.ExecutionEvent; import org.eclipse.core.commands.operations.IUndoableOperation; import org.eclipse.core.resources.IMarker; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.osgi.util.NLS; import org.eclipse.ui.ide.undo.DeleteMarkersOperation; import org.eclipse.ui.ide.undo.WorkspaceUndoUtil; import org.eclipse.ui.views.markers.MarkerItem; import org.eclipse.ui.views.markers.MarkerViewHandler; import org.eclipse.ui.views.markers.internal.MarkerMessages; /** * DeleteCompletedHandler is the handler for the deletion of completed * tasks. * @since 3.4 * */ public class DeleteCompletedHandler extends MarkerViewHandler { /* * (non-Javadoc) * * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) */ public Object execute(ExecutionEvent event) { ExtendedMarkersView view = getView(event); if (view == null) return this; final List completed = getCompletedTasks(view); // Check if there is anything to do if (completed.size() == 0) { MessageDialog.openInformation(view.getSite().getShell(), MarkerMessages.deleteCompletedTasks_dialogTitle, MarkerMessages.deleteCompletedTasks_noneCompleted); return this; } String message; if (completed.size() == 1) { message = MarkerMessages.deleteCompletedTasks_permanentSingular; } else { message = NLS.bind( MarkerMessages.deleteCompletedTasks_permanentPlural, String .valueOf(completed.size())); } // Verify. if (!MessageDialog.openConfirm(view.getSite().getShell(), MarkerMessages.deleteCompletedTasks_dialogTitle, message)) { return view; } IMarker[] markers = new IMarker[completed.size()]; completed.toArray(markers); IUndoableOperation op = new DeleteMarkersOperation(markers, MarkerMessages.deleteCompletedAction_title); execute(op, MarkerMessages.deleteCompletedTasks_errorMessage, null, WorkspaceUndoUtil.getUIInfoAdapter(view.getSite().getShell())); return this; } /** * Get the list of completed tasks from the view. * * @param view * @return List of {@link IMarker} */ private List getCompletedTasks(ExtendedMarkersView view) { List completed = new ArrayList(); MarkerItem[] items = view.getAllConcreteItems(); for (int i = 0; i < items.length; i++) { MarkerItem markerItem = items[i]; if (markerItem.getAttributeValue(IMarker.DONE, false) && markerItem.getMarker() != null) { completed.add(markerItem.getMarker()); } } return completed; } }