diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.core/src/org/eclipse')
11 files changed, 273 insertions, 287 deletions
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalRepositoryConnector.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalRepositoryConnector.java index a8b47146b..f160f677a 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalRepositoryConnector.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalRepositoryConnector.java @@ -17,12 +17,12 @@ import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; +import org.eclipse.mylyn.tasks.core.AbstractAttachmentHandler; import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector; import org.eclipse.mylyn.tasks.core.AbstractRepositoryQuery; import org.eclipse.mylyn.tasks.core.AbstractTask; -import org.eclipse.mylyn.tasks.core.IAttachmentHandler; -import org.eclipse.mylyn.tasks.core.ITaskCollector; import org.eclipse.mylyn.tasks.core.AbstractTaskDataHandler; +import org.eclipse.mylyn.tasks.core.ITaskCollector; import org.eclipse.mylyn.tasks.core.RepositoryTaskData; import org.eclipse.mylyn.tasks.core.TaskRepository; @@ -57,7 +57,7 @@ public class LocalRepositoryConnector extends AbstractRepositoryConnector { } @Override - public IAttachmentHandler getAttachmentHandler() { + public AbstractAttachmentHandler getAttachmentHandler() { // TODO: Implement local attachments return null; } @@ -74,7 +74,7 @@ public class LocalRepositoryConnector extends AbstractRepositoryConnector { } @Override - public String getRepositoryType() { + public String getConnectorKind() { return REPOSITORY_KIND; } @@ -97,7 +97,7 @@ public class LocalRepositoryConnector extends AbstractRepositoryConnector { } @Override - public String getTaskWebUrl(String repositoryUrl, String taskId) { + public String getTaskUrl(String repositoryUrl, String taskId) { // ignore return null; } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalTask.java index b70740a3f..f3c199b45 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalTask.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/LocalTask.java @@ -30,7 +30,7 @@ public class LocalTask extends AbstractTask { } @Override - public String getRepositoryKind() { + public String getConnectorKind() { return LocalRepositoryConnector.REPOSITORY_KIND; } @@ -38,7 +38,7 @@ public class LocalTask extends AbstractTask { return true; } - public String getLastSyncDateStamp() { + public String getLastReadTimeStamp() { return SYNC_DATE_NOW; } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskDelegate.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskDelegate.java index 68dd9dbbd..f77be2d42 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskDelegate.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/internal/tasks/core/ScheduledTaskDelegate.java @@ -150,8 +150,8 @@ public class ScheduledTaskDelegate extends AbstractTask { return task.getTaskUrl(); } - public boolean hasBeenReminded() { - return task.hasBeenReminded(); + public boolean isReminded() { + return task.isReminded(); } public boolean hasValidUrl() { @@ -204,8 +204,8 @@ public class ScheduledTaskDelegate extends AbstractTask { // task.setHandleIdentifier(taskId); // } - public void setKind(String kind) { - task.setKind(kind); + public void setTaskKind(String kind) { + task.setTaskKind(kind); } public void setNotes(String notes) { @@ -250,7 +250,7 @@ public class ScheduledTaskDelegate extends AbstractTask { } @Override - public String getRepositoryKind() { - return task.getRepositoryKind(); + public String getConnectorKind() { + return task.getConnectorKind(); } } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttachmentHandler.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttachmentHandler.java index 01cd315da..bc21ca0b6 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttachmentHandler.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttachmentHandler.java @@ -9,24 +9,63 @@ package org.eclipse.mylyn.tasks.core; import java.io.BufferedInputStream; +import java.io.File; +import java.io.FileNotFoundException; +import java.io.FileOutputStream; import java.io.IOException; import java.io.InputStream; import java.io.OutputStream; +import java.util.HashSet; +import java.util.Set; import org.eclipse.core.runtime.CoreException; import org.eclipse.core.runtime.IProgressMonitor; import org.eclipse.core.runtime.IStatus; import org.eclipse.core.runtime.OperationCanceledException; import org.eclipse.core.runtime.SubProgressMonitor; +import org.eclipse.mylyn.context.core.ContextCorePlugin; import org.eclipse.mylyn.internal.monitor.core.util.StatusManager; +import org.eclipse.mylyn.internal.tasks.core.TaskDataManager; +import org.eclipse.mylyn.tasks.core.AbstractTask.RepositoryTaskSyncState; /** + * Extend to provide facility for downloading files from the task repository. + * * @author Steffen Pingel + * @since 2.0 */ -public abstract class AbstractAttachmentHandler implements IAttachmentHandler { +public abstract class AbstractAttachmentHandler { protected static final int BUFFER_SIZE = 1024; + + private TaskDataManager taskDataManager = null; + public static final String MESSAGE_ATTACHMENTS_NOT_SUPPORTED = "Attachments not supported by connector: "; + + public static final String MYLAR_CONTEXT_DESCRIPTION_LEGACY = "mylar/context/zip"; + + public final static String MYLAR_CONTEXT_FILENAME = "mylyn-context.zip"; + + public static final String MYLAR_CONTEXT_DESCRIPTION = "mylyn/context/zip"; + + public abstract void uploadAttachment(TaskRepository repository, AbstractTask task, ITaskAttachment attachment, + String comment, IProgressMonitor monitor) throws CoreException; + + public abstract InputStream getAttachmentAsStream(TaskRepository repository, RepositoryAttachment attachment, + IProgressMonitor monitor) throws CoreException; + + public abstract boolean canUploadAttachment(TaskRepository repository, AbstractTask task); + + public abstract boolean canDownloadAttachment(TaskRepository repository, AbstractTask task); + + public abstract boolean canDeprecate(TaskRepository repository, RepositoryAttachment attachment); + + /** + * To deprecate, change the attribute on the RepositoryAttachment and pass + * to this method + */ + public abstract void updateAttachment(TaskRepository repository, RepositoryAttachment attachment) throws CoreException; + public void downloadAttachment(TaskRepository repository, RepositoryAttachment attachment, OutputStream out, IProgressMonitor monitor) throws CoreException { monitor.beginTask("Downloading attachment", IProgressMonitor.UNKNOWN); @@ -61,4 +100,111 @@ public abstract class AbstractAttachmentHandler implements IAttachmentHandler { } } + public final boolean hasRepositoryContext(TaskRepository repository, AbstractTask task) { + if (repository == null || task == null) { + return false; + } else { + Set<RepositoryAttachment> remoteContextAttachments = getContextAttachments(repository, task); + return (remoteContextAttachments != null && remoteContextAttachments.size() > 0); + } + } + + /** + * Implementors of this repositoryOperations must perform it locally without going to the server since it is used + * for frequent repositoryOperations such as decoration. + * + * @return an empty set if no contexts + */ + public final Set<RepositoryAttachment> getContextAttachments(TaskRepository repository, AbstractTask task) { + Set<RepositoryAttachment> contextAttachments = new HashSet<RepositoryAttachment>(); + + if (taskDataManager != null) { + RepositoryTaskData newData = taskDataManager.getNewTaskData(task.getRepositoryUrl(), task.getTaskId()); + if (newData != null) { + for (RepositoryAttachment attachment : newData.getAttachments()) { + if (attachment.getDescription().equals(MYLAR_CONTEXT_DESCRIPTION)) { + contextAttachments.add(attachment); + } else if (attachment.getDescription().equals(MYLAR_CONTEXT_DESCRIPTION_LEGACY)) { + contextAttachments.add(attachment); + } + } + } + } + return contextAttachments; + } + + /** + * Attaches the associated context to <code>task</code>. + * + * @return false, if operation is not supported by repository + */ + public final boolean attachContext(TaskRepository repository, AbstractTask task, String longComment, + IProgressMonitor monitor) throws CoreException { + ContextCorePlugin.getContextManager().saveContext(task.getHandleIdentifier()); + final File sourceContextFile = ContextCorePlugin.getContextManager().getFileForContext( + task.getHandleIdentifier()); + + RepositoryTaskSyncState previousState = task.getSynchronizationState(); + + if (sourceContextFile != null && sourceContextFile.exists()) { + try { + task.setSubmitting(true); + task.setSynchronizationState(RepositoryTaskSyncState.OUTGOING); + FileAttachment attachment = new FileAttachment(sourceContextFile); + attachment.setDescription(AbstractAttachmentHandler.MYLAR_CONTEXT_DESCRIPTION); + attachment.setFilename(AbstractAttachmentHandler.MYLAR_CONTEXT_FILENAME); + uploadAttachment(repository, task, attachment, longComment, monitor); + } catch (CoreException e) { + // TODO: Calling method should be responsible for returning + // state of task. Wizard will have different behaviour than + // editor. + task.setSynchronizationState(previousState); + throw e; + } catch (OperationCanceledException e) { + return true; + } + } + return true; + } + + /** + * Retrieves a context stored in <code>attachment</code> from <code>task</code>. + * + * @return false, if operation is not supported by repository + */ + public final boolean retrieveContext(TaskRepository repository, AbstractTask task, RepositoryAttachment attachment, + String destinationPath, IProgressMonitor monitor) throws CoreException { + + File destinationContextFile = ContextCorePlugin.getContextManager().getFileForContext( + task.getHandleIdentifier()); + + // TODO: add functionality for not overwriting previous context + if (destinationContextFile.exists()) { + if (!destinationContextFile.delete()) { + return false; + } + } + FileOutputStream out; + try { + out = new FileOutputStream(destinationContextFile); + try { + downloadAttachment(repository, attachment, out, monitor); + } finally { + try { + out.close(); + } catch (IOException e) { + StatusManager.fail(e, "Could not close context file", false); + } + } + } catch (FileNotFoundException e) { + throw new CoreException(new RepositoryStatus(IStatus.ERROR, "org.eclipse.mylyn.tasks.core", + RepositoryStatus.ERROR_INTERNAL, "Could not create context file", e)); + } + return true; + } + + public void setTaskDataManager(TaskDataManager taskDataManager) { + this.taskDataManager = taskDataManager; + } + } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java index ec4c36c7d..eab845474 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractAttributeFactory.java @@ -16,24 +16,27 @@ import java.util.Date; /** + * Extend to provide mapping between repository task attribute IDs and native repository IDs. + * * @author Rob Elves + * @since 2.0 */ public abstract class AbstractAttributeFactory implements Serializable { public RepositoryTaskAttribute createAttribute(String key) { String mapped = mapCommonAttributeKey(key); - RepositoryTaskAttribute attribute = new RepositoryTaskAttribute(mapped, getName(mapped), getIsHidden(mapped)); + RepositoryTaskAttribute attribute = new RepositoryTaskAttribute(mapped, getName(mapped), isHidden(mapped)); attribute.setReadOnly(isReadOnly(mapped)); return attribute; } public abstract String mapCommonAttributeKey(String key); - public abstract boolean getIsHidden(String key); - public abstract String getName(String key); public abstract boolean isReadOnly(String key); + + public abstract boolean isHidden(String key); /** * @return null if date cannot be parsed 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 f265e0be4..9b3ad09de 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 @@ -32,21 +32,15 @@ import org.eclipse.mylyn.internal.tasks.core.TaskDataManager; import org.eclipse.mylyn.tasks.core.AbstractTask.RepositoryTaskSyncState; /** - * Operations on a task repository + * Encapsulates common operations that can be performed on a task repository. Extend to + * connect with a Java API or WS API for accessing the repository. * * @author Mik Kersten * @author Rob Elves + * @since 2.0 */ public abstract class AbstractRepositoryConnector { - public static final String MESSAGE_ATTACHMENTS_NOT_SUPPORTED = "Attachments not supported by connector: "; - - public static final String MYLAR_CONTEXT_DESCRIPTION_LEGACY = "mylar/context/zip"; - - public static final String MYLAR_CONTEXT_DESCRIPTION = "mylyn/context/zip"; - - public final static String MYLAR_CONTEXT_FILENAME = "mylyn-context.zip"; - protected Set<RepositoryTemplate> templates = new LinkedHashSet<RepositoryTemplate>(); protected TaskList taskList; @@ -58,11 +52,22 @@ public abstract class AbstractRepositoryConnector { public void init(TaskList taskList) { this.taskList = taskList; } + + /** + * Set upon construction + */ + public void setTaskDataManager(TaskDataManager taskDataManager) { + this.taskDataManager = taskDataManager; + AbstractAttachmentHandler handler = getAttachmentHandler(); + if (handler != null) { + handler.setTaskDataManager(taskDataManager); + } + } /** * @return null if not supported */ - public abstract IAttachmentHandler getAttachmentHandler(); + public abstract AbstractAttachmentHandler getAttachmentHandler(); /** * @return null if not supported @@ -73,7 +78,7 @@ public abstract class AbstractRepositoryConnector { public abstract String getTaskIdFromTaskUrl(String taskFullUrl); - public abstract String getTaskWebUrl(String repositoryUrl, String taskId); + public abstract String getTaskUrl(String repositoryUrl, String taskId); public String[] getTaskIdsFromComment(TaskRepository repository, String comment) { return null; @@ -179,9 +184,9 @@ public abstract class AbstractRepositoryConnector { public abstract String getLabel(); /** - * @return the unique type of the repository, e.g. "bugzilla" + * @return the unique kind of the repository, e.g. "bugzilla" */ - public abstract String getRepositoryType(); + public abstract String getConnectorKind(); /** * Updates the properties of <code>repositoryTask</code>. Invoked when on task synchronization if @@ -227,14 +232,6 @@ public abstract class AbstractRepositoryConnector { existingTask.setSummary(queryHit.getSummary()); changed = true; } -// if (hasTaskPropertyChanged(existingTask.getCompletionDate(), queryHit.getCompletionDate())) { -// existingTask.setCompletionDate(queryHit.getCompletionDate()); -// changed = true; -// } -// if (hasTaskPropertyChanged(existingTask.getCreationDate(), newTask.getCreationDate())) { -// existingTask.setCreationDate(newTask.getCreationDate()); -// changed = true; -// } if (hasTaskPropertyChanged(existingTask.getDueDate(), queryHit.getDueDate())) { existingTask.setDueDate(queryHit.getDueDate()); changed = true; @@ -263,46 +260,12 @@ public abstract class AbstractRepositoryConnector { return (existingProperty == null) ? true : !existingProperty.equals(newProperty); } - public String[] repositoryPropertyNames() { + public String[] getPepositoryPropertyNames() { return new String[] { IRepositoryConstants.PROPERTY_VERSION, IRepositoryConstants.PROPERTY_TIMEZONE, IRepositoryConstants.PROPERTY_ENCODING }; } /** - * Implementors of this repositoryOperations must perform it locally without going to the server since it is used - * for frequent repositoryOperations such as decoration. - * - * @return an empty set if no contexts - */ - public final Set<RepositoryAttachment> getContextAttachments(TaskRepository repository, AbstractTask task) { - Set<RepositoryAttachment> contextAttachments = new HashSet<RepositoryAttachment>(); - - if (taskDataManager != null) { - RepositoryTaskData newData = taskDataManager.getNewTaskData(task.getRepositoryUrl(), task.getTaskId()); - if (newData != null) { - for (RepositoryAttachment attachment : newData.getAttachments()) { - if (attachment.getDescription().equals(MYLAR_CONTEXT_DESCRIPTION)) { - contextAttachments.add(attachment); - } else if (attachment.getDescription().equals(MYLAR_CONTEXT_DESCRIPTION_LEGACY)) { - contextAttachments.add(attachment); - } - } - } - } - return contextAttachments; - } - - // TODO: move - public final boolean hasRepositoryContext(TaskRepository repository, AbstractTask task) { - if (repository == null || task == null) { - return false; - } else { - Set<RepositoryAttachment> remoteContextAttachments = getContextAttachments(repository, task); - return (remoteContextAttachments != null && remoteContextAttachments.size() > 0); - } - } - - /** * Of <code>tasks</code> provided, return all that have changed since last synchronization of * <code>repository</code>. * @@ -324,85 +287,6 @@ public abstract class AbstractRepositoryConnector { public abstract boolean markStaleTasks(TaskRepository repository, Set<AbstractTask> tasks, IProgressMonitor monitor) throws CoreException; - /** - * Attaches the associated context to <code>task</code>. - * - * @return false, if operation is not supported by repository - */ - public final boolean attachContext(TaskRepository repository, AbstractTask task, String longComment, - IProgressMonitor monitor) throws CoreException { - ContextCorePlugin.getContextManager().saveContext(task.getHandleIdentifier()); - final File sourceContextFile = ContextCorePlugin.getContextManager().getFileForContext( - task.getHandleIdentifier()); - - RepositoryTaskSyncState previousState = task.getSyncState(); - - if (sourceContextFile != null && sourceContextFile.exists()) { - IAttachmentHandler handler = getAttachmentHandler(); - if (handler == null) { - return false; - } - - try { - task.setSubmitting(true); - task.setSyncState(RepositoryTaskSyncState.OUTGOING); - FileAttachment attachment = new FileAttachment(sourceContextFile); - attachment.setDescription(MYLAR_CONTEXT_DESCRIPTION); - attachment.setFilename(MYLAR_CONTEXT_FILENAME); - handler.uploadAttachment(repository, task, attachment, longComment, monitor); - } catch (CoreException e) { - // TODO: Calling method should be responsible for returning - // state of task. Wizard will have different behaviour than - // editor. - task.setSyncState(previousState); - throw e; - } catch (OperationCanceledException e) { - return true; - } - } - return true; - } - - /** - * Retrieves a context stored in <code>attachment</code> from <code>task</code>. - * - * @return false, if operation is not supported by repository - */ - public final boolean retrieveContext(TaskRepository repository, AbstractTask task, RepositoryAttachment attachment, - String destinationPath, IProgressMonitor monitor) throws CoreException { - IAttachmentHandler attachmentHandler = getAttachmentHandler(); - if (attachmentHandler == null) { - return false; - } - - File destinationContextFile = ContextCorePlugin.getContextManager().getFileForContext( - task.getHandleIdentifier()); - - // TODO: add functionality for not overwriting previous context - if (destinationContextFile.exists()) { - if (!destinationContextFile.delete()) { - return false; - } - } - FileOutputStream out; - try { - out = new FileOutputStream(destinationContextFile); - try { - attachmentHandler.downloadAttachment(repository, attachment, out, monitor); - } finally { - try { - out.close(); - } catch (IOException e) { - StatusManager.fail(e, "Could not close context file", false); - } - } - } catch (FileNotFoundException e) { - throw new CoreException(new RepositoryStatus(IStatus.ERROR, "org.eclipse.mylyn.tasks.core", - RepositoryStatus.ERROR_INTERNAL, "Could not create context file", e)); - } - return true; - } - public void addTemplate(RepositoryTemplate template) { this.templates.add(template); } @@ -425,6 +309,10 @@ public abstract class AbstractRepositoryConnector { return null; } + /** + * Used for referring to the task in the UI. + * @return + */ public String getTaskIdPrefix() { return "task"; } @@ -481,11 +369,4 @@ public abstract class AbstractRepositoryConnector { return taskDataManager; } - /** - * Set upon construction - */ - public void setTaskDataManager(TaskDataManager taskDataManager) { - this.taskDataManager = taskDataManager; - } - } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java index 6c5ebee77..2a4913b56 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryQuery.java @@ -14,17 +14,20 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.mylyn.tasks.core.AbstractTask.PriorityLevel; /** + * Extend to provide a repository query that can be used in the Task List. + * * @author Mik Kersten * @author Eugene Kuleshov * @author Rob Elves + * @since 2.0 */ public abstract class AbstractRepositoryQuery extends AbstractTaskContainer { protected String repositoryUrl; - protected String lastRefreshTimeStamp = "<never>"; + protected String lastSynchronizedStamp = "<never>"; - private boolean currentlySynchronizing = false; + private boolean synchronizing = false; protected IStatus status = null; @@ -61,26 +64,26 @@ public abstract class AbstractRepositoryQuery extends AbstractTaskContainer { } public boolean isSynchronizing() { - return currentlySynchronizing; + return synchronizing; } - public void setCurrentlySynchronizing(boolean currentlySynchronizing) { - this.currentlySynchronizing = currentlySynchronizing; + public void setSynchronizing(boolean synchronizing) { + this.synchronizing = synchronizing; } - public String getLastRefreshTimeStamp() { - return lastRefreshTimeStamp; + public String getLastSynchronizedTimeStamp() { + return lastSynchronizedStamp; } - public void setLastRefreshTimeStamp(String lastRefreshTimeStamp) { - this.lastRefreshTimeStamp = lastRefreshTimeStamp; + public void setLastSynchronizedStamp(String lastRefreshTimeStamp) { + this.lastSynchronizedStamp = lastRefreshTimeStamp; } - public IStatus getStatus() { + public IStatus getSynchronizationStatus() { return status; } - public void setStatus(IStatus status) { + public void setSynchronizationStatus(IStatus status) { this.status = status; } 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 deleted file mode 100644 index e69de29bb..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryTask.java +++ /dev/null diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java index df1511308..813f00bcc 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractTask.java @@ -21,60 +21,63 @@ import org.eclipse.core.runtime.IStatus; import org.eclipse.mylyn.internal.tasks.core.RepositoryTaskHandleUtil; /** + * Encapsulates tasks that reside on a repository or local computer and participate in synchronization with the source + * that contains their data. + * * @author Mik Kersten * @author Rob Elves + * @since 2.0 */ public abstract class AbstractTask extends AbstractTaskContainer { - + public static final String DEFAULT_TASK_KIND = "task"; - + private String repositoryUrl; - private String kind = DEFAULT_TASK_KIND; - + private String taskKind = DEFAULT_TASK_KIND; + private String taskId; - + private String owner; - + private boolean active = false; - + private String summary; private String priority = PriorityLevel.getDefault().toString(); private boolean completed; - + private boolean isNotifiedIncoming = false; - - private boolean hasReminded = false; + + private boolean reminded = false; private String taskUrl = ""; private Set<AbstractTaskContainer> containers = new HashSet<AbstractTaskContainer>(); - - + // ************ Synch **************** - + /** The last time this task's bug report was in a synchronized (read?) state. */ - private String lastSynchronizedDateStamp; + private String lastReadTimeStamp; - private boolean currentlySynchronizing; + private boolean synchronizing; private boolean submitting; - - private RepositoryTaskSyncState syncState = RepositoryTaskSyncState.SYNCHRONIZED; + + private RepositoryTaskSyncState synchronizationState = RepositoryTaskSyncState.SYNCHRONIZED; // transient - private IStatus errorStatus = null; + private IStatus synchronizationStatus = null; private boolean stale = false; - + public enum RepositoryTaskSyncState { OUTGOING, SYNCHRONIZED, INCOMING, CONFLICT } - + // ************ Planning **************** - + private Date completionDate = null; private Date creationDate = null; @@ -82,14 +85,14 @@ public abstract class AbstractTask extends AbstractTaskContainer { private Date scheduledForDate = null; private Date dueDate = null; - + private String notes = ""; private int estimatedTimeHours = 1; - + public enum PriorityLevel { P1, P2, P3, P4, P5; - + @Override public String toString() { switch (this) { @@ -107,7 +110,7 @@ public abstract class AbstractTask extends AbstractTaskContainer { return "P3"; } } - + public String getDescription() { switch (this) { case P1: @@ -124,7 +127,7 @@ public abstract class AbstractTask extends AbstractTaskContainer { return ""; } } - + public static PriorityLevel fromString(String string) { if (string.equals("P1")) return P1; @@ -138,7 +141,7 @@ public abstract class AbstractTask extends AbstractTaskContainer { return P5; return getDefault(); } - + public static PriorityLevel fromDescription(String string) { if (string == null) return null; @@ -154,12 +157,12 @@ public abstract class AbstractTask extends AbstractTaskContainer { return P5; return getDefault(); } - + public static PriorityLevel getDefault() { return P3; } } - + public AbstractTask(String repositoryUrl, String taskId, String summary) { super(RepositoryTaskHandleUtil.getHandle(repositoryUrl, taskId)); this.repositoryUrl = repositoryUrl; @@ -172,35 +175,35 @@ public abstract class AbstractTask extends AbstractTaskContainer { } /** - * True for tasks that can be modified without a round-trip to a server. For example, - * such a task can be marked completed via the Task List. + * True for tasks that can be modified without a round-trip to a server. For example, such a task can be marked + * completed via the Task List. */ public abstract boolean isLocal(); - - public abstract String getRepositoryKind(); - public String getLastSyncDateStamp() { - return lastSynchronizedDateStamp; + public abstract String getConnectorKind(); + + public String getLastReadTimeStamp() { + return lastReadTimeStamp; } - public void setLastSyncDateStamp(String lastSyncDateStamp) { - this.lastSynchronizedDateStamp = lastSyncDateStamp; + public void setLastReadTimeStamp(String lastReadTimeStamp) { + this.lastReadTimeStamp = lastReadTimeStamp; } - public void setSyncState(RepositoryTaskSyncState syncState) { - this.syncState = syncState; + public void setSynchronizationState(RepositoryTaskSyncState syncState) { + this.synchronizationState = syncState; } - public RepositoryTaskSyncState getSyncState() { - return syncState; + public RepositoryTaskSyncState getSynchronizationState() { + return synchronizationState; } public boolean isSynchronizing() { - return currentlySynchronizing; + return synchronizing; } - public void setCurrentlySynchronizing(boolean currentlySychronizing) { - this.currentlySynchronizing = currentlySychronizing; + public void setSynchronizing(boolean sychronizing) { + this.synchronizing = sychronizing; } public boolean isNotified() { @@ -219,12 +222,12 @@ public abstract class AbstractTask extends AbstractTaskContainer { this.owner = owner; } - public IStatus getStatus() { - return errorStatus; + public IStatus getSynchronizationStatus() { + return synchronizationStatus; } - public void setStatus(IStatus status) { - this.errorStatus = status; + public void setSynchronizationStatus(IStatus status) { + this.synchronizationStatus = status; } public final String getTaskId() { @@ -240,15 +243,13 @@ public abstract class AbstractTask extends AbstractTaskContainer { } /** - * User identifiable key for the task to be used in UI facilities such as - * label displays and hyperlinked references. Can return the same as the ID - * (e.g. in the case of Bugzilla). Can return null if no such label exists. + * User identifiable key for the task to be used in UI facilities such as label displays and hyperlinked references. + * Can return the same as the ID (e.g. in the case of Bugzilla). Can return null if no such label exists. */ public String getTaskKey() { return taskId; } - public boolean isSubmitting() { return submitting; } @@ -276,7 +277,7 @@ public abstract class AbstractTask extends AbstractTaskContainer { @Override public boolean equals(Object obj) { if (obj instanceof AbstractTask && obj != null) { - return this.getHandleIdentifier().compareTo(((AbstractTask)obj).getHandleIdentifier()) == 0; + return this.getHandleIdentifier().compareTo(((AbstractTask) obj).getHandleIdentifier()) == 0; } else { return false; } @@ -350,7 +351,7 @@ public abstract class AbstractTask extends AbstractTaskContainer { public void removeParentContainer(AbstractTaskContainer container) { containers.remove(container); } - + public Set<AbstractTaskContainer> getParentContainers() { return containers; } @@ -371,12 +372,12 @@ public abstract class AbstractTask extends AbstractTaskContainer { return scheduledForDate; } - public boolean hasBeenReminded() { - return hasReminded; + public boolean isReminded() { + return reminded; } public void setReminded(boolean reminded) { - this.hasReminded = reminded; + this.reminded = reminded; } public Date getCreationDate() { @@ -424,15 +425,15 @@ public abstract class AbstractTask extends AbstractTaskContainer { } public String getTaskKind() { - return kind; + return taskKind; } - public void setKind(String kind) { - this.kind = kind; + public void setTaskKind(String kind) { + this.taskKind = kind; } public int compareTo(AbstractTaskContainer taskListElement) { - return summary.compareTo(((AbstractTask)taskListElement).summary); + return summary.compareTo(((AbstractTask) taskListElement).summary); } public Date getDueDate() { @@ -446,9 +447,9 @@ public abstract class AbstractTask extends AbstractTaskContainer { public boolean isStale() { return stale; } - + public void setStale(boolean stale) { this.stale = stale; } - + } diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IAttachmentHandler.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IAttachmentHandler.java deleted file mode 100644 index 20667b182..000000000 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/IAttachmentHandler.java +++ /dev/null @@ -1,48 +0,0 @@ -/******************************************************************************* - * 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.mylyn.tasks.core; - -import java.io.InputStream; -import java.io.OutputStream; - -import org.eclipse.core.runtime.CoreException; -import org.eclipse.core.runtime.IProgressMonitor; - -/** - * @author Mik Kersten - * @author Rob Elves - * @author Steffen Pingel - */ -public interface IAttachmentHandler { - - public void uploadAttachment(TaskRepository repository, AbstractTask task, ITaskAttachment attachment, - String comment, IProgressMonitor monitor) throws CoreException; - - public void downloadAttachment(TaskRepository repository, RepositoryAttachment attachment, OutputStream target, - IProgressMonitor monitor) throws CoreException; - - public InputStream getAttachmentAsStream(TaskRepository repository, RepositoryAttachment attachment, - IProgressMonitor monitor) throws CoreException; - - public boolean canUploadAttachment(TaskRepository repository, AbstractTask task); - - public boolean canDownloadAttachment(TaskRepository repository, AbstractTask task); - - public boolean canDeprecate(TaskRepository repository, RepositoryAttachment attachment); - - /** - * To deprecate, change the attribute on the RepositoryAttachment and pass - * to this method - */ - public void updateAttachment(TaskRepository repository, RepositoryAttachment attachment) throws CoreException; - -} diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java index 11ba1cf60..5ec533438 100644 --- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java +++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/TaskRepositoryManager.java @@ -66,13 +66,13 @@ public class TaskRepositoryManager { } public AbstractRepositoryConnector getRepositoryConnector(AbstractTask task) { - return getRepositoryConnector(task.getRepositoryKind()); + return getRepositoryConnector(task.getConnectorKind()); } public void addRepositoryConnector(AbstractRepositoryConnector repositoryConnector) { if (!repositoryConnectors.values().contains(repositoryConnector)) { repositoryConnector.init(taskList); - repositoryConnectors.put(repositoryConnector.getRepositoryType(), repositoryConnector); + repositoryConnectors.put(repositoryConnector.getConnectorKind(), repositoryConnector); } } @@ -162,7 +162,7 @@ public class TaskRepositoryManager { public AbstractRepositoryConnector getConnectorForRepositoryTaskUrl(String url) { for (AbstractRepositoryConnector connector : getRepositoryConnectors()) { if (connector.getRepositoryUrlFromTaskUrl(url) != null) { - for (TaskRepository repository : getRepositories(connector.getRepositoryType())) { + for (TaskRepository repository : getRepositories(connector.getConnectorKind())) { if (url.startsWith(repository.getUrl())) { return connector; } @@ -183,8 +183,8 @@ public class TaskRepositoryManager { public List<TaskRepository> getAllRepositories() { List<TaskRepository> repositories = new ArrayList<TaskRepository>(); for (AbstractRepositoryConnector repositoryConnector : repositoryConnectors.values()) { - if (repositoryMap.containsKey(repositoryConnector.getRepositoryType())) { - repositories.addAll(repositoryMap.get(repositoryConnector.getRepositoryType())); + if (repositoryMap.containsKey(repositoryConnector.getConnectorKind())) { + repositories.addAll(repositoryMap.get(repositoryConnector.getConnectorKind())); } } return repositories; @@ -251,7 +251,7 @@ public class TaskRepositoryManager { // Will only load repositories for which a connector exists for (AbstractRepositoryConnector repositoryConnector : repositoryConnectors.values()) { - repositoryMap.put(repositoryConnector.getRepositoryType(), new HashSet<TaskRepository>()); + repositoryMap.put(repositoryConnector.getConnectorKind(), new HashSet<TaskRepository>()); } if (repositoriesFile.exists()) { Set<TaskRepository> repositories = externalizer.readRepositoriesFromXML(repositoriesFile); |