Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrelves2006-11-15 01:40:00 +0000
committerrelves2006-11-15 01:40:00 +0000
commitdb1567a8da1771e8e4cfc265512f2bc926bad92f (patch)
tree9e9d7220078453ac5f35ffd4d85dcce6e52a20b2
parent0e8ba06ed4bb8378432720f6ce194ca3bbe4b9e1 (diff)
downloadorg.eclipse.mylyn.tasks-db1567a8da1771e8e4cfc265512f2bc926bad92f.tar.gz
org.eclipse.mylyn.tasks-db1567a8da1771e8e4cfc265512f2bc926bad92f.tar.xz
org.eclipse.mylyn.tasks-db1567a8da1771e8e4cfc265512f2bc926bad92f.zip
NEW - bug 161820: Fix synchronization of Trac tasks accessed through the web
https://bugs.eclipse.org/bugs/show_bug.cgi?id=161820
-rw-r--r--org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java4
-rw-r--r--org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java2
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java12
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java21
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java12
-rw-r--r--org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java2
-rw-r--r--org.eclipse.mylyn.tasks.ui/icons/ovr16/overlay-warning.gifbin0 -> 173 bytes
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java9
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java17
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java9
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java118
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java13
12 files changed, 153 insertions, 66 deletions
diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java
index 486e3bdf2..a1ad3c62a 100644
--- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java
+++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/AbstractReportFactory.java
@@ -53,6 +53,10 @@ public class AbstractReportFactory {
protected void collectResults(DefaultHandler contentHandler, boolean clean) throws IOException, BugzillaException,
GeneralSecurityException {
+ if(inStream == null) {
+ return;
+ }
+
BufferedReader in;
if (characterEncoding != null) {
in = new BufferedReader(new InputStreamReader(inStream, characterEncoding));
diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java
index fb287212c..e6cd148aa 100644
--- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java
+++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaRepositoryConnector.java
@@ -250,7 +250,7 @@ public class BugzillaRepositoryConnector extends AbstractRepositoryConnector {
// }
@Override
- public void updateTaskState(AbstractRepositoryTask repositoryTask) {
+ public void updateTask(TaskRepository repository, AbstractRepositoryTask repositoryTask) {
// ignore
}
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java
index 5f91d3ba1..83c5286e6 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/.AbstractRepositoryTask.java
@@ -13,6 +13,7 @@ package org.eclipse.mylar.tasks.core;
import java.util.Date;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer;
/**
@@ -50,6 +51,8 @@ public abstract class AbstractRepositoryTask extends Task {
public static final String HANDLE_DELIM = "-";
+ protected IStatus status = null;
+
public AbstractRepositoryTask(String handle, String label, boolean newTask) {
super(handle, label, newTask);
}
@@ -173,4 +176,13 @@ public abstract class AbstractRepositoryTask extends Task {
public String getOwner() {
return "<unknown>";
}
+
+ public IStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(IStatus status) {
+ this.status = status;
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java
index 5bf7b5390..7411d81f4 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java
@@ -100,7 +100,26 @@ public abstract class AbstractRepositoryConnector {
public abstract List<String> getSupportedVersions();
- public abstract void updateTaskState(AbstractRepositoryTask repositoryTask);
+ /**
+ * Updates the properties of <code>repositoryTask</code>. Invoked when on
+ * task synchronization if {@link #getOfflineTaskHandler()} returns
+ * <code>null</code> or
+ * {@link IOfflineTaskHandler#downloadTaskData(TaskRepository, String, Proxy)}
+ * returns <code>null</code>.
+ *
+ * <p>
+ * Connectors that provide {@link RepositoryTaskData} objects for all tasks
+ * do not need to implement this method.
+ *
+ * @param repository
+ * the repository
+ * @param repositoryTask
+ * the task that is synchronized
+ * @throws CoreException
+ * thrown in case of error while synchronizing
+ * @see {@link #getOfflineTaskHandler()}
+ */
+ public abstract void updateTask(TaskRepository repository, AbstractRepositoryTask repositoryTask) throws CoreException;
public String[] repositoryPropertyNames() {
return new String[] { IRepositoryConstants.PROPERTY_VERSION, IRepositoryConstants.PROPERTY_TIMEZONE,
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java
index 5f91d3ba1..83c5286e6 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java
@@ -13,6 +13,7 @@ package org.eclipse.mylar.tasks.core;
import java.util.Date;
+import org.eclipse.core.runtime.IStatus;
import org.eclipse.mylar.internal.tasks.core.HtmlStreamTokenizer;
/**
@@ -50,6 +51,8 @@ public abstract class AbstractRepositoryTask extends Task {
public static final String HANDLE_DELIM = "-";
+ protected IStatus status = null;
+
public AbstractRepositoryTask(String handle, String label, boolean newTask) {
super(handle, label, newTask);
}
@@ -173,4 +176,13 @@ public abstract class AbstractRepositoryTask extends Task {
public String getOwner() {
return "<unknown>";
}
+
+ public IStatus getStatus() {
+ return status;
+ }
+
+ public void setStatus(IStatus status) {
+ this.status = status;
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java
index 47c1a295f..61d9f99cf 100644
--- a/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java
+++ b/org.eclipse.mylyn.tasks.tests/src/org/eclipse/mylyn/tasks/tests/connector/MockRepositoryConnector.java
@@ -92,7 +92,7 @@ public class MockRepositoryConnector extends AbstractRepositoryConnector {
}
@Override
- public void updateTaskState(AbstractRepositoryTask repositoryTask) {
+ public void updateTask(TaskRepository repository, AbstractRepositoryTask repositoryTask) {
// ignore
}
diff --git a/org.eclipse.mylyn.tasks.ui/icons/ovr16/overlay-warning.gif b/org.eclipse.mylyn.tasks.ui/icons/ovr16/overlay-warning.gif
new file mode 100644
index 000000000..059c630e8
--- /dev/null
+++ b/org.eclipse.mylyn.tasks.ui/icons/ovr16/overlay-warning.gif
Binary files differ
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java
index 6fd4c7d82..5247840ad 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/TaskListImages.java
@@ -37,6 +37,8 @@ public class TaskListImages {
private static final String T_WIZBAN = "wizban";
+ private static final String T_OVR = "ovr16";
+
public static final Point SIZE = new Point(16, 16);
private static final URL baseURL = TasksUiPlugin.getDefault().getBundle().getEntry("/icons/");
@@ -107,6 +109,8 @@ public class TaskListImages {
public static final ImageDescriptor OVERLAY_REPOSITORY_CONTEXT = create(T_EVIEW, "overlay-repository-context.gif");
+ public static final ImageDescriptor OVERLAY_WARNING = create(T_OVR, "overlay-warning.gif");
+
public static final ImageDescriptor STATUS_NORMAL = create(T_EVIEW, "status-normal.gif");
public static final ImageDescriptor STATUS_CONTEXT = create(T_EVIEW, "status-server-context.gif");
@@ -134,7 +138,7 @@ public class TaskListImages {
public static final ImageDescriptor STATUS_CONTEXT_CONFLICT = createWithOverlay(
STATUS_CONTEXT,
OVERLAY_CONFLICT, true, true);
-
+
public static final ImageDescriptor QUERY = createSize(create(T_TOOL, "query.gif"), SIZE);
public static final ImageDescriptor QUERY_NEW = create(T_TOOL, "query-new.gif");
@@ -159,7 +163,6 @@ public class TaskListImages {
public static final ImageDescriptor TASK_INACTIVE_CONTEXT = createSize(create(T_TOOL, "task-context.gif"),
SIZE);
-
public static final ImageDescriptor TASK_COMPLETE = create(T_TOOL, "task-complete.gif");
@@ -199,7 +202,7 @@ public class TaskListImages {
return new TaskListImageDescriptor(base, size);
}
- private static ImageDescriptor createWithOverlay(ImageDescriptor base, ImageDescriptor overlay, boolean top,
+ public static ImageDescriptor createWithOverlay(ImageDescriptor base, ImageDescriptor overlay, boolean top,
boolean left) {
return new TaskListImageDescriptor(base, overlay, top, left);
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java
index 8c179807c..5aaecb666 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListTableLabelProvider.java
@@ -15,6 +15,7 @@ package org.eclipse.mylar.internal.tasks.ui.views;
import java.util.Arrays;
+import org.eclipse.jface.resource.ImageDescriptor;
import org.eclipse.jface.viewers.DecoratingLabelProvider;
import org.eclipse.jface.viewers.ILabelDecorator;
import org.eclipse.jface.viewers.ILabelProvider;
@@ -116,12 +117,22 @@ public class TaskListTableLabelProvider extends DecoratingLabelProvider implemen
repositoryTask = (AbstractRepositoryTask)element;
}
if (repositoryTask != null) {
+ ImageDescriptor image = null;
if (repositoryTask.getSyncState() == RepositoryTaskSyncState.OUTGOING) {
- return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_OUTGOING);
+ image = TaskListImages.STATUS_NORMAL_OUTGOING;
} else if (repositoryTask.getSyncState() == RepositoryTaskSyncState.INCOMING) {
- return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_INCOMING);
+ image = TaskListImages.STATUS_NORMAL_INCOMING;
} else if (repositoryTask.getSyncState() == RepositoryTaskSyncState.CONFLICT) {
- return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_CONFLICT);
+ image = TaskListImages.STATUS_NORMAL_CONFLICT;
+ }
+ if (repositoryTask.getStatus() != null) {
+ if (image == null) {
+ image = TaskListImages.STATUS_NORMAL;
+ }
+ return TaskListImages.getImage(TaskListImages.createWithOverlay(image,
+ TaskListImages.OVERLAY_WARNING, false, true));
+ } else if (image != null) {
+ return TaskListImages.getImage(image);
}
} else if (element instanceof AbstractQueryHit){
return TaskListImages.getImage(TaskListImages.STATUS_NORMAL_INCOMING);
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java
index 6850a2c5a..8736e9891 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/views/TaskListToolTipHandler.java
@@ -54,7 +54,8 @@ import org.eclipse.ui.PlatformUI;
*/
public class TaskListToolTipHandler {
- private static final String SEPARATOR = "\n---------------\n";
+ //private static final String SEPARATOR = "\n---------------\n";
+ private static final String SEPARATOR = "\n\n";
private Shell tipShell;
@@ -204,6 +205,10 @@ public class TaskListToolTipHandler {
tooltip += ((ITaskListElement) element).getDescription();
if (repositoryTask != null) {
tooltip += "\n" + repositoryTask.getRepositoryUrl() + formatScheduledFor(repositoryTask);
+
+ if (repositoryTask.getStatus() != null) {
+ tooltip += SEPARATOR + "Last Error: " + repositoryTask.getStatus().getMessage();
+ }
}
return tooltip;
} else if (element != null) {
@@ -381,7 +386,7 @@ public class TaskListToolTipHandler {
tipLabelText.setText(text + progressText);
tipLabelImage.setImage(image); // accepts null
-
+
tipShell.pack();
setHoverLocation(tipShell, tipPosition);
tipShell.setVisible(true);
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java
index a9dc9cea8..ab0ce57cc 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/SynchronizeTaskJob.java
@@ -43,6 +43,7 @@ import org.eclipse.ui.progress.IProgressConstants;
/**
* @author Mik Kersten
* @author Rob Elves
+ * @author Steffen Pingel
*/
class SynchronizeTaskJob extends Job {
@@ -76,65 +77,40 @@ class SynchronizeTaskJob extends Job {
setProperty(IProgressConstants.ICON_PROPERTY, TaskListImages.REPOSITORY_SYNCHRONIZE);
for (final AbstractRepositoryTask repositoryTask : repositoryTasks) {
- if (monitor.isCanceled())
+ if (monitor.isCanceled()) {
throw new OperationCanceledException();
+ }
- boolean canNotSynch = repositoryTask.isDirty();
- boolean hasLocalChanges = repositoryTask.getSyncState() == RepositoryTaskSyncState.OUTGOING
- || repositoryTask.getSyncState() == RepositoryTaskSyncState.CONFLICT;
- if (forceSync || (!canNotSynch && !hasLocalChanges) || !repositoryTask.isDownloaded()) {
- monitor.setTaskName(LABEL_SYNCHRONIZING + repositoryTask.getDescription());
- // repositoryTask.setCurrentlySynchronizing(true);
- TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask);
- IOfflineTaskHandler offlineHandler = connector.getOfflineTaskHandler();
- if (offlineHandler != null) {
- RepositoryTaskData downloadedTaskData = null;
- try {
- final TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(
- repositoryTask.getRepositoryKind(), repositoryTask.getRepositoryUrl());
- if (repository == null) {
- throw new CoreException(new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, 0,
- "Associated repository could not be found. Ensure proper repository configuration of "
- + repositoryTask.getRepositoryUrl() + " in "
- + TaskRepositoriesView.NAME + ".", null));
- } else {
- String taskId = AbstractRepositoryTask.getTaskId(repositoryTask.getHandleIdentifier());
- downloadedTaskData = offlineHandler.downloadTaskData(repository, taskId,
- TasksUiPlugin.getDefault().getProxySettings());
- }
- } catch (final CoreException e) {
- if (e.getStatus().getException() instanceof UnrecognizedReponseException) {
- PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
- public void run() {
- WebBrowserDialog.openAcceptAgreement(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), "Unrecognized response from server", e.getStatus().getMessage(), e.getStatus().getException()
- .getMessage());
- MylarStatusHandler.log(e.getStatus());
- }
- });
- } else if (!forceSync && e.getStatus().getException() instanceof LoginException) {
- MylarStatusHandler.log(e.getStatus().getException(), "Login credentials are invalid for "+repositoryTask.getRepositoryUrl());
- } else if(forceSync) {
- MylarStatusHandler.fail(e.getStatus().getException(), "Unable to retrieve task#"+AbstractRepositoryTask.getTaskId(repositoryTask.getHandleIdentifier())+" from "+repositoryTask.getRepositoryUrl(), true, e.getStatus().getSeverity());
+ repositoryTask.setStatus(null);
+
+ try {
+ syncTask(monitor, repositoryTask);
+ } catch (final CoreException e) {
+ if (e.getStatus().getException() instanceof UnrecognizedReponseException) {
+ // TODO move this handler
+ PlatformUI.getWorkbench().getDisplay().asyncExec(new Runnable() {
+ public void run() {
+ WebBrowserDialog.openAcceptAgreement(PlatformUI.getWorkbench()
+ .getActiveWorkbenchWindow().getShell(), "Unrecognized response from server", e
+ .getStatus().getMessage(), e.getStatus().getException().getMessage());
+ MylarStatusHandler.log(e.getStatus());
}
- continue;
- }
-
- if (downloadedTaskData != null) {
- TasksUiPlugin.getSynchronizationManager().updateOfflineState(repositoryTask,
- downloadedTaskData, forceSync);
-// connector.updateTaskState(repositoryTask);
- refreshEditors(repositoryTask);
- }
- } else {
- connector.updateTaskState(repositoryTask);
+ });
+ } else if (e.getStatus().getException() instanceof LoginException) {
+ MylarStatusHandler.fail(e, "Report download failed. Ensure proper repository configuration of "
+ + repositoryTask.getRepositoryUrl() + " in " + TaskRepositoriesView.NAME + ".", true);
+ repositoryTask.setStatus(e.getStatus());
+ } else if (forceSync) {
+ MylarStatusHandler.log(e.getStatus().getException(), "Unable to retrieve task "
+ + AbstractRepositoryTask.getTaskId(repositoryTask.getHandleIdentifier()) + " from "
+ + repositoryTask.getRepositoryUrl());
+ repositoryTask.setStatus(e.getStatus());
}
- repositoryTask.setCurrentlySynchronizing(false);
- TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask);
-
- } else {
- repositoryTask.setCurrentlySynchronizing(false);
}
+ repositoryTask.setCurrentlySynchronizing(false);
+ TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask);
+
monitor.worked(1);
}
// TasksUiPlugin.getDefault().getTaskListNotificationManager().startNotification(1);
@@ -148,6 +124,42 @@ class SynchronizeTaskJob extends Job {
return Status.OK_STATUS;
}
+ private void syncTask(IProgressMonitor monitor, final AbstractRepositoryTask repositoryTask) throws LoginException,
+ CoreException {
+ boolean canNotSynch = repositoryTask.isDirty();
+ boolean hasLocalChanges = repositoryTask.getSyncState() == RepositoryTaskSyncState.OUTGOING
+ || repositoryTask.getSyncState() == RepositoryTaskSyncState.CONFLICT;
+ if (forceSync || (!canNotSynch && !hasLocalChanges) || !repositoryTask.isDownloaded()) {
+ monitor.setTaskName(LABEL_SYNCHRONIZING + repositoryTask.getDescription());
+
+ final TaskRepository repository = TasksUiPlugin.getRepositoryManager().getRepository(
+ repositoryTask.getRepositoryKind(), repositoryTask.getRepositoryUrl());
+ if (repository == null) {
+ throw new CoreException(new Status(IStatus.ERROR, TasksUiPlugin.PLUGIN_ID, 0,
+ "Associated repository could not be found. Ensure proper repository configuration of "
+ + repositoryTask.getRepositoryUrl() + " in " + TaskRepositoriesView.NAME + ".", null));
+ }
+
+ TasksUiPlugin.getTaskListManager().getTaskList().notifyRepositoryInfoChanged(repositoryTask);
+ IOfflineTaskHandler offlineHandler = connector.getOfflineTaskHandler();
+ if (offlineHandler != null) {
+ String taskId = AbstractRepositoryTask.getTaskId(repositoryTask.getHandleIdentifier());
+ RepositoryTaskData downloadedTaskData = offlineHandler.downloadTaskData(repository, taskId,
+ TasksUiPlugin.getDefault().getProxySettings());
+
+ if (downloadedTaskData != null) {
+ TasksUiPlugin.getSynchronizationManager().updateOfflineState(repositoryTask, downloadedTaskData,
+ forceSync);
+ refreshEditors(repositoryTask);
+ } else {
+ connector.updateTask(repository, repositoryTask);
+ }
+ } else {
+ connector.updateTask(repository, repositoryTask);
+ }
+ }
+ }
+
private void refreshEditors(final AbstractRepositoryTask repositoryTask) {
// TODO: move out of SynchronizeTaskJob (but beware of race conditions)
if (repositoryTask.getSyncState() == RepositoryTaskSyncState.INCOMING
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
index 08479adf8..7f7a9660b 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java
@@ -107,8 +107,17 @@ public class TracRepositoryConnector extends AbstractRepositoryConnector {
}
@Override
- public void updateTaskState(AbstractRepositoryTask repositoryTask) {
- // TODO Auto-generated method stub
+ public void updateTask(TaskRepository repository, AbstractRepositoryTask repositoryTask) throws CoreException {
+ if (repositoryTask instanceof TracTask) {
+ String id = AbstractRepositoryTask.getTaskId(repositoryTask.getHandleIdentifier());
+ try {
+ ITracClient connection = getClientManager().getRepository(repository);
+ TracTicket ticket = connection.getTicket(Integer.parseInt(id));
+ updateTaskDetails((TracTask) repositoryTask, ticket, false);
+ } catch (Exception e) {
+ throw new CoreException(TracCorePlugin.toStatus(e));
+ }
+ }
}
@Override

Back to the top