### 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 00:20:23 -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 00:20:23 -0000 @@ -13,12 +13,16 @@ import java.util.ArrayList; import java.util.Collection; +import java.util.HashSet; 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 +33,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; @@ -58,69 +63,105 @@ public void run() { try { - boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench() - .getActiveWorkbenchWindow() - .getShell(), Messages.DeleteTaskRepositoryAction_Confirm_Delete, Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories); - if (deleteConfirmed) { - IStructuredSelection selection = getStructuredSelection(); + IStructuredSelection selection = getStructuredSelection(); + Object[] array = selection.toArray(); + if (array == null || array.length != 1) { + return; + } - // 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())) { + final List queriesToDelete = new ArrayList(); + final List tasksToDelete = new ArrayList(); + final Set reposToDelete = new HashSet(); + + // check for queries over this repository + Set queries = TasksUiInternal.getTaskList().getQueries(); + List repositoriesInUse = 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())) { + if (!repositoriesInUse.contains(taskRepository)) { repositoriesInUse.add(taskRepository); - break; } + queriesToDelete.add(query); + reposToDelete.add(taskRepository); } } - if (!repositoriesInUse.contains(taskRepository)) { - repositoriesToDelete.add(taskRepository); - } } } + } - // 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 + // bug 243975 + final 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())) { + reposToDelete.add(taskRepository); + tasksToDelete.add((AbstractTask) task); } } - if (repositoriesInUse.contains(taskRepository)) { - repositoriesToDelete.remove(taskRepository); - } } } + } - 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); - } + Integer[] numbs = new Integer[2]; + numbs[0] = tasksToDelete.size(); + numbs[1] = queriesToDelete.size(); + boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench() + .getActiveWorkbenchWindow() + .getShell(), Messages.DeleteTaskRepositoryAction_Confirm_Delete, NLS.bind( + Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories, numbs)); + if (deleteConfirmed) { + ProgressMonitorDialog monitor = new ProgressMonitorDialog(PlatformUI.getWorkbench() + .getActiveWorkbenchWindow() + .getShell()); + IRunnableWithProgress op = new IRunnableWithProgress() { + public void run(IProgressMonitor monitor) { + 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); + } + //delete the queries + for (IRepositoryQuery query : queriesToDelete) { + TasksUiPlugin.getTaskList().deleteQuery((RepositoryQuery) query); + } + //delete the repo + for (TaskRepository taskRepository : reposToDelete) { + TasksUiPlugin.getRepositoryManager().removeRepository(taskRepository, + TasksUiPlugin.getDefault().getRepositoriesFilePath()); + // if repository is contributed via template, ensure it isn't added again + TaskRepositoryUtil.disableAddAutomatically(taskRepository.getRepositoryUrl()); + } + } + }; + monitor.run(false, true, 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 == 0 || 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 00:20:23 -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 Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java,v retrieving revision 1.38 diff -u -r1.38 TaskRepositoriesView.java --- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java 4 Jan 2009 16:21:54 -0000 1.38 +++ src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java 30 Jan 2009 00:20:23 -0000 @@ -256,7 +256,7 @@ private void fillContextMenu(IMenuManager manager) { manager.add(addRepositoryAction); - manager.add(new Separator()); + manager.add(new Separator("repositoryconfig")); manager.add(deleteRepositoryAction); manager.add(resetConfigurationAction); manager.add(new Separator());