diff options
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/TracCorePlugin.java | 18 | ||||
-rw-r--r-- | org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java | 4 | ||||
-rw-r--r-- | org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java | 8 | ||||
-rw-r--r-- | org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracStatus.java | 73 | ||||
-rw-r--r-- | org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java (renamed from org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracOfflineTaskHandler.java) | 28 |
5 files changed, 110 insertions, 21 deletions
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java index 20f14607b..e398aa4b1 100644 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java +++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java @@ -15,6 +15,7 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.Platform; import org.eclipse.core.runtime.Plugin; import org.eclipse.core.runtime.Status; +import org.eclipse.mylar.tasks.core.TaskRepository; import org.osgi.framework.BundleContext; /** @@ -75,16 +76,21 @@ public class TracCorePlugin extends Plugin { return cacheFile; } - public static IStatus toStatus(Throwable e) { + public static TracStatus toStatus(Throwable e, TaskRepository repository) { + TracStatus status = toStatus(e); + status.setRepositoryUrl(repository.getUrl()); + return status; + } + + public static TracStatus toStatus(Throwable e) { if (e instanceof TracLoginException) { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.INFO, - "Your login name or password is incorrect. Ensure proper repository configuration in Task Repositories View.", null); + return new TracStatus(Status.ERROR, PLUGIN_ID, TracStatus.REPOSITORY_LOGIN_ERROR); } else if (e instanceof TracException) { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.INFO, "Connection Error: " + e.getMessage(), e); + return new TracStatus(Status.ERROR, PLUGIN_ID, TracStatus.IO_ERROR, e.getMessage()); } else if (e instanceof ClassCastException) { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.INFO, "Error parsing server response", e); + return new TracStatus(Status.ERROR, PLUGIN_ID, TracStatus.IO_ERROR, "Unexpected server response: " + e.getMessage(), e); } else { - return new Status(Status.ERROR, PLUGIN_ID, IStatus.ERROR, "Unexpected error", e); + return new TracStatus(Status.ERROR, PLUGIN_ID, TracStatus.INTERNAL_ERROR, "Unexpected error", e); } } diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java index f38b02a4a..0f66cbf0f 100644 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java +++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracException.java @@ -28,11 +28,11 @@ public class TracException extends Exception { } public TracException(Throwable cause) { - super(cause); + super(cause.getMessage(), cause); } public TracException(String message, Throwable cause) { super(message, cause); } - + } 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 62df2d50e..f67116946 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 @@ -47,7 +47,7 @@ public class TracRepositoryConnector extends AbstractRepositoryConnector { private TracClientManager clientManager; - private TracOfflineTaskHandler offlineTaskHandler = new TracOfflineTaskHandler(this); + private TracTaskDataHandler taskDataHandler = new TracTaskDataHandler(this); private TracAttachmentHandler attachmentHandler = new TracAttachmentHandler(this); @@ -116,7 +116,7 @@ public class TracRepositoryConnector extends AbstractRepositoryConnector { @Override public ITaskDataHandler getTaskDataHandler() { - return offlineTaskHandler; + return taskDataHandler; } @Override @@ -178,7 +178,7 @@ public class TracRepositoryConnector extends AbstractRepositoryConnector { if (existingTask instanceof TracTask) { task = (TracTask) existingTask; } else { - RepositoryTaskData taskData = offlineTaskHandler.downloadTaskData(repository, bugId); + RepositoryTaskData taskData = taskDataHandler.downloadTaskData(repository, bugId); if (taskData != null) { task = new TracTask(handle, getTicketDescription(taskData), true); task.setTaskData(taskData); @@ -193,7 +193,7 @@ public class TracRepositoryConnector extends AbstractRepositoryConnector { updateTaskDetails(task, ticket, false); taskList.addTask(task); } catch (Exception e) { - throw new CoreException(TracCorePlugin.toStatus(e)); + throw new CoreException(TracCorePlugin.toStatus(e, repository)); } } } diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracStatus.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracStatus.java new file mode 100644 index 000000000..3e64619df --- /dev/null +++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracStatus.java @@ -0,0 +1,73 @@ +/******************************************************************************* + * Copyright (c) 2004 - 2006 University Of British Columbia 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: + * University Of British Columbia - initial API and implementation + *******************************************************************************/ + +package org.eclipse.mylar.internal.trac.core; + +import org.eclipse.core.runtime.Status; +import org.eclipse.mylar.tasks.core.IMylarStatusConstants; +import org.eclipse.osgi.util.NLS; + +/** + * @author Rob Elves + * @author Steffen Pingel + */ +public class TracStatus extends Status implements IMylarStatusConstants { + + private String repositoryUrl; + + public TracStatus(int severity, String pluginId, int code) { + super(severity, pluginId, code, null, null); + } + + public TracStatus(int severity, String pluginId, int code, String message) { + super(severity, pluginId, code, message, null); + } + + public TracStatus(int severity, String pluginId, int code, String message, Throwable e) { + super(severity, pluginId, code, message, e); + } + + /** + * Returns the message that is relevant to the code of this status. + */ + public String getMessage() { + String message = super.getMessage(); + if (message != null) { + return message; + } + + Throwable exception = getException(); + if (exception != null) { + if (exception.getMessage() != null) { + return exception.getMessage(); + } + return exception.toString(); + } + + switch (getCode()) { + case REPOSITORY_LOGIN_ERROR: + return NLS.bind("Unable to login to {0}. Please validate credentials via Task Repositories view.", getRepositoryUrl()); + case REPOSITORY_NOT_FOUND: + return NLS.bind("Repository {0} could not be found.", getRepositoryUrl()); + default: + return ""; + } + } + + public String getRepositoryUrl() { + return repositoryUrl; + } + + public void setRepositoryUrl(String repsitoryUrl) { + this.repositoryUrl = repsitoryUrl; + } + +} diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracOfflineTaskHandler.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java index f1c915834..0d76d88ab 100644 --- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracOfflineTaskHandler.java +++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java @@ -44,7 +44,7 @@ import org.eclipse.mylar.tasks.core.TaskRepository; /** * @author Steffen Pingel */ -public class TracOfflineTaskHandler implements ITaskDataHandler { +public class TracTaskDataHandler implements ITaskDataHandler { private static final String CC_DELIMETER = ", "; @@ -52,12 +52,11 @@ public class TracOfflineTaskHandler implements ITaskDataHandler { private TracRepositoryConnector connector; - public TracOfflineTaskHandler(TracRepositoryConnector connector) { + public TracTaskDataHandler(TracRepositoryConnector connector) { this.connector = connector; } - public RepositoryTaskData getTaskData(TaskRepository repository, String taskId) - throws CoreException { + public RepositoryTaskData getTaskData(TaskRepository repository, String taskId) throws CoreException { int id = Integer.parseInt(taskId); return downloadTaskData(repository, id); } @@ -78,8 +77,7 @@ public class TracOfflineTaskHandler implements ITaskDataHandler { updateTaskData(repository, attributeFactory, data, ticket); return data; } catch (Exception e) { - throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.PLUGIN_ID, 0, "Ticket download from " - + repository.getUrl() + " for task " + id + " failed, please see details.", e)); + throw new CoreException(TracCorePlugin.toStatus(e, repository)); } } @@ -146,7 +144,7 @@ public class TracOfflineTaskHandler implements ITaskDataHandler { taskAttachment.setCreator(attachments[i].getAuthor()); taskAttachment.setRepositoryKind(TracCorePlugin.REPOSITORY_KIND); taskAttachment.setRepositoryUrl(repository.getUrl()); - taskAttachment.setTaskId(""+ticket.getId()); + taskAttachment.setTaskId("" + ticket.getId()); taskAttachment.setAttributeValue(Attribute.DESCRIPTION.getTracKey(), attachments[i].getDescription()); taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_FILENAME, attachments[i] .getFilename()); @@ -303,7 +301,19 @@ public class TracOfflineTaskHandler implements ITaskDataHandler { } public String postTaskData(TaskRepository repository, RepositoryTaskData taskData) throws CoreException { - // TODO: implement - return null; + try { + TracTicket ticket = TracRepositoryConnector.getTracTicket(repository, taskData); + ITracClient server = ((TracRepositoryConnector) connector).getClientManager().getRepository(repository); + if (taskData.isNew()) { + int id = server.createTicket(ticket); + return id + ""; + } else { + server.updateTicket(ticket, taskData.getNewComment()); + return null; + } + } catch (Exception e) { + throw new CoreException(TracCorePlugin.toStatus(e)); + } } + } |