diff options
author | relves | 2008-06-18 02:14:08 +0000 |
---|---|---|
committer | relves | 2008-06-18 02:14:08 +0000 |
commit | 89758c7cefcd69281ea0fdcd66b78bc1e8cdc0dd (patch) | |
tree | 77ae772d23634ce7bf627534d5e4ba7fed1c0d7b /org.eclipse.mylyn.bugzilla.core | |
parent | 15c4d031ac1a5da49e7d4a1ca80505a422015a8a (diff) | |
download | org.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')
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); |