Lines 30-35
Link Here
|
30 |
import org.eclipse.jface.resource.ImageDescriptor; |
30 |
import org.eclipse.jface.resource.ImageDescriptor; |
31 |
import org.eclipse.mylyn.commons.core.StatusHandler; |
31 |
import org.eclipse.mylyn.commons.core.StatusHandler; |
32 |
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; |
32 |
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages; |
|
|
33 |
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager; |
33 |
import org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer; |
34 |
import org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer; |
34 |
import org.eclipse.mylyn.internal.tasks.ui.IDynamicSubMenuContributor; |
35 |
import org.eclipse.mylyn.internal.tasks.ui.IDynamicSubMenuContributor; |
35 |
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; |
36 |
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin; |
Lines 37-42
Link Here
|
37 |
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView; |
38 |
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView; |
38 |
import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector; |
39 |
import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector; |
39 |
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; |
40 |
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; |
|
|
41 |
import org.eclipse.mylyn.tasks.core.AbstractRepositoryMigrator; |
40 |
import org.eclipse.mylyn.tasks.core.AbstractTaskListMigrator; |
42 |
import org.eclipse.mylyn.tasks.core.AbstractTaskListMigrator; |
41 |
import org.eclipse.mylyn.tasks.core.RepositoryTemplate; |
43 |
import org.eclipse.mylyn.tasks.core.RepositoryTemplate; |
42 |
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; |
44 |
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi; |
Lines 57-67
Link Here
|
57 |
|
59 |
|
58 |
IConfigurationElement element; |
60 |
IConfigurationElement element; |
59 |
|
61 |
|
60 |
IConfigurationElement migratorElement; |
62 |
IConfigurationElement taskListMigratorElement; |
|
|
63 |
|
64 |
IConfigurationElement repositoryMigratorElement; |
61 |
|
65 |
|
62 |
AbstractRepositoryConnector repositoryConnector; |
66 |
AbstractRepositoryConnector repositoryConnector; |
63 |
|
67 |
|
64 |
AbstractTaskListMigrator migrator; |
68 |
AbstractTaskListMigrator taskListMigrator; |
|
|
69 |
|
70 |
AbstractRepositoryMigrator repositoryMigrator; |
65 |
|
71 |
|
66 |
private final String id; |
72 |
private final String id; |
67 |
|
73 |
|
Lines 94-111
Link Here
|
94 |
} |
100 |
} |
95 |
} |
101 |
} |
96 |
|
102 |
|
97 |
public IStatus createMigrator() { |
103 |
public IStatus createTaskListMigrator() { |
98 |
Assert.isTrue(migrator == null); |
104 |
Assert.isTrue(taskListMigrator == null); |
99 |
try { |
105 |
try { |
100 |
Object migratorObject = migratorElement.createExecutableExtension(ATTR_CLASS); |
106 |
Object migratorObject = taskListMigratorElement.createExecutableExtension(ATTR_CLASS); |
101 |
if (migratorObject instanceof AbstractTaskListMigrator) { |
107 |
if (migratorObject instanceof AbstractTaskListMigrator) { |
102 |
migrator = (AbstractTaskListMigrator) migratorObject; |
108 |
taskListMigrator = (AbstractTaskListMigrator) migratorObject; |
103 |
return Status.OK_STATUS; |
109 |
return Status.OK_STATUS; |
104 |
} else { |
110 |
} else { |
105 |
return new Status( |
111 |
return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, |
106 |
IStatus.ERROR, |
112 |
"Could not load task list migrator: " + migratorObject.getClass().getCanonicalName() //$NON-NLS-1$ |
107 |
TasksUiPlugin.ID_PLUGIN, |
|
|
108 |
"Could not load task list migrator migrator: " + migratorObject.getClass().getCanonicalName() //$NON-NLS-1$ |
109 |
+ " must implement " + AbstractTaskListMigrator.class.getCanonicalName()); //$NON-NLS-1$ |
113 |
+ " must implement " + AbstractTaskListMigrator.class.getCanonicalName()); //$NON-NLS-1$ |
110 |
} |
114 |
} |
111 |
} catch (Throwable e) { |
115 |
} catch (Throwable e) { |
Lines 114-119
Link Here
|
114 |
} |
118 |
} |
115 |
} |
119 |
} |
116 |
|
120 |
|
|
|
121 |
public IStatus createRepositoryMigrator() { |
122 |
Assert.isTrue(repositoryMigrator == null); |
123 |
try { |
124 |
Object migratorObject = repositoryMigratorElement.createExecutableExtension(ATTR_CLASS); |
125 |
if (migratorObject instanceof AbstractRepositoryMigrator) { |
126 |
repositoryMigrator = (AbstractRepositoryMigrator) migratorObject; |
127 |
return Status.OK_STATUS; |
128 |
} else { |
129 |
return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, |
130 |
"Could not load repository migrator: " + migratorObject.getClass().getCanonicalName() //$NON-NLS-1$ |
131 |
+ " must implement " + AbstractRepositoryMigrator.class.getCanonicalName()); //$NON-NLS-1$ |
132 |
} |
133 |
} catch (Throwable e) { |
134 |
return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN, |
135 |
"Could not load repository migrator extension", e); //$NON-NLS-1$ |
136 |
} |
137 |
} |
138 |
|
117 |
public String getPluginId() { |
139 |
public String getPluginId() { |
118 |
return element.getContributor().getName(); |
140 |
return element.getContributor().getName(); |
119 |
} |
141 |
} |
Lines 158-163
Link Here
|
158 |
|
180 |
|
159 |
public static final String ELMNT_MIGRATOR = "taskListMigrator"; //$NON-NLS-1$ |
181 |
public static final String ELMNT_MIGRATOR = "taskListMigrator"; //$NON-NLS-1$ |
160 |
|
182 |
|
|
|
183 |
public static final String ELMNT_REPOSITORY_MIGRATOR = "repositoryMigrator"; //$NON-NLS-1$ |
184 |
|
161 |
public static final String ATTR_BRANDING_ICON = "brandingIcon"; //$NON-NLS-1$ |
185 |
public static final String ATTR_BRANDING_ICON = "brandingIcon"; //$NON-NLS-1$ |
162 |
|
186 |
|
163 |
public static final String ATTR_OVERLAY_ICON = "overlayIcon"; //$NON-NLS-1$ |
187 |
public static final String ATTR_OVERLAY_ICON = "overlayIcon"; //$NON-NLS-1$ |
Lines 207-218
Link Here
|
207 |
*/ |
231 |
*/ |
208 |
private static Set<String> disabledContributors = new HashSet<String>(); |
232 |
private static Set<String> disabledContributors = new HashSet<String>(); |
209 |
|
233 |
|
210 |
public static void initStartupExtensions(TaskListExternalizer taskListExternalizer) { |
234 |
public static void initStartupExtensions(TaskListExternalizer taskListExternalizer, |
|
|
235 |
TaskRepositoryManager repositoryManager) { |
211 |
if (!coreExtensionsRead) { |
236 |
if (!coreExtensionsRead) { |
212 |
IExtensionRegistry registry = Platform.getExtensionRegistry(); |
237 |
IExtensionRegistry registry = Platform.getExtensionRegistry(); |
213 |
|
238 |
|
214 |
// NOTE: has to be read first, consider improving |
239 |
// NOTE: has to be read first, consider improving |
215 |
initConnectorCores(taskListExternalizer, registry); |
240 |
initConnectorCores(taskListExternalizer, repositoryManager, registry); |
216 |
|
241 |
|
217 |
IExtensionPoint templatesExtensionPoint = registry.getExtensionPoint(EXTENSION_TEMPLATES); |
242 |
IExtensionPoint templatesExtensionPoint = registry.getExtensionPoint(EXTENSION_TEMPLATES); |
218 |
IExtension[] templateExtensions = templatesExtensionPoint.getExtensions(); |
243 |
IExtension[] templateExtensions = templatesExtensionPoint.getExtensions(); |
Lines 256-262
Link Here
|
256 |
} |
281 |
} |
257 |
} |
282 |
} |
258 |
|
283 |
|
259 |
private static void initConnectorCores(TaskListExternalizer taskListExternalizer, IExtensionRegistry registry) { |
284 |
private static void initConnectorCores(TaskListExternalizer taskListExternalizer, |
|
|
285 |
TaskRepositoryManager repositoryManager, IExtensionRegistry registry) { |
260 |
List<ConnectorDescriptor> descriptors = new ArrayList<ConnectorDescriptor>(); |
286 |
List<ConnectorDescriptor> descriptors = new ArrayList<ConnectorDescriptor>(); |
261 |
MultiStatus result = new MultiStatus(TasksUiPlugin.ID_PLUGIN, 0, "Repository connectors failed to load.", null); //$NON-NLS-1$ |
287 |
MultiStatus result = new MultiStatus(TasksUiPlugin.ID_PLUGIN, 0, "Repository connectors failed to load.", null); //$NON-NLS-1$ |
262 |
|
288 |
|
Lines 267-282
Link Here
|
267 |
for (IExtension repositoryExtension : repositoryExtensions) { |
293 |
for (IExtension repositoryExtension : repositoryExtensions) { |
268 |
IConfigurationElement[] elements = repositoryExtension.getConfigurationElements(); |
294 |
IConfigurationElement[] elements = repositoryExtension.getConfigurationElements(); |
269 |
ConnectorDescriptor descriptor = null; |
295 |
ConnectorDescriptor descriptor = null; |
270 |
IConfigurationElement migratorElement = null; |
296 |
IConfigurationElement tasklistMigratorElement = null; |
|
|
297 |
IConfigurationElement repositoryMigratorElement = null; |
271 |
for (IConfigurationElement element : elements) { |
298 |
for (IConfigurationElement element : elements) { |
272 |
if (element.getName().equals(ELMNT_REPOSITORY_CONNECTOR)) { |
299 |
if (element.getName().equals(ELMNT_REPOSITORY_CONNECTOR)) { |
273 |
descriptor = new ConnectorDescriptor(element); |
300 |
descriptor = new ConnectorDescriptor(element); |
274 |
} else if (element.getName().equals(ELMNT_MIGRATOR)) { |
301 |
} else if (element.getName().equals(ELMNT_MIGRATOR)) { |
275 |
migratorElement = element; |
302 |
tasklistMigratorElement = element; |
|
|
303 |
} else if (element.getName().equals(ELMNT_REPOSITORY_MIGRATOR)) { |
304 |
repositoryMigratorElement = element; |
276 |
} |
305 |
} |
277 |
} |
306 |
} |
278 |
if (descriptor != null) { |
307 |
if (descriptor != null) { |
279 |
descriptor.migratorElement = migratorElement; |
308 |
descriptor.taskListMigratorElement = tasklistMigratorElement; |
|
|
309 |
descriptor.repositoryMigratorElement = repositoryMigratorElement; |
280 |
descriptors.add(descriptor); |
310 |
descriptors.add(descriptor); |
281 |
if (descriptor.getId() != null) { |
311 |
if (descriptor.getId() != null) { |
282 |
add(descriptorById, descriptor.getId(), descriptor); |
312 |
add(descriptorById, descriptor.getId(), descriptor); |
Lines 300-313
Link Here
|
300 |
checkForConflicts(descriptors, result, descriptorByConnectorKind); |
330 |
checkForConflicts(descriptors, result, descriptorByConnectorKind); |
301 |
|
331 |
|
302 |
// register connectors |
332 |
// register connectors |
303 |
List<AbstractTaskListMigrator> migrators = new ArrayList<AbstractTaskListMigrator>(); |
333 |
List<AbstractTaskListMigrator> taskListmigrators = new ArrayList<AbstractTaskListMigrator>(); |
|
|
334 |
List<AbstractRepositoryMigrator> repositoryMigrators = new ArrayList<AbstractRepositoryMigrator>(); |
304 |
for (ConnectorDescriptor descriptor : descriptors) { |
335 |
for (ConnectorDescriptor descriptor : descriptors) { |
305 |
if (descriptor.repositoryConnector != null) { |
336 |
if (descriptor.repositoryConnector != null) { |
306 |
TasksUiPlugin.getRepositoryManager().addRepositoryConnector(descriptor.repositoryConnector); |
337 |
repositoryManager.addRepositoryConnector(descriptor.repositoryConnector); |
307 |
if (descriptor.migratorElement != null) { |
338 |
if (descriptor.taskListMigratorElement != null) { |
308 |
IStatus status = descriptor.createMigrator(); |
339 |
IStatus status = descriptor.createTaskListMigrator(); |
309 |
if (status.isOK() && descriptor.migrator != null) { |
340 |
if (status.isOK() && descriptor.taskListMigrator != null) { |
310 |
migrators.add(descriptor.migrator); |
341 |
taskListmigrators.add(descriptor.taskListMigrator); |
|
|
342 |
} else { |
343 |
result.add(status); |
344 |
} |
345 |
} |
346 |
if (descriptor.repositoryMigratorElement != null) { |
347 |
IStatus status = descriptor.createRepositoryMigrator(); |
348 |
if (status.isOK() && descriptor.repositoryMigrator != null) { |
349 |
repositoryMigrators.add(descriptor.repositoryMigrator); |
311 |
} else { |
350 |
} else { |
312 |
result.add(status); |
351 |
result.add(status); |
313 |
} |
352 |
} |
Lines 319-325
Link Here
|
319 |
StatusHandler.log(result); |
358 |
StatusHandler.log(result); |
320 |
} |
359 |
} |
321 |
|
360 |
|
322 |
taskListExternalizer.initialize(migrators); |
361 |
repositoryManager.initialize(repositoryMigrators); |
|
|
362 |
taskListExternalizer.initialize(taskListmigrators); |
323 |
} |
363 |
} |
324 |
|
364 |
|
325 |
private static boolean isDisabled(IConfigurationElement element) { |
365 |
private static boolean isDisabled(IConfigurationElement element) { |