### Eclipse Workspace Patch 1.0 #P org.eclipse.mylyn.tasks.search Index: src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.search/src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java,v retrieving revision 1.1 diff -u -r1.1 OpenSearchResultAction.java --- src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java 26 Feb 2010 20:59:36 -0000 1.1 +++ src/org/eclipse/mylyn/internal/tasks/ui/search/OpenSearchResultAction.java 18 May 2010 03:39:57 -0000 @@ -55,7 +55,7 @@ for (Iterator it = selection.iterator(); it.hasNext();) { AbstractTask repositoryHit = it.next(); TasksUiUtil.openTask(repositoryHit.getRepositoryUrl(), repositoryHit.getTaskId(), - repositoryHit.getUrl()); + repositoryHit.getUrl(), 0); } } #P org.eclipse.mylyn.tasks.ui Index: src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java,v retrieving revision 1.34 diff -u -r1.34 OpenRepositoryTaskJob.java --- src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java 1 Mar 2010 01:43:36 -0000 1.34 +++ src/org/eclipse/mylyn/internal/tasks/ui/OpenRepositoryTaskJob.java 18 May 2010 03:39:58 -0000 @@ -12,6 +12,8 @@ package org.eclipse.mylyn.internal.tasks.ui; import java.text.MessageFormat; +import java.util.Date; +import java.util.List; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; @@ -25,9 +27,11 @@ import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; import org.eclipse.mylyn.tasks.core.ITask; import org.eclipse.mylyn.tasks.core.TaskRepository; +import org.eclipse.mylyn.tasks.core.data.TaskAttribute; import org.eclipse.mylyn.tasks.core.data.TaskData; import org.eclipse.mylyn.tasks.ui.TasksUi; import org.eclipse.mylyn.tasks.ui.TasksUiUtil; +import org.eclipse.mylyn.tasks.ui.editors.TaskEditor; import org.eclipse.ui.IWorkbenchPage; import org.eclipse.ui.PlatformUI; @@ -49,14 +53,17 @@ private TaskOpenListener listener; + private final long timestamp; + public OpenRepositoryTaskJob(String repositoryKind, String repositoryUrl, String taskId, String taskUrl, - IWorkbenchPage page) { + long timestamp, IWorkbenchPage page) { super(MessageFormat.format(Messages.OpenRepositoryTaskJob_Opening_repository_task_X, taskId)); this.repositoryKind = repositoryKind; this.taskId = taskId; this.repositoryUrl = repositoryUrl; this.taskUrl = taskUrl; + this.timestamp = timestamp; } /** @@ -79,7 +86,9 @@ if (repository == null) { PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() { public void run() { - MessageDialog.openError(null, Messages.OpenRepositoryTaskJob_Repository_Not_Found, + MessageDialog.openError( + null, + Messages.OpenRepositoryTaskJob_Repository_Not_Found, MessageFormat.format( Messages.OpenRepositoryTaskJob_Could_not_find_repository_configuration_for_X, repositoryUrl) @@ -95,7 +104,7 @@ AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(repositoryKind); try { - TaskData taskData = connector.getTaskData(repository, taskId, monitor); + final TaskData taskData = connector.getTaskData(repository, taskId, monitor); if (taskData != null) { task = TasksUi.getRepositoryModel().createTask(repository, taskData.getTaskId()); TasksUiPlugin.getTaskDataManager().putUpdatedTaskData(task, taskData, true); @@ -105,6 +114,27 @@ if (listener != null && event != null) { listener.taskOpened(event); } + if (timestamp != 0 && event != null) { + List commentAttributes = taskData.getAttributeMapper().getAttributesByType( + taskData, TaskAttribute.TYPE_COMMENT); + if (commentAttributes.size() > 0) { + for (TaskAttribute commentAttribute : commentAttributes) { + TaskAttribute commentCreateDate = commentAttribute.getMappedAttribute(TaskAttribute.COMMENT_DATE); + if (commentCreateDate != null) { + Date dateValue = taskData.getAttributeMapper().getDateValue(commentCreateDate); + if (dateValue.getTime() < timestamp) { + continue; + } + TaskAttribute dn = commentAttribute.getMappedAttribute(TaskAttribute.COMMENT_NUMBER); + TaskEditor editor = (TaskEditor) event.getEditor(); + if (dn != null) { + editor.selectReveal(TaskAttribute.PREFIX_COMMENT + dn.getValue()); + } + break; + } + } + } + } } }); } else { Index: src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java,v retrieving revision 1.111 diff -u -r1.111 TasksUiInternal.java --- src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java 15 May 2010 20:13:08 -0000 1.111 +++ src/org/eclipse/mylyn/internal/tasks/ui/util/TasksUiInternal.java 18 May 2010 03:39:58 -0000 @@ -958,6 +958,17 @@ */ public static boolean openRepositoryTask(String connectorKind, String repositoryUrl, String id, TaskOpenListener listener) { + return openRepositoryTask(connectorKind, repositoryUrl, id, listener, 0); + } + + /** + * Only override if task should be opened by a custom editor, default behavior is to open with a rich editor, + * falling back to the web browser if not available. + * + * @return true if the task was successfully opened + */ + public static boolean openRepositoryTask(String connectorKind, String repositoryUrl, String id, + TaskOpenListener listener, long timestamp) { IRepositoryManager repositoryManager = TasksUi.getRepositoryManager(); AbstractRepositoryConnector connector = repositoryManager.getRepositoryConnector(connectorKind); String taskUrl = connector.getTaskUrl(repositoryUrl, id); @@ -977,7 +988,8 @@ } IWorkbenchPage page = window.getActivePage(); - OpenRepositoryTaskJob job = new OpenRepositoryTaskJob(connectorKind, repositoryUrl, id, taskUrl, page); + OpenRepositoryTaskJob job = new OpenRepositoryTaskJob(connectorKind, repositoryUrl, id, taskUrl, timestamp, + page); job.setListener(listener); job.schedule(); Index: src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java,v retrieving revision 1.99 diff -u -r1.99 TaskListDropAdapter.java --- src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java 10 Dec 2009 03:14:09 -0000 1.99 +++ src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListDropAdapter.java 18 May 2010 03:39:58 -0000 @@ -208,7 +208,7 @@ if (repositoryUrl != null && taskId != null) { // attempt to open task in background // TODO: consider attaching a listener to OpenRepsitoryTaskJob to move task to drop target - TasksUiInternal.openRepositoryTask(connector.getConnectorKind(), repositoryUrl, taskId); + TasksUiInternal.openRepositoryTask(connector.getConnectorKind(), repositoryUrl, taskId, null, 0); } } else { // create local task, using title of web page as a summary Index: src/org/eclipse/mylyn/tasks/ui/TasksUiUtil.java =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/TasksUiUtil.java,v retrieving revision 1.157 diff -u -r1.157 TasksUiUtil.java --- src/org/eclipse/mylyn/tasks/ui/TasksUiUtil.java 6 May 2010 21:12:29 -0000 1.157 +++ src/org/eclipse/mylyn/tasks/ui/TasksUiUtil.java 18 May 2010 03:39:58 -0000 @@ -258,11 +258,11 @@ /** * Either pass in a repository and taskId, or fullUrl, or all of them * - * @deprecated Use {@link #openTask(String,String,String)} instead + * @deprecated Use {@link #openTask(String,String,String,long)} instead */ @Deprecated public static boolean openRepositoryTask(String repositoryUrl, String taskId, String fullUrl) { - return openTask(repositoryUrl, taskId, fullUrl); + return openTask(repositoryUrl, taskId, fullUrl, 0); } /** @@ -318,8 +318,20 @@ * Either pass in a repository and taskId, or fullUrl, or all of them * * @since 3.0 + * @deprecated Use {@link #openTask(String,String,String,long)} instead */ + @Deprecated public static boolean openTask(String repositoryUrl, String taskId, String fullUrl) { + return openTask(repositoryUrl, taskId, fullUrl, 0); + } + + /** + * Either pass in a repository and taskId, or fullUrl, or all of them the timestamp is used for seleting the correct + * comment + * + * @since 3.4 + */ + public static boolean openTask(String repositoryUrl, String taskId, String fullUrl, long timestamp) { AbstractTask task = TasksUiInternal.getTask(repositoryUrl, taskId, fullUrl); if (task != null) { @@ -332,12 +344,14 @@ fullUrl); if (connector != null) { if (repositoryUrl != null && taskId != null) { - opened = TasksUiInternal.openRepositoryTask(connector.getConnectorKind(), repositoryUrl, taskId); + opened = TasksUiInternal.openRepositoryTask(connector.getConnectorKind(), repositoryUrl, taskId, null, + timestamp); } else { repositoryUrl = connector.getRepositoryUrlFromTaskUrl(fullUrl); taskId = connector.getTaskIdFromTaskUrl(fullUrl); if (repositoryUrl != null && taskId != null) { - opened = TasksUiInternal.openRepositoryTask(connector.getConnectorKind(), repositoryUrl, taskId); + opened = TasksUiInternal.openRepositoryTask(connector.getConnectorKind(), repositoryUrl, taskId, + null, timestamp); } } } #P org.eclipse.mylyn.team.cvs Index: plugin.xml =================================================================== RCS file: /cvsroot/tools/org.eclipse.mylyn/org.eclipse.mylyn.team.cvs/plugin.xml,v retrieving revision 1.9 diff -u -r1.9 plugin.xml --- plugin.xml 24 Jul 2009 12:05:05 -0000 1.9 +++ plugin.xml 18 May 2010 03:39:59 -0000 @@ -23,6 +23,11 @@ class="org.eclipse.mylyn.internal.team.ccvs.CvsLinkedTaskInfoAdapterFactory"> + + + +