View | Details | Raw Unified | Return to bug 246149 | Differences between
and this patch

Collapse All | Expand All

(-)src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java (+2 lines)
Lines 103-108 Link Here
103
103
104
	public static String DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE;
104
	public static String DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE;
105
105
106
	public static String DeleteTaskRepositoryAction_Delete_Repository_In_Progress;
107
106
	public static String EditRepositoryPropertiesAction_Properties;
108
	public static String EditRepositoryPropertiesAction_Properties;
107
109
108
	public static String ExpandAllAction_Expand_All;
110
	public static String ExpandAllAction_Expand_All;
(-)src/org/eclipse/mylyn/internal/tasks/ui/actions/DeleteTaskRepositoryAction.java (-53 / +82 lines)
Lines 12-24 Link Here
12
package org.eclipse.mylyn.internal.tasks.ui.actions;
12
package org.eclipse.mylyn.internal.tasks.ui.actions;
13
13
14
import java.util.ArrayList;
14
import java.util.ArrayList;
15
import java.util.Collection;
16
import java.util.List;
15
import java.util.List;
17
import java.util.Set;
16
import java.util.Set;
18
17
18
import org.eclipse.core.runtime.IProgressMonitor;
19
import org.eclipse.core.runtime.IStatus;
19
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.core.runtime.Status;
20
import org.eclipse.core.runtime.Status;
21
import org.eclipse.jface.dialogs.MessageDialog;
21
import org.eclipse.jface.dialogs.MessageDialog;
22
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
23
import org.eclipse.jface.operation.IRunnableWithProgress;
22
import org.eclipse.jface.viewers.IStructuredSelection;
24
import org.eclipse.jface.viewers.IStructuredSelection;
23
import org.eclipse.mylyn.commons.core.StatusHandler;
25
import org.eclipse.mylyn.commons.core.StatusHandler;
24
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
26
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
Lines 29-34 Link Here
29
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
31
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
30
import org.eclipse.mylyn.tasks.core.ITask;
32
import org.eclipse.mylyn.tasks.core.ITask;
31
import org.eclipse.mylyn.tasks.core.TaskRepository;
33
import org.eclipse.mylyn.tasks.core.TaskRepository;
34
import org.eclipse.osgi.util.NLS;
32
import org.eclipse.ui.ISharedImages;
35
import org.eclipse.ui.ISharedImages;
33
import org.eclipse.ui.IViewPart;
36
import org.eclipse.ui.IViewPart;
34
import org.eclipse.ui.PlatformUI;
37
import org.eclipse.ui.PlatformUI;
Lines 57-126 Link Here
57
	@Override
60
	@Override
