Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2007-03-16 16:43:53 +0000
committerspingel2007-03-16 16:43:53 +0000
commit95b7818f8de6b15582db15d779fde378ba102600 (patch)
treefc791ba5e3b76e3e4b69c9dc18d8936043a8e2d6 /org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn
parentedbfe539f7358c3741e13893ac76c7c3d5a03648 (diff)
downloadorg.eclipse.mylyn.tasks-95b7818f8de6b15582db15d779fde378ba102600.tar.gz
org.eclipse.mylyn.tasks-95b7818f8de6b15582db15d779fde378ba102600.tar.xz
org.eclipse.mylyn.tasks-95b7818f8de6b15582db15d779fde378ba102600.zip
NEW - bug 171722: custom fields, which have drop down in web gui do not have one in mylar
https://bugs.eclipse.org/bugs/show_bug.cgi?id=171722
Diffstat (limited to 'org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn')
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java5
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java3
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientData.java7
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracTaskDataHandler.java35
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java80
-rw-r--r--org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicketField.java152
6 files changed, 255 insertions, 27 deletions
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java
index 4106563ba..5503c8777 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/AbstractTracClient.java
@@ -16,6 +16,7 @@ import java.net.URL;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.mylar.internal.trac.core.model.TracComponent;
+import org.eclipse.mylar.internal.trac.core.model.TracTicketField;
import org.eclipse.mylar.internal.trac.core.model.TracMilestone;
import org.eclipse.mylar.internal.trac.core.model.TracPriority;
import org.eclipse.mylar.internal.trac.core.model.TracSeverity;
@@ -74,6 +75,10 @@ public abstract class AbstractTracClient implements ITracClient {
public TracSeverity[] getSeverities() {
return (data.severities != null) ? data.severities.toArray(new TracSeverity[0]) : null;
}
+
+ public TracTicketField[] getTicketFields() {
+ return (data.ticketFields != null) ? data.ticketFields.toArray(new TracTicketField[0]) : null;
+ }
public TracTicketResolution[] getTicketResolutions() {
return (data.ticketResolutions != null) ? data.ticketResolutions.toArray(new TracTicketResolution[0]) : null;
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java
index 365236f47..e38132eac 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/ITracClient.java
@@ -18,6 +18,7 @@ import java.util.Set;
import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.mylar.internal.trac.core.model.TracComponent;
+import org.eclipse.mylar.internal.trac.core.model.TracTicketField;
import org.eclipse.mylar.internal.trac.core.model.TracMilestone;
import org.eclipse.mylar.internal.trac.core.model.TracPriority;
import org.eclipse.mylar.internal.trac.core.model.TracSearch;
@@ -147,6 +148,8 @@ public interface ITracClient {
TracComponent[] getComponents();
+ TracTicketField[] getTicketFields();
+
TracMilestone[] getMilestones();
TracPriority[] getPriorities();
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientData.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientData.java
index 41fded092..ea0bfc119 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientData.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracClientData.java
@@ -12,6 +12,7 @@ import java.io.Serializable;
import java.util.List;
import org.eclipse.mylar.internal.trac.core.model.TracComponent;
+import org.eclipse.mylar.internal.trac.core.model.TracTicketField;
import org.eclipse.mylar.internal.trac.core.model.TracMilestone;
import org.eclipse.mylar.internal.trac.core.model.TracPriority;
import org.eclipse.mylar.internal.trac.core.model.TracSeverity;
@@ -31,7 +32,9 @@ public class TracClientData implements Serializable {
List<TracPriority> priorities;
List<TracSeverity> severities;
-
+
+ List<TracTicketField> ticketFields;
+
List<TracTicketResolution> ticketResolutions;
List<TracTicketStatus> ticketStatus;
@@ -39,7 +42,7 @@ public class TracClientData implements Serializable {
List<TracTicketType> ticketTypes;
List<TracVersion> versions;
-
+
long lastUpdate;
}
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 fa6af252d..b9723d131 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
@@ -25,6 +25,7 @@ import org.eclipse.mylar.internal.trac.core.TracAttributeFactory.Attribute;
import org.eclipse.mylar.internal.trac.core.model.TracAttachment;
import org.eclipse.mylar.internal.trac.core.model.TracComment;
import org.eclipse.mylar.internal.trac.core.model.TracTicket;
+import org.eclipse.mylar.internal.trac.core.model.TracTicketField;
import org.eclipse.mylar.internal.trac.core.model.TracTicket.Key;
import org.eclipse.mylar.internal.trac.core.util.TracUtils;
import org.eclipse.mylar.tasks.core.AbstractAttributeFactory;
@@ -200,6 +201,8 @@ public class TracTaskDataHandler implements ITaskDataHandler {
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());
@@ -229,6 +232,38 @@ public class TracTaskDataHandler implements ITaskDataHandler {
createAttribute(factory, data, Attribute.SUMMARY);
createAttribute(factory, data, Attribute.DESCRIPTION);
}
+
+ if (fields != null) {
+ for (TracTicketField field : fields) {
+ if (field.isCustom()) {
+ createAttribute(data, field);
+ }
+ }
+ }
+ }
+
+ private static void createAttribute(RepositoryTaskData data, TracTicketField field) {
+ RepositoryTaskAttribute attr = new RepositoryTaskAttribute(field.getName(), field.getLabel(), false);
+ if (field.getType() == TracTicketField.Type.CHECKBOX) {
+ //attr.addOption("True", "1");
+ //attr.addOption("False", "0");
+ attr.addOption("1", "1");
+ attr.addOption("0", "0");
+ } else {
+ String[] values = field.getOptions();
+ if (values != null && values.length > 0) {
+ if (field.isOptional()) {
+ attr.addOption("", "");
+ }
+ for (int i = 0; i < values.length; i++) {
+ attr.addOption(values[i].toString(), values[i].toString());
+ }
+ }
+ }
+ if (field.getDefaultValue() != null) {
+ attr.setValue(field.getDefaultValue());
+ }
+ data.addAttribute(attr.getID(), attr);
}
private static RepositoryTaskAttribute createAttribute(AbstractAttributeFactory factory, RepositoryTaskData data,
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java
index 05f24ec22..3d8001a63 100644
--- a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/TracXmlRpcClient.java
@@ -28,6 +28,7 @@ import org.eclipse.mylar.internal.trac.core.model.TracPriority;
import org.eclipse.mylar.internal.trac.core.model.TracSearch;
import org.eclipse.mylar.internal.trac.core.model.TracSeverity;
import org.eclipse.mylar.internal.trac.core.model.TracTicket;
+import org.eclipse.mylar.internal.trac.core.model.TracTicketField;
import org.eclipse.mylar.internal.trac.core.model.TracTicketResolution;
import org.eclipse.mylar.internal.trac.core.model.TracTicketStatus;
import org.eclipse.mylar.internal.trac.core.model.TracTicketType;
@@ -293,25 +294,21 @@ public class TracXmlRpcClient extends AbstractTracClient {
@Override
public synchronized void updateAttributes(IProgressMonitor monitor) throws TracException {
- monitor.beginTask("Updating attributes", 8);
+ monitor.beginTask("Updating attributes", 9);
Object[] result = getAttributes("ticket.component");
data.components = new ArrayList<TracComponent>(result.length);
for (Object item : result) {
data.components.add(parseComponent((Map<?, ?>) getMultiCallResult(item)));
}
- monitor.worked(1);
- if (monitor.isCanceled())
- throw new OperationCanceledException();
+ advance(monitor, 1);
result = getAttributes("ticket.milestone");
data.milestones = new ArrayList<TracMilestone>(result.length);
for (Object item : result) {
data.milestones.add(parseMilestone((Map<?, ?>) getMultiCallResult(item)));
}
- monitor.worked(1);
- if (monitor.isCanceled())
- throw new OperationCanceledException();
+ advance(monitor, 1);
List<TicketAttributeResult> attributes = getTicketAttributes("ticket.priority");
data.priorities = new ArrayList<TracPriority>(result.length);
@@ -319,9 +316,7 @@ public class TracXmlRpcClient extends AbstractTracClient {
data.priorities.add(new TracPriority(attribute.name, attribute.value));
}
Collections.sort(data.priorities);
- monitor.worked(1);
- if (monitor.isCanceled())
- throw new OperationCanceledException();
+ advance(monitor, 1);
attributes = getTicketAttributes("ticket.resolution");
data.ticketResolutions = new ArrayList<TracTicketResolution>(result.length);
@@ -329,9 +324,7 @@ public class TracXmlRpcClient extends AbstractTracClient {
data.ticketResolutions.add(new TracTicketResolution(attribute.name, attribute.value));
}
Collections.sort(data.ticketResolutions);
- monitor.worked(1);
- if (monitor.isCanceled())
- throw new OperationCanceledException();
+ advance(monitor, 1);
attributes = getTicketAttributes("ticket.severity");
data.severities = new ArrayList<TracSeverity>(result.length);
@@ -339,9 +332,7 @@ public class TracXmlRpcClient extends AbstractTracClient {
data.severities.add(new TracSeverity(attribute.name, attribute.value));
}
Collections.sort(data.severities);
- monitor.worked(1);
- if (monitor.isCanceled())
- throw new OperationCanceledException();
+ advance(monitor, 1);
attributes = getTicketAttributes("ticket.status");
data.ticketStatus = new ArrayList<TracTicketStatus>(result.length);
@@ -349,9 +340,7 @@ public class TracXmlRpcClient extends AbstractTracClient {
data.ticketStatus.add(new TracTicketStatus(attribute.name, attribute.value));
}
Collections.sort(data.ticketStatus);
- monitor.worked(1);
- if (monitor.isCanceled())
- throw new OperationCanceledException();
+ advance(monitor, 1);
attributes = getTicketAttributes("ticket.type");
data.ticketTypes = new ArrayList<TracTicketType>(result.length);
@@ -359,18 +348,28 @@ public class TracXmlRpcClient extends AbstractTracClient {
data.ticketTypes.add(new TracTicketType(attribute.name, attribute.value));
}
Collections.sort(data.ticketTypes);
- monitor.worked(1);
- if (monitor.isCanceled())
- throw new OperationCanceledException();
+ advance(monitor, 1);
result = getAttributes("ticket.version");
data.versions = new ArrayList<TracVersion>(result.length);
for (Object item : result) {
data.versions.add(parseVersion((Map<?, ?>) getMultiCallResult(item)));
}
- monitor.worked(1);
+ advance(monitor, 1);
+
+ result = (Object[]) call("ticket.getTicketFields");
+ data.ticketFields = new ArrayList<TracTicketField>(result.length);
+ for (Object item : result) {
+ data.ticketFields.add(parseTicketField((Map<?, ?>) item));
+ }
+ advance(monitor, 1);
+ }
+
+ private void advance(IProgressMonitor monitor, int worked) {
+ monitor.worked(worked);
if (monitor.isCanceled())
throw new OperationCanceledException();
+
}
private TracComponent parseComponent(Map<?, ?> result) {
@@ -395,6 +394,37 @@ public class TracXmlRpcClient extends AbstractTracClient {
return version;
}
+ private TracTicketField parseTicketField(Map<?, ?> result) {
+ TracTicketField field = new TracTicketField((String) result.get("name"));
+ field.setType(TracTicketField.Type.fromString((String) result.get("type")));
+ field.setLabel((String) result.get("label"));
+ field.setDefaultValue((String) result.get("value"));
+ Object[] items = (Object[]) result.get("options");
+ if (items != null) {
+ String[] options = new String[items.length];
+ for (int i = 0; i < items.length; i++) {
+ options[i] = (String) items[i];
+ }
+ field.setOptions(options);
+ }
+ if (result.get("custom") != null) {
+ field.setCustom((Boolean) result.get("custom"));
+ }
+ if (result.get("order") != null) {
+ field.setOrder((Integer) result.get("order"));
+ }
+ if (result.get("optional") != null) {
+ field.setOptional((Boolean) result.get("optional"));
+ }
+ if (result.get("width") != null) {
+ field.setOrder((Integer) result.get("width"));
+ }
+ if (result.get("height") != null) {
+ field.setOrder((Integer) result.get("height"));
+ }
+ return field;
+ }
+
@SuppressWarnings("unchecked")
private Object[] getAttributes(String attributeType) throws TracException {
Object[] ids = (Object[]) call(attributeType + ".getAll");
@@ -451,9 +481,9 @@ public class TracXmlRpcClient extends AbstractTracClient {
}
public void deleteAttachment(int ticketId, String filename) throws TracException {
- call("ticket.deleteAttachment", ticketId, filename);
+ call("ticket.deleteAttachment", ticketId, filename);
}
-
+
private class TicketAttributeResult {
String name;
diff --git a/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicketField.java b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicketField.java
new file mode 100644
index 000000000..0e07ea863
--- /dev/null
+++ b/org.eclipse.mylyn.trac.core/src/org/eclipse/mylyn/internal/trac/core/model/TracTicketField.java
@@ -0,0 +1,152 @@
+/*******************************************************************************
+ * Copyright (c) 2004 - 2006 Mylar 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.mylar.internal.trac.core.model;
+
+import java.io.Serializable;
+
+/**
+ * @author Steffen Pingel
+ */
+public class TracTicketField implements Serializable {
+
+ private static final long serialVersionUID = -640983268404073300L;
+
+ public enum Type {
+ TEXT, CHECKBOX, SELECT, RADIO, TEXTAREA;
+
+ public static Type fromString(String value) {
+ value = value.toLowerCase();
+ if ("text".equals(value)) {
+ return TEXT;
+ } else if ("checkbox".equals(value)) {
+ return CHECKBOX;
+ } else if ("select".equals(value)) {
+ return SELECT;
+ } else if ("radio".equals(value)) {
+ return RADIO;
+ } else if ("textarea".equals(value)) {
+ return TEXTAREA;
+ }
+ return TEXT;
+ }
+
+ }
+
+ public static final int DEFAULT_SIZE = -1;
+
+ private String name;
+
+ private Type type;
+
+ private String label;
+
+ private String[] options;
+
+ private String defaultValue;
+
+ private boolean custom;
+
+ private int order;
+
+ private boolean optional;
+
+ private int width = DEFAULT_SIZE;
+
+ private int height = DEFAULT_SIZE;
+
+ public TracTicketField(String name) {
+ this.name = name;
+ }
+
+ public String getName() {
+ return name;
+ }
+
+ public void setName(String name) {
+ this.name = name;
+ }
+
+ public Type getType() {
+ return type;
+ }
+
+ public void setType(Type type) {
+ this.type = type;
+ }
+
+ public String getLabel() {
+ return label;
+ }
+
+ public void setLabel(String label) {
+ this.label = label;
+ }
+
+ public String[] getOptions() {
+ return options;
+ }
+
+ public void setOptions(String[] options) {
+ this.options = options;
+ }
+
+ public int getOrder() {
+ return order;
+ }
+
+ public void setOrder(int order) {
+ this.order = order;
+ }
+
+ public boolean isOptional() {
+ return optional;
+ }
+
+ public void setOptional(boolean optional) {
+ this.optional = optional;
+ }
+
+ public int getWidth() {
+ return width;
+ }
+
+ public void setWidth(int width) {
+ this.width = width;
+ }
+
+ public int getHeight() {
+ return height;
+ }
+
+ public void setHeight(int height) {
+ this.height = height;
+ }
+
+ public String getDefaultValue() {
+ return defaultValue;
+ }
+
+ public void setDefaultValue(String defaultValue) {
+ this.defaultValue = defaultValue;
+ }
+
+ public boolean isCustom() {
+ return custom;
+ }
+
+ public void setCustom(boolean custom) {
+ this.custom = custom;
+ }
+
+ @Override
+ public String toString() {
+ return name;
+ }
+
+}

Back to the top