diff options
author | spingel | 2011-04-10 17:11:34 +0000 |
---|---|---|
committer | spingel | 2011-04-10 17:11:34 +0000 |
commit | 201b9ed6cf261873ca335b868ab5410d4e06b6ab (patch) | |
tree | f46a0e02aaeb3dcfb7ed176af571ddc52d532248 /org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac | |
parent | 2de5b299beb2de8f59802853724b32fbe3a2d8f9 (diff) | |
download | org.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')
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); |