58
	public void run() {
61
	public void run() {
59
		try {
62
		try {
63
			//verify that only one repository is selected
64
			IStructuredSelection selection = getStructuredSelection();
65
			Object[] selectedRepos = selection.toArray();
66
			if (selectedRepos == null || selectedRepos.length != 1) {
67
				return;
68
			}
69
			//setup variables that store all artifacts to delete
70
			final List<IRepositoryQuery> queriesToDelete = new ArrayList<IRepositoryQuery>();
71
			final List<AbstractTask> tasksToDelete = new ArrayList<AbstractTask>();
72
			if (!(selectedRepos[0] instanceof TaskRepository)) {
73
				return;
74
			}
75
			final TaskRepository repoToDelete = ((TaskRepository) selectedRepos[0]);
60
76
61
			boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench()
77
			// check for queries over this repository			
62
					.getActiveWorkbenchWindow()
78
			Set<RepositoryQuery> queries = TasksUiInternal.getTaskList().getQueries();
63
					.getShell(), Messages.DeleteTaskRepositoryAction_Confirm_Delete, Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories);
79
			if (queries != null && queries.size() > 0) {
64
			if (deleteConfirmed) {
80
				for (IRepositoryQuery query : queries) {
65
				IStructuredSelection selection = getStructuredSelection();
81
					if (query.getRepositoryUrl().equals(repoToDelete.getRepositoryUrl())) {
82
						queriesToDelete.add(query);
83
					}
84
				}
85
			}
66
86
67
				// check for queries over this repository
87
			// check for tasks from this repository
68
				Set<RepositoryQuery> queries = TasksUiInternal.getTaskList().getQueries();
88
			// bug 243975
69
				List<TaskRepository> repositoriesInUse = new ArrayList<TaskRepository>();
89
			final Set<ITask> tasks = TasksUiPlugin.getTaskList().getTasks(repoToDelete.getRepositoryUrl());
70
				List<TaskRepository> repositoriesToDelete = new ArrayList<TaskRepository>();
90
			if (tasks != null && tasks.size() > 0) {
71
				for (Object selectedObject : selection.toList()) {
91
				for (ITask task : tasks) {
72
					if (selectedObject instanceof TaskRepository) {
92
					if (task.getRepositoryUrl() != null
73
						TaskRepository taskRepository = (TaskRepository) selectedObject;
93
							&& task.getRepositoryUrl().equals(repoToDelete.getRepositoryUrl())) {
74
						if (queries != null && queries.size() > 0) {
94
						tasksToDelete.add((AbstractTask) task);
75
							for (IRepositoryQuery query : queries) {
76
								if (query.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) {
77
									repositoriesInUse.add(taskRepository);
78
									break;
79
								}
80
							}
81
						}
82
						if (!repositoriesInUse.contains(taskRepository)) {
83
							repositoriesToDelete.add(taskRepository);
84
						}
85
					}
95
					}
86
				}
96
				}
97
			}
98
99
			//confirm that the user wants to delete all tasks and queries that are associated
100
			Integer[] quantities = { tasksToDelete.size(), queriesToDelete.size() };
101
			boolean deleteConfirmed = MessageDialog.openQuestion(TasksUiInternal.getShell(),
102
					Messages.DeleteTaskRepositoryAction_Confirm_Delete, NLS.bind(
103
							Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories, quantities));
87
104
88
				// check for tasks from this repository
105
			//delete everything
89
				// bug 243975
106
			if (deleteConfirmed) {
90
				Collection<AbstractTask> tasks = TasksUiPlugin.getTaskList().getAllTasks();
107
				ProgressMonitorDialog monitor = new ProgressMonitorDialog(PlatformUI.getWorkbench()
91
				for (Object selectedObject : selection.toList()) {
108
						.getActiveWorkbenchWindow()
92
					if (selectedObject instanceof TaskRepository) {
109
						.getShell());
93
						TaskRepository taskRepository = (TaskRepository) selectedObject;
110
				IRunnableWithProgress op = new IRunnableWithProgress() {
94
						if (tasks != null && tasks.size() > 0) {
111
					public void run(IProgressMonitor monitor) {
95
							for (ITask task : tasks) {
112
						try {
96
								if (task.getRepositoryUrl() != null
113
							monitor.beginTask(
97
										&& task.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) {
114
									Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories,
98
									repositoriesInUse.add(taskRepository);
115
									tasks.size());
99
									break;
116
							//delete the tasks
117
							for (AbstractTask abstractTask : tasksToDelete) {
118
								TasksUiPlugin.getTaskList().deleteTask(abstractTask);
119
								if (monitor.isCanceled()) {
120
									return;
100
								}
121
								}
122
								monitor.worked(1);
101
							}
123
							}
102
						}
124
							//delete the queries
103
						if (repositoriesInUse.contains(taskRepository)) {
125
							for (IRepositoryQuery query : queriesToDelete) {
104
							repositoriesToDelete.remove(taskRepository);
126
								TasksUiPlugin.getTaskList().deleteQuery((RepositoryQuery) query);
127
							}
128
							//delete the repo
129
							TasksUiPlugin.getRepositoryManager().removeRepository(repoToDelete,
130
									TasksUiPlugin.getDefault().getRepositoriesFilePath());
131
							// if repository is contributed via template, ensure it isn't added again
132
							TaskRepositoryUtil.disableAddAutomatically(repoToDelete.getRepositoryUrl());
133
						} finally {
134
							monitor.done();
105
						}
135
						}
106
					}
136
					}
107
				}
137
				};
108
138
				PlatformUI.getWorkbench().getProgressService().busyCursorWhile(op);
109
				for (TaskRepository taskRepository : repositoriesToDelete) {
110
					TasksUiPlugin.getRepositoryManager().removeRepository(taskRepository,
111
							TasksUiPlugin.getDefault().getRepositoriesFilePath());
112
					// if repository is contributed via template, ensure it isn't added again
113
					TaskRepositoryUtil.disableAddAutomatically(taskRepository.getRepositoryUrl());
114
				}
115
116
				if (repositoriesInUse.size() > 0) {
117
					MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
118
							Messages.DeleteTaskRepositoryAction_Repository_In_Use,
119
							Messages.DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE);
120
				}
121
			}
139
			}
122
		} catch (Exception e) {
140
		} catch (Exception e) {
123
			StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e));
141
			StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e));
124
		}
142
		}
125
	}
143
	}
144
145
	@Override
146
	protected boolean updateSelection(IStructuredSelection selection) {
147
		if (selection != null && !selection.isEmpty()) {
148
			Object[] array = selection.toArray();
149
			if (!(array.length == 1)) {
150
				return getTaskRepository(selection.getFirstElement()) != null;
151
			}
152
		}
153
		return false;
154
	}
126
}
155
}
(-)src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties (-1 / +3 lines)
Lines 44-53 Link Here
44
44
45
DeleteTaskRepositoryAction_Confirm_Delete=Confirm Delete
45
DeleteTaskRepositoryAction_Confirm_Delete=Confirm Delete
46
DeleteTaskRepositoryAction_Delete_Repository=Delete Repository
46
DeleteTaskRepositoryAction_Delete_Repository=Delete Repository
47
DeleteTaskRepositoryAction_Delete_the_selected_task_repositories=Delete the selected task repositories?
47
DeleteTaskRepositoryAction_Delete_Repository_In_Progress=Deleting Repository and related artifacts..
48
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?
48
DeleteTaskRepositoryAction_Repository_In_Use=Repository In Use
49
DeleteTaskRepositoryAction_Repository_In_Use=Repository In Use
49
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.
50
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.
50
51
52
51
EditRepositoryPropertiesAction_Properties=Properties
53
EditRepositoryPropertiesAction_Properties=Properties
52
54
53
ExpandAllAction_Expand_All=Expand All
55
ExpandAllAction_Expand_All=Expand All

Return to bug 246149