/******************************************************************************* * Copyright (c) 2000, 2006 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.views.markers.internal; import java.util.ArrayList; import java.util.List; import org.eclipse.core.commands.operations.IUndoableOperation; import org.eclipse.core.resources.IMarker; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.jface.viewers.ISelectionProvider; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.osgi.util.NLS; import org.eclipse.ui.ide.undo.DeleteMarkersOperation; import org.eclipse.ui.ide.undo.WorkspaceUndoUtil; /** * ActionDeleteCompleted is the action for deleting completed markers. * */ public class ActionDeleteCompleted extends MarkerSelectionProviderAction { private TaskView part; /** * Constructs an ActionDeleteCompleted instance * * @param part * @param provider */ public ActionDeleteCompleted(TaskView part, ISelectionProvider provider) { super(provider, MarkerMessages.deleteCompletedAction_title); this.part = part; setEnabled(false); } /* * (non-Javadoc) * * @see org.eclipse.jface.action.Action#run() */ public void run() { final List completed = getCompletedTasks(); // Check if there is anything to do if (completed.size() == 0) { MessageDialog.openInformation(part.getSite().getShell(), MarkerMessages.deleteCompletedTasks_dialogTitle, MarkerMessages.deleteCompletedTasks_noneCompleted); return; } 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(part.getSite().getShell(), MarkerMessages.deleteCompletedTasks_dialogTitle, message)) { return; } IMarker[] markers = (IMarker[]) completed.toArray(new IMarker[completed .size()]); IUndoableOperation op = new DeleteMarkersOperation(markers, getText()); execute(op, MarkerMessages.deleteCompletedTasks_errorMessage, null, WorkspaceUndoUtil.getUIInfoAdapter(part.getSite().getShell())); } private List getCompletedTasks() { List completed = new ArrayList(); MarkerList markerList = part.getVisibleMarkers(); ConcreteMarker[] markers = markerList.toArray(); for (int i = 0; i < markers.length; i++) { ConcreteMarker marker = markers[i]; if (marker instanceof TaskMarker) { TaskMarker taskMarker = (TaskMarker) marker; if (taskMarker.getDone() == 1) { completed.add(taskMarker.getMarker()); } } } return completed; } /* * (non-Javadoc) * * @see org.eclipse.ui.actions.SelectionProviderAction#selectionChanged(org.eclipse.jface.viewers.IStructuredSelection) */ public void selectionChanged(IStructuredSelection selection) { setEnabled(!selection.isEmpty()); } }