Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorrelves2008-06-18 02:14:08 +0000
committerrelves2008-06-18 02:14:08 +0000
commit89758c7cefcd69281ea0fdcd66b78bc1e8cdc0dd (patch)
tree77ae772d23634ce7bf627534d5e4ba7fed1c0d7b /org.eclipse.mylyn.bugzilla.core
parent15c4d031ac1a5da49e7d4a1ca80505a422015a8a (diff)
downloadorg.eclipse.mylyn.tasks-89758c7cefcd69281ea0fdcd66b78bc1e8cdc0dd.tar.gz
org.eclipse.mylyn.tasks-89758c7cefcd69281ea0fdcd66b78bc1e8cdc0dd.tar.xz
org.eclipse.mylyn.tasks-89758c7cefcd69281ea0fdcd66b78bc1e8cdc0dd.zip
NEW - bug 237566: port custom attribute support
https://bugs.eclipse.org/bugs/show_bug.cgi?id=237566
Diffstat (limited to 'org.eclipse.mylyn.bugzilla.core')
-rw-r--r--org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java73
-rw-r--r--org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxMultiBugReportContentHandler.java46
2 files changed, 78 insertions, 41 deletions
diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java
index 0666fc312..5abb15800 100644
--- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java
+++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/RepositoryConfiguration.java
@@ -13,6 +13,7 @@ import java.util.ArrayList;
import java.util.Collections;
import java.util.HashMap;
import java.util.HashSet;
+import java.util.LinkedList;
import java.util.List;
import java.util.Locale;
import java.util.Map;
@@ -61,7 +62,7 @@ public class RepositoryConfiguration implements Serializable {
private final List<String> milestones = new ArrayList<String>();
- private final List<BugzillaCustomField> customFields = new ArrayList<BugzillaCustomField>();
+ private final List<BugzillaCustomField> customFields = new LinkedList<BugzillaCustomField>();
private final List<BugzillaFlag> flags = new ArrayList<BugzillaFlag>();
@@ -378,31 +379,17 @@ public class RepositoryConfiguration implements Serializable {
}
String product = attributeProduct.getValue();
for (TaskAttribute attribute : new HashSet<TaskAttribute>(existingReport.getRoot().getAttributes().values())) {
- if (attribute.getId().startsWith(BugzillaCustomField.CUSTOM_FIELD_PREFIX)) {
- attribute.clearOptions();
- List<BugzillaCustomField> customFields = getCustomFields();
-
- for (BugzillaCustomField bugzillaCustomField : customFields) {
- if (bugzillaCustomField.getName().equals(attribute.getId())) {
- List<String> optionList = bugzillaCustomField.getOptions();
- for (String option : optionList) {
- attribute.putOption(option, option);
- }
- }
- }
- } else {
- List<String> optionValues = getAttributeOptions(product, attribute);
+ List<String> optionValues = getAttributeOptions(product, attribute);
- if (attribute.getId().equals(BugzillaAttribute.TARGET_MILESTONE.getKey()) && optionValues.isEmpty()) {
- existingReport.getRoot().removeAttribute(BugzillaAttribute.TARGET_MILESTONE.getKey());
- continue;
- }
+ if (attribute.getId().equals(BugzillaAttribute.TARGET_MILESTONE.getKey()) && optionValues.isEmpty()) {
+ existingReport.getRoot().removeAttribute(BugzillaAttribute.TARGET_MILESTONE.getKey());
+ continue;
+ }
- attribute.clearOptions();
- for (String option : optionValues) {
- attribute.putOption(option, option);
- }
+ attribute.clearOptions();
+ for (String option : optionValues) {
+ attribute.putOption(option, option);
}
}
@@ -410,23 +397,35 @@ public class RepositoryConfiguration implements Serializable {
public List<String> getAttributeOptions(String product, TaskAttribute attribute) {
List<String> options = new ArrayList<String>();
- BugzillaAttribute element;
- try {
- element = BugzillaAttribute.valueOf(attribute.getId().trim().toUpperCase(Locale.ENGLISH));
- } catch (RuntimeException e) {
- if (e instanceof IllegalArgumentException) {
- // ignore unrecognized tags
- return options;
+
+ if (attribute.getId().startsWith(BugzillaCustomField.CUSTOM_FIELD_PREFIX)) {
+ for (BugzillaCustomField bugzillaCustomField : customFields) {
+ if (bugzillaCustomField.getName().equals(attribute.getId())) {
+ options = bugzillaCustomField.getOptions();
+ break;
+ }
}
- throw e;
- }
- options = getOptionValues(element, product);
+ } else {
- if (element != BugzillaAttribute.RESOLUTION && element != BugzillaAttribute.OP_SYS
- && element != BugzillaAttribute.BUG_SEVERITY && element != BugzillaAttribute.PRIORITY
- && element != BugzillaAttribute.BUG_STATUS) {
- Collections.sort(options);
+ BugzillaAttribute element;
+ try {
+ element = BugzillaAttribute.valueOf(attribute.getId().trim().toUpperCase(Locale.ENGLISH));
+ } catch (RuntimeException e) {
+ if (e instanceof IllegalArgumentException) {
+ // ignore unrecognized tags
+ return options;
+ }
+ throw e;
+ }
+
+ options = getOptionValues(element, product);
+
+ if (element != BugzillaAttribute.RESOLUTION && element != BugzillaAttribute.OP_SYS
+ && element != BugzillaAttribute.BUG_SEVERITY && element != BugzillaAttribute.PRIORITY
+ && element != BugzillaAttribute.BUG_STATUS) {
+ Collections.sort(options);
+ }
}
return options;
}
diff --git a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxMultiBugReportContentHandler.java b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxMultiBugReportContentHandler.java
index a2c3ae0c9..2ef30ffbd 100644
--- a/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxMultiBugReportContentHandler.java
+++ b/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/SaxMultiBugReportContentHandler.java
@@ -173,14 +173,22 @@ public class SaxMultiBugReportContentHandler extends DefaultHandler {
TaskAttribute endAttribute = repositoryTaskData.getRoot().getAttribute(localName);
if (endAttribute == null) {
String desc = "???";
+ BugzillaCustomField customField = null;
for (BugzillaCustomField bugzillaCustomField : customFields) {
if (localName.equals(bugzillaCustomField.getName())) {
- desc = bugzillaCustomField.getDescription();
+ customField = bugzillaCustomField;
+ break;
}
}
- TaskAttribute atr = repositoryTaskData.getRoot().createAttribute(localName);
- atr.getMetaData().defaults().setLabel(desc).setReadOnly(true);
- atr.setValue(parsedText);
+ if (customField != null) {
+ TaskAttribute atr = repositoryTaskData.getRoot().createAttribute(localName);
+ desc = customField.getDescription();
+ atr.getMetaData().defaults().setLabel(desc).setReadOnly(false);
+ atr.getMetaData().setKind(TaskAttribute.KIND_DEFAULT);
+ atr.getMetaData().setType(TaskAttribute.TYPE_SHORT_TEXT);
+ atr.getMetaData().setReadOnly(true);
+ atr.setValue(parsedText);
+ }
} else {
endAttribute.addValue(parsedText);
}
@@ -311,6 +319,9 @@ public class SaxMultiBugReportContentHandler extends DefaultHandler {
updateAttachmentMetaData();
TaskAttribute attrCreation = repositoryTaskData.getRoot().getAttribute(
BugzillaAttribute.CREATION_TS.getKey());
+
+ updateCustomFields(repositoryTaskData);
+
// Guard against empty data sets
if (attrCreation != null && !attrCreation.equals("")) {
collector.accept(repositoryTaskData);
@@ -346,6 +357,33 @@ public class SaxMultiBugReportContentHandler extends DefaultHandler {
}
+ private void updateCustomFields(TaskData taskData) {
+ RepositoryConfiguration config = BugzillaCorePlugin.getRepositoryConfiguration(repositoryTaskData.getRepositoryUrl());
+ if (config != null) {
+ for (BugzillaCustomField bugzillaCustomField : config.getCustomFields()) {
+
+ TaskAttribute atr = taskData.getRoot().getAttribute(bugzillaCustomField.getName());
+ if (atr == null) {
+ atr = taskData.getRoot().createAttribute(bugzillaCustomField.getName());
+ }
+
+ if (atr != null) {
+ atr.getMetaData().defaults().setLabel(bugzillaCustomField.getDescription());
+ atr.getMetaData().setKind(TaskAttribute.KIND_DEFAULT);
+
+ List<String> options = bugzillaCustomField.getOptions();
+ if (options.size() > 0) {
+ atr.getMetaData().setType(TaskAttribute.TYPE_SINGLE_SELECT);
+ } else {
+ atr.getMetaData().setType(TaskAttribute.TYPE_SHORT_TEXT);
+ }
+ atr.getMetaData().setReadOnly(false);
+ }
+ }
+ }
+
+ }
+
private void updateAttachmentMetaData() {
List<TaskAttribute> taskAttachments = repositoryTaskData.getAttributeMapper().getAttributesByType(
repositoryTaskData, TaskAttribute.TYPE_ATTACHMENT);

Back to the top