### 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.24
diff -u -r1.24 Messages.java
--- src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java 17 Apr 2010 06:13:51 -0000 1.24
+++ src/org/eclipse/mylyn/internal/tasks/ui/actions/Messages.java 25 May 2010 18:33:09 -0000
@@ -37,7 +37,7 @@
public static String AddRepositoryAction_Add_a_query_to_the_Task_List;
- public static String AddRepositoryAction_Add_Task_Repository;
+ public static String AddRepositoryAction_Add_Team_Repository;
public static String AddRepositoryAction_Do_not_show_again;
Index: src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java,v
retrieving revision 1.24
diff -u -r1.24 AddRepositoryAction.java
--- src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java 5 Jun 2009 14:28:35 -0000 1.24
+++ src/org/eclipse/mylyn/internal/tasks/ui/actions/AddRepositoryAction.java 25 May 2010 18:33:09 -0000
@@ -45,7 +45,7 @@
private static final String ID = "org.eclipse.mylyn.tasklist.repositories.add"; //$NON-NLS-1$
- public static final String TITLE = Messages.AddRepositoryAction_Add_Task_Repository;
+ public static final String TITLE = Messages.AddRepositoryAction_Add_Team_Repository;
private boolean promptToAddQuery = true;
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.29
diff -u -r1.29 messages.properties
--- src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties 19 May 2010 20:29:46 -0000 1.29
+++ src/org/eclipse/mylyn/internal/tasks/ui/actions/messages.properties 25 May 2010 18:33:09 -0000
@@ -17,7 +17,7 @@
AddRepositoryAction_Add_new_query=Add new query
AddRepositoryAction_Add_a_query_to_the_Task_List=Would you like to add a query to the Task List for this repository?
-AddRepositoryAction_Add_Task_Repository=Add Task Repository...
+AddRepositoryAction_Add_Team_Repository=Add Repository...
AddRepositoryAction_Do_not_show_again=Do not show again
AutoUpdateQueryAction_Synchronize_Automatically_Label=Synchronize Automatically
@@ -56,7 +56,7 @@
DeleteAction_Delete_task_from_task_list_context_planning_deleted=Delete the following task from the Task List? Contexts and planning information will be deleted for the selected task. The server copy will not be deleted and the task will remain in queries that match it if it is not deleted from the repository.
DeleteAction_Delete_tasks_from_task_list_context_planning_deleted=Delete the following tasks from the Task List? Contexts and planning information will be deleted for the selected tasks. The server copy will not be deleted and the tasks will remain in queries that match it if it is not deleted from the repository.
DeleteAction_Delete_the_planning_information_and_context_of_all_unmatched_tasks=Delete the planning information and context of all unmatched tasks? The server copy of these tasks will not be deleted and the task will remain in queries that match it.
-DeleteAction_Deleting_tasks_from_repositories=Deleting Tasks from Task Repositories
+DeleteAction_Deleting_tasks_from_repositories=Deleting Tasks from Team Repositories
DeleteAction_Not_supported=(not supported)
DeleteAction_Nothing_selected=Nothing selected.
DeleteAction_Permanently_delete_from_task_list=Permanently delete the following task from the Task List?
@@ -67,11 +67,11 @@
DeleteTaskEditorAction_Delete_Task=Delete Task
DeleteTaskRepositoryAction_Confirm_Delete=Confirm Delete
-DeleteTaskRepositoryAction_Delete_Specific_Task_Repository=Are you sure you want to delete task repository "{0}"?
+DeleteTaskRepositoryAction_Delete_Specific_Task_Repository=Are you sure you want to delete team repository "{0}"?
DeleteTaskRepositoryAction_Delete_Repository=Delete Repository
DeleteTaskRepositoryAction_Delete_Repository_In_Progress=Deleting repository and related artifacts
DeleteTaskRepositoryAction_Delete_the_selected_task_repositories=This repository is being used by {0} tasks and {1} queries. Do you wish to delete the repository, tasks, and queries?
-DeleteTaskRepositoryAction_Delete_Task_Repository_Failed=Delete Task Repository Failed
+DeleteTaskRepositoryAction_Delete_Task_Repository_Failed=Delete Team Repository Failed
EditRepositoryPropertiesAction_Properties=Properties
Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoryLabelProvider.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoryLabelProvider.java,v
retrieving revision 1.24
diff -u -r1.24 TaskRepositoryLabelProvider.java
--- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoryLabelProvider.java 13 Jan 2009 07:07:36 -0000 1.24
+++ src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoryLabelProvider.java 25 May 2010 18:33:09 -0000
@@ -14,6 +14,7 @@
import org.eclipse.jface.viewers.ILabelProvider;
import org.eclipse.jface.viewers.ILabelProviderListener;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
+import org.eclipse.mylyn.internal.tasks.core.Category;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.actions.DisconnectRepositoryAction;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
@@ -37,7 +38,9 @@
}
public Image getImage(Object object) {
- if (object instanceof AbstractRepositoryConnector) {
+ if (object instanceof Category) {
+ return CommonImages.getImage(TasksUiImages.CATEGORY);
+ } else if (object instanceof AbstractRepositoryConnector) {
AbstractRepositoryConnector repositoryConnector = (AbstractRepositoryConnector) object;
Image image = TasksUiPlugin.getDefault().getBrandingIcon(repositoryConnector.getConnectorKind());
if (image != null) {
@@ -67,6 +70,8 @@
return label.toString();
} else if (object instanceof AbstractRepositoryConnector) {
return ((AbstractRepositoryConnector) object).getLabel();
+ } else if (object instanceof Category) {
+ return ((Category) object).getLabel();
} else {
return null;
}
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.44
diff -u -r1.44 TaskRepositoriesView.java
--- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java 13 Oct 2009 01:11:06 -0000 1.44
+++ src/org/eclipse/mylyn/internal/tasks/ui/views/TaskRepositoriesView.java 25 May 2010 18:33:09 -0000
@@ -22,12 +22,13 @@
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.DoubleClickEvent;
import org.eclipse.jface.viewers.IDoubleClickListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.internal.tasks.core.Category;
import org.eclipse.mylyn.internal.tasks.core.IRepositoryModelListener;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryAdapter;
+import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.actions.AddRepositoryAction;
import org.eclipse.mylyn.internal.tasks.ui.actions.DeleteTaskRepositoryAction;
@@ -50,6 +51,7 @@
import org.eclipse.ui.handlers.IHandlerService;
import org.eclipse.ui.part.ViewPart;
import org.eclipse.ui.texteditor.IWorkbenchActionDefinitionIds;
+import org.eclipse.ui.themes.IThemeManager;
/**
* @author Mik Kersten
@@ -62,7 +64,7 @@
@Deprecated
public static final String ID = ITasksUiConstants.ID_VIEW_REPOSITORIES;
- private TableViewer viewer;
+ private TreeViewer viewer;
private final Action addRepositoryAction = new AddRepositoryAction();
@@ -121,20 +123,13 @@
}
};
- static class ViewContentProvider implements IStructuredContentProvider {
- public void inputChanged(Viewer v, Object oldInput, Object newInput) {
- }
-
- public void dispose() {
- }
+ private final TaskRepositoryManager manager;
- public Object[] getElements(Object parent) {
- return TasksUi.getRepositoryManager().getAllRepositories().toArray();
- }
- }
+ private TeamRepositoriesContentProvider contentProvider;
public TaskRepositoriesView() {
- TasksUi.getRepositoryManager().addListener(REPOSITORY_LISTENER);
+ manager = ((TaskRepositoryManager) TasksUi.getRepositoryManager());
+ manager.addListener(REPOSITORY_LISTENER);
TasksUiPlugin.getDefault().addModelListener(MODEL_LISTENER);
}
@@ -172,27 +167,17 @@
@Override
public void createPartControl(Composite parent) {
- viewer = new TableViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
- viewer.setContentProvider(new ViewContentProvider());
+ contentProvider = new TeamRepositoriesContentProvider();
+ viewer = new TreeViewer(parent, SWT.MULTI | SWT.H_SCROLL | SWT.V_SCROLL | SWT.FULL_SELECTION);
+ viewer.setContentProvider(contentProvider);
viewer.setUseHashlookup(true);
+ ViewerFilter[] filters = { new EmptyCategoriesFilter(contentProvider) };
+ viewer.setFilters(filters);
viewer.setLabelProvider(new DecoratingLabelProvider(new TaskRepositoryLabelProvider(),
PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
- viewer.setSorter(new TaskRepositoriesSorter());
+ viewer.setSorter(new TaskRepositoriesViewSorter());
-// new ViewerSorter() {
-//
-// @Override
-// public int compare(Viewer viewer, Object e1, Object e2) {
-// if (e1 instanceof TaskRepository && e2 instanceof TaskRepository) {
-// TaskRepository t1 = (TaskRepository) e1;
-// TaskRepository t2 = (TaskRepository) e2;
-// return (t1.getKind() + t1.getUrl()).compareTo(t2.getKind() + t2.getUrl());
-// } else {
-// return super.compare(viewer, e1, e2);
-// }
-// }
-// });
viewer.setInput(getViewSite());
viewer.addDoubleClickListener(new IDoubleClickListener() {
public void doubleClick(DoubleClickEvent event) {
@@ -208,13 +193,19 @@
}
});
- // FIXME remove listener when view is disposed
- TasksUi.getRepositoryManager().addListener(new TaskRepositoryListener());
+ final IThemeManager themeManager = getSite().getWorkbenchWindow().getWorkbench().getThemeManager();
+ new GradientDrawer(themeManager, getViewer()) {
+ @Override
+ protected boolean shouldApplyGradient(org.eclipse.swt.widgets.Event event) {
+ return event.item.getData() instanceof Category;
+ }
+ };
makeActions();
hookContextMenu();
hookGlobalActions();
contributeToActionBars();
+ getViewer().expandAll();
getSite().setSelectionProvider(getViewer());
}
@@ -288,28 +279,12 @@
public void refresh() {
if (viewer != null && !viewer.getControl().isDisposed()) {
viewer.refresh();
+ viewer.expandAll();
}
}
- public TableViewer getViewer() {
+ public TreeViewer getViewer() {
return viewer;
}
- public class TaskRepositoryListener extends TaskRepositoryAdapter {
-
- @Override
- public void repositorySettingsChanged(TaskRepository repository) {
- if (PlatformUI.isWorkbenchRunning() && !PlatformUI.getWorkbench().getDisplay().isDisposed()) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- if (!getViewer().getControl().isDisposed()) {
- getViewer().refresh(true);
- }
- }
- });
- }
- }
-
- }
-
}
Index: src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java,v
retrieving revision 1.1
diff -u -r1.1 GradientDrawer.java
--- src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java 1 Mar 2010 21:44:18 -0000 1.1
+++ src/org/eclipse/mylyn/internal/tasks/ui/views/GradientDrawer.java 25 May 2010 18:33:09 -0000
@@ -40,7 +40,7 @@
private final Listener CATEGORY_GRADIENT_DRAWER = new Listener() {
public void handleEvent(Event event) {
- if (event.item.getData() instanceof ITaskContainer && !(event.item.getData() instanceof ITask)) {
+ if (shouldApplyGradient(event)) {
Scrollable scrollable = (Scrollable) event.widget;
GC gc = event.gc;
@@ -99,6 +99,10 @@
}
};
+ protected boolean shouldApplyGradient(Event event) {
+ return event.item.getData() instanceof ITaskContainer && !(event.item.getData() instanceof ITask);
+ }
+
private final IPropertyChangeListener THEME_CHANGE_LISTENER = new IPropertyChangeListener() {
public void propertyChange(PropertyChangeEvent event) {
if (event.getProperty().equals(IThemeManager.CHANGE_CURRENT_THEME)
Index: plugin.properties
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/plugin.properties,v
retrieving revision 1.11
diff -u -r1.11 plugin.properties
--- plugin.properties 24 May 2010 02:34:11 -0000 1.11
+++ plugin.properties 25 May 2010 18:33:09 -0000
@@ -25,7 +25,7 @@
views.category.name = Tasks
TaskListView.name = Task List
-TaskRepositoriesView.name = Task Repositories
+TaskRepositoriesView.name = Team Repositories
newWizards.category.name = Tasks
NewLocalCategoryWizard.name = Category
@@ -49,8 +49,8 @@
SynchronizeAllAction.label = Synchronize Changed
SynchronizeAllAction.tooltip = Synchronize Changed
RestoreTaskListAction.label = Restore Tasks from History...
-ShowTaskRepositoriesViewAction.label = Show Task Repositories View
-ShowTaskRepositoriesViewAction.tooltip = Show Task Repositories View
+ShowTaskRepositoriesViewAction.label = Show Team Repositories View
+ShowTaskRepositoriesViewAction.tooltip = Show Team Repositories View
OpenTaskSearchAction.label = Search Repository...
NewTaskAction.label = New Task
NewTaskAction.tooltip = New Task
@@ -144,10 +144,10 @@
command.deactivateAllTasks.name = Deactivate Task
TaskSearchPage.label = Task Search
-ProjectTaskRepositoryPage.name = Task Repository
+ProjectTaskRepositoryPage.name = Team Repository
-commands.category.repositories.name = Task Repositories
-command.addTaskRepository.name = Add Task Repository...
+commands.category.repositories.name = Team Repositories
+command.addTaskRepository.name = Add Team Repository...
command.addTaskRepository.commandParameter.name = Repository Type
TaskHyperlinkDetector.name = Tasks
Index: plugin.xml
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/plugin.xml,v
retrieving revision 1.379
diff -u -r1.379 plugin.xml
--- plugin.xml 24 May 2010 21:30:25 -0000 1.379
+++ plugin.xml 25 May 2010 18:33:09 -0000
@@ -1149,6 +1149,9 @@
class="org.eclipse.mylyn.internal.tasks.ui.LocalRepositoryConnectorUi"
name="%LocalRepositoryConnectorUi.name"
overlayIcon="icons/ovr16/overlay-local.gif"/>
+
+
Index: schema/repositories.exsd
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/schema/repositories.exsd,v
retrieving revision 1.24
diff -u -r1.24 repositories.exsd
--- schema/repositories.exsd 9 Nov 2009 13:58:07 -0000 1.24
+++ schema/repositories.exsd 25 May 2010 18:33:09 -0000
@@ -24,6 +24,7 @@
+
@@ -169,6 +170,26 @@
+
+
+
+ (no description available)
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
Index: src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java,v
retrieving revision 1.75
diff -u -r1.75 TasksUiExtensionReader.java
--- src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java 24 Feb 2010 01:34:02 -0000 1.75
+++ src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiExtensionReader.java 25 May 2010 18:33:09 -0000
@@ -30,6 +30,7 @@
import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
+import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tasks.core.externalization.TaskListExternalizer;
import org.eclipse.mylyn.internal.tasks.ui.IDynamicSubMenuContributor;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
@@ -37,6 +38,7 @@
import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
import org.eclipse.mylyn.tasks.core.AbstractDuplicateDetector;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
+import org.eclipse.mylyn.tasks.core.AbstractRepositoryMigrator;
import org.eclipse.mylyn.tasks.core.AbstractTaskListMigrator;
import org.eclipse.mylyn.tasks.core.RepositoryTemplate;
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
@@ -57,11 +59,15 @@
IConfigurationElement element;
- IConfigurationElement migratorElement;
+ IConfigurationElement taskListMigratorElement;
+
+ IConfigurationElement repositoryMigratorElement;
AbstractRepositoryConnector repositoryConnector;
- AbstractTaskListMigrator migrator;
+ AbstractTaskListMigrator taskListMigrator;
+
+ AbstractRepositoryMigrator repositoryMigrator;
private final String id;
@@ -94,18 +100,16 @@
}
}
- public IStatus createMigrator() {
- Assert.isTrue(migrator == null);
+ public IStatus createTaskListMigrator() {
+ Assert.isTrue(taskListMigrator == null);
try {
- Object migratorObject = migratorElement.createExecutableExtension(ATTR_CLASS);
+ Object migratorObject = taskListMigratorElement.createExecutableExtension(ATTR_CLASS);
if (migratorObject instanceof AbstractTaskListMigrator) {
- migrator = (AbstractTaskListMigrator) migratorObject;
+ taskListMigrator = (AbstractTaskListMigrator) migratorObject;
return Status.OK_STATUS;
} else {
- return new Status(
- IStatus.ERROR,
- TasksUiPlugin.ID_PLUGIN,
- "Could not load task list migrator migrator: " + migratorObject.getClass().getCanonicalName() //$NON-NLS-1$
+ return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
+ "Could not load task list migrator: " + migratorObject.getClass().getCanonicalName() //$NON-NLS-1$
+ " must implement " + AbstractTaskListMigrator.class.getCanonicalName()); //$NON-NLS-1$
}
} catch (Throwable e) {
@@ -114,6 +118,24 @@
}
}
+ public IStatus createRepositoryMigrator() {
+ Assert.isTrue(repositoryMigrator == null);
+ try {
+ Object migratorObject = repositoryMigratorElement.createExecutableExtension(ATTR_CLASS);
+ if (migratorObject instanceof AbstractRepositoryMigrator) {
+ repositoryMigrator = (AbstractRepositoryMigrator) migratorObject;
+ return Status.OK_STATUS;
+ } else {
+ return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
+ "Could not load repository migrator: " + migratorObject.getClass().getCanonicalName() //$NON-NLS-1$
+ + " must implement " + AbstractRepositoryMigrator.class.getCanonicalName()); //$NON-NLS-1$
+ }
+ } catch (Throwable e) {
+ return new Status(IStatus.ERROR, TasksUiPlugin.ID_PLUGIN,
+ "Could not load repository migrator extension", e); //$NON-NLS-1$
+ }
+ }
+
public String getPluginId() {
return element.getContributor().getName();
}
@@ -158,6 +180,8 @@
public static final String ELMNT_MIGRATOR = "taskListMigrator"; //$NON-NLS-1$
+ public static final String ELMNT_REPOSITORY_MIGRATOR = "repositoryMigrator"; //$NON-NLS-1$
+
public static final String ATTR_BRANDING_ICON = "brandingIcon"; //$NON-NLS-1$
public static final String ATTR_OVERLAY_ICON = "overlayIcon"; //$NON-NLS-1$
@@ -207,12 +231,13 @@
*/
private static Set disabledContributors = new HashSet();
- public static void initStartupExtensions(TaskListExternalizer taskListExternalizer) {
+ public static void initStartupExtensions(TaskListExternalizer taskListExternalizer,
+ TaskRepositoryManager repositoryManager) {
if (!coreExtensionsRead) {
IExtensionRegistry registry = Platform.getExtensionRegistry();
// NOTE: has to be read first, consider improving
- initConnectorCores(taskListExternalizer, registry);
+ initConnectorCores(taskListExternalizer, repositoryManager, registry);
IExtensionPoint templatesExtensionPoint = registry.getExtensionPoint(EXTENSION_TEMPLATES);
IExtension[] templateExtensions = templatesExtensionPoint.getExtensions();
@@ -256,7 +281,8 @@
}
}
- private static void initConnectorCores(TaskListExternalizer taskListExternalizer, IExtensionRegistry registry) {
+ private static void initConnectorCores(TaskListExternalizer taskListExternalizer,
+ TaskRepositoryManager repositoryManager, IExtensionRegistry registry) {
List descriptors = new ArrayList();
MultiStatus result = new MultiStatus(TasksUiPlugin.ID_PLUGIN, 0, "Repository connectors failed to load.", null); //$NON-NLS-1$
@@ -267,16 +293,20 @@
for (IExtension repositoryExtension : repositoryExtensions) {
IConfigurationElement[] elements = repositoryExtension.getConfigurationElements();
ConnectorDescriptor descriptor = null;
- IConfigurationElement migratorElement = null;
+ IConfigurationElement tasklistMigratorElement = null;
+ IConfigurationElement repositoryMigratorElement = null;
for (IConfigurationElement element : elements) {
if (element.getName().equals(ELMNT_REPOSITORY_CONNECTOR)) {
descriptor = new ConnectorDescriptor(element);
} else if (element.getName().equals(ELMNT_MIGRATOR)) {
- migratorElement = element;
+ tasklistMigratorElement = element;
+ } else if (element.getName().equals(ELMNT_REPOSITORY_MIGRATOR)) {
+ repositoryMigratorElement = element;
}
}
if (descriptor != null) {
- descriptor.migratorElement = migratorElement;
+ descriptor.taskListMigratorElement = tasklistMigratorElement;
+ descriptor.repositoryMigratorElement = repositoryMigratorElement;
descriptors.add(descriptor);
if (descriptor.getId() != null) {
add(descriptorById, descriptor.getId(), descriptor);
@@ -300,14 +330,23 @@
checkForConflicts(descriptors, result, descriptorByConnectorKind);
// register connectors
- List migrators = new ArrayList();
+ List taskListmigrators = new ArrayList();
+ List repositoryMigrators = new ArrayList();
for (ConnectorDescriptor descriptor : descriptors) {
if (descriptor.repositoryConnector != null) {
- TasksUiPlugin.getRepositoryManager().addRepositoryConnector(descriptor.repositoryConnector);
- if (descriptor.migratorElement != null) {
- IStatus status = descriptor.createMigrator();
- if (status.isOK() && descriptor.migrator != null) {
- migrators.add(descriptor.migrator);
+ repositoryManager.addRepositoryConnector(descriptor.repositoryConnector);
+ if (descriptor.taskListMigratorElement != null) {
+ IStatus status = descriptor.createTaskListMigrator();
+ if (status.isOK() && descriptor.taskListMigrator != null) {
+ taskListmigrators.add(descriptor.taskListMigrator);
+ } else {
+ result.add(status);
+ }
+ }
+ if (descriptor.repositoryMigratorElement != null) {
+ IStatus status = descriptor.createRepositoryMigrator();
+ if (status.isOK() && descriptor.repositoryMigrator != null) {
+ repositoryMigrators.add(descriptor.repositoryMigrator);
} else {
result.add(status);
}
@@ -319,7 +358,8 @@
StatusHandler.log(result);
}
- taskListExternalizer.initialize(migrators);
+ repositoryManager.initialize(repositoryMigrators);
+ taskListExternalizer.initialize(taskListmigrators);
}
private static boolean isDisabled(IConfigurationElement element) {
Index: src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java
===================================================================
RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java,v
retrieving revision 1.40
diff -u -r1.40 SelectRepositoryPage.java
--- src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java 24 Jul 2009 12:05:45 -0000 1.40
+++ src/org/eclipse/mylyn/internal/tasks/ui/wizards/SelectRepositoryPage.java 25 May 2010 18:33:09 -0000
@@ -26,26 +26,31 @@
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.IOpenListener;
import org.eclipse.jface.viewers.ISelectionChangedListener;
-import org.eclipse.jface.viewers.IStructuredContentProvider;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.jface.viewers.OpenEvent;
import org.eclipse.jface.viewers.SelectionChangedEvent;
import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.jface.viewers.TableViewer;
-import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.TreePath;
+import org.eclipse.jface.viewers.TreeSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.jface.viewers.ViewerFilter;
import org.eclipse.jface.wizard.IWizard;
import org.eclipse.jface.wizard.IWizardNode;
import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.jface.wizard.WizardSelectionPage;
import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
+import org.eclipse.mylyn.internal.tasks.core.Category;
import org.eclipse.mylyn.internal.tasks.core.ITaskRepositoryFilter;
import org.eclipse.mylyn.internal.tasks.core.LocalRepositoryConnector;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.actions.AddRepositoryAction;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskRepositoriesSorter;
+import org.eclipse.mylyn.internal.tasks.ui.views.EmptyCategoriesFilter;
+import org.eclipse.mylyn.internal.tasks.ui.views.GradientDrawer;
+import org.eclipse.mylyn.internal.tasks.ui.views.TaskRepositoriesViewSorter;
import org.eclipse.mylyn.internal.tasks.ui.views.TaskRepositoryLabelProvider;
+import org.eclipse.mylyn.internal.tasks.ui.views.TeamRepositoriesContentProvider;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.TasksUi;
@@ -60,9 +65,10 @@
import org.eclipse.swt.layout.GridLayout;
import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.Tree;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.handlers.IHandlerService;
+import org.eclipse.ui.themes.IThemeManager;
/**
* @author Mik Kersten
@@ -72,7 +78,7 @@
*/
public abstract class SelectRepositoryPage extends WizardSelectionPage {
- private TableViewer viewer;
+ private TreeViewer viewer;
protected MultiRepositoryAwareWizard wizard;
@@ -80,18 +86,7 @@
private final ITaskRepositoryFilter taskRepositoryFilter;
- class RepositoryContentProvider implements IStructuredContentProvider {
-
- public void inputChanged(Viewer v, Object oldInput, Object newInput) {
- }
-
- public void dispose() {
- }
-
- public Object[] getElements(Object parent) {
- return repositories.toArray();
- }
- }
+ private TeamRepositoriesContentProvider contentProvider;
public SelectRepositoryPage(ITaskRepositoryFilter taskRepositoryFilter) {
super(Messages.SelectRepositoryPage_Select_a_repository);
@@ -123,11 +118,11 @@
GridLayout layout = new GridLayout(1, true);
container.setLayout(layout);
- Table table = createTableViewer(container);
- viewer.setSorter(new TaskRepositoriesSorter());
+ Tree tree = createTableViewer(container);
+ viewer.setSorter(new TaskRepositoriesViewSorter());
GridData gridData = new GridData(GridData.FILL_BOTH | GridData.GRAB_HORIZONTAL | GridData.GRAB_VERTICAL);
- table.setLayoutData(gridData);
+ tree.setLayoutData(gridData);
Composite buttonContainer = new Composite(container, SWT.NULL);
GridLayout buttonLayout = new GridLayout(2, false);
@@ -182,9 +177,12 @@
setControl(container);
}
- protected Table createTableViewer(Composite container) {
- viewer = new TableViewer(container, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
- viewer.setContentProvider(new RepositoryContentProvider());
+ protected Tree createTableViewer(Composite container) {
+ contentProvider = new TeamRepositoriesContentProvider();
+ viewer = new TreeViewer(container, SWT.SINGLE | SWT.BORDER | SWT.H_SCROLL | SWT.V_SCROLL);
+ viewer.setContentProvider(contentProvider);
+ ViewerFilter[] filters = { new EmptyCategoriesFilter(contentProvider) };
+ viewer.setFilters(filters);
// viewer.setLabelProvider(new TaskRepositoryLabelProvider());
viewer.setLabelProvider(new DecoratingLabelProvider(new TaskRepositoryLabelProvider(),
PlatformUI.getWorkbench().getDecoratorManager().getLabelDecorator()));
@@ -197,6 +195,7 @@
setSelectedNode(new CustomWizardNode((TaskRepository) selection.getFirstElement()));
setPageComplete(true);
} else {
+ setSelectedNode(null);
setPageComplete(false);
}
}
@@ -204,13 +203,24 @@
TaskRepository selectedRepository = TasksUiUtil.getSelectedRepository(null);
if (selectedRepository != null) {
- viewer.setSelection(new StructuredSelection(selectedRepository));
+ Category category = ((TaskRepositoryManager) TasksUi.getRepositoryManager()).getCategory(selectedRepository);
+ Object[] path = { category, selectedRepository };
+ viewer.setSelection(new TreeSelection(new TreePath(path)));
} else {
TaskRepository localRepository = TasksUi.getRepositoryManager().getRepository(
LocalRepositoryConnector.CONNECTOR_KIND, LocalRepositoryConnector.REPOSITORY_URL);
viewer.setSelection(new StructuredSelection(localRepository));
}
+ final IThemeManager themeManager = PlatformUI.getWorkbench().getThemeManager();
+
+ new GradientDrawer(themeManager, getViewer()) {
+ @Override
+ protected boolean shouldApplyGradient(org.eclipse.swt.widgets.Event event) {
+ return event.item.getData() instanceof Category;
+ }
+ };
+
viewer.addOpenListener(new IOpenListener() {
public void open(OpenEvent event) {
@@ -224,9 +234,10 @@
}
});
- viewer.getTable().showSelection();
- viewer.getTable().setFocus();
- return viewer.getTable();
+ viewer.expandAll();
+ viewer.getTree().showSelection();
+ viewer.getTree().setFocus();
+ return viewer.getTree();
}
protected abstract IWizard createWizard(TaskRepository taskRepository);
@@ -308,7 +319,7 @@
/**
* Public for testing.
*/
- public TableViewer getViewer() {
+ public TreeViewer getViewer() {
return viewer;
}
Index: src/org/eclipse/mylyn/internal/tasks/ui/views/EmptyCategoriesFilter.java
===================================================================
RCS file: src/org/eclipse/mylyn/internal/tasks/ui/views/EmptyCategoriesFilter.java
diff -N src/org/eclipse/mylyn/internal/tasks/ui/views/EmptyCategoriesFilter.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/mylyn/internal/tasks/ui/views/EmptyCategoriesFilter.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,36 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.views;
+
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.jface.viewers.ViewerFilter;
+import org.eclipse.mylyn.internal.tasks.core.Category;
+
+/**
+ * @author Robert Elves
+ */
+public class EmptyCategoriesFilter extends ViewerFilter {
+
+ private final TeamRepositoriesContentProvider provider;
+
+ public EmptyCategoriesFilter(TeamRepositoriesContentProvider provider) {
+ this.provider = provider;
+ }
+
+ @Override
+ public boolean select(Viewer viewer, Object parentElement, Object element) {
+ if (element instanceof Category) {
+ return provider.getChildren(element).length > 0;
+ }
+ return true;
+ }
+}
Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TeamRepositoriesContentProvider.java
===================================================================
RCS file: src/org/eclipse/mylyn/internal/tasks/ui/views/TeamRepositoriesContentProvider.java
diff -N src/org/eclipse/mylyn/internal/tasks/ui/views/TeamRepositoriesContentProvider.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/mylyn/internal/tasks/ui/views/TeamRepositoriesContentProvider.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2010 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.tasks.ui.views;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.jface.viewers.ITreeContentProvider;
+import org.eclipse.jface.viewers.Viewer;
+import org.eclipse.mylyn.internal.tasks.core.Category;
+import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.TasksUi;
+
+/**
+ * @author Robert Elves
+ */
+public class TeamRepositoriesContentProvider implements ITreeContentProvider {
+
+ private final TaskRepositoryManager manager;
+
+ public TeamRepositoriesContentProvider() {
+ manager = ((TaskRepositoryManager) TasksUi.getRepositoryManager());
+ }
+
+ public void inputChanged(Viewer v, Object oldInput, Object newInput) {
+ }
+
+ public void dispose() {
+ }
+
+ public Object[] getElements(Object parent) {
+
+ Set
Index: src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java
===================================================================
RCS file: src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java
diff -N src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java
--- /dev/null 1 Jan 1970 00:00:00 -0000
+++ src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java 1 Jan 1970 00:00:00 -0000
@@ -0,0 +1,39 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2008 Tasktop Technologies and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.bugzilla.ui.tasklist;
+
+import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin;
+import org.eclipse.mylyn.internal.tasks.core.IRepositoryConstants;
+import org.eclipse.mylyn.tasks.core.AbstractRepositoryMigrator;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+
+/**
+ * @author Robert Elves
+ * @since 3.4
+ */
+public class BugzillaRepositoryMigrator extends AbstractRepositoryMigrator {
+
+ @Override
+ public String getConnectorKind() {
+ return BugzillaCorePlugin.CONNECTOR_KIND;
+ }
+
+ @Override
+ public boolean migrateRepository(TaskRepository repository) {
+ if (repository.getProperty(IRepositoryConstants.PROPERTY_CATEGORY) == null) {
+ repository.setProperty(IRepositoryConstants.PROPERTY_CATEGORY, IRepositoryConstants.CATEGORY_BUGS);
+ return true;
+ }
+ return false;
+ }
+
+}