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 (-47 / +88 lines)
Lines 13-24 Link Here
13
13
14
import java.util.ArrayList;
14
import java.util.ArrayList;
15
import java.util.Collection;
15
import java.util.Collection;
16
import java.util.HashSet;
16
import java.util.List;
17
import java.util.List;
17
import java.util.Set;
18
import java.util.Set;
18
19
20
import org.eclipse.core.runtime.IProgressMonitor;
19
import org.eclipse.core.runtime.IStatus;
21
import org.eclipse.core.runtime.IStatus;
20
import org.eclipse.core.runtime.Status;
22
import org.eclipse.core.runtime.Status;
21
import org.eclipse.jface.dialogs.MessageDialog;
23
import org.eclipse.jface.dialogs.MessageDialog;
24
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
25
import org.eclipse.jface.operation.IRunnableWithProgress;
22
import org.eclipse.jface.viewers.IStructuredSelection;
26
import org.eclipse.jface.viewers.IStructuredSelection;
23
import org.eclipse.mylyn.commons.core.StatusHandler;
27
import org.eclipse.mylyn.commons.core.StatusHandler;
24
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
28
import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
Lines 29-34 Link Here
29
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
33
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
30
import org.eclipse.mylyn.tasks.core.ITask;
34
import org.eclipse.mylyn.tasks.core.ITask;
31
import org.eclipse.mylyn.tasks.core.TaskRepository;
35
import org.eclipse.mylyn.tasks.core.TaskRepository;
36
import org.eclipse.osgi.util.NLS;
32
import org.eclipse.ui.ISharedImages;
37
import org.eclipse.ui.ISharedImages;
33
import org.eclipse.ui.IViewPart;
38
import org.eclipse.ui.IViewPart;
34
import org.eclipse.ui.PlatformUI;
39
import org.eclipse.ui.PlatformUI;
Lines 58-126 Link Here
58
	public void run() {
63
	public void run() {
59
		try {
64
		try {
60
65
61
			boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench()
66
			IStructuredSelection selection = getStructuredSelection();
62
					.getActiveWorkbenchWindow()
67
			Object[] array = selection.toArray();
63
					.getShell(), Messages.DeleteTaskRepositoryAction_Confirm_Delete, Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories);
68
			if (array == null || array.length == 0 || array.length > 1) {
64
			if (deleteConfirmed) {
69
				return;
65
				IStructuredSelection selection = getStructuredSelection();
70
			}
66
71
67
				// check for queries over this repository
72
			final List<IRepositoryQuery> queriesToDelete = new ArrayList<IRepositoryQuery>();
68
				Set<RepositoryQuery> queries = TasksUiInternal.getTaskList().getQueries();
73
			final List<AbstractTask> tasksToDelete = new ArrayList<AbstractTask>();
69
				List<TaskRepository> repositoriesInUse = new ArrayList<TaskRepository>();
74
			final Set<TaskRepository> reposToDelete = new HashSet<TaskRepository>();
70
				List<TaskRepository> repositoriesToDelete = new ArrayList<TaskRepository>();
75
71
				for (Object selectedObject : selection.toList()) {
76
			// check for queries over this repository
72
					if (selectedObject instanceof TaskRepository) {
77
			Set<RepositoryQuery> queries = TasksUiInternal.getTaskList().getQueries();
73
						TaskRepository taskRepository = (TaskRepository) selectedObject;
78
			List<TaskRepository> repositoriesInUse = new ArrayList<TaskRepository>();
74
						if (queries != null && queries.size() > 0) {
79
			for (Object selectedObject : selection.toList()) {
75
							for (IRepositoryQuery query : queries) {
80
				if (selectedObject instanceof TaskRepository) {
76
								if (query.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) {
81
					TaskRepository taskRepository = (TaskRepository) selectedObject;
82
					if (queries != null && queries.size() > 0) {
83
						for (IRepositoryQuery query : queries) {
84
							if (query.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) {
85
								if (!repositoriesInUse.contains(taskRepository)) {
77
									repositoriesInUse.add(taskRepository);
86
									repositoriesInUse.add(taskRepository);
78
									break;
79
								}
87
								}
88
								queriesToDelete.add(query);
89
								reposToDelete.add(taskRepository);
80
							}
90
							}
81
						}
91
						}
82
						if (!repositoriesInUse.contains(taskRepository)) {
83
							repositoriesToDelete.add(taskRepository);
84
						}
85
					}
92
					}
86
				}
93
				}
94
			}
87
95
88
				// check for tasks from this repository
96
			// check for tasks from this repository
89
				// bug 243975
97
			// bug 243975
90
				Collection<AbstractTask> tasks = TasksUiPlugin.getTaskList().getAllTasks();
98
			final Collection<AbstractTask> tasks = TasksUiPlugin.getTaskList().getAllTasks();
91
				for (Object selectedObject : selection.toList()) {
99
			for (Object selectedObject : selection.toList()) {
92
					if (selectedObject instanceof TaskRepository) {
100
				if (selectedObject instanceof TaskRepository) {
93
						TaskRepository taskRepository = (TaskRepository) selectedObject;
101
					TaskRepository taskRepository = (TaskRepository) selectedObject;
94
						if (tasks != null && tasks.size() > 0) {
102
					if (tasks != null && tasks.size() > 0) {
95
							for (ITask task : tasks) {
103
						for (ITask task : tasks) {
96
								if (task.getRepositoryUrl() != null
104
							if (task.getRepositoryUrl() != null
97
										&& task.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) {
105
									&& task.getRepositoryUrl().equals(taskRepository.getRepositoryUrl())) {
98
									repositoriesInUse.add(taskRepository);
106
								reposToDelete.add(taskRepository);
99
									break;
107
								tasksToDelete.add((AbstractTask) task);
100
								}
101
							}
108
							}
102
						}
109
						}
103
						if (repositoriesInUse.contains(taskRepository)) {
104
							repositoriesToDelete.remove(taskRepository);
105
						}
106
					}
110
					}
107
				}
111
				}
112
			}
108
113
109
				for (TaskRepository taskRepository : repositoriesToDelete) {
114
			Integer[] numbs = new Integer[2];
110
					TasksUiPlugin.getRepositoryManager().removeRepository(taskRepository,
115
			numbs[0] = tasksToDelete.size();
111
							TasksUiPlugin.getDefault().getRepositoriesFilePath());
116
			numbs[1] = queriesToDelete.size();
112
					// if repository is contributed via template, ensure it isn't added again
117
			boolean deleteConfirmed = MessageDialog.openQuestion(PlatformUI.getWorkbench()
113
					TaskRepositoryUtil.disableAddAutomatically(taskRepository.getRepositoryUrl());
118
					.getActiveWorkbenchWindow()
114
				}
119
					.getShell(), Messages.DeleteTaskRepositoryAction_Confirm_Delete, NLS.bind(
115
120
					Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories, numbs));
116
				if (repositoriesInUse.size() > 0) {
121
			if (deleteConfirmed) {
117
					MessageDialog.openInformation(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(),
122
				ProgressMonitorDialog monitor = new ProgressMonitorDialog(PlatformUI.getWorkbench()
118
							Messages.DeleteTaskRepositoryAction_Repository_In_Use,
123
						.getActiveWorkbenchWindow()
119
							Messages.DeleteTaskRepositoryAction_Repository_In_Use_MESSAGE);
124
						.getShell());
120
				}
125
				IRunnableWithProgress op = new IRunnableWithProgress() {
126
					public void run(IProgressMonitor monitor) {
127
						monitor.beginTask(Messages.DeleteTaskRepositoryAction_Delete_the_selected_task_repositories,
128
								tasks.size());
129
						//delete the tasks
130
						for (AbstractTask abstractTask : tasksToDelete) {
131
							TasksUiPlugin.getTaskList().deleteTask(abstractTask);
132
							if (monitor.isCanceled()) {
133
								return;
134
							}
135
							monitor.worked(1);
136
						}
137
						//delete the queries
138
						for (IRepositoryQuery query : queriesToDelete) {
139
							TasksUiPlugin.getTaskList().deleteQuery((RepositoryQuery) query);
140
						}
141
						//delete the repo
142
						for (TaskRepository taskRepository : reposToDelete) {
143
							TasksUiPlugin.getRepositoryManager().removeRepository(taskRepository,
144
									TasksUiPlugin.getDefault().getRepositoriesFilePath());
145
							// if repository is contributed via template, ensure it isn't added again
146
							TaskRepositoryUtil.disableAddAutomatically(taskRepository.getRepositoryUrl());
147
						}
148
					}
149
				};
150
				monitor.run(false, true, op);
121
			}
151
			}
122
		} catch (Exception e) {
152
		} catch (Exception e) {
123
			StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e));
153
			StatusHandler.fail(new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, e.getMessage(), e));
124
		}
154
		}
125
	}
155
	}
156
157
	@Override
158
	protected boolean updateSelection(IStructuredSelection selection) {
159
		if (selection != null && !selection.isEmpty()) {
160
			Object[] array = selection.toArray();
161
			if (!(array.length == 0 || array.length > 1)) {
162
				return getTaskRepository(selection.getFirstElement()) != null;
163
			}
164
		}
165
		return false;
166
	}
126
}
167
}
(-)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
(-)src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java (-1 / +1 lines)
Lines 256-262 Link Here
256
256
257
	private void fillContextMenu(IMenuManager manager) {
257
	private void fillContextMenu(IMenuManager manager) {
258
		manager.add(addRepositoryAction);
258
		manager.add(addRepositoryAction);
259
		manager.add(new Separator());
259
		manager.add(new Separator("repositoryconfig"));
260
		manager.add(deleteRepositoryAction);
260
		manager.add(deleteRepositoryAction);
261
		manager.add(resetConfigurationAction);
261
		manager.add(resetConfigurationAction);
262
		manager.add(new Separator());
262
		manager.add(new Separator());

Return to bug 246149