Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttribute.java2
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/PreviewAttributeEditor.java19
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java13
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditorPartDescriptor.java11
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java69
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttribute.java137
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java173
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeMapper.java92
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracCorePlugin.java13
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryConnector.java601
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracStatus.java24
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java244
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java471
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracComponent.java2
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracMilestone.java2
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracRepositoryAttribute.java (renamed from org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracAttribute.java)10
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracVersion.java2
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracUtils.java44
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtilTest.java2
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java3
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java5
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientManagerTest.java6
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java1
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java61
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQuery.java (renamed from org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryQuery.java)7
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java4
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositorySettingsPageTest.java2
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTask.java45
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskDataHandlerTest.java410
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskEditorTest.java102
-rw-r--r--org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskTest.java62
-rw-r--r--org.eclipse.mylyn.trac.ui/plugin.xml19
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracConnectorUi.java55
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java2
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracSearchHandler.java (renamed from org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracDuplicateDetector.java)34
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListFactory.java80
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListMigrator.java66
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java7
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java77
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracCcAttributeEditor.java87
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracPeoplePart.java106
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java54
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java101
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPage.java77
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPageFactory.java74
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java58
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracQueryWizard.java64
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskPage.java139
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracFilterQueryPage.java (renamed from org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryWizardPage.java)45
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryPage.java (renamed from org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracCustomQueryPage.java)50
-rw-r--r--org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java2
51 files changed, 1892 insertions, 1944 deletions
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttribute.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttribute.java
index d177f8c34..dd5ea63a0 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttribute.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttribute.java
@@ -99,7 +99,7 @@ public final class TaskAttribute {
public static final String KIND_OPERATION = "task.common.kind.operation";
- public static final String KIND_PEOPLE = "task.common.kind.default";
+ public static final String KIND_PEOPLE = "task.common.kind.people";
//public static final String META_SHOW_IN_ATTRIBUTES_SECTION = "task.meta.showInTaskEditorAttributesSection";
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/PreviewAttributeEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/PreviewAttributeEditor.java
index c1b3f0a3a..a04e16413 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/PreviewAttributeEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/internal/tasks/ui/editors/PreviewAttributeEditor.java
@@ -40,6 +40,10 @@ import org.eclipse.swt.widgets.Event;
import org.eclipse.swt.widgets.Listener;
import org.eclipse.ui.forms.widgets.FormToolkit;
+/**
+ * @author Steffen Pingel
+ * @author Xiaoyang Guan
+ */
public class PreviewAttributeEditor extends AbstractAttributeEditor {
private final RichTextAttributeEditor editor;
@@ -87,26 +91,30 @@ public class PreviewAttributeEditor extends AbstractAttributeEditor {
@Override
public void createControl(Composite parent, FormToolkit toolkit) {
- final Composite sectionComposite = toolkit.createComposite(parent);
- sectionComposite.setLayout(new GridLayout(1, false));
+ final Composite composite = toolkit.createComposite(parent);
+ composite.setLayout(new GridLayout(1, false));
// composite with StackLayout to hold text editor and preview widget
- Composite editorComposite = toolkit.createComposite(sectionComposite);
+ Composite editorComposite = toolkit.createComposite(composite);
editorComposite.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
GridData gd = new GridData(GridData.FILL_BOTH);
gd.widthHint = EditorUtil.MAXIMUM_WIDTH;
gd.minimumHeight = EditorUtil.MAXIMUM_HEIGHT;
gd.grabExcessHorizontalSpace = true;
editorComposite.setLayoutData(gd);
- final StackLayout descriptionLayout = new StackLayout();
+ StackLayout descriptionLayout = new StackLayout();
editorComposite.setLayout(descriptionLayout);
editor.createControl(editorComposite, toolkit);
// composite for edit/preview button
- Composite buttonComposite = toolkit.createComposite(sectionComposite);
+ Composite buttonComposite = toolkit.createComposite(composite);
buttonComposite.setLayout(new GridLayout());
createPreviewButton(buttonComposite, editor.getViewer(), editorComposite, descriptionLayout, toolkit);
+ descriptionLayout.topControl = editor.getControl();
+
+ toolkit.paintBordersFor(composite);
+ setControl(composite);
}
/**
@@ -157,7 +165,6 @@ public class PreviewAttributeEditor extends AbstractAttributeEditor {
buttonState = ++buttonState % 2;
if (buttonState == 1) {
-
setText(previewBrowser, "Loading preview...");
previewWiki(previewBrowser, editor.getTextWidget().getText());
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
index 412d68bb7..2c59b1e93 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java
@@ -30,6 +30,7 @@ import org.eclipse.jface.action.ControlContribution;
import org.eclipse.jface.action.IToolBarManager;
import org.eclipse.jface.dialogs.IMessageProvider;
import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.layout.GridLayoutFactory;
import org.eclipse.jface.resource.JFaceResources;
import org.eclipse.jface.text.TextSelection;
import org.eclipse.jface.util.SafeRunnable;
@@ -285,15 +286,15 @@ public abstract class AbstractTaskEditorPage extends FormPage implements ISelect
public static final String ID_PART_COMMENTS = "org.eclipse.mylyn.tasks.ui.editors.parts.comments";
- public static final String ID_PART_DESCRIPTION = "org.eclipse.mylyn.tasks.ui.editors.part.descriptions";
+ public static final String ID_PART_DESCRIPTION = "org.eclipse.mylyn.tasks.ui.editors.parts.descriptions";
- public static final String ID_PART_NEW_COMMENT = "org.eclipse.mylyn.tasks.ui.editors.part.newComment";
+ public static final String ID_PART_NEW_COMMENT = "org.eclipse.mylyn.tasks.ui.editors.parts.newComment";
- public static final String ID_PART_PEOPLE = "org.eclipse.mylyn.tasks.ui.editors.part.people";
+ public static final String ID_PART_PEOPLE = "org.eclipse.mylyn.tasks.ui.editors.parts.people";
- public static final String ID_PART_PLANNING = "org.eclipse.mylyn.tasks.ui.editors.part.planning";
+ public static final String ID_PART_PLANNING = "org.eclipse.mylyn.tasks.ui.editors.parts.planning";
- public static final String ID_PART_SUMMARY = "org.eclipse.mylyn.tasks.ui.editors.part.summary";
+ public static final String ID_PART_SUMMARY = "org.eclipse.mylyn.tasks.ui.editors.parts.summary";
public static final String PATH_ACTIONS = "actions";
@@ -594,7 +595,7 @@ public abstract class AbstractTaskEditorPage extends FormPage implements ISelect
createParts(PATH_PLANNING, editorComposite, descriptors);
// two column
Composite bottomComposite = toolkit.createComposite(editorComposite);
- bottomComposite.setLayout(new GridLayout(2, false));
+ bottomComposite.setLayout(GridLayoutFactory.fillDefaults().numColumns(2).create());
GridDataFactory.fillDefaults().grab(true, false).applyTo(bottomComposite);
createParts(PATH_ACTIONS, bottomComposite, descriptors);
createParts(PATH_PEOPLE, bottomComposite, descriptors);
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditorPartDescriptor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditorPartDescriptor.java
index d692f8e52..bf42bc916 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditorPartDescriptor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/TaskEditorPartDescriptor.java
@@ -58,14 +58,7 @@ public abstract class TaskEditorPartDescriptor {
return false;
}
TaskEditorPartDescriptor other = (TaskEditorPartDescriptor) obj;
- if (id == null) {
- if (other.id != null) {
- return false;
- }
- } else if (!id.equals(other.id)) {
- return false;
- }
- return true;
+ return id.equals(other.id);
}
public String getId() {
@@ -80,7 +73,7 @@ public abstract class TaskEditorPartDescriptor {
public int hashCode() {
final int prime = 31;
int result = 1;
- result = prime * result + ((id == null) ? 0 : id.hashCode());
+ result = prime * result + id.hashCode();
return result;
}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java
index 208b1ab47..5cba7aee3 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttachmentHandler.java
@@ -13,19 +13,19 @@ import java.io.InputStream;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractAttachmentHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.ITaskAttachment;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryAttachment;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.AbstractTaskAttachmentHandler;
+import org.eclipse.mylyn.tasks.core.data.AbstractTaskAttachmentSource;
+import org.eclipse.mylyn.tasks.core.data.TaskAttachmentMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
/**
* @author Steffen Pingel
*/
-public class TracAttachmentHandler extends AbstractAttachmentHandler {
+public class TracAttachmentHandler extends AbstractTaskAttachmentHandler {
private final TracRepositoryConnector connector;
@@ -34,18 +34,19 @@ public class TracAttachmentHandler extends AbstractAttachmentHandler {
}
@Override
- public InputStream getAttachmentAsStream(TaskRepository repository, RepositoryAttachment attachment,
+ public InputStream getContent(TaskRepository repository, ITask task, TaskAttribute attachmentAttribute,
IProgressMonitor monitor) throws CoreException {
- String filename = attachment.getAttributeValue(RepositoryTaskAttribute.ATTACHMENT_FILENAME);
- if (filename == null) {
- throw new CoreException(new RepositoryStatus(repository.getRepositoryUrl(), IStatus.ERROR, TracCorePlugin.ID_PLUGIN,
- RepositoryStatus.ERROR_REPOSITORY, "Attachment download from " + repository.getRepositoryUrl()
- + " failed, missing attachment filename."));
+ TaskAttachmentMapper mapper = TaskAttachmentMapper.createFrom(attachmentAttribute);
+ String filename = mapper.getFileName();
+ if (filename == null || filename.length() == 0) {
+ throw new CoreException(new RepositoryStatus(repository.getRepositoryUrl(), IStatus.ERROR,
+ TracCorePlugin.ID_PLUGIN, RepositoryStatus.ERROR_REPOSITORY, "Attachment download from "
+ + repository.getRepositoryUrl() + " failed, missing attachment filename."));
}
try {
ITracClient client = connector.getClientManager().getTracClient(repository);
- int id = Integer.parseInt(attachment.getTaskId());
+ int id = Integer.parseInt(task.getTaskId());
return client.getAttachmentData(id, filename, monitor);
} catch (Exception e) {
throw new CoreException(TracCorePlugin.toStatus(e, repository));
@@ -53,11 +54,24 @@ public class TracAttachmentHandler extends AbstractAttachmentHandler {
}
@Override
- public void uploadAttachment(TaskRepository repository, ITask task, ITaskAttachment attachment,
- String comment, IProgressMonitor monitor) throws CoreException {
+ public void postContent(TaskRepository repository, ITask task, AbstractTaskAttachmentSource source, String comment,
+ TaskAttribute attachmentAttribute, IProgressMonitor monitor) throws CoreException {
if (!TracRepositoryConnector.hasAttachmentSupport(repository, task)) {
- throw new CoreException(new RepositoryStatus(repository.getRepositoryUrl(), IStatus.INFO, TracCorePlugin.ID_PLUGIN,
- RepositoryStatus.ERROR_REPOSITORY, "Attachments are not supported by this repository access type"));
+ throw new CoreException(new RepositoryStatus(repository.getRepositoryUrl(), IStatus.INFO,
+ TracCorePlugin.ID_PLUGIN, RepositoryStatus.ERROR_REPOSITORY,
+ "Attachments are not supported by this repository access type"));
+ }
+
+ String filename = source.getName();
+ String description = source.getDescription();
+ if (attachmentAttribute != null) {
+ TaskAttachmentMapper mapper = TaskAttachmentMapper.createFrom(attachmentAttribute);
+ if (mapper.getFileName() != null) {
+ filename = mapper.getFileName();
+ }
+ if (mapper.getDescription() != null) {
+ description = mapper.getDescription();
+ }
}
monitor.beginTask("Uploading attachment", IProgressMonitor.UNKNOWN);
@@ -65,8 +79,7 @@ public class TracAttachmentHandler extends AbstractAttachmentHandler {
try {
ITracClient client = connector.getClientManager().getTracClient(repository);
int id = Integer.parseInt(task.getTaskId());
- client.putAttachmentData(id, attachment.getFilename(), attachment.getDescription(),
- attachment.createInputStream(), monitor);
+ client.putAttachmentData(id, filename, description, source.createInputStream(monitor), monitor);
if (comment != null && comment.length() > 0) {
TracTicket ticket = new TracTicket(id);
client.updateTicket(ticket, comment, monitor);
@@ -80,29 +93,13 @@ public class TracAttachmentHandler extends AbstractAttachmentHandler {
}
@Override
- public boolean canDownloadAttachment(TaskRepository repository, ITask task) {
- if (repository == null) {
- return false;
- }
+ public boolean canGetContent(TaskRepository repository, ITask task) {
return TracRepositoryConnector.hasAttachmentSupport(repository, task);
}
@Override
- public boolean canUploadAttachment(TaskRepository repository, ITask task) {
- if (repository == null) {
- return false;
- }
+ public boolean canPostContent(TaskRepository repository, ITask task) {
return TracRepositoryConnector.hasAttachmentSupport(repository, task);
}
- @Override
- public boolean canDeprecate(TaskRepository repository, RepositoryAttachment attachment) {
- return false;
- }
-
- @Override
- public void updateAttachment(TaskRepository repository, RepositoryAttachment attachment) throws CoreException {
- throw new UnsupportedOperationException();
- }
-
}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttribute.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttribute.java
new file mode 100644
index 000000000..cc305203d
--- /dev/null
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttribute.java
@@ -0,0 +1,137 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.trac.core;
+
+import java.util.EnumSet;
+import java.util.HashMap;
+import java.util.Map;
+
+import org.eclipse.mylyn.internal.trac.core.TracAttributeMapper.Flag;
+import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+
+/**
+ * @author Steffen Pingel
+ */
+public enum TracAttribute {
+
+ CC(Key.CC, "CC:", TaskAttribute.USER_CC, TaskAttribute.TYPE_SHORT_TEXT, EnumSet.of(Flag.PEOPLE)),
+
+ CHANGE_TIME(Key.CHANGE_TIME, "Last Modification:", TaskAttribute.DATE_MODIFICATION, TaskAttribute.TYPE_DATE,
+ EnumSet.of(Flag.READ_ONLY)),
+
+ COMPONENT(Key.COMPONENT, "Component:", TaskAttribute.PRODUCT, TaskAttribute.TYPE_SINGLE_SELECT,
+ EnumSet.of(Flag.ATTRIBUTE)),
+
+ DESCRIPTION(Key.DESCRIPTION, "Description:", TaskAttribute.DESCRIPTION, TaskAttribute.TYPE_LONG_RICH_TEXT),
+
+ ID(Key.ID, "ID:", TaskAttribute.TASK_KEY, TaskAttribute.TYPE_SHORT_TEXT, EnumSet.of(Flag.PEOPLE)),
+
+ KEYWORDS(Key.KEYWORDS, "Keywords:", TaskAttribute.KEYWORDS, TaskAttribute.TYPE_SHORT_TEXT,
+ EnumSet.of(Flag.ATTRIBUTE)),
+
+ MILESTONE(Key.MILESTONE, "Milestone:", null, TaskAttribute.TYPE_SINGLE_SELECT, EnumSet.of(Flag.ATTRIBUTE)),
+
+ OWNER(Key.OWNER, "Assigned to:", TaskAttribute.USER_ASSIGNED, TaskAttribute.TYPE_PERSON, EnumSet.of(Flag.PEOPLE)),
+
+ PRIORITY(Key.PRIORITY, "Priority:", TaskAttribute.PRIORITY, TaskAttribute.TYPE_SINGLE_SELECT,
+ EnumSet.of(Flag.ATTRIBUTE)),
+
+ REPORTER(Key.REPORTER, "Reporter:", TaskAttribute.USER_REPORTER, TaskAttribute.TYPE_PERSON,
+ EnumSet.of(Flag.READ_ONLY)),
+
+ RESOLUTION(Key.RESOLUTION, "Resolution:", TaskAttribute.RESOLUTION, TaskAttribute.TYPE_SINGLE_SELECT),
+
+ SEVERITY(Key.SEVERITY, "Severity:", null, TaskAttribute.TYPE_SINGLE_SELECT, EnumSet.of(Flag.ATTRIBUTE)),
+
+ STATUS(Key.STATUS, "Status:", TaskAttribute.STATUS, TaskAttribute.TYPE_SHORT_TEXT),
+
+ SUMMARY(Key.SUMMARY, "Summary:", TaskAttribute.SUMMARY, TaskAttribute.TYPE_SHORT_RICH_TEXT),
+
+ TIME(Key.TIME, "Created:", TaskAttribute.DATE_CREATION, TaskAttribute.TYPE_DATE, EnumSet.of(Flag.READ_ONLY)),
+
+ TYPE(Key.TYPE, "Type:", null, TaskAttribute.TYPE_SINGLE_SELECT, EnumSet.of(Flag.ATTRIBUTE)),
+
+ VERSION(Key.VERSION, "Version:", null, TaskAttribute.TYPE_SINGLE_SELECT, EnumSet.of(Flag.ATTRIBUTE));
+
+ static Map<String, TracAttribute> attributeByTracKey = new HashMap<String, TracAttribute>();
+
+ static Map<String, String> tracKeyByTaskKey = new HashMap<String, String>();
+
+ private final String tracKey;
+
+ private final String prettyName;
+
+ private final String taskKey;
+
+ private final String type;
+
+ private EnumSet<Flag> flags;
+
+ public static TracAttribute getByTaskKey(String taskKey) {
+ for (TracAttribute attribute : values()) {
+ if (taskKey.equals(attribute.getTaskKey())) {
+ return attribute;
+ }
+ }
+ return null;
+ }
+
+ public static TracAttribute getByTracKey(String tracKey) {
+ for (TracAttribute attribute : values()) {
+ if (tracKey.equals(attribute.getTracKey())) {
+ return attribute;
+ }
+ }
+ return null;
+ }
+
+ TracAttribute(Key tracKey, String prettyName, String taskKey, String type, EnumSet<Flag> flags) {
+ this.tracKey = tracKey.getKey();
+ this.taskKey = taskKey;
+ this.prettyName = prettyName;
+ this.type = type;
+ this.flags = flags;
+ }
+
+ TracAttribute(Key tracKey, String prettyName, String taskKey, String type) {
+ this(tracKey, prettyName, taskKey, type, TracAttributeMapper.NO_FLAGS);
+ }
+
+ public String getTaskKey() {
+ return taskKey;
+ }
+
+ public String getTracKey() {
+ return tracKey;
+ }
+
+ public String getKind() {
+ if (flags.contains(Flag.ATTRIBUTE)) {
+ return TaskAttribute.KIND_DEFAULT;
+ } else if (flags.contains(Flag.PEOPLE)) {
+ return TaskAttribute.KIND_PEOPLE;
+ }
+ return null;
+ }
+
+ public String getType() {
+ return type;
+ }
+
+ public boolean isReadOnly() {
+ return flags.contains(Flag.READ_ONLY);
+ }
+
+ @Override
+ public String toString() {
+ return prettyName;
+ }
+
+}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java
deleted file mode 100644
index ec6c59f4a..000000000
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeFactory.java
+++ /dev/null
@@ -1,173 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.core;
-
-import java.util.Date;
-import java.util.HashMap;
-import java.util.Map;
-
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractAttributeFactory;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
-import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
-import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
-
-/**
- * Provides a mapping from Mylyn task keys to Trac ticket keys.
- *
- * @author Steffen Pingel
- */
-public class TracAttributeFactory extends AbstractAttributeFactory {
-
- private static final long serialVersionUID = 5333211422546115138L;
-
- private static Map<String, Attribute> attributeByTracKey = new HashMap<String, Attribute>();
-
- private static Map<String, String> tracKeyByTaskKey = new HashMap<String, String>();
-
- public enum Attribute {
- CC(Key.CC, "CC:", RepositoryTaskAttribute.USER_CC, true, false), //
- CHANGE_TIME(Key.CHANGE_TIME, "Last Modification:", RepositoryTaskAttribute.DATE_MODIFIED, true, true), //
- COMPONENT(Key.COMPONENT, "Component:", RepositoryTaskAttribute.PRODUCT), //
- DESCRIPTION(Key.DESCRIPTION, "Description:", RepositoryTaskAttribute.DESCRIPTION, true, false), //
- ID(Key.ID, "<used by search engine>", null, true), //
- KEYWORDS(Key.KEYWORDS, "Keywords:", RepositoryTaskAttribute.KEYWORDS), //
- MILESTONE(Key.MILESTONE, "Milestone:", null), //
- NEW_CC(RepositoryTaskAttribute.NEW_CC, "Add CC:"), //
- OWNER(Key.OWNER, "Assigned to:", RepositoryTaskAttribute.USER_ASSIGNED, true, true), //
- PRIORITY(Key.PRIORITY, "Priority:", null), //
- REPORTER(Key.REPORTER, "Reporter:", RepositoryTaskAttribute.USER_REPORTER, true, true), //
- RESOLUTION(Key.RESOLUTION, "Resolution:", RepositoryTaskAttribute.RESOLUTION, false, true), //
- SEVERITY(Key.SEVERITY, "Severity:", null), //
- STATUS(Key.STATUS, "Status:", RepositoryTaskAttribute.STATUS, false, true), //
- SUMMARY(Key.SUMMARY, "Summary:", RepositoryTaskAttribute.SUMMARY, true), //
- TIME(Key.TIME, "Created:", RepositoryTaskAttribute.DATE_CREATION, true, true), //
- TYPE(Key.TYPE, "Type:", null), //
- VERSION(Key.VERSION, "Version:", null);
-
- private final boolean isHidden;
-
- private final boolean isReadOnly;
-
- private final String tracKey;
-
- private final String prettyName;
-
- private final String taskKey;
-
- Attribute(String tracKey, String prettyName, String taskKey, boolean hidden, boolean readonly) {
- this.tracKey = tracKey;
- this.taskKey = taskKey;
- this.prettyName = prettyName;
- this.isHidden = hidden;
- this.isReadOnly = readonly;
-
- attributeByTracKey.put(tracKey, this);
- if (taskKey != null) {
- tracKeyByTaskKey.put(taskKey, tracKey);
- }
- }
-
- Attribute(Key key, String prettyName, String taskKey, boolean hidden, boolean readonly) {
- this(key.getKey(), prettyName, taskKey, hidden, readonly);
- }
-
- Attribute(Key key, String prettyName, String taskKey, boolean hidden) {
- this(key.getKey(), prettyName, taskKey, hidden, false);
- }
-
- Attribute(Key key, String prettyName, String taskKey) {
- this(key.getKey(), prettyName, taskKey, false, false);
- }
-
- /**
- * This is for Mylyn attributes that do not map to Trac attributes.
- */
- Attribute(String taskKey, String prettyName) {
- this(taskKey, prettyName, taskKey, true, false);
- }
-
- public String getTaskKey() {
- return taskKey;
- }
-
- public String getTracKey() {
- return tracKey;
- }
-
- public boolean isHidden() {
- return isHidden;
- }
-
- public boolean isReadOnly() {
- return isReadOnly;
- }
-
- @Override
- public String toString() {
- return prettyName;
- }
- }
-
- static {
- // make sure hash maps get initialized when class is loaded
- Attribute.values();
- }
-
- @Override
- public boolean isHidden(String key) {
- if (isInternalAttribute(key)) {
- return true;
- }
-
- Attribute attribute = attributeByTracKey.get(key);
- return (attribute != null) ? attribute.isHidden() : false;
- }
-
- @Override
- public String getName(String key) {
- Attribute attribute = attributeByTracKey.get(key);
- // TODO if attribute == null it is probably a custom field: need
- // to query custom field information from repoository
- return (attribute != null) ? attribute.toString() : key;
- }
-
- @Override
- public boolean isReadOnly(String key) {
- Attribute attribute = attributeByTracKey.get(key);
- return (attribute != null) ? attribute.isReadOnly() : false;
- }
-
- @Override
- public String mapCommonAttributeKey(String key) {
- String tracKey = tracKeyByTaskKey.get(key);
- return (tracKey != null) ? tracKey : key;
- }
-
- static boolean isInternalAttribute(String id) {
- return RepositoryTaskAttribute.COMMENT_NEW.equals(id) || RepositoryTaskAttribute.REMOVE_CC.equals(id)
- || RepositoryTaskAttribute.NEW_CC.equals(id) || RepositoryTaskAttribute.ADD_SELF_CC.equals(id);
- }
-
- @Override
- public Date getDateForAttributeType(String attributeKey, String dateString) {
- if (dateString == null || dateString.length() == 0) {
- return null;
- }
-
- try {
- String mappedKey = mapCommonAttributeKey(attributeKey);
- if (mappedKey.equals(Attribute.TIME.getTracKey()) || mappedKey.equals(Attribute.CHANGE_TIME.getTracKey())) {
- return TracUtils.parseDate(Integer.valueOf(dateString));
- }
- } catch (Exception e) {
- }
- return null;
- }
-
-}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeMapper.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeMapper.java
new file mode 100644
index 000000000..3c3184712
--- /dev/null
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracAttributeMapper.java
@@ -0,0 +1,92 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.trac.core;
+
+import java.util.Date;
+import java.util.EnumSet;
+
+import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
+
+/**
+ * Provides a mapping from Mylyn task keys to Trac ticket keys.
+ *
+ * @author Steffen Pingel
+ */
+public class TracAttributeMapper extends TaskAttributeMapper {
+
+ public enum Flag {
+ READ_ONLY, ATTRIBUTE, PEOPLE
+ };
+
+ public static final String NEW_CC = "task.common.newcc";
+
+ public static final String REMOVE_CC = "task.common.removecc";
+
+ public static final EnumSet<Flag> NO_FLAGS = EnumSet.noneOf(Flag.class);
+
+ public static boolean isInternalAttribute(TaskAttribute attribute) {
+ if (TaskAttribute.TYPE_ATTACHMENT.equals(attribute.getMetaData().getType())
+ || TaskAttribute.TYPE_OPERATION.equals(attribute.getMetaData().getType())
+ || TaskAttribute.TYPE_COMMENT.equals(attribute.getMetaData().getType())) {
+ return true;
+ }
+ String id = attribute.getId();
+ return TaskAttribute.COMMENT_NEW.equals(id) || TaskAttribute.ADD_SELF_CC.equals(id) || REMOVE_CC.equals(id)
+ || NEW_CC.equals(id);
+ }
+
+//
+// @Override
+// public boolean isHidden(String key) {
+// if (isInternalAttribute(key)) {
+// return true;
+// }
+//
+// TracAttribute tracAttribute = attributeByTracKey.get(key);
+// return (tracAttribute != null) ? tracAttribute.isHidden() : false;
+// }
+//
+// @Override
+// public String getName(String key) {
+// TracAttribute tracAttribute = attributeByTracKey.get(key);
+// // TODO if attribute == null it is probably a custom field: need
+// // to query custom field information from repoository
+// return (tracAttribute != null) ? tracAttribute.toString() : key;
+// }
+//
+// @Override
+// public boolean isReadOnly(String key) {
+// TracAttribute tracAttribute = attributeByTracKey.get(key);
+// return (tracAttribute != null) ? tracAttribute.isReadOnly() : false;
+// }
+
+ public TracAttributeMapper(TaskRepository taskRepository) {
+ super(taskRepository);
+ }
+
+ @Override
+ public Date getDateValue(TaskAttribute attribute) {
+ return TracUtils.parseDate(Integer.valueOf(attribute.getValue()));
+ }
+
+ @Override
+ public String mapToRepositoryKey(TaskAttribute parent, String key) {
+ TracAttribute attribute = TracAttribute.getByTaskKey(key);
+ return (attribute != null) ? attribute.getTracKey() : key;
+ }
+
+ @Override
+ public void setDateValue(TaskAttribute attribute, Date date) {
+ attribute.setValue(TracUtils.toTracTime(date) + "");
+ }
+
+}
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 47f772ca3..0bfd57a89 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
@@ -13,6 +13,7 @@ import org.eclipse.core.runtime.IPath;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
import org.eclipse.core.runtime.Plugin;
+import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.osgi.framework.BundleContext;
@@ -30,7 +31,7 @@ public class TracCorePlugin extends Plugin {
private static TracCorePlugin plugin;
- public final static String REPOSITORY_KIND = "trac";
+ public final static String CONNECTOR_KIND = "trac";
private TracRepositoryConnector connector;
@@ -79,17 +80,17 @@ public class TracCorePlugin extends Plugin {
if (e instanceof TracLoginException) {
return RepositoryStatus.createLoginError(repository.getRepositoryUrl(), ID_PLUGIN);
} else if (e instanceof TracPermissionDeniedException) {
- return TracStatus.createPermissionDeniedError(repository.getRepositoryUrl(), ID_PLUGIN);
+ return TracUtils.createPermissionDeniedError(repository.getRepositoryUrl(), ID_PLUGIN);
} else if (e instanceof InvalidTicketException) {
- return new RepositoryStatus(repository.getRepositoryUrl(), IStatus.ERROR, ID_PLUGIN, RepositoryStatus.ERROR_IO,
- "The server returned an unexpected response", e);
+ return new RepositoryStatus(repository.getRepositoryUrl(), IStatus.ERROR, ID_PLUGIN,
+ RepositoryStatus.ERROR_IO, "The server returned an unexpected response", e);
} else if (e instanceof TracException) {
String message = e.getMessage();
if (message == null) {
message = "I/O error has occured";
}
- return new RepositoryStatus(repository.getRepositoryUrl(), IStatus.ERROR, ID_PLUGIN, RepositoryStatus.ERROR_IO,
- message, e);
+ return new RepositoryStatus(repository.getRepositoryUrl(), IStatus.ERROR, ID_PLUGIN,
+ RepositoryStatus.ERROR_IO, message, e);
} else if (e instanceof ClassCastException) {
return new RepositoryStatus(IStatus.ERROR, ID_PLUGIN, RepositoryStatus.ERROR_IO,
"Unexpected server response: " + e.getMessage(), e);
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 ec39c9a27..010db0431 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
@@ -10,9 +10,12 @@ package org.eclipse.mylyn.internal.trac.core;
import java.io.File;
import java.util.ArrayList;
+import java.util.Collection;
+import java.util.Collections;
import java.util.Date;
import java.util.List;
import java.util.Set;
+import java.util.StringTokenizer;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
@@ -23,50 +26,298 @@ import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.commons.net.Policy;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractAttachmentHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyRepositoryConnector;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractTaskDataHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.LegacyTaskDataCollector;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryOperation;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
import org.eclipse.mylyn.internal.trac.core.ITracClient.Version;
-import org.eclipse.mylyn.internal.trac.core.TracAttributeFactory.Attribute;
-import org.eclipse.mylyn.internal.trac.core.TracTask.Kind;
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;
-import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
+import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.ITask;
+import org.eclipse.mylyn.tasks.core.ITaskMapping;
import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.core.TaskRepositoryLocationFactory;
+import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
+import org.eclipse.mylyn.tasks.core.data.AbstractTaskAttachmentHandler;
+import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler;
+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.TaskMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskRelation;
import org.eclipse.mylyn.tasks.core.sync.ISynchronizationSession;
/**
* @author Steffen Pingel
*/
-public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
+public class TracRepositoryConnector extends AbstractRepositoryConnector {
+
+ public enum TaskKind {
+ DEFECT, ENHANCEMENT, TASK;
+
+ public static TaskKind fromString(String type) {
+ if (type == null) {
+ return null;
+ }
+ if (type.equals("Defect")) {
+ return DEFECT;
+ }
+ if (type.equals("Enhancement")) {
+ return ENHANCEMENT;
+ }
+ if (type.equals("Task")) {
+ return TASK;
+ }
+ return null;
+ }
+
+ public static TaskKind fromType(String type) {
+ if (type == null) {
+ return null;
+ }
+ if (type.equals("defect")) {
+ return DEFECT;
+ }
+ if (type.equals("enhancement")) {
+ return ENHANCEMENT;
+ }
+ if (type.equals("task")) {
+ return TASK;
+ }
+ return null;
+ }
+
+ @Override
+ public String toString() {
+ switch (this) {
+ case DEFECT:
+ return "Defect";
+ case ENHANCEMENT:
+ return "Enhancement";
+ case TASK:
+ return "Task";
+ default:
+ return "";
+ }
+ }
+
+ }
+
+ public enum TaskStatus {
+ ASSIGNED, CLOSED, NEW, REOPENED;
+
+ public static TaskStatus fromStatus(String status) {
+ if (status == null) {
+ return null;
+ }
+ if (status.equals("new")) {
+ return NEW;
+ }
+ if (status.equals("assigned")) {
+ return ASSIGNED;
+ }
+ if (status.equals("reopened")) {
+ return REOPENED;
+ }
+ if (status.equals("closed")) {
+ return CLOSED;
+ }
+ return null;
+ }
+
+ public String toStatusString() {
+ switch (this) {
+ case NEW:
+ return "new";
+ case ASSIGNED:
+ return "assigned";
+ case REOPENED:
+ return "reopened";
+ case CLOSED:
+ return "closed";
+ default:
+ return "";
+ }
+ }
+
+ @Override
+ public String toString() {
+ switch (this) {
+ case NEW:
+ return "New";
+ case ASSIGNED:
+ return "Assigned";
+ case REOPENED:
+ return "Reopened";
+ case CLOSED:
+ return "Closed";
+ default:
+ return "";
+ }
+ }
+
+ }
+
+ public enum TracPriorityLevel {
+ BLOCKER, CRITICAL, MAJOR, MINOR, TRIVIAL;
+
+ public static TracPriorityLevel fromPriority(String priority) {
+ if (priority == null) {
+ return null;
+ }
+ if (priority.equals("blocker")) {
+ return BLOCKER;
+ }
+ if (priority.equals("critical")) {
+ return CRITICAL;
+ }
+ if (priority.equals("major")) {
+ return MAJOR;
+ }
+ if (priority.equals("minor")) {
+ return MINOR;
+ }
+ if (priority.equals("trivial")) {
+ return TRIVIAL;
+ }
+ return null;
+ }
+
+ public PriorityLevel toPriorityLevel() {
+ switch (this) {
+ case BLOCKER:
+ return PriorityLevel.P1;
+ case CRITICAL:
+ return PriorityLevel.P2;
+ case MAJOR:
+ return PriorityLevel.P3;
+ case MINOR:
+ return PriorityLevel.P4;
+ case TRIVIAL:
+ return PriorityLevel.P5;
+ default:
+ return null;
+ }
+ }
+
+ @Override
+ public String toString() {
+ switch (this) {
+ case BLOCKER:
+ return "blocker";
+ case CRITICAL:
+ return "critical";
+ case MAJOR:
+ return "major";
+ case MINOR:
+ return "minor";
+ case TRIVIAL:
+ return "trivial";
+ default:
+ return null;
+ }
+ }
+ }
private final static String CLIENT_LABEL = "Trac (supports 0.9 or 0.10 through Web and XML-RPC)";
- private TracClientManager clientManager;
+ private static int TASK_PRIORITY_LEVELS = 5;
- private final TracTaskDataHandler taskDataHandler = new TracTaskDataHandler(this);
+ public static final String TASK_KEY_SUPPORTS_SUBTASKS = "SupportsSubtasks";
+
+ public static String getDisplayUsername(TaskRepository repository) {
+ AuthenticationCredentials credentials = repository.getCredentials(AuthenticationType.REPOSITORY);
+ if (credentials != null && credentials.getUserName().length() > 0) {
+ return ITracClient.DEFAULT_USERNAME;
+ }
+ return repository.getUserName();
+ }
+
+ public static PriorityLevel getTaskPriority(String tracPriority) {
+ if (tracPriority != null) {
+ TracPriorityLevel priority = TracPriorityLevel.fromPriority(tracPriority);
+ if (priority != null) {
+ return priority.toPriorityLevel();
+ }
+ }
+ return PriorityLevel.getDefault();
+ }
+
+ public static PriorityLevel getTaskPriority(String priority, TracPriority[] tracPriorities) {
+ if (priority != null && tracPriorities != null && tracPriorities.length > 0) {
+ int minValue = tracPriorities[0].getValue();
+ int range = tracPriorities[tracPriorities.length - 1].getValue() - minValue;
+ for (TracPriority tracPriority : tracPriorities) {
+ if (priority.equals(tracPriority.getName())) {
+ float relativeValue = (float) (tracPriority.getValue() - minValue) / range;
+ int value = (int) (relativeValue * TASK_PRIORITY_LEVELS) + 1;
+ return PriorityLevel.fromLevel(value);
+ }
+ }
+ }
+ return getTaskPriority(priority);
+ }
+
+ public static int getTicketId(String taskId) throws CoreException {
+ try {
+ return Integer.parseInt(taskId);
+ } catch (NumberFormatException e) {
+ throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.ID_PLUGIN, IStatus.OK,
+ "Invalid ticket id: " + taskId, e));
+ }
+ }
+
+ static List<String> getAttributeValues(TaskData data, String attributeId) {
+ TaskAttribute attribute = data.getRoot().getMappedAttribute(attributeId);
+ if (attribute != null) {
+ return attribute.getValues();
+ } else {
+ return Collections.emptyList();
+ }
+ }
+
+ static String getAttributeValue(TaskData data, String attributeId) {
+ TaskAttribute attribute = data.getRoot().getMappedAttribute(attributeId);
+ if (attribute != null) {
+ return attribute.getValue();
+ } else {
+ return "";
+ }
+ }
+
+ public static boolean hasAttachmentSupport(TaskRepository repository, ITask task) {
+ return Version.XML_RPC.name().equals(repository.getVersion());
+ }
+
+ public static boolean hasChangedSince(TaskRepository repository) {
+ return Version.XML_RPC.name().equals(repository.getVersion());
+ }
+
+ public static boolean hasRichEditor(TaskRepository repository) {
+ return Version.XML_RPC.name().equals(repository.getVersion());
+ }
+
+ public static boolean hasRichEditor(TaskRepository repository, ITask task) {
+ return hasRichEditor(repository);
+ }
+
+ public static boolean isCompleted(String tracStatus) {
+ TaskStatus taskStatus = TaskStatus.fromStatus(tracStatus);
+ return taskStatus == TaskStatus.CLOSED;
+ }
private final TracAttachmentHandler attachmentHandler = new TracAttachmentHandler(this);
- private TaskRepositoryLocationFactory taskRepositoryLocationFactory = new TaskRepositoryLocationFactory();
+ private TracClientManager clientManager;
private File repositoryConfigurationCacheFile;
- public TracRepositoryConnector(File repositoryConfigurationCacheFile) {
- this.repositoryConfigurationCacheFile = repositoryConfigurationCacheFile;
+ private final TracTaskDataHandler taskDataHandler = new TracTaskDataHandler(this);
- }
+ private TaskRepositoryLocationFactory taskRepositoryLocationFactory = new TaskRepositoryLocationFactory();
+
+ private final TracWikiHandler wikiHandler = new TracWikiHandler(this);
public TracRepositoryConnector() {
if (TracCorePlugin.getDefault() != null) {
@@ -76,6 +327,11 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
}
}
+ public TracRepositoryConnector(File repositoryConfigurationCacheFile) {
+ this.repositoryConfigurationCacheFile = repositoryConfigurationCacheFile;
+
+ }
+
@Override
public boolean canCreateNewTask(TaskRepository repository) {
return true;
@@ -86,19 +342,21 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
return true;
}
- private final TracWikiHandler wikiHandler = new TracWikiHandler(this);
+ @Override
+ public AbstractTaskAttachmentHandler getTaskAttachmentHandler() {
+ return attachmentHandler;
+ }
- public boolean hasWiki(TaskRepository repository) {
- // check the access mode to validate Wiki support
- ITracClient client = getClientManager().getTracClient(repository);
- if (client instanceof ITracWikiClient) {
- return true;
+ public synchronized TracClientManager getClientManager() {
+ if (clientManager == null) {
+ clientManager = new TracClientManager(repositoryConfigurationCacheFile, taskRepositoryLocationFactory);
}
- return false;
+ return clientManager;
}
- public AbstractWikiHandler getWikiHandler() {
- return wikiHandler;
+ @Override
+ public String getConnectorKind() {
+ return TracCorePlugin.CONNECTOR_KIND;
}
@Override
@@ -107,8 +365,14 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
}
@Override
- public String getConnectorKind() {
- return TracCorePlugin.REPOSITORY_KIND;
+ public TaskData getTaskData(TaskRepository repository, String taskId, IProgressMonitor monitor)
+ throws CoreException {
+ return taskDataHandler.getTaskData(repository, taskId, monitor);
+ }
+
+ @Override
+ public AbstractTaskDataHandler getTaskDataHandler() {
+ return taskDataHandler;
}
@Override
@@ -130,18 +394,30 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
}
@Override
+ public String getTaskIdPrefix() {
+ return "#";
+ }
+
+ public TaskRepositoryLocationFactory getTaskRepositoryLocationFactory() {
+ return taskRepositoryLocationFactory;
+ }
+
+ @Override
public String getTaskUrl(String repositoryUrl, String taskId) {
return repositoryUrl + ITracClient.TICKET_URL + taskId;
}
- @Override
- public AbstractAttachmentHandler getAttachmentHandler() {
- return attachmentHandler;
+ public AbstractWikiHandler getWikiHandler() {
+ return wikiHandler;
}
- @Override
- public AbstractTaskDataHandler getLegacyTaskDataHandler() {
- return taskDataHandler;
+ public boolean hasWiki(TaskRepository repository) {
+ // check the access mode to validate Wiki support
+ ITracClient client = getClientManager().getTracClient(repository);
+ if (client instanceof ITracWikiClient) {
+ return true;
+ }
+ return false;
}
@Override
@@ -150,20 +426,22 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
try {
monitor.beginTask("Querying repository", IProgressMonitor.UNKNOWN);
- final List<TracTicket> tickets = new ArrayList<TracTicket>();
+ TracSearch search = TracUtils.toTracSearch(query);
+ if (search == null) {
+ return new RepositoryStatus(repository.getRepositoryUrl(), IStatus.ERROR, TracCorePlugin.ID_PLUGIN,
+ RepositoryStatus.ERROR_REPOSITORY, "The query is invalid: \"" + query.getUrl() + "\"");
+ }
ITracClient client;
try {
client = getClientManager().getTracClient(repository);
- if (query instanceof TracRepositoryQuery) {
- client.search(((TracRepositoryQuery) query).getTracSearch(), tickets, monitor);
- }
+ final List<TracTicket> tickets = new ArrayList<TracTicket>();
+ client.search(search, tickets, monitor);
client.updateAttributes(monitor, false);
for (TracTicket ticket : tickets) {
- RepositoryTaskData taskData = taskDataHandler.createTaskDataFromTicket(client, repository, ticket,
- monitor);
- ((LegacyTaskDataCollector) resultCollector).accept(taskData);
+ TaskData taskData = taskDataHandler.createTaskDataFromTicket(client, repository, ticket, monitor);
+ resultCollector.accept(taskData);
}
} catch (Throwable e) {
return TracCorePlugin.toStatus(e, repository);
@@ -176,6 +454,34 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
}
@Override
+ public void postSynchronization(ISynchronizationSession event, IProgressMonitor monitor) throws CoreException {
+ try {
+ monitor.beginTask("", 1);
+ if (event.isFullSynchronization()) {
+ Date date = getSynchronizationTimestamp(event);
+ if (date != null) {
+ event.getTaskRepository().setSynchronizationTimeStamp(TracUtils.toTracTime(date) + "");
+ }
+ }
+ } finally {
+ monitor.done();
+ }
+ }
+
+ private Date getSynchronizationTimestamp(ISynchronizationSession event) {
+ Date mostRecent = new Date(0);
+ Date mostRecentTimeStamp = TracUtils.parseDate(event.getTaskRepository().getSynchronizationTimeStamp());
+ for (ITask task : event.getChangedTasks()) {
+ Date taskModifiedDate = task.getModificationDate();
+ if (taskModifiedDate != null && taskModifiedDate.after(mostRecent)) {
+ mostRecent = taskModifiedDate;
+ mostRecentTimeStamp = task.getModificationDate();
+ }
+ }
+ return mostRecentTimeStamp;
+ }
+
+ @Override
public void preSynchronization(ISynchronizationSession session, IProgressMonitor monitor) throws CoreException {
monitor = Policy.monitorFor(monitor);
try {
@@ -250,70 +556,12 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
}
}
- @Override
- public AbstractTask createTask(String repositoryUrl, String id, String summary) {
- TracTask tracTask = new TracTask(repositoryUrl, id, summary);
- tracTask.setCreationDate(new Date());
- return tracTask;
- }
-
- @Override
- public boolean updateTaskFromTaskData(TaskRepository taskRepository, ITask task, RepositoryTaskData taskData) {
- TracTask tracTask = (TracTask) task;
- ITracClient client = getClientManager().getTracClient(taskRepository);
-
- task.setSummary(taskData.getSummary());
- task.setOwner(taskData.getAttributeValue(RepositoryTaskAttribute.USER_ASSIGNED));
- if (TracTask.isCompleted(taskData.getStatus())) {
- task.setCompletionDate(TracUtils.parseDate(Integer.valueOf(taskData.getLastModified())));
- } else {
- task.setCompletionDate(null);
- }
- task.setUrl(taskRepository.getRepositoryUrl() + ITracClient.TICKET_URL + taskData.getTaskId());
-
- String priority = taskData.getAttributeValue(Attribute.PRIORITY.getTracKey());
- TracPriority[] tracPriorities = client.getPriorities();
- task.setPriority(TracTask.getTaskPriority(priority, tracPriorities).toString());
-
- Kind kind = TracTask.Kind.fromType(taskData.getAttributeValue(Attribute.TYPE.getTracKey()));
- task.setTaskKind((kind != null) ? kind.toString() : null);
-
- tracTask.setSupportsSubtasks(taskDataHandler.canInitializeSubTaskData(null, taskData));
-
- // TODO check return value
- return false;
- }
-
- public static int getTicketId(String taskId) throws CoreException {
- try {
- return Integer.parseInt(taskId);
- } catch (NumberFormatException e) {
- throw new CoreException(new Status(IStatus.ERROR, TracCorePlugin.ID_PLUGIN, IStatus.OK,
- "Invalid ticket id: " + taskId, e));
- }
- }
-
- public synchronized TracClientManager getClientManager() {
- if (clientManager == null) {
- clientManager = new TracClientManager(repositoryConfigurationCacheFile, taskRepositoryLocationFactory);
+ public synchronized void setTaskRepositoryLocationFactory(
+ TaskRepositoryLocationFactory taskRepositoryLocationFactory) {
+ this.taskRepositoryLocationFactory = taskRepositoryLocationFactory;
+ if (this.clientManager != null) {
+ clientManager.setTaskRepositoryLocationFactory(taskRepositoryLocationFactory);
}
- return clientManager;
- }
-
- public static boolean hasChangedSince(TaskRepository repository) {
- return Version.XML_RPC.name().equals(repository.getVersion());
- }
-
- public static boolean hasRichEditor(TaskRepository repository) {
- return Version.XML_RPC.name().equals(repository.getVersion());
- }
-
- public static boolean hasRichEditor(TaskRepository repository, ITask task) {
- return hasRichEditor(repository);
- }
-
- public static boolean hasAttachmentSupport(TaskRepository repository, ITask task) {
- return Version.XML_RPC.name().equals(repository.getVersion());
}
public void stop() {
@@ -333,110 +581,73 @@ public class TracRepositoryConnector extends AbstractLegacyRepositoryConnector {
}
}
- public static String getDisplayUsername(TaskRepository repository) {
- AuthenticationCredentials credentials = repository.getCredentials(AuthenticationType.REPOSITORY);
- if (credentials != null && credentials.getUserName().length() > 0) {
- return ITracClient.DEFAULT_USERNAME;
+ @Override
+ public void updateTaskFromTaskData(TaskRepository taskRepository, ITask task, TaskData taskData) {
+ TaskMapper mapper = getTaskMapper(taskRepository, taskData);
+ mapper.applyTo(task);
+ if (isCompleted(mapper.getStatus())) {
+ task.setCompletionDate(mapper.getModificationDate());
+ } else {
+ task.setCompletionDate(null);
}
- return repository.getUserName();
+ task.setUrl(taskRepository.getRepositoryUrl() + ITracClient.TICKET_URL + taskData.getTaskId());
+ task.setAttribute(TASK_KEY_SUPPORTS_SUBTASKS, Boolean.toString(taskDataHandler.supportsSubtasks(taskData)));
}
@Override
- public String getTaskIdPrefix() {
- return "#";
- }
-
- public static TracTicket getTracTicket(TaskRepository repository, RepositoryTaskData data)
- throws InvalidTicketException, CoreException {
- TracTicket ticket = new TracTicket(getTicketId(data.getTaskId()));
-
- List<RepositoryTaskAttribute> attributes = data.getAttributes();
- for (RepositoryTaskAttribute attribute : attributes) {
- if (TracAttributeFactory.isInternalAttribute(attribute.getId())) {
- // ignore
- } else if (!attribute.isReadOnly()) {
- ticket.putValue(attribute.getId(), attribute.getValue());
- }
- }
-
- // set cc value
- StringBuilder sb = new StringBuilder();
- List<String> removeValues = data.getAttributeValues(RepositoryTaskAttribute.REMOVE_CC);
- List<String> values = data.getAttributeValues(RepositoryTaskAttribute.USER_CC);
- for (String user : values) {
- if (!removeValues.contains(user)) {
- if (sb.length() > 0) {
- sb.append(",");
- }
- sb.append(user);
- }
- }
- if (data.getAttributeValue(RepositoryTaskAttribute.NEW_CC).length() > 0) {
- if (sb.length() > 0) {
- sb.append(",");
- }
- sb.append(data.getAttributeValue(RepositoryTaskAttribute.NEW_CC));
- }
- if (RepositoryTaskAttribute.TRUE.equals(data.getAttributeValue(RepositoryTaskAttribute.ADD_SELF_CC))) {
- if (sb.length() > 0) {
- sb.append(",");
- }
- sb.append(repository.getUserName());
- }
- ticket.putBuiltinValue(Key.CC, sb.toString());
-
- RepositoryOperation operation = data.getSelectedOperation();
- if (operation != null) {
- String action = operation.getKnobName();
- if (!"leave".equals(action)) {
- if ("accept".equals(action)) {
- ticket.putValue("status", TracTask.Status.ASSIGNED.toStatusString());
- ticket.putValue("owner", getDisplayUsername(repository));
- } else if ("resolve".equals(action)) {
- ticket.putValue("status", TracTask.Status.CLOSED.toStatusString());
- ticket.putValue("resolution", operation.getOptionSelection());
- } else if ("reopen".equals(action)) {
- ticket.putValue("status", TracTask.Status.REOPENED.toStatusString());
- ticket.putValue("resolution", "");
- } else if ("reassign".equals(operation.getKnobName())) {
- ticket.putValue("status", TracTask.Status.NEW.toStatusString());
- ticket.putValue("owner", operation.getInputValue());
- }
+ public boolean hasTaskChanged(TaskRepository taskRepository, ITask task, TaskData taskData) {
+ TaskMapper mapper = getTaskMapper(taskRepository, taskData);
+ if (taskData.isPartial()) {
+ return mapper.hasChanges(task);
+ } else {
+ Date repositoryDate = mapper.getModificationDate();
+ Date localDate = task.getModificationDate();
+ if (repositoryDate != null && repositoryDate.equals(localDate)) {
+ return false;
}
+ return true;
}
-
- return ticket;
}
- public TaskRepositoryLocationFactory getTaskRepositoryLocationFactory() {
- return taskRepositoryLocationFactory;
- }
-
- public synchronized void setTaskRepositoryLocationFactory(
- TaskRepositoryLocationFactory taskRepositoryLocationFactory) {
- this.taskRepositoryLocationFactory = taskRepositoryLocationFactory;
- if (this.clientManager != null) {
- clientManager.setTaskRepositoryLocationFactory(taskRepositoryLocationFactory);
+ @Override
+ public Collection<TaskRelation> getTaskRelations(TaskData taskData) {
+ TaskAttribute attribute = taskData.getRoot().getAttribute(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY);
+ if (attribute != null) {
+ List<TaskRelation> result = new ArrayList<TaskRelation>();
+ StringTokenizer t = new StringTokenizer(attribute.getValue(), ", ");
+ while (t.hasMoreTokens()) {
+ result.add(TaskRelation.subtask(t.nextToken()));
+ }
+ return result;
}
+ return Collections.emptySet();
}
@Override
- public RepositoryTaskData getLegacyTaskData(TaskRepository repository, String taskId, IProgressMonitor monitor)
- throws CoreException {
- return getLegacyTaskDataHandler().getTaskData(repository, taskId, monitor);
- }
+ public ITaskMapping getTaskMapping(TaskData taskData) {
+ return getTaskMapper(null, taskData);
+ }
+
+ public TaskMapper getTaskMapper(TaskRepository taskRepository, TaskData taskData) {
+ final ITracClient client = (taskRepository != null) ? getClientManager().getTracClient(taskRepository) : null;
+ return new TaskMapper(taskData) {
+ @Override
+ public PriorityLevel getPriorityLevel() {
+ if (client != null) {
+ String priority = getPriority();
+ TracPriority[] tracPriorities = client.getPriorities();
+ return getTaskPriority(priority, tracPriorities);
+ }
+ return null;
+ }
- @Override
- public void postSynchronization(ISynchronizationSession event, IProgressMonitor monitor) throws CoreException {
- try {
- monitor.beginTask("", 1);
- if (event.isFullSynchronization()) {
- event.getTaskRepository().setSynchronizationTimeStamp(
- getSynchronizationTimestamp(event.getTaskRepository(), event.getChangedTasks()));
+ @Override
+ public String getTaskKind() {
+ TaskKind taskKind = TaskKind.fromType(super.getTaskKind());
+ return (taskKind != null) ? taskKind.toString() : null;
}
- } finally {
- monitor.done();
- }
+
+ };
}
} \ No newline at end of file
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
deleted file mode 100644
index 555a6ad2b..000000000
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracStatus.java
+++ /dev/null
@@ -1,24 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.core;
-
-import org.eclipse.core.runtime.IStatus;
-import org.eclipse.mylyn.tasks.core.RepositoryStatus;
-
-/**
- * @author Steffen Pingel
- */
-public class TracStatus {
-
- public static IStatus createPermissionDeniedError(String repositoryUrl, String pluginId) {
- return new RepositoryStatus(repositoryUrl, IStatus.ERROR, TracCorePlugin.ID_PLUGIN,
- RepositoryStatus.ERROR_PERMISSION_DENIED, "Permission denied.");
- }
-
-}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java
deleted file mode 100644
index 30d94f878..000000000
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTask.java
+++ /dev/null
@@ -1,244 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.core;
-
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.trac.core.model.TracPriority;
-
-/**
- * @author Steffen Pingel
- */
-public class TracTask extends AbstractTask {
-
- public enum Kind {
- DEFECT, ENHANCEMENT, TASK;
-
- public static Kind fromString(String type) {
- if (type == null) {
- return null;
- }
- if (type.equals("Defect")) {
- return DEFECT;
- }
- if (type.equals("Enhancement")) {
- return ENHANCEMENT;
- }
- if (type.equals("Task")) {
- return TASK;
- }
- return null;
- }
-
- public static Kind fromType(String type) {
- if (type == null) {
- return null;
- }
- if (type.equals("defect")) {
- return DEFECT;
- }
- if (type.equals("enhancement")) {
- return ENHANCEMENT;
- }
- if (type.equals("task")) {
- return TASK;
- }
- return null;
- }
-
- @Override
- public String toString() {
- switch (this) {
- case DEFECT:
- return "Defect";
- case ENHANCEMENT:
- return "Enhancement";
- case TASK:
- return "Task";
- default:
- return "";
- }
- }
-
- }
-
- public enum Status {
- ASSIGNED, CLOSED, NEW, REOPENED;
-
- public static Status fromStatus(String status) {
- if (status == null) {
- return null;
- }
- if (status.equals("new")) {
- return NEW;
- }
- if (status.equals("assigned")) {
- return ASSIGNED;
- }
- if (status.equals("reopened")) {
- return REOPENED;
- }
- if (status.equals("closed")) {
- return CLOSED;
- }
- return null;
- }
-
- public String toStatusString() {
- switch (this) {
- case NEW:
- return "new";
- case ASSIGNED:
- return "assigned";
- case REOPENED:
- return "reopened";
- case CLOSED:
- return "closed";
- default:
- return "";
- }
- }
-
- @Override
- public String toString() {
- switch (this) {
- case NEW:
- return "New";
- case ASSIGNED:
- return "Assigned";
- case REOPENED:
- return "Reopened";
- case CLOSED:
- return "Closed";
- default:
- return "";
- }
- }
-
- }
-
- public enum TracPriorityLevel {
- BLOCKER, CRITICAL, MAJOR, MINOR, TRIVIAL;
-
- public static TracPriorityLevel fromPriority(String priority) {
- if (priority == null) {
- return null;
- }
- if (priority.equals("blocker")) {
- return BLOCKER;
- }
- if (priority.equals("critical")) {
- return CRITICAL;
- }
- if (priority.equals("major")) {
- return MAJOR;
- }
- if (priority.equals("minor")) {
- return MINOR;
- }
- if (priority.equals("trivial")) {
- return TRIVIAL;
- }
- return null;
- }
-
- public PriorityLevel toPriorityLevel() {
- switch (this) {
- case BLOCKER:
- return PriorityLevel.P1;
- case CRITICAL:
- return PriorityLevel.P2;
- case MAJOR:
- return PriorityLevel.P3;
- case MINOR:
- return PriorityLevel.P4;
- case TRIVIAL:
- return PriorityLevel.P5;
- default:
- return null;
- }
- }
-
- @Override
- public String toString() {
- switch (this) {
- case BLOCKER:
- return "blocker";
- case CRITICAL:
- return "critical";
- case MAJOR:
- return "major";
- case MINOR:
- return "minor";
- case TRIVIAL:
- return "trivial";
- default:
- return null;
- }
- }
-
- }
-
- private static int TASK_PRIORITY_LEVELS = 5;
-
- public static PriorityLevel getTaskPriority(String tracPriority) {
- if (tracPriority != null) {
- TracPriorityLevel priority = TracPriorityLevel.fromPriority(tracPriority);
- if (priority != null) {
- return priority.toPriorityLevel();
- }
- }
- return PriorityLevel.getDefault();
- }
-
- public static PriorityLevel getTaskPriority(String priority, TracPriority[] tracPriorities) {
- if (priority != null && tracPriorities != null && tracPriorities.length > 0) {
- int minValue = tracPriorities[0].getValue();
- int range = tracPriorities[tracPriorities.length - 1].getValue() - minValue;
- for (TracPriority tracPriority : tracPriorities) {
- if (priority.equals(tracPriority.getName())) {
- float relativeValue = (float) (tracPriority.getValue() - minValue) / range;
- int value = (int) (relativeValue * TASK_PRIORITY_LEVELS) + 1;
- return PriorityLevel.fromLevel(value);
- }
- }
- }
- return getTaskPriority(priority);
- }
-
- public static boolean isCompleted(String tracStatus) {
- TracTask.Status status = TracTask.Status.fromStatus(tracStatus);
- return status == TracTask.Status.CLOSED;
- }
-
- private boolean supportsSubtasks = false;
-
- public TracTask(String repositoryUrl, String id, String label) {
- super(repositoryUrl, id, label);
- setUrl(repositoryUrl + ITracClient.TICKET_URL + id);
- }
-
- @Override
- public String getConnectorKind() {
- return TracCorePlugin.REPOSITORY_KIND;
- }
-
- @Override
- public boolean isLocal() {
- return false;
- }
-
- public boolean getSupportsSubtasks() {
- return supportsSubtasks;
- }
-
- public void setSupportsSubtasks(boolean supportsSubtasks) {
- this.supportsSubtasks = supportsSubtasks;
- }
-
-}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java
index bad39705b..81c2afaf6 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java
@@ -10,9 +10,8 @@ package org.eclipse.mylyn.internal.trac.core;
import java.util.ArrayList;
import java.util.Arrays;
-import java.util.Collections;
+import java.util.Collection;
import java.util.Date;
-import java.util.HashSet;
import java.util.List;
import java.util.Map;
import java.util.Set;
@@ -23,26 +22,26 @@ import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.OperationCanceledException;
import org.eclipse.mylyn.commons.net.Policy;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractAttributeFactory;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractTaskDataHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.DefaultTaskSchema;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryAttachment;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryOperation;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.TaskComment;
-import org.eclipse.mylyn.internal.trac.core.TracAttributeFactory.Attribute;
-import org.eclipse.mylyn.internal.trac.core.TracTask.Kind;
import org.eclipse.mylyn.internal.trac.core.model.TracAttachment;
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.TracTicket;
import org.eclipse.mylyn.internal.trac.core.model.TracTicketField;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
import org.eclipse.mylyn.tasks.core.ITask;
+import org.eclipse.mylyn.tasks.core.ITaskMapping;
+import org.eclipse.mylyn.tasks.core.RepositoryResponse;
import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.RepositoryResponse.ResponseKind;
+import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler;
+import org.eclipse.mylyn.tasks.core.data.TaskAttachmentMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskCommentMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
+import org.eclipse.mylyn.tasks.core.data.TaskMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskOperation;
/**
* @author Steffen Pingel
@@ -55,16 +54,13 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
private static final String CC_DELIMETER = ", ";
- private final AbstractAttributeFactory attributeFactory = new TracAttributeFactory();
-
private final TracRepositoryConnector connector;
public TracTaskDataHandler(TracRepositoryConnector connector) {
this.connector = connector;
}
- @Override
- public RepositoryTaskData getTaskData(TaskRepository repository, String taskId, IProgressMonitor monitor)
+ public TaskData getTaskData(TaskRepository repository, String taskId, IProgressMonitor monitor)
throws CoreException {
monitor = Policy.monitorFor(monitor);
try {
@@ -75,7 +71,7 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
}
}
- public RepositoryTaskData downloadTaskData(TaskRepository repository, int taskId, IProgressMonitor monitor)
+ public TaskData downloadTaskData(TaskRepository repository, int taskId, IProgressMonitor monitor)
throws CoreException {
ITracClient client = connector.getClientManager().getTracClient(repository);
TracTicket ticket;
@@ -91,17 +87,19 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
return createTaskDataFromTicket(client, repository, ticket, monitor);
}
- public RepositoryTaskData createTaskDataFromTicket(ITracClient client, TaskRepository repository,
- TracTicket ticket, IProgressMonitor monitor) throws CoreException {
- RepositoryTaskData taskData = new RepositoryTaskData(attributeFactory, TracCorePlugin.REPOSITORY_KIND,
+ public TaskData createTaskDataFromTicket(ITracClient client, TaskRepository repository, TracTicket ticket,
+ IProgressMonitor monitor) throws CoreException {
+ TaskData taskData = new TaskData(getAttributeMapper(repository), TracCorePlugin.CONNECTOR_KIND,
repository.getRepositoryUrl(), ticket.getId() + "");
try {
if (!TracRepositoryConnector.hasRichEditor(repository)) {
- updateTaskDataFromTicket(taskData, ticket, client);
+ createDefaultAttributes(taskData, client, true);
+ updateTaskData(repository, taskData, ticket);
+ //updateTaskDataFromTicket(taskData, ticket, client);
taskData.setPartial(true);
} else {
- createDefaultAttributes(attributeFactory, taskData, client, true);
- updateTaskData(repository, attributeFactory, taskData, ticket);
+ createDefaultAttributes(taskData, client, true);
+ updateTaskData(repository, taskData, ticket);
}
return taskData;
} catch (OperationCanceledException e) {
@@ -112,21 +110,10 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
}
}
- @Override
- public AbstractAttributeFactory getAttributeFactory(String repositoryUrl, String repositoryKind, String taskKind) {
- // we don't care about the repository information right now
- return attributeFactory;
- }
-
- @Override
- public AbstractAttributeFactory getAttributeFactory(RepositoryTaskData taskData) {
- return getAttributeFactory(taskData.getRepositoryUrl(), taskData.getConnectorKind(), taskData.getTaskKind());
- }
-
- public static void updateTaskData(TaskRepository repository, AbstractAttributeFactory factory,
- RepositoryTaskData data, TracTicket ticket) {
+ public static void updateTaskData(TaskRepository repository, TaskData data, TracTicket ticket) {
if (ticket.getCreated() != null) {
- data.setAttributeValue(Attribute.TIME.getTracKey(), TracUtils.toTracTime(ticket.getCreated()) + "");
+ data.getRoot().getAttribute(TracAttribute.TIME.getTracKey()).setValue(
+ TracUtils.toTracTime(ticket.getCreated()) + "");
}
Date lastChanged = ticket.getLastChanged();
@@ -136,53 +123,53 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
if (Key.CC.getKey().equals(key)) {
StringTokenizer t = new StringTokenizer(valueByKey.get(key), CC_DELIMETER);
while (t.hasMoreTokens()) {
- data.addAttributeValue(key, t.nextToken());
+ data.getRoot().getAttribute(key).addValue(t.nextToken());
}
} else {
- data.setAttributeValue(key, valueByKey.get(key));
+ data.getRoot().getAttribute(key).setValue(valueByKey.get(key));
}
}
TracComment[] comments = ticket.getComments();
if (comments != null) {
+ int count = 1;
for (int i = 0; i < comments.length; i++) {
if (!"comment".equals(comments[i].getField()) || "".equals(comments[i].getNewValue())) {
continue;
}
- TaskComment taskComment = new TaskComment(factory, data.getComments().size() + 1);
- taskComment.setAttributeValue(RepositoryTaskAttribute.COMMENT_AUTHOR, comments[i].getAuthor());
- taskComment.setAttributeValue(RepositoryTaskAttribute.COMMENT_DATE, comments[i].getCreated().toString());
- taskComment.setAttributeValue(RepositoryTaskAttribute.COMMENT_TEXT, comments[i].getNewValue());
- data.addComment(taskComment);
+ TaskCommentMapper mapper = new TaskCommentMapper();
+ mapper.setAuthor(repository.createPerson(comments[i].getAuthor()));
+ mapper.setCreationDate(comments[i].getCreated());
+ mapper.setText(comments[i].getNewValue());
+ mapper.setNumber(count);
+
+ TaskAttribute attribute = data.getRoot().createAttribute(TaskAttribute.PREFIX_COMMENT + count);
+ mapper.applyTo(attribute);
+ count++;
}
}
TracAttachment[] attachments = ticket.getAttachments();
if (attachments != null) {
for (int i = 0; i < attachments.length; i++) {
- RepositoryAttachment taskAttachment = new RepositoryAttachment(factory);
- taskAttachment.setCreator(attachments[i].getAuthor());
- taskAttachment.setRepositoryKind(TracCorePlugin.REPOSITORY_KIND);
- taskAttachment.setRepositoryUrl(repository.getRepositoryUrl());
- taskAttachment.setTaskId("" + ticket.getId());
- taskAttachment.setAttributeValue(Attribute.DESCRIPTION.getTracKey(), attachments[i].getDescription());
- taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_FILENAME,
- attachments[i].getFilename());
- taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_SIZE, attachments[i].getSize() + "");
- taskAttachment.setAttributeValue(RepositoryTaskAttribute.USER_OWNER, attachments[i].getAuthor());
+ TaskAttachmentMapper mapper = new TaskAttachmentMapper();
+ mapper.setAuthor(repository.createPerson(attachments[i].getAuthor()));
+ mapper.setDescription(attachments[i].getDescription());
+ mapper.setFileName(attachments[i].getFilename());
+ mapper.setLength((long) attachments[i].getSize());
if (attachments[i].getCreated() != null) {
if (lastChanged == null || attachments[i].getCreated().after(lastChanged)) {
lastChanged = attachments[i].getCreated();
}
-
- taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_DATE,
- attachments[i].getCreated().toString());
+ mapper.setCreationDate(attachments[i].getCreated());
}
- taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_URL, repository.getRepositoryUrl()
- + ITracClient.TICKET_ATTACHMENT_URL + ticket.getId() + "/" + attachments[i].getFilename());
- taskAttachment.setAttributeValue(RepositoryTaskAttribute.ATTACHMENT_ID, i + "");
- data.addAttachment(taskAttachment);
+ mapper.setUrl(repository.getRepositoryUrl() + ITracClient.TICKET_ATTACHMENT_URL + ticket.getId() + "/"
+ + attachments[i].getFilename());
+ mapper.setAttachmentId(i + "");
+
+ TaskAttribute attribute = data.getRoot().createAttribute(TaskAttribute.PREFIX_ATTACHMENT + (i + 1));
+ mapper.applyTo(attribute);
}
}
@@ -193,82 +180,62 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
addOperation(repository, data, ticket, actionList, "leave");
addOperation(repository, data, ticket, actionList, "accept");
addOperation(repository, data, ticket, actionList, "resolve");
- addOperation(repository, data, ticket, actionList, "reassign");
addOperation(repository, data, ticket, actionList, "reopen");
}
if (lastChanged != null) {
- data.setAttributeValue(Attribute.CHANGE_TIME.getTracKey(), TracUtils.toTracTime(lastChanged) + "");
+ data.getRoot().getAttribute(TracAttribute.CHANGE_TIME.getTracKey()).setValue(
+ TracUtils.toTracTime(lastChanged) + "");
}
}
// TODO Reuse Labels from BugzillaServerFacade
- private static void addOperation(TaskRepository repository, RepositoryTaskData data, TracTicket ticket,
- List<String> actions, String action) {
+ private static void addOperation(TaskRepository repository, TaskData data, TracTicket ticket, List<String> actions,
+ String action) {
if (!actions.remove(action)) {
return;
}
- RepositoryOperation operation = null;
+ String label = null;
if ("leave".equals(action)) {
- operation = new RepositoryOperation(action, "Leave as " + data.getStatus() + " " + data.getResolution());
- operation.setChecked(true);
+ // TODO
+ //label = "Leave as " + data.getStatus() + " " + data.getResolution();
+ label = "Leave";
} else if ("accept".equals(action)) {
- operation = new RepositoryOperation(action, "Accept");
+ label = "Accept";
} else if ("resolve".equals(action)) {
- operation = new RepositoryOperation(action, "Resolve as");
- operation.setUpOptions("resolution");
- for (String resolution : ticket.getResolutions()) {
- operation.addOption(resolution, resolution);
- }
- } else if ("reassign".equals(action)) {
- operation = new RepositoryOperation(action, "Reassign to");
- operation.setInputName("owner");
- operation.setInputValue(TracRepositoryConnector.getDisplayUsername(repository));
+ label = "Resolve as";
} else if ("reopen".equals(action)) {
- operation = new RepositoryOperation(action, "Reopen");
+ label = "Reopen";
}
- if (operation != null) {
- data.addOperation(operation);
+ if (label != null) {
+ TaskAttribute attribute = data.getRoot().createAttribute(TaskAttribute.PREFIX_OPERATION + action);
+ TaskOperation.applyTo(attribute, action, label);
+ if ("resolve".equals(action)) {
+ attribute.getMetaData().putValue(TaskAttribute.META_ASSOCIATED_ATTRIBUTE_ID,
+ TracAttribute.RESOLUTION.getTracKey());
+ }
}
}
- public static void createDefaultAttributes(AbstractAttributeFactory factory, RepositoryTaskData data,
- ITracClient client, boolean existingTask) {
- TracTicketField[] fields = client.getTicketFields();
-
- if (existingTask) {
- createAttribute(factory, data, Attribute.STATUS, client.getTicketStatus());
- createAttribute(factory, data, Attribute.RESOLUTION, client.getTicketResolutions());
- }
-
- createAttribute(factory, data, Attribute.COMPONENT, client.getComponents());
- createAttribute(factory, data, Attribute.VERSION, client.getVersions(), true);
- createAttribute(factory, data, Attribute.PRIORITY, client.getPriorities());
- createAttribute(factory, data, Attribute.SEVERITY, client.getSeverities());
-
- createAttribute(factory, data, Attribute.TYPE, client.getTicketTypes());
- RepositoryTaskAttribute attribute = createAttribute(factory, data, Attribute.OWNER);
- if (!existingTask) {
- attribute.setReadOnly(false);
- }
- createAttribute(factory, data, Attribute.MILESTONE, client.getMilestones(), true);
+ public static void createDefaultAttributes(TaskData data, ITracClient client, boolean existingTask) {
+ createAttribute(data, TracAttribute.SUMMARY);
+ createAttribute(data, TracAttribute.DESCRIPTION);
if (existingTask) {
- createAttribute(factory, data, Attribute.REPORTER);
+ createAttribute(data, TracAttribute.TIME);
+ createAttribute(data, TracAttribute.CHANGE_TIME);
+ createAttribute(data, TracAttribute.STATUS, client.getTicketStatus());
+ createAttribute(data, TracAttribute.RESOLUTION, client.getTicketResolutions());
}
-
- if (existingTask) {
- createAttribute(factory, data, Attribute.NEW_CC);
- }
- createAttribute(factory, data, Attribute.CC);
- createAttribute(factory, data, Attribute.KEYWORDS);
-
- if (!existingTask) {
- createAttribute(factory, data, Attribute.SUMMARY);
- createAttribute(factory, data, Attribute.DESCRIPTION);
- }
-
+ createAttribute(data, TracAttribute.COMPONENT, client.getComponents());
+ createAttribute(data, TracAttribute.VERSION, client.getVersions(), true);
+ createAttribute(data, TracAttribute.PRIORITY, client.getPriorities());
+ createAttribute(data, TracAttribute.SEVERITY, client.getSeverities());
+ createAttribute(data, TracAttribute.MILESTONE, client.getMilestones(), true);
+ createAttribute(data, TracAttribute.TYPE, client.getTicketTypes());
+ createAttribute(data, TracAttribute.KEYWORDS);
+ TracTicketField[] fields = client.getTicketFields();
if (fields != null) {
for (TracTicketField field : fields) {
if (field.isCustom()) {
@@ -276,29 +243,46 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
}
}
}
+ // people
+ createAttribute(data, TracAttribute.OWNER);
+ if (existingTask) {
+ createAttribute(data, TracAttribute.REPORTER);
+ }
+ createAttribute(data, TracAttribute.CC);
+ if (existingTask) {
+ data.getRoot().createAttribute(TracAttributeMapper.NEW_CC).getMetaData().setType(
+ TaskAttribute.TYPE_SHORT_TEXT).setReadOnly(false);
+ data.getRoot().createAttribute(TracAttributeMapper.REMOVE_CC);
+ data.getRoot().createAttribute(TaskAttribute.COMMENT_NEW).getMetaData().setType(
+ TaskAttribute.TYPE_LONG_RICH_TEXT).setReadOnly(false);
+ }
+ // operations
+ data.getRoot().createAttribute(TaskAttribute.OPERATION).getMetaData().setType(TaskAttribute.TYPE_OPERATION);
}
- private static void createAttribute(RepositoryTaskData data, TracTicketField field) {
- RepositoryTaskAttribute attr = new RepositoryTaskAttribute(field.getName(), field.getLabel(), false);
+ private static void createAttribute(TaskData data, TracTicketField field) {
+ TaskAttribute attr = data.getRoot().createAttribute(field.getName());
+ attr.getMetaData().setLabel(field.getLabel());
+ attr.getMetaData().setKind(TaskAttribute.KIND_DEFAULT);
if (field.getType() == TracTicketField.Type.CHECKBOX) {
// attr.addOption("True", "1");
// attr.addOption("False", "0");
- attr.addOption("1", "1");
- attr.addOption("0", "0");
-
+ attr.getMetaData().setType(TaskAttribute.TYPE_BOOLEAN);
+ attr.putOption("1", "1");
+ attr.putOption("0", "0");
if (field.getDefaultValue() != null) {
attr.setValue(field.getDefaultValue());
}
} else if (field.getType() == TracTicketField.Type.SELECT || field.getType() == TracTicketField.Type.RADIO) {
+ attr.getMetaData().setType(TaskAttribute.TYPE_SINGLE_SELECT);
String[] values = field.getOptions();
if (values != null && values.length > 0) {
if (field.isOptional()) {
- attr.addOption("", "");
+ attr.putOption("", "");
}
for (String value : values) {
- attr.addOption(value, value);
+ attr.putOption(value, value);
}
-
if (field.getDefaultValue() != null) {
try {
int index = Integer.parseInt(field.getDefaultValue());
@@ -320,51 +304,54 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
attr.setValue(field.getDefaultValue());
}
}
- data.addAttribute(attr.getId(), attr);
}
- private static RepositoryTaskAttribute createAttribute(AbstractAttributeFactory factory, RepositoryTaskData data,
- Attribute attribute, Object[] values, boolean allowEmtpy) {
- RepositoryTaskAttribute attr = factory.createAttribute(attribute.getTracKey());
+ private static TaskAttribute createAttribute(TaskData data, TracAttribute tracAttribute) {
+ TaskAttribute attr = data.getRoot().createAttribute(tracAttribute.getTracKey());
+ attr.getMetaData().setType(tracAttribute.getType());
+ attr.getMetaData().setKind(tracAttribute.getKind());
+ attr.getMetaData().setLabel(tracAttribute.toString());
+ attr.getMetaData().setReadOnly(tracAttribute.isReadOnly());
+ return attr;
+ }
+
+ private static TaskAttribute createAttribute(TaskData data, TracAttribute tracAttribute, Object[] values,
+ boolean allowEmtpy) {
+ TaskAttribute attr = createAttribute(data, tracAttribute);
if (values != null && values.length > 0) {
if (allowEmtpy) {
- attr.addOption("", "");
+ attr.putOption("", "");
}
for (Object value : values) {
- attr.addOption(value.toString(), value.toString());
+ attr.putOption(value.toString(), value.toString());
}
} else {
- attr.setHidden(true);
- attr.setReadOnly(true);
+ attr.getMetaData().setReadOnly(true);
}
- data.addAttribute(attribute.getTracKey(), attr);
- return attr;
- }
-
- private static RepositoryTaskAttribute createAttribute(AbstractAttributeFactory factory, RepositoryTaskData data,
- Attribute attribute) {
- RepositoryTaskAttribute attr = factory.createAttribute(attribute.getTracKey());
- data.addAttribute(attribute.getTracKey(), attr);
return attr;
}
- private static RepositoryTaskAttribute createAttribute(AbstractAttributeFactory factory, RepositoryTaskData data,
- Attribute attribute, Object[] values) {
- return createAttribute(factory, data, attribute, values, false);
+ private static TaskAttribute createAttribute(TaskData data, TracAttribute tracAttribute, Object[] values) {
+ return createAttribute(data, tracAttribute, values, false);
}
@Override
- public String postTaskData(TaskRepository repository, RepositoryTaskData taskData, IProgressMonitor monitor)
- throws CoreException {
+ public RepositoryResponse postTaskData(TaskRepository repository, TaskData taskData,
+ Set<TaskAttribute> oldAttributes, IProgressMonitor monitor) throws CoreException {
try {
- TracTicket ticket = TracRepositoryConnector.getTracTicket(repository, taskData);
+ TracTicket ticket = TracTaskDataHandler.getTracTicket(repository, taskData);
ITracClient server = connector.getClientManager().getTracClient(repository);
if (taskData.isNew()) {
int id = server.createTicket(ticket, monitor);
- return id + "";
+ return new RepositoryResponse(ResponseKind.TASK_CREATED, id + "");
} else {
- server.updateTicket(ticket, taskData.getNewComment(), monitor);
- return null;
+ String newComment = "";
+ TaskAttribute newCommentAttribute = taskData.getRoot().getMappedAttribute(TaskAttribute.COMMENT_NEW);
+ if (newCommentAttribute != null) {
+ newComment = newCommentAttribute.getValue();
+ }
+ server.updateTicket(ticket, newComment, monitor);
+ return new RepositoryResponse(ResponseKind.TASK_UPDATED, ticket.getId() + "");
}
} catch (OperationCanceledException e) {
throw e;
@@ -375,12 +362,12 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
}
@Override
- public boolean initializeTaskData(TaskRepository repository, RepositoryTaskData data, IProgressMonitor monitor)
- throws CoreException {
+ public boolean initializeTaskData(TaskRepository repository, TaskData data, ITaskMapping initializationData,
+ IProgressMonitor monitor) throws CoreException {
try {
ITracClient client = connector.getClientManager().getTracClient(repository);
client.updateAttributes(monitor, false);
- createDefaultAttributes(attributeFactory, data, client, false);
+ createDefaultAttributes(data, client, false);
return true;
} catch (OperationCanceledException e) {
throw e;
@@ -391,77 +378,163 @@ public class TracTaskDataHandler extends AbstractTaskDataHandler {
}
@Override
- public boolean initializeSubTaskData(TaskRepository repository, RepositoryTaskData taskData,
- RepositoryTaskData parentTaskData, IProgressMonitor monitor) throws CoreException {
- initializeTaskData(repository, taskData, monitor);
- RepositoryTaskAttribute attribute = taskData.getAttribute(ATTRIBUTE_BLOCKING);
+ public boolean initializeSubTaskData(TaskRepository repository, TaskData taskData, TaskData parentTaskData,
+ IProgressMonitor monitor) throws CoreException {
+ initializeTaskData(repository, taskData, null, monitor);
+ TaskAttribute attribute = taskData.getRoot().getMappedAttribute(ATTRIBUTE_BLOCKING);
if (attribute == null) {
throw new CoreException(new RepositoryStatus(repository, IStatus.ERROR, TracCorePlugin.ID_PLUGIN,
RepositoryStatus.ERROR_REPOSITORY, "The repository does not support subtasks"));
}
- cloneTaskData(parentTaskData, taskData);
- taskData.setDescription("");
- taskData.setSummary("");
+
+ TaskMapper mapper = new TaskMapper(taskData);
+ mapper.merge(new TaskMapper(parentTaskData));
+ mapper.setDescription("");
+ mapper.setSummary("");
attribute.setValue(parentTaskData.getTaskId());
return true;
}
@Override
- public Set<String> getSubTaskIds(RepositoryTaskData taskData) {
- RepositoryTaskAttribute attribute = taskData.getAttribute(ATTRIBUTE_BLOCKED_BY);
- if (attribute != null) {
- Set<String> result = new HashSet<String>();
- StringTokenizer t = new StringTokenizer(attribute.getValue(), ", ");
- while (t.hasMoreTokens()) {
- result.add(t.nextToken());
- }
- return result;
- }
- return Collections.emptySet();
+ public boolean canInitializeSubTaskData(TaskRepository taskRepository, ITask task) {
+ return Boolean.parseBoolean(task.getAttribute(TracRepositoryConnector.TASK_KEY_SUPPORTS_SUBTASKS));
}
+// /**
+// * Updates attributes of <code>taskData</code> from <code>ticket</code>.
+// */
+// public void updateTaskDataFromTicket(TaskData taskData, TracTicket ticket, ITracClient client) {
+// DefaultTaskSchema schema = new DefaultTaskSchema(taskData);
+// if (ticket.getValue(Key.SUMMARY) != null) {
+// schema.setSummary(ticket.getValue(Key.SUMMARY));
+// }
+//
+// if (TracRepositoryConnector.isCompleted(ticket.getValue(Key.STATUS))) {
+// schema.setCompletionDate(ticket.getLastChanged());
+// } else {
+// schema.setCompletionDate(null);
+// }
+//
+// String priority = ticket.getValue(Key.PRIORITY);
+// TracPriority[] tracPriorities = client.getPriorities();
+// schema.setPriority(TracRepositoryConnector.getTaskPriority(priority, tracPriorities));
+//
+// if (ticket.getValue(Key.TYPE) != null) {
+// TaskKind taskKind = TracRepositoryConnector.TaskKind.fromType(ticket.getValue(Key.TYPE));
+// schema.setTaskKind((taskKind != null) ? taskKind.toString() : ticket.getValue(Key.TYPE));
+// }
+//
+// if (ticket.getCreated() != null) {
+// schema.setCreationDate(ticket.getCreated());
+// }
+//
+// if (ticket.getCustomValue(TracTaskDataHandler.ATTRIBUTE_BLOCKING) != null) {
+// taskData.addAttribute(ATTRIBUTE_BLOCKED_BY, new TaskAttribute(ATTRIBUTE_BLOCKED_BY, "Blocked by", true));
+// }
+// }
+
@Override
- public boolean canInitializeSubTaskData(ITask task, RepositoryTaskData parentTaskData) {
- if (parentTaskData != null) {
- return parentTaskData.getAttribute(ATTRIBUTE_BLOCKED_BY) != null;
- } else if (task instanceof TracTask) {
- return ((TracTask) task).getSupportsSubtasks();
- }
- return false;
+ public TaskAttributeMapper getAttributeMapper(TaskRepository taskRepository) {
+ return new TracAttributeMapper(taskRepository);
}
- /**
- * Updates attributes of <code>taskData</code> from <code>ticket</code>.
- */
- public void updateTaskDataFromTicket(RepositoryTaskData taskData, TracTicket ticket, ITracClient client) {
- DefaultTaskSchema schema = new DefaultTaskSchema(taskData);
- if (ticket.getValue(Key.SUMMARY) != null) {
- schema.setSummary(ticket.getValue(Key.SUMMARY));
+ public boolean supportsSubtasks(TaskData taskData) {
+ return taskData.getRoot().getAttribute(ATTRIBUTE_BLOCKING) != null;
+ }
+
+ public static TracTicket getTracTicket(TaskRepository repository, TaskData data) throws InvalidTicketException,
+ CoreException {
+ TracTicket ticket = (data.isNew()) ? new TracTicket() : new TracTicket(
+ TracRepositoryConnector.getTicketId(data.getTaskId()));
+
+ Collection<TaskAttribute> attributes = data.getRoot().getAttributes().values();
+ for (TaskAttribute attribute : attributes) {
+ if (TracAttributeMapper.isInternalAttribute(attribute)) {
+ // ignore
+ } else if (!attribute.getMetaData().isReadOnly()) {
+ ticket.putValue(attribute.getId(), attribute.getValue());
+ }
}
- if (TracTask.isCompleted(ticket.getValue(Key.STATUS))) {
- schema.setCompletionDate(ticket.getLastChanged());
- } else {
- schema.setCompletionDate(null);
+ // set cc value
+ StringBuilder sb = new StringBuilder();
+ List<String> removeValues = TracRepositoryConnector.getAttributeValues(data, TracAttributeMapper.REMOVE_CC);
+ List<String> values = TracRepositoryConnector.getAttributeValues(data, TaskAttribute.USER_CC);
+ for (String user : values) {
+ if (!removeValues.contains(user)) {
+ if (sb.length() > 0) {
+ sb.append(",");
+ }
+ sb.append(user);
+ }
+ }
+ if (TracRepositoryConnector.getAttributeValue(data, TracAttributeMapper.NEW_CC).length() > 0) {
+ if (sb.length() > 0) {
+ sb.append(",");
+ }
+ sb.append(TracRepositoryConnector.getAttributeValue(data, TracAttributeMapper.NEW_CC));
+ }
+ if (Boolean.TRUE.equals(TracRepositoryConnector.getAttributeValue(data, TaskAttribute.ADD_SELF_CC))) {
+ if (sb.length() > 0) {
+ sb.append(",");
+ }
+ sb.append(repository.getUserName());
+ }
+ ticket.putBuiltinValue(Key.CC, sb.toString());
+
+ ticket.putValue("owner", TracRepositoryConnector.getAttributeValue(data, TaskAttribute.USER_ASSIGNED));
+
+ TaskAttribute operationAttribute = data.getRoot().getMappedAttribute(TaskAttribute.OPERATION);
+ if (operationAttribute != null) {
+ TaskOperation operation = TaskOperation.createFrom(operationAttribute);
+ String action = operation.getOperationId();
+ if (!"leave".equals(action)) {
+ if ("accept".equals(action)) {
+ ticket.putValue("status", TracRepositoryConnector.TaskStatus.ASSIGNED.toStatusString());
+ } else if ("resolve".equals(action)) {
+ ticket.putValue("status", TracRepositoryConnector.TaskStatus.CLOSED.toStatusString());
+ ticket.putValue("resolution", TracRepositoryConnector.getAttributeValue(data,
+ TaskAttribute.RESOLUTION));
+ } else if ("reopen".equals(action)) {
+ ticket.putValue("status", TracRepositoryConnector.TaskStatus.REOPENED.toStatusString());
+ ticket.putValue("resolution", "");
+ } else if ("reassign".equals(action)) {
+ ticket.putValue("status", TracRepositoryConnector.TaskStatus.NEW.toStatusString());
+ }
+ }
}
- String priority = ticket.getValue(Key.PRIORITY);
- TracPriority[] tracPriorities = client.getPriorities();
- schema.setPriority(TracTask.getTaskPriority(priority, tracPriorities));
+ return ticket;
+ }
- if (ticket.getValue(Key.TYPE) != null) {
- Kind kind = TracTask.Kind.fromType(ticket.getValue(Key.TYPE));
- schema.setTaskKind((kind != null) ? kind.toString() : ticket.getValue(Key.TYPE));
+ @Override
+ public void migrateTaskData(TaskRepository taskRepository, TaskData taskData) {
+ int version = 0;
+ try {
+ version = Integer.parseInt(taskData.getVersion());
+ } catch (NumberFormatException e) {
+ // ignore
}
- if (ticket.getCreated() != null) {
- schema.setCreationDate(ticket.getCreated());
+ if (version < 1) {
+ Map<String, TaskAttribute> attributes = taskData.getRoot().getAttributes();
+ for (TaskAttribute attribute : attributes.values()) {
+ if (TaskAttribute.OPERATION.equals(attribute.getId())) {
+ attribute.getMetaData().setType(TaskAttribute.TYPE_OPERATION);
+ } else if (TracAttributeMapper.NEW_CC.equals(attribute.getId())) {
+ attribute.getMetaData().setType(TaskAttribute.TYPE_SHORT_TEXT).setReadOnly(false);
+ } else {
+ TracAttribute tracAttribute = TracAttribute.getByTracKey(attribute.getId());
+ if (tracAttribute != null) {
+ attribute.getMetaData().setType(tracAttribute.getType());
+ attribute.getMetaData().setKind(tracAttribute.getKind());
+ attribute.getMetaData().setReadOnly(tracAttribute.isReadOnly());
+ }
+ }
+ }
}
- if (ticket.getCustomValue(TracTaskDataHandler.ATTRIBUTE_BLOCKING) != null) {
- taskData.addAttribute(ATTRIBUTE_BLOCKED_BY, new RepositoryTaskAttribute(ATTRIBUTE_BLOCKED_BY, "Blocked by",
- true));
- }
+ taskData.setVersion("1");
}
}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracComponent.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracComponent.java
index 55aa33015..327cadb13 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracComponent.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracComponent.java
@@ -11,7 +11,7 @@ package org.eclipse.mylyn.internal.trac.core.model;
/**
* @author Steffen Pingel
*/
-public class TracComponent extends TracAttribute {
+public class TracComponent extends TracRepositoryAttribute {
private static final long serialVersionUID = -6181067219323677076L;
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracMilestone.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracMilestone.java
index 0b1ba7065..978989f94 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracMilestone.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracMilestone.java
@@ -14,7 +14,7 @@ import java.util.Date;
/**
* @author Steffen Pingel
*/
-public class TracMilestone extends TracAttribute implements Serializable {
+public class TracMilestone extends TracRepositoryAttribute implements Serializable {
private static final long serialVersionUID = 6648558552508886484L;
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracAttribute.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracRepositoryAttribute.java
index ed74bf8a7..a820d935d 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracAttribute.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracRepositoryAttribute.java
@@ -10,16 +10,19 @@ package org.eclipse.mylyn.internal.trac.core.model;
import java.io.Serializable;
+import org.eclipse.core.runtime.Assert;
+
/**
* @author Steffen Pingel
*/
-public class TracAttribute implements Serializable {
+public class TracRepositoryAttribute implements Serializable {
private static final long serialVersionUID = -4535033208999685315L;
private String name;
- public TracAttribute(String name) {
+ public TracRepositoryAttribute(String name) {
+ Assert.isNotNull(name);
this.name = name;
}
@@ -33,7 +36,8 @@ public class TracAttribute implements Serializable {
@Override
public String toString() {
- return name;
+ // FIXME serialization can restore null values here
+ return (name != null) ? name : "";
}
}
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracVersion.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracVersion.java
index 0b4665fa1..5f5d5c2e3 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracVersion.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracVersion.java
@@ -13,7 +13,7 @@ import java.util.Date;
/**
* @author Steffen Pingel
*/
-public class TracVersion extends TracAttribute {
+public class TracVersion extends TracRepositoryAttribute {
private static final long serialVersionUID = 9018237956062697410L;
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracUtils.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracUtils.java
index dfd105712..b4c9093e6 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracUtils.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/util/TracUtils.java
@@ -10,6 +10,13 @@ package org.eclipse.mylyn.internal.trac.core.util;
import java.util.Date;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.mylyn.internal.trac.core.ITracClient;
+import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
+import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
+import org.eclipse.mylyn.tasks.core.RepositoryStatus;
+
/**
* Provides static helper methods.
*
@@ -17,6 +24,16 @@ import java.util.Date;
*/
public class TracUtils {
+ public static Date parseDate(String time) {
+ if (time != null) {
+ try {
+ return TracUtils.parseDate(Long.valueOf(time));
+ } catch (NumberFormatException e) {
+ }
+ }
+ return null;
+ }
+
public static Date parseDate(long seconds) {
return new Date(seconds * 1000l);
// Calendar c = Calendar.getInstance();
@@ -33,4 +50,31 @@ public class TracUtils {
return date.getTime() / 1000l;
}
+ private static String getQueryParameter(IRepositoryQuery query) {
+ String url = query.getUrl();
+ int i = url.indexOf(ITracClient.QUERY_URL);
+ if (i == -1) {
+ return null;
+ }
+ return url.substring(i + ITracClient.QUERY_URL.length());
+ }
+
+ /**
+ * Creates a <code>TracSearch</code> object from this query.
+ */
+ public static TracSearch toTracSearch(IRepositoryQuery query) {
+ String url = getQueryParameter(query);
+ if (url != null) {
+ TracSearch search = new TracSearch();
+ search.fromUrl(url);
+ return search;
+ }
+ return null;
+ }
+
+ public static IStatus createPermissionDeniedError(String repositoryUrl, String pluginId) {
+ return new RepositoryStatus(repositoryUrl, IStatus.ERROR, TracCorePlugin.ID_PLUGIN,
+ RepositoryStatus.ERROR_PERMISSION_DENIED, "Permission denied.");
+ }
+
}
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtilTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtilTest.java
index 2e0d0ad4e..d39c8df13 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtilTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkUtilTest.java
@@ -23,7 +23,7 @@ public class TracHyperlinkUtilTest extends TestCase {
protected void setUp() throws Exception {
super.setUp();
- repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND, "http://localhost");
+ repository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND, "http://localhost");
}
public void testFindHyperlinksComment() {
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java
index 1d7acea74..6e63d88c1 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/RepositorySearchQueryTest.java
@@ -21,7 +21,6 @@ import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.search.SearchHitCollector;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
import org.eclipse.mylyn.internal.trac.core.ITracClient.Version;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.tasks.core.ITask;
@@ -59,7 +58,7 @@ public class RepositorySearchQueryTest extends TestCase {
protected void init(String url, Version version) {
Credentials credentials = TestUtil.readCredentials(PrivilegeLevel.USER);
- repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND, url);
+ repository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND, url);
repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials(credentials.username,
credentials.password), false);
repository.setTimeZoneId(ITracClient.TIME_ZONE);
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java
index ed97ccc54..61e9e9b6b 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracAttachmentHandlerTest.java
@@ -32,7 +32,6 @@ import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
import org.eclipse.mylyn.internal.trac.core.ITracClient.Version;
import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
import org.eclipse.mylyn.tasks.core.TaskRepository;
@@ -69,7 +68,7 @@ public class TracAttachmentHandlerTest extends TestCase {
}
protected void init(String url, Version version) {
- String kind = TracCorePlugin.REPOSITORY_KIND;
+ String kind = TracCorePlugin.CONNECTOR_KIND;
Credentials credentials = TestUtil.readCredentials(PrivilegeLevel.USER);
repository = new TaskRepository(kind, url);
@@ -84,7 +83,7 @@ public class TracAttachmentHandlerTest extends TestCase {
AbstractRepositoryConnector abstractConnector = manager.getRepositoryConnector(kind);
connector = (TracRepositoryConnector) abstractConnector;
- attachmentHandler = connector.getAttachmentHandler();
+ // FIXME attachmentHandler = connector.getAttachmentHandler();
}
public void testDownloadAttachmentXmlRpc010() throws Exception {
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientManagerTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientManagerTest.java
index 77641ec60..2712b3e1d 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientManagerTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracClientManagerTest.java
@@ -29,7 +29,7 @@ import org.eclipse.mylyn.tasks.core.TaskRepositoryLocationFactory;
public class TracClientManagerTest extends TestCase {
public void testNullCache() throws Exception {
- TaskRepository taskRepository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND,
+ TaskRepository taskRepository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND,
TracTestConstants.TEST_TRAC_096_URL);
taskRepository.setVersion(Version.TRAC_0_9.name());
@@ -42,7 +42,7 @@ public class TracClientManagerTest extends TestCase {
}
public void testReadCache() throws Exception {
- TaskRepository taskRepository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND,
+ TaskRepository taskRepository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND,
TracTestConstants.TEST_TRAC_096_URL);
taskRepository.setVersion(Version.TRAC_0_9.name());
@@ -55,7 +55,7 @@ public class TracClientManagerTest extends TestCase {
}
public void testWriteCache() throws Exception {
- TaskRepository taskRepository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND,
+ TaskRepository taskRepository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND,
TracTestConstants.TEST_TRAC_096_URL);
taskRepository.setVersion(Version.TRAC_0_9.name());
taskRepository.setCredentials(AuthenticationType.REPOSITORY, null, false);
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java
index 92a188f1d..aa8213a7d 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracQueryTest.java
@@ -11,7 +11,6 @@ package org.eclipse.mylyn.trac.tests;
import junit.framework.TestCase;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
/**
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java
index 0ab74215e..d0442d5ad 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryConnectorTest.java
@@ -32,14 +32,11 @@ import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tasks.core.deprecated.LegacyTaskDataCollector;
import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.util.AttachmentUtil;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.internal.tasks.ui.wizards.EditRepositoryWizard;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
import org.eclipse.mylyn.internal.trac.core.ITracClient.Version;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracVersion;
@@ -87,7 +84,7 @@ public class TracRepositoryConnectorTest extends TestCase {
}
protected void init(String url, Version version) {
- String kind = TracCorePlugin.REPOSITORY_KIND;
+ String kind = TracCorePlugin.CONNECTOR_KIND;
Credentials credentials = TestUtil.readCredentials(PrivilegeLevel.USER);
repository = new TaskRepository(kind, url);
@@ -270,27 +267,28 @@ public class TracRepositoryConnectorTest extends TestCase {
assertEquals("2.0", versions[1].getName());
}
- public void testContextXmlRpc010() throws Exception {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
- TracTask task = (TracTask) TasksUiInternal.createTask(repository, data.attachmentTicketId + "", null);
- TasksUiInternal.synchronizeTask(connector, task, true, null);
-
- //int size = task.getTaskData().getAttachments().size();
-
- File sourceContextFile = ContextCorePlugin.getContextStore().getFileForContext(task.getHandleIdentifier());
- sourceContextFile.createNewFile();
- sourceContextFile.deleteOnExit();
-
- assertTrue(AttachmentUtil.attachContext(connector.getAttachmentHandler(), repository, task, "",
- new NullProgressMonitor()));
-
- TasksUiInternal.synchronizeTask(connector, task, true, null);
- // TODO attachment may have been overridden therefore size may not have changed
- //assertEquals(size + 1, task.getTaskData().getAttachments().size());
-
- //RepositoryAttachment attachment = task.getTaskData().getAttachments().get(size);
- //assertTrue(connector.retrieveContext(repository, task, attachment, TasksUiPlugin.getDefault().getProxySettings(), TasksUiPlugin.getDefault().getDataDirectory()));
- }
+ // FIXME
+// public void testContextXmlRpc010() throws Exception {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
+// TracTask task = (TracTask) TasksUiInternal.createTask(repository, data.attachmentTicketId + "", null);
+// TasksUiInternal.synchronizeTask(connector, task, true, null);
+//
+// //int size = task.getTaskData().getAttachments().size();
+//
+// File sourceContextFile = ContextCorePlugin.getContextStore().getFileForContext(task.getHandleIdentifier());
+// sourceContextFile.createNewFile();
+// sourceContextFile.deleteOnExit();
+//
+// assertTrue(AttachmentUtil.attachContext(connector.getAttachmentHandler(), repository, task, "",
+// new NullProgressMonitor()));
+//
+// TasksUiInternal.synchronizeTask(connector, task, true, null);
+// // TODO attachment may have been overridden therefore size may not have changed
+// //assertEquals(size + 1, task.getTaskData().getAttachments().size());
+//
+// //RepositoryAttachment attachment = task.getTaskData().getAttachments().get(size);
+// //assertTrue(connector.retrieveContext(repository, task, attachment, TasksUiPlugin.getDefault().getProxySettings(), TasksUiPlugin.getDefault().getDataDirectory()));
+// }
public void testContextWeb096() throws Exception {
init(TracTestConstants.TEST_TRAC_096_URL, Version.TRAC_0_9);
@@ -300,12 +298,13 @@ public class TracRepositoryConnectorTest extends TestCase {
sourceContextFile.createNewFile();
sourceContextFile.deleteOnExit();
- try {
- AttachmentUtil.attachContext(connector.getAttachmentHandler(), repository, task, "",
- new NullProgressMonitor());
- fail("expected CoreException"); // operation should not be supported
- } catch (CoreException e) {
- }
+// try {
+ // FIXME
+// AttachmentUtil.attachContext(connector.getAttachmentHandler(), repository, task, "",
+// new NullProgressMonitor());
+ fail("expected CoreException"); // operation should not be supported
+// } catch (CoreException e) {
+// }
}
} \ No newline at end of file
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryQuery.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQuery.java
index 5744bd599..3acfdb108 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracRepositoryQuery.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQuery.java
@@ -6,14 +6,17 @@
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.mylyn.internal.trac.core;
+package org.eclipse.mylyn.trac.tests;
import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
+import org.eclipse.mylyn.internal.trac.core.ITracClient;
+import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
/**
* @author Steffen Pingel
*/
+@Deprecated
public class TracRepositoryQuery extends RepositoryQuery {
public TracRepositoryQuery(String repositoryUrl, String queryUrl, String description) {
@@ -27,7 +30,7 @@ public class TracRepositoryQuery extends RepositoryQuery {
@Override
public String getConnectorKind() {
- return TracCorePlugin.REPOSITORY_KIND;
+ return TracCorePlugin.CONNECTOR_KIND;
}
public String getQueryParameter() {
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java
index 4f1bf42f9..b1f8104b4 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositoryQueryTest.java
@@ -19,8 +19,6 @@ import org.eclipse.mylyn.internal.tasks.ui.RefactorRepositoryUrlOperation;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter;
import org.eclipse.mylyn.tasks.core.TaskRepository;
@@ -34,7 +32,7 @@ public class TracRepositoryQueryTest extends TestCase {
TaskRepositoryManager manager = TasksUiPlugin.getRepositoryManager();
manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath());
- TaskRepository repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND,
+ TaskRepository repository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND,
TracTestConstants.TEST_TRAC_096_URL);
manager.addRepository(repository);
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositorySettingsPageTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositorySettingsPageTest.java
index 41086d15d..c33fbf648 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositorySettingsPageTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracRepositorySettingsPageTest.java
@@ -40,7 +40,7 @@ public class TracRepositorySettingsPageTest extends AbstractTracClientTest {
protected void setUp() throws Exception {
super.setUp();
- connector = (TracConnectorUi) TasksUiPlugin.getConnectorUi(TracCorePlugin.REPOSITORY_KIND);
+ connector = (TracConnectorUi) TasksUiPlugin.getConnectorUi(TracCorePlugin.CONNECTOR_KIND);
page = new TracRepositorySettingsPage(null);
Shell shell = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell();
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTask.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTask.java
new file mode 100644
index 000000000..d51f3d61f
--- /dev/null
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTask.java
@@ -0,0 +1,45 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.trac.tests;
+
+import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
+import org.eclipse.mylyn.internal.trac.core.ITracClient;
+import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
+
+/**
+ * @author Steffen Pingel
+ */
+@Deprecated
+public class TracTask extends AbstractTask {
+ private boolean supportsSubtasks = false;
+
+ public TracTask(String repositoryUrl, String id, String label) {
+ super(repositoryUrl, id, label);
+ setUrl(repositoryUrl + ITracClient.TICKET_URL + id);
+ }
+
+ @Override
+ public String getConnectorKind() {
+ return TracCorePlugin.CONNECTOR_KIND;
+ }
+
+ @Override
+ public boolean isLocal() {
+ return false;
+ }
+
+ public boolean getSupportsSubtasks() {
+ return supportsSubtasks;
+ }
+
+ public void setSupportsSubtasks(boolean supportsSubtasks) {
+ this.supportsSubtasks = supportsSubtasks;
+ }
+
+}
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskDataHandlerTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskDataHandlerTest.java
index 426fd36f3..5f25ad37f 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskDataHandlerTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskDataHandlerTest.java
@@ -8,42 +8,29 @@
package org.eclipse.mylyn.trac.tests;
-import java.util.Date;
import java.util.HashSet;
import java.util.Set;
import junit.framework.TestCase;
-import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.NullProgressMonitor;
import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
import org.eclipse.mylyn.commons.net.AuthenticationType;
import org.eclipse.mylyn.context.tests.support.TestUtil;
import org.eclipse.mylyn.context.tests.support.TestUtil.Credentials;
import org.eclipse.mylyn.context.tests.support.TestUtil.PrivilegeLevel;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.IdentityAttributeFactory;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractAttachmentHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.DefaultTaskSchema;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.ITaskAttachment;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
import org.eclipse.mylyn.internal.tasks.core.sync.SynchronizationSession;
import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
-import org.eclipse.mylyn.internal.trac.core.InvalidTicketException;
-import org.eclipse.mylyn.internal.trac.core.TracAttributeFactory;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
import org.eclipse.mylyn.internal.trac.core.TracTaskDataHandler;
import org.eclipse.mylyn.internal.trac.core.ITracClient.Version;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket;
import org.eclipse.mylyn.internal.trac.core.model.TracTicket.Key;
import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.core.RepositoryStatus;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.trac.tests.support.TestFixture;
import org.eclipse.mylyn.trac.tests.support.TracTestUtil;
@@ -78,15 +65,15 @@ public class TracTaskDataHandlerTest extends TestCase {
manager = TasksUiPlugin.getRepositoryManager();
manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath());
- connector = (TracRepositoryConnector) manager.getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND);
-
- taskDataHandler = (TracTaskDataHandler) connector.getLegacyTaskDataHandler();
+ connector = (TracRepositoryConnector) manager.getRepositoryConnector(TracCorePlugin.CONNECTOR_KIND);
+ // FIXME
+// taskDataHandler = (TracTaskDataHandler) connector.getLegacyTaskDataHandler();
}
protected void init(String url, Version version) {
Credentials credentials = TestUtil.readCredentials(PrivilegeLevel.USER);
- repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND, url);
+ repository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND, url);
repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials(credentials.username,
credentials.password), false);
repository.setTimeZoneId(ITracClient.TIME_ZONE);
@@ -236,200 +223,199 @@ public class TracTaskDataHandlerTest extends TestCase {
assertTrue(task.isStale());
}
- public void testNonNumericTaskId() {
- try {
- connector.getLegacyTaskDataHandler().getTaskData(repository, "abc", new NullProgressMonitor());
- fail("Expected CoreException");
- } catch (CoreException e) {
- }
- }
-
- public void testAttachmentChangesLastModifiedDate010() throws Exception {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
- attachmentChangesLastModifiedDate();
- }
-
- public void testAttachmentChangesLastModifiedDate011() throws Exception {
- init(TracTestConstants.TEST_TRAC_011_URL, Version.XML_RPC);
- attachmentChangesLastModifiedDate();
- }
-
- private void attachmentChangesLastModifiedDate() throws Exception {
- RepositoryTaskData taskData = taskDataHandler.getTaskData(repository, data.attachmentTicketId + "",
- new NullProgressMonitor());
- TracTask task = new TracTask(repository.getRepositoryUrl(), data.attachmentTicketId + "", "");
- connector.updateTaskFromTaskData(repository, task, taskData);
- Date lastModified = taskDataHandler.getAttributeFactory(taskData).getDateForAttributeType(
- RepositoryTaskAttribute.DATE_MODIFIED, taskData.getLastModified());
-
- AbstractAttachmentHandler attachmentHandler = connector.getAttachmentHandler();
- ITaskAttachment attachment = new MockAttachment("abc".getBytes());
- attachmentHandler.uploadAttachment(repository, task, attachment, null, new NullProgressMonitor());
-
- taskData = taskDataHandler.getTaskData(repository, data.attachmentTicketId + "", new NullProgressMonitor());
- Date newLastModified = taskDataHandler.getAttributeFactory(taskData).getDateForAttributeType(
- RepositoryTaskAttribute.DATE_MODIFIED, taskData.getLastModified());
- assertTrue("Expected " + newLastModified + " to be more recent than " + lastModified,
- newLastModified.after(lastModified));
- }
-
- public void testPostTaskDataInvalidCredentials010() throws Exception {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
- postTaskDataInvalidCredentials();
- }
-
- public void testPostTaskDataInvalidCredentials011() throws Exception {
- init(TracTestConstants.TEST_TRAC_011_URL, Version.XML_RPC);
- postTaskDataInvalidCredentials();
- }
-
- private void postTaskDataInvalidCredentials() throws Exception {
- TracTask task = (TracTask) TasksUiInternal.createTask(repository, data.offlineHandlerTicketId + "", null);
- TasksUiInternal.synchronizeTask(connector, task, true, null);
- RepositoryTaskData taskData = TasksUiPlugin.getTaskDataStorageManager().getNewTaskData(task.getRepositoryUrl(),
- task.getTaskId());
-
- taskData.setNewComment("new comment");
- repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials("foo", "bar"), false);
- try {
- taskDataHandler.postTaskData(repository, taskData, new NullProgressMonitor());
- } catch (CoreException expected) {
- assertEquals(RepositoryStatus.ERROR_REPOSITORY_LOGIN, expected.getStatus().getCode());
- }
- assertEquals("new comment", taskData.getNewComment());
- }
-
- public void testCanInitializeTaskData() throws Exception {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
-
- TracTask task = new TracTask("", "", "");
- assertFalse(taskDataHandler.canInitializeSubTaskData(task, null));
- task.setSupportsSubtasks(true);
- assertTrue(taskDataHandler.canInitializeSubTaskData(task, null));
-
- RepositoryTaskData taskData = taskDataHandler.getTaskData(repository, data.offlineHandlerTicketId + "",
- new NullProgressMonitor());
- assertFalse(taskDataHandler.canInitializeSubTaskData(null, taskData));
- taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "");
- assertTrue(taskDataHandler.canInitializeSubTaskData(null, taskData));
-
- task.setSupportsSubtasks(false);
- connector.updateTaskFromTaskData(repository, task, taskData);
- assertTrue(taskDataHandler.canInitializeSubTaskData(task, null));
- }
-
- public void testInitializeSubTaskData() throws Exception {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
-
- RepositoryTaskData parentTaskData = taskDataHandler.getTaskData(repository, data.offlineHandlerTicketId + "",
- new NullProgressMonitor());
- try {
- taskDataHandler.initializeSubTaskData(repository, parentTaskData, parentTaskData, new NullProgressMonitor());
- fail("expected CoreException");
- } catch (CoreException expected) {
- }
-
- parentTaskData.setSummary("abc");
- parentTaskData.setDescription("def");
- String component = parentTaskData.getAttribute(TracAttributeFactory.Attribute.COMPONENT.getTracKey())
- .getOptions()
- .get(0);
- parentTaskData.setAttributeValue(TracAttributeFactory.Attribute.COMPONENT.getTracKey(), component);
- parentTaskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "");
- RepositoryTaskData subTaskData = new RepositoryTaskData(parentTaskData.getAttributeFactory(),
- TracCorePlugin.REPOSITORY_KIND, "", "");
- subTaskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKING, "");
- taskDataHandler.initializeSubTaskData(repository, subTaskData, parentTaskData, new NullProgressMonitor());
- assertEquals("", subTaskData.getSummary());
- assertEquals("", subTaskData.getDescription());
- assertEquals(component, subTaskData.getAttributeValue(TracAttributeFactory.Attribute.COMPONENT.getTracKey()));
- assertEquals(parentTaskData.getTaskId(), subTaskData.getAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKING));
- assertEquals("", parentTaskData.getAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY));
- }
-
- public void testGetSubTaskIds() throws Exception {
- RepositoryTaskData taskData = new RepositoryTaskData(new TracAttributeFactory(),
- TracCorePlugin.REPOSITORY_KIND, "", "");
- taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "123 456");
- Set<String> subTaskIds = taskDataHandler.getSubTaskIds(taskData);
- assertEquals(2, subTaskIds.size());
- assertTrue(subTaskIds.contains("123"));
- assertTrue(subTaskIds.contains("456"));
-
- taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "7,8");
- subTaskIds = taskDataHandler.getSubTaskIds(taskData);
- assertEquals(2, subTaskIds.size());
- assertTrue(subTaskIds.contains("7"));
- assertTrue(subTaskIds.contains("8"));
-
- taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, " 7 , 8, ");
- subTaskIds = taskDataHandler.getSubTaskIds(taskData);
- assertEquals(2, subTaskIds.size());
- assertTrue(subTaskIds.contains("7"));
- assertTrue(subTaskIds.contains("8"));
-
- taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "7");
- subTaskIds = taskDataHandler.getSubTaskIds(taskData);
- assertEquals(1, subTaskIds.size());
- assertTrue(subTaskIds.contains("7"));
-
- taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "");
- subTaskIds = taskDataHandler.getSubTaskIds(taskData);
- assertEquals(0, subTaskIds.size());
-
- taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, " ");
- subTaskIds = taskDataHandler.getSubTaskIds(taskData);
- assertEquals(0, subTaskIds.size());
- }
-
- public void testUpdateTaskDetails() throws Exception {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.TRAC_0_9);
-
- TracTicket ticket = new TracTicket(123);
- ticket.putBuiltinValue(Key.DESCRIPTION, "mydescription");
- ticket.putBuiltinValue(Key.PRIORITY, "mypriority");
- ticket.putBuiltinValue(Key.SUMMARY, "mysummary");
- ticket.putBuiltinValue(Key.TYPE, "mytype");
-
- ITracClient client = connector.getClientManager().getTracClient(repository);
- RepositoryTaskData taskData = new RepositoryTaskData(IdentityAttributeFactory.getInstance(),
- TracCorePlugin.REPOSITORY_KIND, repository.getRepositoryUrl(), ticket.getId() + "");
- taskDataHandler.updateTaskDataFromTicket(taskData, ticket, client);
-
- TracTask task = new TracTask(TracTestConstants.TEST_TRAC_010_URL, "" + 123, "desc");
- assertEquals(TracTestConstants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "123", task.getUrl());
- assertEquals("desc", task.getSummary());
-
- DefaultTaskSchema schema = new DefaultTaskSchema(taskData);
- schema.applyTo(task);
-
- assertEquals(TracTestConstants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "123", task.getUrl());
- assertEquals("123", task.getTaskKey());
- assertEquals("mysummary", task.getSummary());
- assertEquals("P3", task.getPriority());
- assertEquals("mytype", task.getTaskKind());
- }
-
- public void testUpdateTaskDetailsSummaryOnly() throws InvalidTicketException {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.TRAC_0_9);
-
- TracTicket ticket = new TracTicket(456);
- ticket.putBuiltinValue(Key.SUMMARY, "mysummary");
-
- TracTask task = new TracTask(TracTestConstants.TEST_TRAC_010_URL, "" + 456, "desc");
-
- ITracClient client = connector.getClientManager().getTracClient(repository);
- RepositoryTaskData taskData = new RepositoryTaskData(IdentityAttributeFactory.getInstance(),
- TracCorePlugin.REPOSITORY_KIND, repository.getRepositoryUrl(), ticket.getId() + "");
- taskDataHandler.updateTaskDataFromTicket(taskData, ticket, client);
- DefaultTaskSchema schema = new DefaultTaskSchema(taskData);
- schema.applyTo(task);
-
- assertEquals(TracTestConstants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "456", task.getUrl());
- assertEquals("456", task.getTaskKey());
- assertEquals("mysummary", task.getSummary());
- assertEquals("P3", task.getPriority());
- assertEquals(AbstractTask.DEFAULT_TASK_KIND, task.getTaskKind());
- }
+ // FIXME
+// public void testNonNumericTaskId() {
+// try {
+// connector.getLegacyTaskDataHandler().getTaskData(repository, "abc", new NullProgressMonitor());
+// fail("Expected CoreException");
+// } catch (CoreException e) {
+// }
+// }
+
+// public void testAttachmentChangesLastModifiedDate010() throws Exception {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
+// attachmentChangesLastModifiedDate();
+// }
+//
+// public void testAttachmentChangesLastModifiedDate011() throws Exception {
+// init(TracTestConstants.TEST_TRAC_011_URL, Version.XML_RPC);
+// attachmentChangesLastModifiedDate();
+// }
+
+// private void attachmentChangesLastModifiedDate() throws Exception {
+// RepositoryTaskData taskData = taskDataHandler.getTaskData(repository, data.attachmentTicketId + "",
+// new NullProgressMonitor());
+// TracTask task = new TracTask(repository.getRepositoryUrl(), data.attachmentTicketId + "", "");
+// connector.updateTaskFromTaskData(repository, task, taskData);
+// Date lastModified = taskDataHandler.getAttributeFactory(taskData).getDateForAttributeType(
+// RepositoryTaskAttribute.DATE_MODIFIED, taskData.getLastModified());
+//
+// AbstractAttachmentHandler attachmentHandler = connector.getAttachmentHandler();
+// ITaskAttachment attachment = new MockAttachment("abc".getBytes());
+// attachmentHandler.uploadAttachment(repository, task, attachment, null, new NullProgressMonitor());
+//
+// taskData = taskDataHandler.getTaskData(repository, data.attachmentTicketId + "", new NullProgressMonitor());
+// Date newLastModified = taskDataHandler.getAttributeFactory(taskData).getDateForAttributeType(
+// RepositoryTaskAttribute.DATE_MODIFIED, taskData.getLastModified());
+// assertTrue("Expected " + newLastModified + " to be more recent than " + lastModified,
+// newLastModified.after(lastModified));
+// }
+//
+// public void testPostTaskDataInvalidCredentials010() throws Exception {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
+// postTaskDataInvalidCredentials();
+// }
+//
+// public void testPostTaskDataInvalidCredentials011() throws Exception {
+// init(TracTestConstants.TEST_TRAC_011_URL, Version.XML_RPC);
+// postTaskDataInvalidCredentials();
+// }
+//
+// private void postTaskDataInvalidCredentials() throws Exception {
+// TracTask task = (TracTask) TasksUiInternal.createTask(repository, data.offlineHandlerTicketId + "", null);
+// TasksUiInternal.synchronizeTask(connector, task, true, null);
+// RepositoryTaskData taskData = TasksUiPlugin.getTaskDataStorageManager().getNewTaskData(task.getRepositoryUrl(),
+// task.getTaskId());
+//
+// taskData.setNewComment("new comment");
+// repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials("foo", "bar"), false);
+// try {
+// taskDataHandler.postTaskData(repository, taskData, new NullProgressMonitor());
+// } catch (CoreException expected) {
+// assertEquals(RepositoryStatus.ERROR_REPOSITORY_LOGIN, expected.getStatus().getCode());
+// }
+// assertEquals("new comment", taskData.getNewComment());
+// }
+//
+// public void testCanInitializeTaskData() throws Exception {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
+//
+// TracTask task = new TracTask("", "", "");
+// assertFalse(taskDataHandler.canInitializeSubTaskData(task, null));
+// task.setSupportsSubtasks(true);
+// assertTrue(taskDataHandler.canInitializeSubTaskData(task, null));
+//
+// RepositoryTaskData taskData = taskDataHandler.getTaskData(repository, data.offlineHandlerTicketId + "",
+// new NullProgressMonitor());
+// assertFalse(taskDataHandler.canInitializeSubTaskData(null, taskData));
+// taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "");
+// assertTrue(taskDataHandler.canInitializeSubTaskData(null, taskData));
+//
+// task.setSupportsSubtasks(false);
+// connector.updateTaskFromTaskData(repository, task, taskData);
+// assertTrue(taskDataHandler.canInitializeSubTaskData(task, null));
+// }
+//
+// public void testInitializeSubTaskData() throws Exception {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
+//
+// RepositoryTaskData parentTaskData = taskDataHandler.getTaskData(repository, data.offlineHandlerTicketId + "",
+// new NullProgressMonitor());
+// try {
+// taskDataHandler.initializeSubTaskData(repository, parentTaskData, parentTaskData, new NullProgressMonitor());
+// fail("expected CoreException");
+// } catch (CoreException expected) {
+// }
+//
+// parentTaskData.setSummary("abc");
+// parentTaskData.setDescription("def");
+// String component = parentTaskData.getAttribute(TracAttribute.COMPONENT.getTracKey()).getOptions().get(0);
+// parentTaskData.setAttributeValue(TracAttribute.COMPONENT.getTracKey(), component);
+// parentTaskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "");
+// RepositoryTaskData subTaskData = new RepositoryTaskData(parentTaskData.getAttributeFactory(),
+// TracCorePlugin.CONNECTOR_KIND, "", "");
+// subTaskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKING, "");
+// taskDataHandler.initializeSubTaskData(repository, subTaskData, parentTaskData, new NullProgressMonitor());
+// assertEquals("", subTaskData.getSummary());
+// assertEquals("", subTaskData.getDescription());
+// assertEquals(component, subTaskData.getAttributeValue(TracAttribute.COMPONENT.getTracKey()));
+// assertEquals(parentTaskData.getTaskId(), subTaskData.getAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKING));
+// assertEquals("", parentTaskData.getAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY));
+// }
+//
+// public void testGetSubTaskIds() throws Exception {
+// RepositoryTaskData taskData = new RepositoryTaskData(new TracAttributeMapper(), TracCorePlugin.CONNECTOR_KIND,
+// "", "");
+// taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "123 456");
+// Set<String> subTaskIds = taskDataHandler.getSubTaskIds(taskData);
+// assertEquals(2, subTaskIds.size());
+// assertTrue(subTaskIds.contains("123"));
+// assertTrue(subTaskIds.contains("456"));
+//
+// taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "7,8");
+// subTaskIds = taskDataHandler.getSubTaskIds(taskData);
+// assertEquals(2, subTaskIds.size());
+// assertTrue(subTaskIds.contains("7"));
+// assertTrue(subTaskIds.contains("8"));
+//
+// taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, " 7 , 8, ");
+// subTaskIds = taskDataHandler.getSubTaskIds(taskData);
+// assertEquals(2, subTaskIds.size());
+// assertTrue(subTaskIds.contains("7"));
+// assertTrue(subTaskIds.contains("8"));
+//
+// taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "7");
+// subTaskIds = taskDataHandler.getSubTaskIds(taskData);
+// assertEquals(1, subTaskIds.size());
+// assertTrue(subTaskIds.contains("7"));
+//
+// taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, "");
+// subTaskIds = taskDataHandler.getSubTaskIds(taskData);
+// assertEquals(0, subTaskIds.size());
+//
+// taskData.setAttributeValue(TracTaskDataHandler.ATTRIBUTE_BLOCKED_BY, " ");
+// subTaskIds = taskDataHandler.getSubTaskIds(taskData);
+// assertEquals(0, subTaskIds.size());
+// }
+//
+// public void testUpdateTaskDetails() throws Exception {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.TRAC_0_9);
+//
+// TracTicket ticket = new TracTicket(123);
+// ticket.putBuiltinValue(Key.DESCRIPTION, "mydescription");
+// ticket.putBuiltinValue(Key.PRIORITY, "mypriority");
+// ticket.putBuiltinValue(Key.SUMMARY, "mysummary");
+// ticket.putBuiltinValue(Key.TYPE, "mytype");
+//
+// ITracClient client = connector.getClientManager().getTracClient(repository);
+// RepositoryTaskData taskData = new RepositoryTaskData(IdentityAttributeFactory.getInstance(),
+// TracCorePlugin.CONNECTOR_KIND, repository.getRepositoryUrl(), ticket.getId() + "");
+// taskDataHandler.updateTaskDataFromTicket(taskData, ticket, client);
+//
+// TracTask task = new TracTask(TracTestConstants.TEST_TRAC_010_URL, "" + 123, "desc");
+// assertEquals(TracTestConstants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "123", task.getUrl());
+// assertEquals("desc", task.getSummary());
+//
+// DefaultTaskSchema schema = new DefaultTaskSchema(taskData);
+// schema.applyTo(task);
+//
+// assertEquals(TracTestConstants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "123", task.getUrl());
+// assertEquals("123", task.getTaskKey());
+// assertEquals("mysummary", task.getSummary());
+// assertEquals("P3", task.getPriority());
+// assertEquals("mytype", task.getTaskKind());
+// }
+//
+// public void testUpdateTaskDetailsSummaryOnly() throws InvalidTicketException {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.TRAC_0_9);
+//
+// TracTicket ticket = new TracTicket(456);
+// ticket.putBuiltinValue(Key.SUMMARY, "mysummary");
+//
+// TracTask task = new TracTask(TracTestConstants.TEST_TRAC_010_URL, "" + 456, "desc");
+//
+// ITracClient client = connector.getClientManager().getTracClient(repository);
+// RepositoryTaskData taskData = new RepositoryTaskData(IdentityAttributeFactory.getInstance(),
+// TracCorePlugin.CONNECTOR_KIND, repository.getRepositoryUrl(), ticket.getId() + "");
+// taskDataHandler.updateTaskDataFromTicket(taskData, ticket, client);
+// DefaultTaskSchema schema = new DefaultTaskSchema(taskData);
+// schema.applyTo(task);
+//
+// assertEquals(TracTestConstants.TEST_TRAC_010_URL + ITracClient.TICKET_URL + "456", task.getUrl());
+// assertEquals("456", task.getTaskKey());
+// assertEquals("mysummary", task.getSummary());
+// assertEquals("P3", task.getPriority());
+// assertEquals(AbstractTask.DEFAULT_TASK_KIND, task.getTaskKind());
+// }
}
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskEditorTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskEditorTest.java
index 082d6d556..df482e883 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskEditorTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskEditorTest.java
@@ -10,25 +10,10 @@ package org.eclipse.mylyn.trac.tests;
import junit.framework.TestCase;
-import org.eclipse.core.runtime.NullProgressMonitor;
-import org.eclipse.jface.viewers.StructuredSelection;
-import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
-import org.eclipse.mylyn.commons.net.AuthenticationType;
-import org.eclipse.mylyn.context.tests.support.TestUtil;
-import org.eclipse.mylyn.context.tests.support.TestUtil.Credentials;
-import org.eclipse.mylyn.context.tests.support.TestUtil.PrivilegeLevel;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractTaskDataHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.views.TaskListView;
-import org.eclipse.mylyn.internal.trac.core.ITracClient;
-import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.ITracClient.Version;
import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
/**
* @author Steffen Pingel
@@ -43,48 +28,49 @@ public class TracTaskEditorTest extends TestCase {
private AbstractTaskDataHandler taskDataHandler;
- @Override
- protected void setUp() throws Exception {
- super.setUp();
-
- manager = TasksUiPlugin.getRepositoryManager();
- manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath());
-
- connector = (TracRepositoryConnector) manager.getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND);
-
- taskDataHandler = connector.getLegacyTaskDataHandler();
- }
-
- protected void init(String url, Version version) {
- Credentials credentials = TestUtil.readCredentials(PrivilegeLevel.USER);
-
- repository = new TaskRepository(TracCorePlugin.REPOSITORY_KIND, url);
- repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials(credentials.username,
- credentials.password), false);
- repository.setTimeZoneId(ITracClient.TIME_ZONE);
- repository.setCharacterEncoding(ITracClient.CHARSET);
- repository.setVersion(version.name());
-
- manager.addRepository(repository);
- }
-
- public void testGetSelectedRepository() throws Exception {
- init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
-
- RepositoryTaskData taskData = taskDataHandler.getTaskData(repository, "1", new NullProgressMonitor());
- AbstractTask task = connector.createTask(repository.getRepositoryUrl(), taskData.getTaskId(), "");
- connector.updateTaskFromTaskData(repository, task, taskData);
- TasksUiPlugin.getTaskList().addTask(task);
- TasksUiUtil.openTask(task);
-
- TaskListView taskListView = TaskListView.getFromActivePerspective();
- // force refresh since automatic reresh is delayed
- taskListView.getViewer().refresh();
- taskListView.getViewer().expandAll();
- taskListView.getViewer().setSelection(new StructuredSelection(task));
-
- assertFalse(taskListView.getViewer().getSelection().isEmpty());
- assertEquals(repository, TasksUiUtil.getSelectedRepository(taskListView.getViewer()));
- }
+ // FIXME
+// @Override
+// protected void setUp() throws Exception {
+// super.setUp();
+//
+// manager = TasksUiPlugin.getRepositoryManager();
+// manager.clearRepositories(TasksUiPlugin.getDefault().getRepositoriesFilePath());
+//
+// connector = (TracRepositoryConnector) manager.getRepositoryConnector(TracCorePlugin.CONNECTOR_KIND);
+//
+// taskDataHandler = connector.getLegacyTaskDataHandler();
+// }
+//
+// protected void init(String url, Version version) {
+// Credentials credentials = TestUtil.readCredentials(PrivilegeLevel.USER);
+//
+// repository = new TaskRepository(TracCorePlugin.CONNECTOR_KIND, url);
+// repository.setCredentials(AuthenticationType.REPOSITORY, new AuthenticationCredentials(credentials.username,
+// credentials.password), false);
+// repository.setTimeZoneId(ITracClient.TIME_ZONE);
+// repository.setCharacterEncoding(ITracClient.CHARSET);
+// repository.setVersion(version.name());
+//
+// manager.addRepository(repository);
+// }
+//
+// public void testGetSelectedRepository() throws Exception {
+// init(TracTestConstants.TEST_TRAC_010_URL, Version.XML_RPC);
+//
+// RepositoryTaskData taskData = taskDataHandler.getTaskData(repository, "1", new NullProgressMonitor());
+// AbstractTask task = connector.createTask(repository.getRepositoryUrl(), taskData.getTaskId(), "");
+// connector.updateTaskFromTaskData(repository, task, taskData);
+// TasksUiPlugin.getTaskList().addTask(task);
+// TasksUiUtil.openTask(task);
+//
+// TaskListView taskListView = TaskListView.getFromActivePerspective();
+// // force refresh since automatic reresh is delayed
+// taskListView.getViewer().refresh();
+// taskListView.getViewer().expandAll();
+// taskListView.getViewer().setSelection(new StructuredSelection(task));
+//
+// assertFalse(taskListView.getViewer().getSelection().isEmpty());
+// assertEquals(repository, TasksUiUtil.getSelectedRepository(taskListView.getViewer()));
+// }
}
diff --git a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskTest.java b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskTest.java
index 511818533..3965a3b27 100644
--- a/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskTest.java
+++ b/org.eclipse.mylyn.trac.tests/src/org/eclipse/mylyn/trac/tests/TracTaskTest.java
@@ -10,7 +10,7 @@ package org.eclipse.mylyn.trac.tests;
import junit.framework.TestCase;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
+import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
import org.eclipse.mylyn.internal.trac.core.model.TracPriority;
/**
@@ -19,25 +19,25 @@ import org.eclipse.mylyn.internal.trac.core.model.TracPriority;
public class TracTaskTest extends TestCase {
public void testIsCompleted() {
- assertTrue(TracTask.isCompleted("closed"));
- assertFalse(TracTask.isCompleted("Closed"));
- assertFalse(TracTask.isCompleted("new"));
- assertFalse(TracTask.isCompleted("assigned"));
- assertFalse(TracTask.isCompleted("reopened"));
- assertFalse(TracTask.isCompleted("foobar"));
- assertFalse(TracTask.isCompleted(""));
- assertFalse(TracTask.isCompleted(null));
+ assertTrue(TracRepositoryConnector.isCompleted("closed"));
+ assertFalse(TracRepositoryConnector.isCompleted("Closed"));
+ assertFalse(TracRepositoryConnector.isCompleted("new"));
+ assertFalse(TracRepositoryConnector.isCompleted("assigned"));
+ assertFalse(TracRepositoryConnector.isCompleted("reopened"));
+ assertFalse(TracRepositoryConnector.isCompleted("foobar"));
+ assertFalse(TracRepositoryConnector.isCompleted(""));
+ assertFalse(TracRepositoryConnector.isCompleted(null));
}
public void testGetTaskPriority() {
- assertEquals("P1", TracTask.getTaskPriority("blocker").toString());
- assertEquals("P2", TracTask.getTaskPriority("critical").toString());
- assertEquals("P3", TracTask.getTaskPriority("major").toString());
- assertEquals("P3", TracTask.getTaskPriority(null).toString());
- assertEquals("P3", TracTask.getTaskPriority("").toString());
- assertEquals("P3", TracTask.getTaskPriority("foo bar").toString());
- assertEquals("P4", TracTask.getTaskPriority("minor").toString());
- assertEquals("P5", TracTask.getTaskPriority("trivial").toString());
+ assertEquals("P1", TracRepositoryConnector.getTaskPriority("blocker").toString());
+ assertEquals("P2", TracRepositoryConnector.getTaskPriority("critical").toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority("major").toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority(null).toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority("").toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority("foo bar").toString());
+ assertEquals("P4", TracRepositoryConnector.getTaskPriority("minor").toString());
+ assertEquals("P5", TracRepositoryConnector.getTaskPriority("trivial").toString());
}
public void testGetTaskPriorityFromTracPriorities() {
@@ -45,17 +45,17 @@ public class TracTaskTest extends TestCase {
TracPriority p2 = new TracPriority("b", 2);
TracPriority p3 = new TracPriority("c", 3);
TracPriority[] priorities = new TracPriority[] { p1, p2, p3 };
- assertEquals("P1", TracTask.getTaskPriority("a", priorities).toString());
- assertEquals("P3", TracTask.getTaskPriority("b", priorities).toString());
- assertEquals("P5", TracTask.getTaskPriority("c", priorities).toString());
- assertEquals("P3", TracTask.getTaskPriority("foo", priorities).toString());
- assertEquals("P3", TracTask.getTaskPriority(null, priorities).toString());
+ assertEquals("P1", TracRepositoryConnector.getTaskPriority("a", priorities).toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority("b", priorities).toString());
+ assertEquals("P5", TracRepositoryConnector.getTaskPriority("c", priorities).toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority("foo", priorities).toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority(null, priorities).toString());
p1 = new TracPriority("a", 10);
priorities = new TracPriority[] { p1 };
- assertEquals("P1", TracTask.getTaskPriority("a", priorities).toString());
- assertEquals("P3", TracTask.getTaskPriority("b", priorities).toString());
- assertEquals("P3", TracTask.getTaskPriority(null, priorities).toString());
+ assertEquals("P1", TracRepositoryConnector.getTaskPriority("a", priorities).toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority("b", priorities).toString());
+ assertEquals("P3", TracRepositoryConnector.getTaskPriority(null, priorities).toString());
p1 = new TracPriority("1", 10);
p2 = new TracPriority("2", 20);
@@ -64,12 +64,12 @@ public class TracTaskTest extends TestCase {
TracPriority p5 = new TracPriority("5", 70);
TracPriority p6 = new TracPriority("6", 100);
priorities = new TracPriority[] { p1, p2, p3, p4, p5, p6 };
- assertEquals("P1", TracTask.getTaskPriority("1", priorities).toString());
- assertEquals("P1", TracTask.getTaskPriority("2", priorities).toString());
- assertEquals("P2", TracTask.getTaskPriority("3", priorities).toString());
- assertEquals("P2", TracTask.getTaskPriority("4", priorities).toString());
- assertEquals("P4", TracTask.getTaskPriority("5", priorities).toString());
- assertEquals("P5", TracTask.getTaskPriority("6", priorities).toString());
+ assertEquals("P1", TracRepositoryConnector.getTaskPriority("1", priorities).toString());
+ assertEquals("P1", TracRepositoryConnector.getTaskPriority("2", priorities).toString());
+ assertEquals("P2", TracRepositoryConnector.getTaskPriority("3", priorities).toString());
+ assertEquals("P2", TracRepositoryConnector.getTaskPriority("4", priorities).toString());
+ assertEquals("P4", TracRepositoryConnector.getTaskPriority("5", priorities).toString());
+ assertEquals("P5", TracRepositoryConnector.getTaskPriority("6", priorities).toString());
}
}
diff --git a/org.eclipse.mylyn.trac.ui/plugin.xml b/org.eclipse.mylyn.trac.ui/plugin.xml
index a3d1beaa9..0fb189241 100644
--- a/org.eclipse.mylyn.trac.ui/plugin.xml
+++ b/org.eclipse.mylyn.trac.ui/plugin.xml
@@ -7,17 +7,17 @@
point="org.eclipse.mylyn.tasks.ui.repositories">
<connectorCore
class="org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector"
- id="org.eclipse.mylyn.trac.tasklist.repositories"
- name="Trac Repository Connector"/>
+ id="trac"
+ name="Trac Connector Core"/>
<connectorUi
brandingIcon="icons/eview16/trac-icon.gif"
class="org.eclipse.mylyn.internal.trac.ui.TracConnectorUi"
- id="Trac Repository UI"
+ id="trac"
+ name="Trac Connector UI"
overlayIcon="icons/eview16/overlay-trac.gif"/>
- <taskListFactory
- class="org.eclipse.mylyn.internal.trac.ui.TracTaskListFactory"
- id="org.eclipse.mylyn.trac.tasklist.taskListFactory"
- name="Trac Externalizer"/>
+ <taskListMigrator
+ class="org.eclipse.mylyn.internal.trac.ui.TracTaskListMigrator">
+ </taskListMigrator>
</extension>
<extension
point="org.eclipse.mylyn.tasks.core.templates">
@@ -31,7 +31,10 @@
</extension>
<extension
point="org.eclipse.mylyn.tasks.ui.editors">
- <editorFactory class="org.eclipse.mylyn.internal.trac.ui.editor.TracTaskEditorFactory"/>
+ <pageFactory
+ class="org.eclipse.mylyn.internal.trac.ui.editor.TracTaskEditorPageFactory"
+ id="org.eclipse.mylyn.trac.ui.pageFactory">
+ </pageFactory>
</extension>
<extension
point="org.eclipse.ui.workbench.texteditor.hyperlinkDetectors">
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracConnectorUi.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracConnectorUi.java
index af4e75053..a1bba5c70 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracConnectorUi.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracConnectorUi.java
@@ -18,22 +18,20 @@ import org.eclipse.jface.wizard.IWizard;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
-import org.eclipse.mylyn.internal.trac.core.TracTask.Kind;
-import org.eclipse.mylyn.internal.trac.ui.wizard.EditTracQueryWizard;
-import org.eclipse.mylyn.internal.trac.ui.wizard.NewTracQueryWizard;
-import org.eclipse.mylyn.internal.trac.ui.wizard.TracCustomQueryPage;
+import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector.TaskKind;
+import org.eclipse.mylyn.internal.trac.ui.wizard.TracQueryPage;
import org.eclipse.mylyn.internal.trac.ui.wizard.TracRepositorySettingsPage;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.ITask;
import org.eclipse.mylyn.tasks.core.ITaskMapping;
import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.mylyn.tasks.ui.AbstractRepositoryConnectorUi;
+import org.eclipse.mylyn.tasks.ui.LegendElement;
import org.eclipse.mylyn.tasks.ui.wizards.ITaskRepositoryPage;
import org.eclipse.mylyn.tasks.ui.wizards.ITaskSearchPage;
import org.eclipse.mylyn.tasks.ui.wizards.NewTaskWizard;
import org.eclipse.mylyn.tasks.ui.wizards.NewWebTaskWizard;
+import org.eclipse.mylyn.tasks.ui.wizards.RepositoryQueryWizard;
/**
* @author Mik Kersten
@@ -41,6 +39,11 @@ import org.eclipse.mylyn.tasks.ui.wizards.NewWebTaskWizard;
*/
public class TracConnectorUi extends AbstractRepositoryConnectorUi {
+ @SuppressWarnings("restriction")
+ public TracConnectorUi() {
+ org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin.getDefault().addSearchHandler(new TracSearchHandler());
+ }
+
@Override
public IHyperlink[] findHyperlinks(TaskRepository repository, String text, int lineOffset, int regionOffset) {
return TracHyperlinkUtil.findTicketHyperlinks(repository, text, lineOffset, regionOffset);
@@ -58,7 +61,7 @@ public class TracConnectorUi extends AbstractRepositoryConnectorUi {
@Override
public ITaskSearchPage getSearchPage(TaskRepository repository, IStructuredSelection selection) {
- return new TracCustomQueryPage(repository);
+ return new TracQueryPage(repository);
}
@Override
@@ -78,47 +81,35 @@ public class TracConnectorUi extends AbstractRepositoryConnectorUi {
@Override
public IWizard getQueryWizard(TaskRepository repository, IRepositoryQuery query) {
- if (query instanceof TracRepositoryQuery) {
- return new EditTracQueryWizard(repository, query);
- } else {
- return new NewTracQueryWizard(repository);
- }
+ RepositoryQueryWizard wizard = new RepositoryQueryWizard(repository);
+ wizard.addPage(new TracQueryPage(repository, query));
+ return wizard;
}
@Override
public String getConnectorKind() {
- return TracCorePlugin.REPOSITORY_KIND;
+ return TracCorePlugin.CONNECTOR_KIND;
}
@Override
public ImageDescriptor getTaskKindOverlay(ITask task) {
- Kind kind = Kind.fromString(task.getTaskKind());
- if (kind == Kind.DEFECT) {
+ TaskKind taskKind = TaskKind.fromString(task.getTaskKind());
+ if (taskKind == TaskKind.DEFECT) {
return TracImages.OVERLAY_DEFECT;
- } else if (kind == Kind.ENHANCEMENT) {
+ } else if (taskKind == TaskKind.ENHANCEMENT) {
return TracImages.OVERLAY_ENHANCEMENT;
- } else if (kind == Kind.TASK) {
+ } else if (taskKind == TaskKind.TASK) {
return null;
}
return super.getTaskKindOverlay(task);
}
@Override
- public List<ITask> getLegendItems() {
- List<ITask> legendItems = new ArrayList<ITask>();
-
- TracTask defect = new TracTask("", Kind.DEFECT.name(), Kind.DEFECT.toString());
- defect.setTaskKind(Kind.DEFECT.toString());
- legendItems.add(defect);
-
- TracTask enhancement = new TracTask("", Kind.ENHANCEMENT.name(), Kind.ENHANCEMENT.toString());
- enhancement.setTaskKind(Kind.ENHANCEMENT.toString());
- legendItems.add(enhancement);
-
- TracTask task = new TracTask("", Kind.TASK.name(), Kind.TASK.toString());
- task.setTaskKind(Kind.TASK.toString());
- legendItems.add(task);
-
+ public List<LegendElement> getLegendElements() {
+ List<LegendElement> legendItems = new ArrayList<LegendElement>();
+ legendItems.add(LegendElement.createTask(TaskKind.DEFECT.toString(), TracImages.OVERLAY_DEFECT));
+ legendItems.add(LegendElement.createTask(TaskKind.ENHANCEMENT.toString(), TracImages.OVERLAY_ENHANCEMENT));
+ legendItems.add(LegendElement.createTask(TaskKind.TASK.toString(), null));
return legendItems;
}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java
index f4d10a8f1..d6c9e2173 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracHyperlinkDetector.java
@@ -27,7 +27,7 @@ public class TracHyperlinkDetector extends AbstractHyperlinkDetector {
public IHyperlink[] detectHyperlinks(ITextViewer textViewer, IRegion region, boolean canShowMultipleHyperlinks) {
TaskRepository taskRepository = (TaskRepository) getAdapter(TaskRepository.class);
- if (taskRepository != null && TracCorePlugin.REPOSITORY_KIND.equals(taskRepository.getConnectorKind())) {
+ if (taskRepository != null && TracCorePlugin.CONNECTOR_KIND.equals(taskRepository.getConnectorKind())) {
IDocument document = textViewer.getDocument();
if (document == null) {
return null;
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracDuplicateDetector.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracSearchHandler.java
index 660f34e2d..77b03270b 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracDuplicateDetector.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracSearchHandler.java
@@ -6,41 +6,45 @@
* http://www.eclipse.org/legal/epl-v10.html
*******************************************************************************/
-package org.eclipse.mylyn.internal.trac.ui.editor;
+package org.eclipse.mylyn.internal.trac.ui;
-import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyDuplicateDetector;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
+import org.eclipse.mylyn.internal.tasks.core.AbstractSearchHandler;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
+import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter.CompareOperator;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
-public class TracDuplicateDetector extends AbstractLegacyDuplicateDetector {
+@SuppressWarnings("restriction")
+public class TracSearchHandler extends AbstractSearchHandler {
@Override
- public RepositoryQuery getDuplicatesQuery(TaskRepository repository, RepositoryTaskData taskData) {
+ public String getConnectorKind() {
+ return TracCorePlugin.CONNECTOR_KIND;
+ }
+
+ @Override
+ public boolean queryForText(TaskRepository taskRepository, IRepositoryQuery query, TaskData taskData,
+ String searchString) {
TracSearchFilter filter = new TracSearchFilter("description");
filter.setOperator(CompareOperator.CONTAINS);
-
- String searchString = AbstractLegacyDuplicateDetector.getStackTraceFromDescription(taskData.getDescription());
-
filter.addValue(searchString);
TracSearch search = new TracSearch();
search.addFilter(filter);
- // TODO copied from TracCustomQueryPage.getQueryUrl()
+ // TODO copied from TracQueryPage.getQueryUrl()
StringBuilder sb = new StringBuilder();
- sb.append(repository.getRepositoryUrl());
+ sb.append(taskRepository.getRepositoryUrl());
sb.append(ITracClient.QUERY_URL);
sb.append(search.toUrl());
- TracRepositoryQuery query = new TracRepositoryQuery(repository.getRepositoryUrl(), sb.toString(),
- "<Duplicate Search>");
- return query;
+ query.setUrl(sb.toString());
+
+ return true;
}
}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListFactory.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListFactory.java
deleted file mode 100644
index 9d8d51740..000000000
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListFactory.java
+++ /dev/null
@@ -1,80 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.ui;
-
-import java.util.HashSet;
-import java.util.Set;
-
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractTaskListFactory;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
-import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.w3c.dom.Element;
-
-/**
- * @author Steffen Pingel
- * @author Mik Kersten
- */
-public class TracTaskListFactory extends AbstractTaskListFactory {
-
- private static final String KEY_TRAC = "Trac";
-
- private static final String KEY_TRAC_TASK = KEY_TRAC + AbstractTaskListFactory.KEY_TASK;
-
- private static final String KEY_TRAC_QUERY = KEY_TRAC + AbstractTaskListFactory.KEY_QUERY;
-
- private static final String KEY_SUPPORTS_SUBTASKS = "SupportsSubtasks";
-
- @Override
- public String getTaskElementName() {
- return KEY_TRAC_TASK;
- }
-
- @Override
- public Set<String> getQueryElementNames() {
- Set<String> names = new HashSet<String>();
- names.add(KEY_TRAC_QUERY);
- return names;
- }
-
- @Override
- public boolean canCreate(ITask task) {
- return task instanceof TracTask;
- }
-
- @Override
- public boolean canCreate(IRepositoryQuery category) {
- return category instanceof TracRepositoryQuery;
- }
-
- @Override
- public String getQueryElementName(IRepositoryQuery query) {
- return query instanceof TracRepositoryQuery ? KEY_TRAC_QUERY : "";
- }
-
- @Override
- public AbstractTask createTask(String repositoryUrl, String taskId, String summary, Element element) {
- boolean supportsSubtasks = false;
- if (element.hasAttribute(KEY_SUPPORTS_SUBTASKS)) {
- supportsSubtasks = Boolean.valueOf(element.getAttribute(KEY_SUPPORTS_SUBTASKS));
- }
-
- TracTask task = new TracTask(repositoryUrl, taskId, summary);
- task.setSupportsSubtasks(supportsSubtasks);
- return task;
- }
-
- @Override
- public RepositoryQuery createQuery(String repositoryUrl, String queryString, String label, Element element) {
- return new TracRepositoryQuery(repositoryUrl, queryString, label);
- }
-}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListMigrator.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListMigrator.java
new file mode 100644
index 000000000..c34921414
--- /dev/null
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracTaskListMigrator.java
@@ -0,0 +1,66 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.trac.ui;
+
+import java.util.HashSet;
+import java.util.Set;
+
+import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
+import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
+import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
+import org.eclipse.mylyn.tasks.core.AbstractTaskListMigrator;
+import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
+import org.eclipse.mylyn.tasks.core.ITask;
+import org.w3c.dom.Element;
+
+/**
+ * @author Steffen Pingel
+ */
+public class TracTaskListMigrator extends AbstractTaskListMigrator {
+
+ private static final String KEY_TRAC = "Trac";
+
+ private static final String KEY_TRAC_TASK = KEY_TRAC + KEY_TASK;
+
+ private static final String KEY_TRAC_QUERY = KEY_TRAC + KEY_QUERY;
+
+ private static final String KEY_SUPPORTS_SUBTASKS = "SupportsSubtasks";
+
+ @Override
+ public String getConnectorKind() {
+ return TracCorePlugin.CONNECTOR_KIND;
+ }
+
+ @Override
+ public String getTaskElementName() {
+ return KEY_TRAC_TASK;
+ }
+
+ @Override
+ public Set<String> getQueryElementNames() {
+ Set<String> names = new HashSet<String>();
+ names.add(KEY_TRAC_QUERY);
+ return names;
+ }
+
+ @Override
+ public void migrateQuery(IRepositoryQuery query, Element element) {
+ // nothing to do
+ }
+
+ @Override
+ public void migrateTask(ITask task, Element element) {
+ task.setModificationDate(TracUtils.parseDate(element.getAttribute(KEY_LAST_MOD_DATE)));
+ if (element.hasAttribute(KEY_SUPPORTS_SUBTASKS)) {
+ task.setAttribute(TracRepositoryConnector.TASK_KEY_SUPPORTS_SUBTASKS, Boolean.valueOf(
+ element.getAttribute(KEY_SUPPORTS_SUBTASKS)).toString());
+ }
+ }
+
+}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java
index 6790a10d4..dc5f42f0f 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/TracUiPlugin.java
@@ -21,10 +21,6 @@ public class TracUiPlugin extends AbstractUIPlugin {
public static final String ID_PLUGIN = "org.eclipse.mylyn.trac.ui";
- public final static String TITLE_MESSAGE_DIALOG = "Mylyn Trac Client";
-
- public static final String NEW_BUG_EDITOR_ID = ID_PLUGIN + ".newBugEditor";
-
private static TracUiPlugin plugin;
public TracUiPlugin() {
@@ -42,8 +38,7 @@ public class TracUiPlugin extends AbstractUIPlugin {
@Override
public void stop(BundleContext context) throws Exception {
- TasksUi.getRepositoryManager().removeListener(
- TracCorePlugin.getDefault().getConnector().getClientManager());
+ TasksUi.getRepositoryManager().removeListener(TracCorePlugin.getDefault().getConnector().getClientManager());
plugin = null;
super.stop(context);
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java
deleted file mode 100644
index 2c010b438..000000000
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/NewTracTaskEditor.java
+++ /dev/null
@@ -1,77 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.ui.editor;
-
-import org.eclipse.jface.fieldassist.ContentProposalAdapter;
-import org.eclipse.jface.layout.GridDataFactory;
-import org.eclipse.jface.viewers.ILabelProvider;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyDuplicateDetector;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
-import org.eclipse.mylyn.internal.tasks.ui.deprecated.AbstractNewRepositoryTaskEditor;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.layout.GridLayout;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Label;
-import org.eclipse.swt.widgets.Text;
-import org.eclipse.ui.fieldassist.ContentAssistCommandAdapter;
-import org.eclipse.ui.forms.editor.FormEditor;
-import org.eclipse.ui.forms.widgets.FormToolkit;
-import org.eclipse.ui.forms.widgets.Section;
-
-/**
- * @author Steffen Pingel
- */
-public class NewTracTaskEditor extends AbstractNewRepositoryTaskEditor {
-
- public NewTracTaskEditor(FormEditor editor) {
- super(editor);
- }
-
- @Override
- public AbstractLegacyDuplicateDetector getDuplicateDetector(String name) {
- return new TracDuplicateDetector();
- }
-
- @Override
- protected void createPeopleLayout(Composite composite) {
- FormToolkit toolkit = getManagedForm().getToolkit();
- Section peopleSection = createSection(composite, getSectionLabel(SECTION_NAME.PEOPLE_SECTION));
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(peopleSection);
- Composite peopleComposite = toolkit.createComposite(peopleSection);
- GridLayout layout = new GridLayout(2, false);
- layout.marginRight = 5;
- peopleComposite.setLayout(layout);
- GridDataFactory.fillDefaults().align(SWT.FILL, SWT.FILL).grab(true, true).applyTo(peopleComposite);
-
- Label label = toolkit.createLabel(peopleComposite, "Assign to:");
- GridDataFactory.fillDefaults().align(SWT.RIGHT, SWT.CENTER).applyTo(label);
- Composite textFieldComposite = toolkit.createComposite(peopleComposite);
- GridDataFactory.fillDefaults().grab(true, false).applyTo(textFieldComposite);
- GridLayout textLayout = new GridLayout();
- textFieldComposite.setLayout(textLayout);
-
- RepositoryTaskAttribute attribute = taskData.getAttribute(RepositoryTaskAttribute.USER_ASSIGNED);
-
- Text textField = createTextField(textFieldComposite, attribute, SWT.FLAT);
- toolkit.paintBordersFor(textFieldComposite);
- GridDataFactory.fillDefaults().grab(true, false).applyTo(textField);
- peopleSection.setClient(peopleComposite);
-
- ContentAssistCommandAdapter adapter = applyContentAssist(textField, createContentProposalProvider(attribute));
-
- ILabelProvider propsalLabelProvider = createProposalLabelProvider(attribute);
- if (propsalLabelProvider != null) {
- adapter.setLabelProvider(propsalLabelProvider);
- }
- adapter.setProposalAcceptanceStyle(ContentProposalAdapter.PROPOSAL_REPLACE);
-
- toolkit.paintBordersFor(peopleComposite);
- }
-
-}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracCcAttributeEditor.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracCcAttributeEditor.java
new file mode 100644
index 000000000..94a0f7bb2
--- /dev/null
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracCcAttributeEditor.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.trac.ui.editor;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.jface.resource.JFaceResources;
+import org.eclipse.mylyn.internal.trac.core.TracAttributeMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskDataModel;
+import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor;
+import org.eclipse.mylyn.tasks.ui.editors.LayoutHint;
+import org.eclipse.mylyn.tasks.ui.editors.LayoutHint.ColumnSpan;
+import org.eclipse.mylyn.tasks.ui.editors.LayoutHint.RowSpan;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.List;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+
+/**
+ * @author Rob Elves
+ */
+public class TracCcAttributeEditor extends AbstractAttributeEditor {
+
+ private List list;
+
+ private TaskAttribute attrRemoveCc;
+
+ public TracCcAttributeEditor(TaskDataModel manager, TaskAttribute taskAttribute) {
+ super(manager, taskAttribute);
+ setLayoutHint(new LayoutHint(RowSpan.MULTIPLE, ColumnSpan.SINGLE));
+ }
+
+ @Override
+ public void createControl(Composite parent, FormToolkit toolkit) {
+ list = new List(parent, SWT.FLAT | SWT.MULTI | SWT.V_SCROLL);
+ toolkit.adapt(list, true, true);
+ list.setData(FormToolkit.KEY_DRAW_BORDER, FormToolkit.TEXT_BORDER);
+ list.setFont(JFaceResources.getDefaultFont());
+ GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).applyTo(list);
+
+ TaskAttribute attrUserCC = getTaskAttribute();
+ if (attrUserCC != null) {
+ for (String value : attrUserCC.getValues()) {
+ list.add(value);
+ }
+ }
+
+ attrRemoveCc = getModel().getTaskData().getRoot().getMappedAttribute(TracAttributeMapper.REMOVE_CC);
+ for (String item : attrRemoveCc.getValues()) {
+ int i = list.indexOf(item);
+ if (i != -1) {
+ list.select(i);
+ }
+ }
+
+ list.addSelectionListener(new SelectionAdapter() {
+
+ @Override
+ public void widgetSelected(SelectionEvent e) {
+ for (String cc : list.getItems()) {
+ int index = list.indexOf(cc);
+ if (list.isSelected(index)) {
+ java.util.List<String> remove = attrRemoveCc.getValues();
+ if (!remove.contains(cc)) {
+ attrRemoveCc.addValue(cc);
+ }
+ } else {
+ attrRemoveCc.removeValue(cc);
+ }
+ }
+ getModel().attributeChanged(attrRemoveCc);
+ }
+ });
+
+ list.showSelection();
+
+ setControl(list);
+ }
+}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracPeoplePart.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracPeoplePart.java
new file mode 100644
index 000000000..491c0bfcc
--- /dev/null
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracPeoplePart.java
@@ -0,0 +1,106 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.trac.ui.editor;
+
+import org.eclipse.jface.layout.GridDataFactory;
+import org.eclipse.mylyn.internal.trac.core.TracAttribute;
+import org.eclipse.mylyn.internal.trac.core.TracAttributeMapper;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor;
+import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPart;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.ui.forms.widgets.FormToolkit;
+import org.eclipse.ui.forms.widgets.Section;
+
+/**
+ * @author Robert Elves
+ */
+public class TracPeoplePart extends AbstractTaskEditorPart {
+
+ private static final int COLUMN_MARGIN = 5;
+
+ public TracPeoplePart() {
+ setPartName("People");
+ }
+
+ private void addAttribute(Composite composite, FormToolkit toolkit, TaskAttribute attribute) {
+ AbstractAttributeEditor editor = createAttributeEditor(attribute);
+ if (editor != null) {
+ editor.createLabelControl(composite, toolkit);
+ GridDataFactory.defaultsFor(editor.getLabelControl()).indent(COLUMN_MARGIN, 0).applyTo(
+ editor.getLabelControl());
+ editor.createControl(composite, toolkit);
+ getTaskEditorPage().getAttributeEditorToolkit().adapt(editor);
+ if (editor instanceof TracCcAttributeEditor) {
+ GridDataFactory.fillDefaults().grab(true, true).align(SWT.FILL, SWT.FILL).hint(130, 95).applyTo(
+ editor.getControl());
+ } else {
+ GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.TOP).applyTo(editor.getControl());
+ }
+ }
+ }
+
+ @Override
+ public void createControl(Composite parent, FormToolkit toolkit) {
+ Section section = createSection(parent, toolkit, true);
+ Composite peopleComposite = toolkit.createComposite(section);
+ GridLayout layout = new GridLayout(2, false);
+ layout.marginWidth = 5;
+ peopleComposite.setLayout(layout);
+
+ addAttribute(peopleComposite, toolkit, getTaskData().getRoot().getMappedAttribute(TaskAttribute.USER_ASSIGNED));
+ addAttribute(peopleComposite, toolkit, getTaskData().getRoot().getMappedAttribute(TaskAttribute.USER_REPORTER));
+ addAttribute(peopleComposite, toolkit, getTaskData().getRoot().getMappedAttribute(TracAttributeMapper.NEW_CC));
+ addSelfToCC(peopleComposite);
+ TaskAttribute cc = getTaskData().getRoot().getMappedAttribute(TracAttribute.CC.getTaskKey());
+ TaskAttribute removeCc = getTaskData().getRoot().getMappedAttribute(TracAttributeMapper.REMOVE_CC);
+ if (cc != null && removeCc != null) {
+ addAttribute(peopleComposite, toolkit, cc);
+ toolkit.createLabel(peopleComposite, "");
+ Label label = toolkit.createLabel(peopleComposite, "(Select to remove)");
+ GridDataFactory.fillDefaults().indent(0, 5).align(SWT.CENTER, SWT.CENTER).applyTo(label);
+ }
+
+ toolkit.paintBordersFor(peopleComposite);
+ section.setClient(peopleComposite);
+ setSection(toolkit, section);
+ }
+
+ /**
+ * Creates a check box for adding the repository user to the cc list. Does nothing if the repository does not have a
+ * valid username, the repository user is the assignee, reporter or already on the the cc list.
+ */
+ private void addSelfToCC(Composite composite) {
+ TaskRepository repository = this.getTaskEditorPage().getTaskRepository();
+ if (repository.getUserName() == null) {
+ return;
+ }
+
+ TaskAttribute root = getTaskData().getRoot();
+ TaskAttribute owner = root.getMappedAttribute(TaskAttribute.USER_ASSIGNED);
+ if (owner != null && owner.getValue().indexOf(repository.getUserName()) != -1) {
+ return;
+ }
+
+ TaskAttribute reporter = root.getMappedAttribute(TaskAttribute.USER_REPORTER);
+ if (reporter != null && reporter.getValue().indexOf(repository.getUserName()) != -1) {
+ return;
+ }
+
+ TaskAttribute ccAttribute = root.getMappedAttribute(TaskAttribute.USER_CC);
+ if (ccAttribute != null && ccAttribute.getValues().contains(repository.getUserName())) {
+ return;
+ }
+ }
+
+} \ No newline at end of file
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java
deleted file mode 100644
index b79d969f6..000000000
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditor.java
+++ /dev/null
@@ -1,54 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.ui.editor;
-
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryOperation;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskAttribute;
-import org.eclipse.mylyn.internal.tasks.ui.deprecated.AbstractRepositoryTaskEditor;
-import org.eclipse.mylyn.internal.trac.core.TracAttributeFactory;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.editors.AbstractRenderingEngine;
-import org.eclipse.ui.forms.editor.FormEditor;
-
-/**
- * @author Steffen Pingel
- * @author Xiaoyang Guan (Wiki HTML preview)
- */
-public class TracTaskEditor extends AbstractRepositoryTaskEditor {
-
- private final TracRenderingEngine renderingEngine = new TracRenderingEngine();
-
- public TracTaskEditor(FormEditor editor) {
- super(editor);
- }
-
- @Override
- protected void validateInput() {
- }
-
- @Override
- protected AbstractRenderingEngine getRenderingEngine() {
- return renderingEngine;
- }
-
- public TaskRepository getRepository() {
- return repository;
- }
-
- @Override
- protected boolean hasContentAssist(RepositoryTaskAttribute attribute) {
- return TracAttributeFactory.Attribute.NEW_CC.getTaskKey().equals(attribute.getId());
- }
-
- @Override
- protected boolean hasContentAssist(RepositoryOperation repositoryOperation) {
- return "owner".equals(repositoryOperation.getInputName());
- }
-
-}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java
deleted file mode 100644
index 3b8d899bf..000000000
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorFactory.java
+++ /dev/null
@@ -1,101 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.ui.editor;
-
-import org.eclipse.jface.resource.ImageDescriptor;
-import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
-import org.eclipse.mylyn.internal.tasks.ui.deprecated.AbstractTaskEditorFactory;
-import org.eclipse.mylyn.internal.tasks.ui.deprecated.RepositoryTaskEditorInput;
-import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.TracTask;
-import org.eclipse.mylyn.tasks.core.ITask;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.mylyn.tasks.ui.editors.BrowserFormPage;
-import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
-import org.eclipse.mylyn.tasks.ui.editors.TaskEditorInput;
-import org.eclipse.ui.IEditorInput;
-import org.eclipse.ui.IEditorPart;
-
-/**
- * @author Steffen Pingel
- */
-public class TracTaskEditorFactory extends AbstractTaskEditorFactory {
-
- private static final String TITLE = "Browser";
-
- @Override
- public boolean canCreateEditorFor(ITask task) {
- return (task instanceof TracTask);
- }
-
- @Override
- public boolean canCreateEditorFor(IEditorInput input) {
- if (input instanceof RepositoryTaskEditorInput) {
- RepositoryTaskEditorInput taskInput = (RepositoryTaskEditorInput) input;
- return taskInput.getTaskData() != null
- && TracCorePlugin.REPOSITORY_KIND.equals(taskInput.getRepository().getConnectorKind());
- } else if (input instanceof TaskEditorInput) {
- TaskEditorInput taskInput = (TaskEditorInput) input;
- return taskInput.getTask() instanceof TracTask;
- }
-
- return false;
- }
-
- @Override
- public IEditorPart createEditor(TaskEditor parentEditor, IEditorInput editorInput) {
- if (editorInput instanceof RepositoryTaskEditorInput) {
- RepositoryTaskEditorInput taskInput = (RepositoryTaskEditorInput) editorInput;
- if (taskInput.getTaskData().isNew()) {
- return new NewTracTaskEditor(parentEditor);
- } else {
- return new TracTaskEditor(parentEditor);
- }
- } else if (editorInput instanceof TaskEditorInput) {
- TaskRepository repository = TasksUi.getRepositoryManager().getRepository(TracCorePlugin.REPOSITORY_KIND,
- ((TaskEditorInput) editorInput).getTask().getRepositoryUrl());
- if (TracRepositoryConnector.hasRichEditor(repository)) {
- // the editor is actually initialized with a RepositoryTaskEditorInput, see bug 193430
- return new TracTaskEditor(parentEditor);
- } else {
- return new BrowserFormPage(parentEditor, TITLE);
- }
- }
- return null;
- }
-
- @Override
- public IEditorInput createEditorInput(ITask task) {
- TracTask tracTask = (TracTask) task;
- TaskRepository repository = TasksUi.getRepositoryManager().getRepository(TracCorePlugin.REPOSITORY_KIND,
- tracTask.getRepositoryUrl());
- if (TracRepositoryConnector.hasRichEditor(repository)) {
- return new RepositoryTaskEditorInput(repository, tracTask.getTaskId(), tracTask.getUrl());
- } else {
- return new TaskEditorInput(repository, task) {
- @Override
- public ImageDescriptor getImageDescriptor() {
- return CommonImages.BROWSER_SMALL;
- }
- };
- }
- }
-
- @Override
- public String getTitle() {
- return "Trac";
- }
-
- @Override
- public boolean providesOutline() {
- return true;
- }
-}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPage.java
new file mode 100644
index 000000000..30d8ecf0a
--- /dev/null
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPage.java
@@ -0,0 +1,77 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.trac.ui.editor;
+
+import java.util.Iterator;
+import java.util.Set;
+
+import org.eclipse.mylyn.internal.trac.core.TracAttribute;
+import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.ui.editors.AbstractAttributeEditor;
+import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage;
+import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPart;
+import org.eclipse.mylyn.tasks.ui.editors.AttributeEditorFactory;
+import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
+import org.eclipse.mylyn.tasks.ui.editors.TaskEditorPartDescriptor;
+
+/**
+ * @author Steffen Pingel
+ */
+public class TracTaskEditorPage extends AbstractTaskEditorPage {
+
+ private TracRenderingEngine renderingEngine;
+
+ public TracTaskEditorPage(TaskEditor editor) {
+ super(editor, TracCorePlugin.CONNECTOR_KIND);
+ }
+
+ @Override
+ protected Set<TaskEditorPartDescriptor> createPartDescriptors() {
+ Set<TaskEditorPartDescriptor> descriptors = super.createPartDescriptors();
+ // remove unnecessary default editor parts
+ for (Iterator<TaskEditorPartDescriptor> it = descriptors.iterator(); it.hasNext();) {
+ TaskEditorPartDescriptor taskEditorPartDescriptor = it.next();
+ if (taskEditorPartDescriptor.getId().equals(ID_PART_PEOPLE)) {
+ it.remove();
+ }
+ }
+ descriptors.add(new TaskEditorPartDescriptor(ID_PART_PEOPLE) {
+ @Override
+ public AbstractTaskEditorPart createPart() {
+ return new TracPeoplePart();
+ }
+ }.setPath(PATH_PEOPLE));
+ return descriptors;
+ }
+
+ @Override
+ protected void createParts() {
+ if (renderingEngine == null) {
+ renderingEngine = new TracRenderingEngine();
+ }
+ getAttributeEditorToolkit().setRenderingEngine(renderingEngine);
+ super.createParts();
+ }
+
+ @Override
+ protected AttributeEditorFactory createAttributeEditorFactory() {
+ AttributeEditorFactory factory = new AttributeEditorFactory(getModel(), getTaskRepository()) {
+ @Override
+ public AbstractAttributeEditor createEditor(String type, TaskAttribute taskAttribute) {
+ if (TracAttribute.CC.getTracKey().equals(taskAttribute.getId())) {
+ return new TracCcAttributeEditor(getModel(), taskAttribute);
+ }
+ return super.createEditor(type, taskAttribute);
+ }
+ };
+ return factory;
+ }
+
+}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPageFactory.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPageFactory.java
new file mode 100644
index 000000000..ca760f35b
--- /dev/null
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/editor/TracTaskEditorPageFactory.java
@@ -0,0 +1,74 @@
+/*******************************************************************************
+ * Copyright (c) 2004, 2007 Mylyn project committers 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
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.trac.ui.editor;
+
+import org.eclipse.mylyn.internal.provisional.commons.ui.CommonImages;
+import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
+import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
+import org.eclipse.mylyn.tasks.ui.ITasksUiConstants;
+import org.eclipse.mylyn.tasks.ui.TasksUiImages;
+import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
+import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPageFactory;
+import org.eclipse.mylyn.tasks.ui.editors.BrowserFormPage;
+import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
+import org.eclipse.mylyn.tasks.ui.editors.TaskEditorInput;
+import org.eclipse.swt.graphics.Image;
+import org.eclipse.ui.forms.editor.FormPage;
+
+/**
+ * @author Steffen Pingel
+ */
+public class TracTaskEditorPageFactory extends AbstractTaskEditorPageFactory {
+
+ @Override
+ public boolean canCreatePageFor(TaskEditorInput input) {
+ if (input.getTask().getConnectorKind().equals(TracCorePlugin.CONNECTOR_KIND)) {
+ return true;
+ } else if (TasksUiUtil.isOutgoingNewTask(input.getTask(), TracCorePlugin.CONNECTOR_KIND)) {
+ return true;
+ }
+ return false;
+ }
+
+ @Override
+ public FormPage createPage(TaskEditor parentEditor) {
+ TaskEditorInput input = parentEditor.getTaskEditorInput();
+ if (TasksUiUtil.isOutgoingNewTask(input.getTask(), TracCorePlugin.CONNECTOR_KIND)) {
+ return new TracTaskEditorPage(parentEditor);
+ } else if (TracRepositoryConnector.hasRichEditor(input.getTaskRepository())) {
+ return new TracTaskEditorPage(parentEditor);
+ } else {
+ return new BrowserFormPage(parentEditor, "Browser");
+ }
+ }
+
+ @Override
+ public String[] getConflictingIds(TaskEditorInput input) {
+ if (!input.getTask().getConnectorKind().equals(TracCorePlugin.CONNECTOR_KIND)) {
+ return new String[] { ITasksUiConstants.ID_PAGE_PLANNING };
+ }
+ return null;
+ }
+
+ @Override
+ public Image getPageImage() {
+ return CommonImages.getImage(TasksUiImages.REPOSITORY);
+ }
+
+ @Override
+ public String getPageText() {
+ return "Trac";
+ }
+
+ @Override
+ public int getPriority() {
+ return PRIORITY_TASK;
+ }
+
+}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java
deleted file mode 100644
index 7c39da879..000000000
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/EditTracQueryWizard.java
+++ /dev/null
@@ -1,58 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.ui.wizard;
-
-import org.eclipse.mylyn.internal.tasks.ui.deprecated.AbstractRepositoryQueryWizard;
-import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-
-/**
- * @author Steffen Pingel
- */
-public class EditTracQueryWizard extends AbstractRepositoryQueryWizard {
-
-// private TracCustomQueryPage queryPage;
-
- public EditTracQueryWizard(TaskRepository repository, IRepositoryQuery query) {
- super(repository, query);
- }
-
- @Override
- public void addPages() {
- page = new TracCustomQueryPage(repository, query);
- page.setWizard(this);
- addPage(page);
- }
-
- @Override
- public boolean canFinish() {
- if (page.getNextPage() == null) {
- return page.isPageComplete();
- }
- return page.getNextPage().isPageComplete();
- }
-
-// @Override
-// public boolean performFinish() {
-// AbstractRepositoryQuery q = queryPage.getQuery();
-// if (q != null) {
-// TasksUiPlugin.getTaskList().deleteQuery(query);
-// TasksUiPlugin.getTaskList().addQuery(q);
-//
-// AbstractRepositoryConnector connector = TasksUiPlugin.getRepositoryManager().getRepositoryConnector(
-// repository.getKind());
-// if (connector != null) {
-// TasksUiPlugin.getSynchronizationManager().synchronize(connector, q, null);
-// }
-// }
-//
-// return true;
-// }
-
-} \ No newline at end of file
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracQueryWizard.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracQueryWizard.java
deleted file mode 100644
index 0702dfffc..000000000
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracQueryWizard.java
+++ /dev/null
@@ -1,64 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.ui.wizard;
-
-import org.eclipse.jface.wizard.Wizard;
-import org.eclipse.mylyn.internal.tasks.core.RepositoryQuery;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyRepositoryConnector;
-import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.mylyn.tasks.ui.TasksUiImages;
-
-/**
- * @author Steffen Pingel
- */
-public class NewTracQueryWizard extends Wizard {
-
- private static final String TITLE = "New Trac Query";
-
- private final TaskRepository repository;
-
- private TracCustomQueryPage queryPage;
-
- public NewTracQueryWizard(TaskRepository repository) {
- this.repository = repository;
-
- setNeedsProgressMonitor(true);
- setWindowTitle(TITLE);
- setDefaultPageImageDescriptor(TasksUiImages.BANNER_REPOSITORY);
- }
-
- @Override
- public void addPages() {
- queryPage = new TracCustomQueryPage(repository);
- queryPage.setWizard(this);
- addPage(queryPage);
- }
-
- @Override
- public boolean canFinish() {
- return queryPage.isPageComplete();
- }
-
- @Override
- public boolean performFinish() {
- RepositoryQuery query = queryPage.getQuery();
- if (query != null) {
- TasksUiInternal.getTaskList().addQuery(query);
- AbstractLegacyRepositoryConnector connector = (AbstractLegacyRepositoryConnector) TasksUi.getRepositoryManager()
- .getRepositoryConnector(repository.getConnectorKind());
- if (connector != null) {
- TasksUiInternal.synchronizeQuery(connector, query, null, true);
- }
- }
- return true;
- }
-
-} \ No newline at end of file
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskPage.java
deleted file mode 100644
index 5f44b670c..000000000
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/NewTracTaskPage.java
+++ /dev/null
@@ -1,139 +0,0 @@
-/*******************************************************************************
- * Copyright (c) 2004, 2007 Mylyn project committers 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
- *******************************************************************************/
-
-package org.eclipse.mylyn.internal.trac.ui.wizard;
-
-import java.lang.reflect.InvocationTargetException;
-
-import org.eclipse.core.runtime.IProgressMonitor;
-import org.eclipse.jface.operation.IRunnableWithProgress;
-import org.eclipse.jface.wizard.WizardPage;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractAttributeFactory;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
-import org.eclipse.mylyn.internal.trac.core.ITracClient;
-import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
-import org.eclipse.mylyn.internal.trac.core.TracException;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.TracTaskDataHandler;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.swt.SWT;
-import org.eclipse.swt.widgets.Composite;
-import org.eclipse.swt.widgets.Text;
-
-/**
- * Wizard page for creating new Trac tickets through a rich editor.
- *
- * @author Steffen Pingel
- */
-public class NewTracTaskPage extends WizardPage {
-
- // private boolean firstTime;
-
- private final TaskRepository taskRepository;
-
- private RepositoryTaskData taskData;
-
- public NewTracTaskPage(TaskRepository taskRepository) {
- super("New Task");
-
- setTitle("Create via Rich Editor");
- setDescription("This will open an editor that can be used to create a new task.");
-
- this.taskRepository = taskRepository;
- }
-
- public void createControl(Composite parent) {
- Text text = new Text(parent, SWT.WRAP);
- text.setEditable(false);
- setControl(text);
- }
-
- @Override
- public void setVisible(boolean visible) {
- super.setVisible(visible);
-
- // if (visible && firstTime) {
- // firstTime = false;
- // if (!hasAttributes()) {
- // // delay the execution so the dialog's progress bar is visible
- // // when the attributes are updated
- // Display.getDefault().asyncExec(new Runnable() {
- // public void run() {
- // if (getControl() != null && !getControl().isDisposed()) {
- // updateAttributesFromRepository();
- // }
- // }
- // });
- // }
- // }
- updateAttributesFromRepository();
- }
-
- // private boolean hasAttributes() {
- // TracRepositoryConnector connector = (TracRepositoryConnector)
- // TasksUiPlugin.getRepositoryManager()
- // .getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND);
- // try {
- // ITracClient client =
- // connector.getClientManager().getRepository(taskRepository);
- // return client.hasAttributes();
- // } catch (MalformedURLException e) {
- // return false;
- // }
- // }
-
- @Override
- public boolean isPageComplete() {
- return taskData != null;
- }
-
- private void updateAttributesFromRepository() {
- TracRepositoryConnector connector = (TracRepositoryConnector) TasksUi.getRepositoryManager()
- .getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND);
- final ITracClient client = connector.getClientManager().getTracClient(taskRepository);
-
- if (!client.hasAttributes()) {
- try {
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- try {
- client.updateAttributes(monitor, true);
- } catch (TracException e) {
- throw new InvocationTargetException(e);
- }
- }
- };
-
- getContainer().run(true, true, runnable);
- } catch (InvocationTargetException e) {
- TasksUiInternal.displayStatus("Error updating attributes", TracCorePlugin.toStatus(e.getCause(),
- taskRepository));
- return;
- } catch (InterruptedException e) {
- return;
- }
- }
-
- TracTaskDataHandler offlineHandler = (TracTaskDataHandler) connector.getLegacyTaskDataHandler();
- AbstractAttributeFactory attributeFactory = offlineHandler.getAttributeFactory(taskRepository.getRepositoryUrl(),
- taskRepository.getConnectorKind(), AbstractTask.DEFAULT_TASK_KIND);
- this.taskData = new RepositoryTaskData(attributeFactory, TracCorePlugin.REPOSITORY_KIND,
- taskRepository.getRepositoryUrl(), TasksUiPlugin.getDefault().getNextNewRepositoryTaskId());
- this.taskData.setNew(true);
- TracTaskDataHandler.createDefaultAttributes(taskData.getAttributeFactory(), taskData, client, false);
- }
-
- public RepositoryTaskData getRepositoryTaskData() {
- return taskData;
- }
-
-}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryWizardPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracFilterQueryPage.java
index a26f938c4..a34059130 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryWizardPage.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracFilterQueryPage.java
@@ -15,16 +15,16 @@ import java.util.Set;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
-import org.eclipse.jface.wizard.WizardPage;
import org.eclipse.mylyn.commons.core.StatusHandler;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter.CompareOperator;
+import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
import org.eclipse.mylyn.internal.trac.ui.TracUiPlugin;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.ui.wizards.AbstractRepositoryQueryPage;
import org.eclipse.swt.SWT;
import org.eclipse.swt.custom.ScrolledComposite;
import org.eclipse.swt.events.KeyEvent;
@@ -44,7 +44,7 @@ import org.eclipse.swt.widgets.Text;
/**
* @author Steffen Pingel
*/
-public class TracQueryWizardPage extends WizardPage {
+public class TracFilterQueryPage extends AbstractRepositoryQueryPage {
private static final String TITLE = "New Trac Query";
@@ -52,10 +52,6 @@ public class TracQueryWizardPage extends WizardPage {
private static final String TITLE_QUERY_TITLE = "Query Title";
- private final TaskRepository repository;
-
- private final TracRepositoryQuery query;
-
private Text titleText;
private Composite scrollComposite;
@@ -65,18 +61,16 @@ public class TracQueryWizardPage extends WizardPage {
private List<SearchField> searchFields;
- public TracQueryWizardPage(TaskRepository repository, IRepositoryQuery query) {
- super(TITLE);
-
- this.repository = repository;
- this.query = (TracRepositoryQuery) query;
-
+ public TracFilterQueryPage(TaskRepository repository, IRepositoryQuery query) {
+ super(TITLE, repository, query);
setTitle(TITLE);
setDescription(DESCRIPTION);
}
- public TracQueryWizardPage(TaskRepository repository) {
- this(repository, null);
+ @Override
+ public void applyTo(IRepositoryQuery query) {
+ query.setUrl(getQueryUrl(getTaskRepository().getRepositoryUrl()));
+ query.setSummary(getQueryTitle());
}
public void createControl(Composite parent) {
@@ -97,16 +91,23 @@ public class TracQueryWizardPage extends WizardPage {
createAddFilterGroup(composite);
- if (query != null) {
- titleText.setText(query.getSummary());
- restoreSearchFilterFromQuery(query);
+ if (getQuery() != null) {
+ titleText.setText(getQuery().getSummary());
+ TracSearch search = TracUtils.toTracSearch(getQuery());
+ if (search != null) {
+ restoreWidgetValues(search);
+ }
}
setControl(composite);
}
- private void restoreSearchFilterFromQuery(TracRepositoryQuery query) {
- TracSearch search = query.getTracSearch();
+ @Override
+ public String getQueryTitle() {
+ return (titleText != null) ? titleText.getText() : null;
+ }
+
+ private void restoreWidgetValues(TracSearch search) {
List<TracSearchFilter> filters = search.getFilters();
for (TracSearchFilter filter : filters) {
SearchField field = getSearchField(filter.getFieldName());
@@ -230,10 +231,6 @@ public class TracQueryWizardPage extends WizardPage {
return sb.toString();
}
- public TracRepositoryQuery getQuery() {
- return new TracRepositoryQuery(repository.getRepositoryUrl(), getQueryUrl(repository.getRepositoryUrl()), titleText.getText());
- }
-
private void hideSearchField(SearchField field) {
visibleSearchFields.remove(field);
}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracCustomQueryPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryPage.java
index 8c5d25ce8..d286ee1b6 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracCustomQueryPage.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracQueryPage.java
@@ -18,16 +18,14 @@ import org.eclipse.jface.dialogs.IDialogSettings;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.operation.IRunnableWithProgress;
import org.eclipse.mylyn.commons.core.StatusHandler;
-import org.eclipse.mylyn.internal.tasks.core.TaskRepositoryManager;
-import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
import org.eclipse.mylyn.internal.trac.core.ITracClient;
import org.eclipse.mylyn.internal.trac.core.TracCorePlugin;
import org.eclipse.mylyn.internal.trac.core.TracException;
import org.eclipse.mylyn.internal.trac.core.TracRepositoryConnector;
-import org.eclipse.mylyn.internal.trac.core.TracRepositoryQuery;
import org.eclipse.mylyn.internal.trac.core.model.TracSearch;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter;
import org.eclipse.mylyn.internal.trac.core.model.TracSearchFilter.CompareOperator;
+import org.eclipse.mylyn.internal.trac.core.util.TracUtils;
import org.eclipse.mylyn.internal.trac.ui.TracUiPlugin;
import org.eclipse.mylyn.tasks.core.IRepositoryQuery;
import org.eclipse.mylyn.tasks.core.TaskRepository;
@@ -57,7 +55,7 @@ import org.eclipse.ui.progress.IProgressService;
*
* @author Steffen Pingel
*/
-public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
+public class TracQueryPage extends AbstractRepositoryQueryPage {
private static final String TITLE = "Enter query parameters";
@@ -65,8 +63,6 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
private static final String TITLE_QUERY_TITLE = "Query Title:";
- private final TracRepositoryQuery query;
-
private Text titleText;
private static final int PRODUCT_HEIGHT = 60;
@@ -113,14 +109,13 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
//
// private UserSearchField ccField;
- public TracCustomQueryPage(TaskRepository repository, IRepositoryQuery query) {
- super(TITLE, repository);
- this.query = (TracRepositoryQuery) query;
+ public TracQueryPage(TaskRepository repository, IRepositoryQuery query) {
+ super(TITLE, repository, query);
setTitle(TITLE);
setDescription(DESCRIPTION);
}
- public TracCustomQueryPage(TaskRepository repository) {
+ public TracQueryPage(TaskRepository repository) {
this(repository, null);
}
@@ -150,9 +145,12 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
createUserGroup(control);
- if (query != null) {
- titleText.setText(query.getSummary());
- restoreWidgetValues(query.getTracSearch());
+ if (getQuery() != null) {
+ titleText.setText(getQuery().getSummary());
+ TracSearch search = TracUtils.toTracSearch(getQuery());
+ if (search != null) {
+ restoreWidgetValues(search);
+ }
}
setControl(control);
@@ -308,8 +306,8 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
if (getTaskRepository() != null) {
updateAttributesFromRepository(true);
} else {
- MessageDialog.openInformation(Display.getCurrent().getActiveShell(),
- TracUiPlugin.TITLE_MESSAGE_DIALOG, TaskRepositoryManager.MESSAGE_NO_REPOSITORY);
+ MessageDialog.openInformation(Display.getCurrent().getActiveShell(), "Update Attributes Failed",
+ "No repository available, please add one using the Task Repositories view.");
}
}
});
@@ -348,7 +346,7 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
private void initializePage() {
updateAttributesFromRepository(false);
- boolean restored = (query != null);
+ boolean restored = (getQuery() != null);
if (inSearchContainer()) {
restored |= restoreWidgetValues();
}
@@ -359,14 +357,14 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
private boolean hasAttributes() {
TracRepositoryConnector connector = (TracRepositoryConnector) TasksUi.getRepositoryManager()
- .getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND);
+ .getRepositoryConnector(TracCorePlugin.CONNECTOR_KIND);
ITracClient client = connector.getClientManager().getTracClient(getTaskRepository());
return client.hasAttributes();
}
private void updateAttributesFromRepository(final boolean force) {
TracRepositoryConnector connector = (TracRepositoryConnector) TasksUi.getRepositoryManager()
- .getRepositoryConnector(TracCorePlugin.REPOSITORY_KIND);
+ .getRepositoryConnector(TracCorePlugin.CONNECTOR_KIND);
final ITracClient client = connector.getClientManager().getTracClient(getTaskRepository());
if (!client.hasAttributes() || force) {
@@ -390,8 +388,7 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
service.busyCursorWhile(runnable);
}
} catch (InvocationTargetException e) {
- TasksUiInternal.displayStatus("Error updating attributes", TracCorePlugin.toStatus(e.getCause(),
- getTaskRepository()));
+ setErrorMessage(TracCorePlugin.toStatus(e.getCause(), getTaskRepository()).getMessage());
return;
} catch (InterruptedException e) {
return;
@@ -437,16 +434,6 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
return search;
}
- @Override
- public TracRepositoryQuery getQuery() {
- return new TracRepositoryQuery(getTaskRepository().getRepositoryUrl(),
- getQueryUrl(getTaskRepository().getRepositoryUrl()), getTitleText());
- }
-
- private String getTitleText() {
- return (titleText != null) ? titleText.getText() : "<search>";
- }
-
// public boolean performAction() {
//
// Proxy proxySettings = TasksUiPlugin.getDefault().getProxySettings();
@@ -764,7 +751,8 @@ public class TracCustomQueryPage extends AbstractRepositoryQueryPage {
@Override
public void applyTo(IRepositoryQuery query) {
- throw new UnsupportedOperationException();
+ query.setUrl(getQueryUrl(getTaskRepository().getRepositoryUrl()));
+ query.setSummary(getQueryTitle());
}
}
diff --git a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java
index 065a8f046..1bc3197bf 100644
--- a/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java
+++ b/org.eclipse.mylyn.trac.ui/src/org/eclipse/mylyn/internal/trac/ui/wizard/TracRepositorySettingsPage.java
@@ -239,7 +239,7 @@ public class TracRepositorySettingsPage extends AbstractRepositorySettingsPage {
@Override
public String getConnectorKind() {
- return TracCorePlugin.REPOSITORY_KIND;
+ return TracCorePlugin.CONNECTOR_KIND;
}
}

Back to the top