### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.tasks.ui Index: src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java,v retrieving revision 1.6 diff -u -r1.6 Messages.java --- src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java 29 Jan 2009 20:52:17 -0000 1.6 +++ src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java 1 Feb 2009 04:19:49 -0000 @@ -103,6 +103,10 @@ public static String DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE; + public static String DeleteTaskRepositoryAction_Delete_Repository_In_Progress; + + public static String DeleteTaskRepositoryAction_Delete_Task_Repository_Failed; + public static String EditRepositoryPropertiesAction_Properties; public static String ExpandAllAction_Expand_All; Index: src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java,v retrieving revision 1.27 diff -u -r1.27 DeleteTaskRepositoryAction.java --- src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java 13 Jan 2009 07:07:35 -0000 1.27 +++ src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java 1 Feb 2009 04:19:49 -0000 @@ -12,16 +12,19 @@ package org.eclipse.mylyn.internal.tasks.ui.actions; import java.util.ArrayList; -import java.util.Collection; import java.util.List; import java.util.Set; +import org.eclipse.core.runtime.CoreException; +import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; -import org.eclipse.jface.viewers.IStructuredSelection; -import org.eclipse.mylyn.commons.core.StatusHandler; +import org.eclipse.mylyn.internal.provisional.commons.ui.CommonsUiUtil; +import org.eclipse.mylyn.internal.provisional.commons.ui.ICoreRunnable; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; +import org.eclipse.mylyn.internal.tasks.core.ITaskListRunnable; import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery; import org.eclipse.mylyn.internal.tasks.ui.TaskRepositoryUtil; import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; @@ -29,14 +32,16 @@ import org.eclipse.mylyn.tasks.core.IRepositoryQuery; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.mylyn.tasks.core.TaskRepository; +import org.eclipse.osgi.util.NLS; import org.eclipse.ui.ISharedImages; import org.eclipse.ui.IViewPart; -import org.eclipse.ui.PlatformUI; import org.eclipse.ui.internal.WorkbenchImages; import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds; /** * @author Mik Kersten + * @author David Shepherd + * @author Steffen Pingel */ public class DeleteTaskRepositoryAction extends AbstractTaskRepositoryAction { @@ -48,6 +53,7 @@ setId(ID); setEnabled(false); setActionDefinitionId(IWorkbenchActionDefinitionIds.DELETE); + setSingleSelect(true); } public void init(IViewPart view) { @@ -56,71 +62,74 @@ @Override public void run() { - try { + final TaskRepository repositoryToDelete = getTaskRepository(getStructuredSelection()); + if (repositoryToDelete == null) { + return; + } + final List queriesToDelete = new ArrayList(); + final List tasksToDelete = new ArrayList(); - boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench() - .getActiveWorkbenchWindow() - .getShell(), Messages.DeleteTaskRepositoryAction_Confirm_Delete, Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories); - if (deleteConfirmed) { - IStructuredSelection selection = getStructuredSelection(); - - // check for queries over this repository - Set queries = TasksUiInternal.getTaskList().getQueries(); - List repositoriesInUse = new ArrayList(); - List repositoriesToDelete = new ArrayList(); - for (Object selectedObject : selection.toList()) { - if (selectedObject instanceof TaskRepository) { - TaskRepository taskRepository = (TaskRepository) selectedObject; - if (queries != null && queries.size() > 0) { - for (IRepositoryQuery query : queries) { - if (query.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) { - repositoriesInUse.add(taskRepository); - break; - } - } - } - if (!repositoriesInUse.contains(taskRepository)) { - repositoriesToDelete.add(taskRepository); - } - } - } + // check for queries over this repository + Set queries = TasksUiInternal.getTaskList().getQueries(); + for (IRepositoryQuery query : queries) { + if (repositoryToDelete.getRepositoryUrl().equals(query.getRepositoryUrl()) + && repositoryToDelete.getConnectorKind().equals(query.getConnectorKind())) { + queriesToDelete.add(query); + } + } - // check for tasks from this repository - // bug 243975 - Collection tasks = TasksUiPlugin.getTaskList().getAllTasks(); - for (Object selectedObject : selection.toList()) { - if (selectedObject instanceof TaskRepository) { - TaskRepository taskRepository = (TaskRepository) selectedObject; - if (tasks != null && tasks.size() > 0) { - for (ITask task : tasks) { - if (task.getRepositoryUrl() != null - && task.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) { - repositoriesInUse.add(taskRepository); - break; + // check for tasks from this repository + final Set tasks = TasksUiPlugin.getTaskList().getTasks(repositoryToDelete.getRepositoryUrl()); + for (ITask task : tasks) { + if (repositoryToDelete.getRepositoryUrl().equals(task.getRepositoryUrl()) + && repositoryToDelete.getConnectorKind().equals(task.getConnectorKind())) { + tasksToDelete.add((AbstractTask) task); + } + } + + // confirm that the user wants to delete all tasks and queries that are associated + boolean deleteConfirmed = MessageDialog.openQuestion(TasksUiInternal.getShell(), + Messages.DeleteTaskRepositoryAction_Confirm_Delete, NLS.bind( + Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories, new Integer[] { + tasksToDelete.size(), queriesToDelete.size() })); + if (deleteConfirmed) { + ICoreRunnable op = new ICoreRunnable() { + public void run(IProgressMonitor monitor) throws CoreException { + try { + monitor.beginTask(Messages.DeleteTaskRepositoryAction_Delete_Repository_In_Progress, + IProgressMonitor.UNKNOWN); + TasksUiPlugin.getTaskList().run(new ITaskListRunnable() { + public void execute(IProgressMonitor monitor) throws CoreException { + // delete tasks + for (AbstractTask abstractTask : tasksToDelete) { + TasksUiPlugin.getTaskList().deleteTask(abstractTask); } + // delete queries + for (IRepositoryQuery query : queriesToDelete) { + TasksUiPlugin.getTaskList().deleteQuery((RepositoryQuery) query); + } + // delete repository + TasksUiPlugin.getRepositoryManager().removeRepository(repositoryToDelete, + TasksUiPlugin.getDefault().getRepositoriesFilePath()); + // if repository is contributed via template, ensure it isn't added again + TaskRepositoryUtil.disableAddAutomatically(repositoryToDelete.getRepositoryUrl()); } - } - if (repositoriesInUse.contains(taskRepository)) { - repositoriesToDelete.remove(taskRepository); - } + }, monitor); + } finally { + monitor.done(); } } - - for (TaskRepository taskRepository : repositoriesToDelete) { - TasksUiPlugin.getRepositoryManager().removeRepository(taskRepository, - TasksUiPlugin.getDefault().getRepositoriesFilePath()); - // if repository is contributed via template, ensure it isn't added again - TaskRepositoryUtil.disableAddAutomatically(taskRepository.getRepositoryUrl()); - } - - if (repositoriesInUse.size() > 0) { - MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), - Messages.DeleteTaskRepositoryAction_Repository_In_Use, - Messages.DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE); - } + }; + try { + CommonsUiUtil.busyCursorWhile(op); + } catch (CoreException e) { + Status status = new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, NLS.bind( + "Problems encountered deleting task repository: {0}", e.getMessage()), e); //$NON-NLS-1$ + TasksUiInternal.logAndDisplayStatus(Messages.DeleteTaskRepositoryAction_Delete_Task_Repository_Failed, + status); + } catch (OperationCanceledException e) { + // canceled } - } catch (Exception e) { - StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e)); } } } Index: src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties,v retrieving revision 1.6 diff -u -r1.6 messages.properties --- src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties 29 Jan 2009 20:52:17 -0000 1.6 +++ src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties 1 Feb 2009 04:19:49 -0000 @@ -44,7 +44,9 @@ DeleteTaskRepositoryAction_Confirm_Delete=Confirm Delete DeleteTaskRepositoryAction_Delete_Repository=Delete Repository -DeleteTaskRepositoryAction_Delete_the_selected_task_repositories=Delete the selected task repositories? +DeleteTaskRepositoryAction_Delete_Repository_In_Progress=Deleting repository and related artifacts +DeleteTaskRepositoryAction_Delete_the_selected_task_repositories=This repository is being used by {0} tasks and {1} queries. Do you wish to delete the repository, tasks, and queries? +DeleteTaskRepositoryAction_Delete_Task_Repository_Failed=Delete Task Repository Failed DeleteTaskRepositoryAction_Repository_In_Use=Repository In Use DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE=One or more of the selected repositories is being used by a query or a task and can not be deleted.