Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2011-04-10 17:11:34 +0000
committerspingel2011-04-10 17:11:34 +0000
commit201b9ed6cf261873ca335b868ab5410d4e06b6ab (patch)
treef46a0e02aaeb3dcfb7ed176af571ddc52d532248 /org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac
parent2de5b299beb2de8f59802853724b32fbe3a2d8f9 (diff)
downloadorg.eclipse.mylyn.tasks-201b9ed6cf261873ca335b868ab5410d4e06b6ab.tar.gz
org.eclipse.mylyn.tasks-201b9ed6cf261873ca335b868ab5410d4e06b6ab.tar.xz
org.eclipse.mylyn.tasks-201b9ed6cf261873ca335b868ab5410d4e06b6ab.zip
NEW - bug 342374: provide history for Trac tasks
https://bugs.eclipse.org/bugs/show_bug.cgi?id=342374
Diffstat (limited to 'org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac')
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java40
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/ITracClient.java3
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java5
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java9
4 files changed, 57 insertions, 0 deletions
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 9f7d26c73..278a37aee 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
@@ -35,6 +35,7 @@ import org.eclipse.mylyn.internal.trac.core.client.AbstractWikiHandler;
import org.eclipse.mylyn.internal.trac.core.client.ITracClient;
import org.eclipse.mylyn.internal.trac.core.client.ITracClient.Version;
import org.eclipse.mylyn.internal.trac.core.client.ITracWikiClient;
+import org.eclipse.mylyn.internal.trac.core.model.TracComment;
import org.eclipse.mylyn.internal.trac.core.model.TracPriority;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket;
@@ -49,8 +50,10 @@ import org.eclipse.mylyn.tasks.core.TaskRepositoryLocationFactory;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.core.data.TaskDataCollector;
+import org.eclipse.mylyn.tasks.core.data.TaskHistory;
import org.eclipse.mylyn.tasks.core.data.TaskMapper;
import org.eclipse.mylyn.tasks.core.data.TaskRelation;
+import org.eclipse.mylyn.tasks.core.data.TaskRevision;
import org.eclipse.mylyn.tasks.core.sync.ISynchronizationSession;
/**
@@ -710,4 +713,41 @@ public class TracRepositoryConnector extends AbstractRepositoryConnector {
return new TracTaskMapper(taskData, client);
}
+ @Override
+ public boolean canGetTaskHistory(TaskRepository repository, ITask task) {
+ return Version.XML_RPC.name().equals(repository.getVersion());
+ }
+
+ @Override
+ public TaskHistory getTaskHistory(TaskRepository repository, ITask task, IProgressMonitor monitor)
+ throws CoreException {
+ try {
+ ITracClient client = getClientManager().getTracClient(repository);
+ List<TracComment> comments = client.getComments(getTicketId(task.getTaskId()), monitor);
+ TaskHistory history = new TaskHistory(repository, task);
+ TaskRevision revision = null;
+ for (TracComment comment : comments) {
+ String id = comment.getCreated().getTime() + ""; //$NON-NLS-1$
+ if (revision == null || !id.equals(revision.getId())) {
+ revision = new TaskRevision(id, comment.getCreated(), repository.createPerson(comment.getAuthor()));
+ history.add(revision);
+ }
+ TracAttribute attribute = TracAttribute.getByTracKey(comment.getField());
+ if (attribute != null) {
+ String fieldName = attribute.toString();
+ if (fieldName.endsWith(":")) { //$NON-NLS-1$
+ fieldName = fieldName.substring(0, fieldName.length() - 1);
+ }
+ TaskRevision.Change change = new TaskRevision.Change(attribute.getTracKey(), fieldName,
+ comment.getOldValue(), comment.getNewValue());
+ revision.add(change);
+ }
+ }
+ return history;
+ } catch (OperationCanceledException e) {
+ throw e;
+ } catch (Throwable e) {
+ throw new CoreException(TracCorePlugin.toStatus(e, repository));
+ }
+ }
}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/ITracClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/ITracClient.java
index 5bc760ddb..81e1c96b0 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/ITracClient.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/ITracClient.java
@@ -17,6 +17,7 @@ import java.util.List;
import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
+import org.eclipse.mylyn.internal.trac.core.model.TracComment;
import org.eclipse.mylyn.internal.trac.core.model.TracComponent;
import org.eclipse.mylyn.internal.trac.core.model.TracMilestone;
import org.eclipse.mylyn.internal.trac.core.model.TracPriority;
@@ -214,4 +215,6 @@ public interface ITracClient {
void deleteTicket(int ticketId, IProgressMonitor monitor) throws TracException;
+ List<TracComment> getComments(int id, IProgressMonitor monitor) throws TracException;
+
}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java
index 5a0bc5e9a..dcef06aa1 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracWebClient.java
@@ -51,6 +51,7 @@ import org.eclipse.mylyn.commons.net.Policy;
import org.eclipse.mylyn.commons.net.UnsupportedRequestException;
import org.eclipse.mylyn.commons.net.WebUtil;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
+import org.eclipse.mylyn.internal.trac.core.model.TracComment;
import org.eclipse.mylyn.internal.trac.core.model.TracComponent;
import org.eclipse.mylyn.internal.trac.core.model.TracMilestone;
import org.eclipse.mylyn.internal.trac.core.model.TracPriority;
@@ -783,4 +784,8 @@ public class TracWebClient extends AbstractTracClient {
throw new UnsupportedOperationException();
}
+ public List<TracComment> getComments(int id, IProgressMonitor monitor) throws TracException {
+ throw new UnsupportedOperationException();
+ }
+
}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java
index 7bcae7f8c..9d687d313 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/client/TracXmlRpcClient.java
@@ -569,6 +569,15 @@ public class TracXmlRpcClient extends AbstractTracClient implements ITracWikiCli
return info.isApiVersionOrHigher(epoch, major, minor);
}
+ public List<TracComment> getComments(int id, IProgressMonitor monitor) throws TracException {
+ Object[] result = (Object[]) call(monitor, "ticket.changeLog", id, 0); //$NON-NLS-1$
+ List<TracComment> comments = new ArrayList<TracComment>(result.length);
+ for (Object item : result) {
+ comments.add(parseChangeLogEntry((Object[]) item));
+ }
+ return comments;
+ }
+
public TracTicket getTicket(int id, IProgressMonitor monitor) throws TracException {
Object[] result = (Object[]) call(monitor, "ticket.get", id); //$NON-NLS-1$
TracTicket ticket = parseTicket(result);

Back to the top