### 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 30 Jan 2009 17:24:09 -0000 @@ -103,6 +103,8 @@ public static String DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE; + public static String DeleteTaskRepositoryAction_Delete_Repository_In_Progress; + 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 30 Jan 2009 17:24:08 -0000 @@ -12,13 +12,15 @@ 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.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Status; import org.eclipse.jface.dialogs.MessageDialog; +import org.eclipse.jface.dialogs.ProgressMonitorDialog; +import org.eclipse.jface.operation.IRunnableWithProgress; import org.eclipse.jface.viewers.IStructuredSelection; import org.eclipse.mylyn.commons.core.StatusHandler; import org.eclipse.mylyn.internal.tasks.core.AbstractTask; @@ -29,6 +31,7 @@ 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; @@ -57,70 +60,96 @@ @Override public void run() { try { + //verify that only one repository is selected + IStructuredSelection selection = getStructuredSelection(); + Object[] selectedRepos = selection.toArray(); + if (selectedRepos == null || selectedRepos.length != 1) { + return; + } + //setup variables that store all artifacts to delete + final List queriesToDelete = new ArrayList(); + final List tasksToDelete = new ArrayList(); + if (!(selectedRepos[0] instanceof TaskRepository)) { + return; + } + final TaskRepository repoToDelete = ((TaskRepository) selectedRepos[0]); - 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(); + if (queries != null && queries.size() > 0) { + for (IRepositoryQuery query : queries) { + if (query.getRepositoryUrl().equals(repoToDelete.getRepositoryUrl())) { + queriesToDelete.add(query); + } + } + } - // 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 tasks from this repository + // bug 243975 + final Set tasks = TasksUiPlugin.getTaskList().getTasks(repoToDelete.getRepositoryUrl()); + if (tasks != null && tasks.size() > 0) { + for (ITask task : tasks) { + if (task.getRepositoryUrl() != null + && task.getRepositoryUrl().equals(repoToDelete.getRepositoryUrl())) { + tasksToDelete.add((AbstractTask) task); } } + } + + //confirm that the user wants to delete all tasks and queries that are associated + Integer[] quantities = { tasksToDelete.size(), queriesToDelete.size() }; + boolean deleteConfirmed = MessageDialog.openQuestion(TasksUiInternal.getShell(), + Messages.DeleteTaskRepositoryAction_Confirm_Delete, NLS.bind( + Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories, quantities)); - // 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; + //delete everything + if (deleteConfirmed) { + ProgressMonitorDialog monitor = new ProgressMonitorDialog(PlatformUI.getWorkbench() + .getActiveWorkbenchWindow() + .getShell()); + IRunnableWithProgress op = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) { + try { + monitor.beginTask( + Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories, + tasks.size()); + //delete the tasks + for (AbstractTask abstractTask : tasksToDelete) { + TasksUiPlugin.getTaskList().deleteTask(abstractTask); + if (monitor.isCanceled()) { + return; } + monitor.worked(1); } - } - if (repositoriesInUse.contains(taskRepository)) { - repositoriesToDelete.remove(taskRepository); + //delete the queries + for (IRepositoryQuery query : queriesToDelete) { + TasksUiPlugin.getTaskList().deleteQuery((RepositoryQuery) query); + } + //delete the repo + TasksUiPlugin.getRepositoryManager().removeRepository(repoToDelete, + TasksUiPlugin.getDefault().getRepositoriesFilePath()); + // if repository is contributed via template, ensure it isn't added again + TaskRepositoryUtil.disableAddAutomatically(repoToDelete.getRepositoryUrl()); + } 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); - } + }; + PlatformUI.getWorkbench().getProgressService().busyCursorWhile(op); } } catch (Exception e) { StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e)); } } + + @Override + protected boolean updateSelection(IStructuredSelection selection) { + if (selection != null && !selection.isEmpty()) { + Object[] array = selection.toArray(); + if (!(array.length == 1)) { + return getTaskRepository(selection.getFirstElement()) != null; + } + } + return false; + } } 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 30 Jan 2009 17:24:09 -0000 @@ -44,10 +44,12 @@ 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} task(s) and {1} queries. Would you like to delete the repository, tasks, and queries? 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. + EditRepositoryPropertiesAction_Properties=Properties ExpandAllAction_Expand_All=Expand All