Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorFrank Becker2015-02-19 14:26:57 -0500
committerFrank Becker2015-06-10 21:46:09 -0400
commit8440f0cb25a6b5a1072d692aa29c790e08b53041 (patch)
treea1b172828ad8f0663f6d6af4f44ef6345bfc74f3
parent7d62d00eab65b37124ad0736054996d0ceecb3fe (diff)
downloadorg.eclipse.mylyn.tasks-8440f0cb25a6b5a1072d692aa29c790e08b53041.tar.gz
org.eclipse.mylyn.tasks-8440f0cb25a6b5a1072d692aa29c790e08b53041.tar.xz
org.eclipse.mylyn.tasks-8440f0cb25a6b5a1072d692aa29c790e08b53041.zip
426644: add TaskDataSchema for Task Creation (with UI Part)
Change-Id: I94a3879289d0ac86ab5515facdedbf4aa305d701 Task-Url: https://bugs.eclipse.org/bugs/show_bug.cgi?id=414360
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Default-BugzillaRestCoreTests.launch2
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Single-BugzillaRestCoreTests.launch4
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/src/org/eclipse/mylyn/internal/bugzilla/rest/core/tests/BugzillaRestClientTest.java46
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/configuration.json2
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/products.json2
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData.txt26
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData1.txt26
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData2.txt26
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/configuration.json2
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/products.json2
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData.txt26
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData1.txt26
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData2.txt26
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConfiguration.java322
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConnector.java7
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestCreateTaskSchema.java73
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskAttributeMapper.java87
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskDataHandler.java12
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskSchema.java67
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/response/data/Component.java23
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.tests/config/local-All-TckTests.launch2
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/META-INF/MANIFEST.MF1
-rw-r--r--connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/src/org/eclipse/mylyn/internal/bugzilla/rest/ui/BugzillaRestTaskEditorPage.java5
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java85
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java89
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttribute.java45
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMapper.java8
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMetaData.java22
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModel.java12
-rw-r--r--org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModelListener.java1
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractAttributeEditor.java16
-rw-r--r--org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractTaskEditorPage.java63
32 files changed, 990 insertions, 166 deletions
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Default-BugzillaRestCoreTests.launch b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Default-BugzillaRestCoreTests.launch
index 00697ba4c..25344def2 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Default-BugzillaRestCoreTests.launch
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Default-BugzillaRestCoreTests.launch
@@ -29,7 +29,7 @@
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -consolelog"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.mylyn.bugzilla.rest.core.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m&#10;-Xmx256m&#10;-XX:MaxPermSize=128m&#10;-Dorg.eclipse.mylyn.tests.all=false"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx256m -XX:MaxPermSize=128m&#10;-Dorg.eclipse.mylyn.tests.all=false&#10;-Dmylyn.tests.configuration.url=http://localhost:2080/bugzilla-rest-master"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.platform.ide"/>
<booleanAttribute key="run_in_ui_thread" value="true"/>
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Single-BugzillaRestCoreTests.launch b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Single-BugzillaRestCoreTests.launch
index 2fed30ba8..43ec6cd11 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Single-BugzillaRestCoreTests.launch
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/config/local-Single-BugzillaRestCoreTests.launch
@@ -21,7 +21,7 @@
</listAttribute>
<stringAttribute key="org.eclipse.jdt.junit.CONTAINER" value=""/>
<booleanAttribute key="org.eclipse.jdt.junit.KEEPRUNNING_ATTR" value="false"/>
-<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value="testValidate"/>
+<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7 [1.7.0_71]"/>
@@ -29,7 +29,7 @@
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -consolelog"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.mylyn.bugzilla.rest.core.tests"/>
<stringAttribute key="org.eclipse.jdt.launching.SOURCE_PATH_PROVIDER" value="org.eclipse.pde.ui.workbenchClasspathProvider"/>
-<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m&#10;-Xmx256m&#10;-XX:MaxPermSize=128m&#10;-Dorg.eclipse.mylyn.tests.all=true"/>
+<stringAttribute key="org.eclipse.jdt.launching.VM_ARGUMENTS" value="-Xms40m -Xmx256m -XX:MaxPermSize=128m&#10;-Dorg.eclipse.mylyn.tests.all=false&#10;-Dmylyn.tests.configuration.url=http://localhost:2080/bugzilla-rest-master"/>
<stringAttribute key="pde.version" value="3.3"/>
<stringAttribute key="product" value="org.eclipse.platform.ide"/>
<booleanAttribute key="run_in_ui_thread" value="true"/>
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/src/org/eclipse/mylyn/internal/bugzilla/rest/core/tests/BugzillaRestClientTest.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/src/org/eclipse/mylyn/internal/bugzilla/rest/core/tests/BugzillaRestClientTest.java
index 6e2beee04..051423f66 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/src/org/eclipse/mylyn/internal/bugzilla/rest/core/tests/BugzillaRestClientTest.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/src/org/eclipse/mylyn/internal/bugzilla/rest/core/tests/BugzillaRestClientTest.java
@@ -42,7 +42,11 @@ import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.Product;
import org.eclipse.mylyn.internal.bugzilla.rest.test.support.BugzillaRestTestFixture;
import org.eclipse.mylyn.internal.commons.core.operations.NullOperationMonitor;
import org.eclipse.mylyn.internal.commons.repositories.core.InMemoryCredentialsStore;
+import org.eclipse.mylyn.tasks.core.TaskMapping;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.AbstractTaskDataHandler;
+import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.junit.Before;
import org.junit.Rule;
import org.junit.Test;
@@ -177,4 +181,46 @@ public class BugzillaRestClientTest {
new Gson().toJson(fieldNameList));
}
+ @Test
+ public void testinitializeTaskData() throws Exception {
+ final TaskMapping taskMappingInit = new TaskMapping() {
+ @Override
+ public String getSummary() {
+ return "The Summary";
+ }
+
+ @Override
+ public String getDescription() {
+ return "The Description";
+ }
+ };
+ final TaskMapping taskMappingSelect = new TaskMapping() {
+ @Override
+ public String getProduct() {
+ return "TestProduct";
+ }
+ };
+
+ AbstractTaskDataHandler taskDataHandler = connector.getTaskDataHandler();
+ TaskRepository repository = actualFixture.repository();
+ TaskAttributeMapper mapper = taskDataHandler.getAttributeMapper(repository);
+ TaskData taskData = new TaskData(mapper, repository.getConnectorKind(), repository.getRepositoryUrl(), "");
+ assertTrue(taskDataHandler.initializeTaskData(repository, taskData, null, null));
+ assertEquals(
+ IOUtils.toString(CommonTestUtil.getResource(this, actualFixture.getTestDataFolder() + "/taskData.txt")),
+ taskData.getRoot().toString());
+ taskData = new TaskData(mapper, repository.getConnectorKind(), repository.getRepositoryUrl(), "");
+ assertTrue(taskDataHandler.initializeTaskData(repository, taskData, taskMappingInit, null));
+ assertEquals(
+ IOUtils.toString(
+ CommonTestUtil.getResource(this, actualFixture.getTestDataFolder() + "/taskData1.txt")),
+ taskData.getRoot().toString());
+ taskData = new TaskData(mapper, repository.getConnectorKind(), repository.getRepositoryUrl(), "");
+ assertTrue(taskDataHandler.initializeTaskData(repository, taskData, taskMappingSelect, null));
+ assertEquals(
+ IOUtils.toString(
+ CommonTestUtil.getResource(this, actualFixture.getTestDataFolder() + "/taskData2.txt")),
+ taskData.getRoot().toString());
+ }
+
}
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/configuration.json b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/configuration.json
index a5f798842..0f0b7f19e 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/configuration.json
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/configuration.json
@@ -1 +1 @@
-{"repositoryId":"http://dummy.url","fields":{"alias":{"id":38,"type":0,"is_custom":false,"name":"alias","display_name":"Alias","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to":{"id":16,"type":0,"is_custom":false,"name":"assigned_to","display_name":"AssignedTo","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to_realname":{"id":19,"type":0,"is_custom":false,"name":"assigned_to_realname","display_name":"AssignedToName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attach_data.thedata":{"id":53,"type":0,"is_custom":false,"name":"attach_data.thedata","display_name":"Attachment data","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.description":{"id":25,"type":0,"is_custom":false,"name":"attachments.description","display_name":"Attachment description","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.filename":{"id":26,"type":0,"is_custom":false,"name":"attachments.filename","display_name":"Attachment filename","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isobsolete":{"id":29,"type":0,"is_custom":false,"name":"attachments.isobsolete","display_name":"Attachment is obsolete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.ispatch":{"id":28,"type":0,"is_custom":false,"name":"attachments.ispatch","display_name":"Attachment is patch","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isprivate":{"id":30,"type":0,"is_custom":false,"name":"attachments.isprivate","display_name":"Attachment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.mimetype":{"id":27,"type":0,"is_custom":false,"name":"attachments.mimetype","display_name":"Attachment mime type","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.submitter":{"id":31,"type":0,"is_custom":false,"name":"attachments.submitter","display_name":"Attachment creator","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"blocked":{"id":24,"type":0,"is_custom":false,"name":"blocked","display_name":"Blocks","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_file_loc":{"id":7,"type":0,"is_custom":false,"name":"bug_file_loc","display_name":"URL","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_group":{"id":42,"type":0,"is_custom":false,"name":"bug_group","display_name":"Group","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_id":{"id":1,"type":0,"is_custom":false,"name":"bug_id","display_name":"Bug #","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_severity":{"id":13,"type":2,"is_custom":false,"name":"bug_severity","display_name":"Severity","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"blocker","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"critical","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"major","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"normal","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"minor","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"trivial","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false},{"name":"enhancement","sort_key":700,"visibility_values":[],"is_active":false,"is_open":false}]},"bug_status":{"id":9,"type":2,"is_custom":false,"name":"bug_status","display_name":"Status","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"sort_key":0,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false}]},{"name":"UNCONFIRMED","sort_key":100,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"CONFIRMED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"IN_PROGRESS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"RESOLVED","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"VERIFIED","comment_required":false}]},{"name":"VERIFIED","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false}]}]},"cc":{"id":22,"type":0,"is_custom":false,"name":"cc","display_name":"CC","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cclist_accessible":{"id":41,"type":0,"is_custom":false,"name":"cclist_accessible","display_name":"CC Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cf_bugid":{"id":65,"type":6,"is_custom":true,"name":"cf_bugid","display_name":"bug id custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_datetime":{"id":64,"type":5,"is_custom":true,"name":"cf_datetime","display_name":"date time custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_dropdown":{"id":61,"type":2,"is_custom":true,"name":"cf_dropdown","display_name":"drop down custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"---","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"one","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"three","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"two","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"cf_freetext":{"id":60,"type":1,"is_custom":true,"name":"cf_freetext","display_name":"free text custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_largetextbox":{"id":62,"type":4,"is_custom":true,"name":"cf_largetextbox","display_name":"large text box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_multiselect":{"id":63,"type":3,"is_custom":true,"name":"cf_multiselect","display_name":"multi selection box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"Blue","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Green","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Red","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Yellow","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"classification":{"id":3,"type":2,"is_custom":false,"name":"classification","display_name":"Classification","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Unclassified","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"comment_tag":{"id":58,"type":0,"is_custom":false,"name":"comment_tag","display_name":"Comment Tag","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"commenter":{"id":46,"type":0,"is_custom":false,"name":"commenter","display_name":"Commenter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"component":{"id":15,"type":2,"is_custom":false,"name":"component","display_name":"Component","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"TestComponent","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"Component 1","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"Component 2","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"ManualC1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"ManualC2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"content":{"id":52,"type":0,"is_custom":false,"name":"content","display_name":"Content","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"creation_ts":{"id":33,"type":0,"is_custom":false,"name":"creation_ts","display_name":"Creation date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"days_elapsed":{"id":59,"type":0,"is_custom":false,"name":"days_elapsed","display_name":"Days since bug changed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"deadline":{"id":45,"type":5,"is_custom":false,"name":"deadline","display_name":"Deadline","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"delta_ts":{"id":34,"type":0,"is_custom":false,"name":"delta_ts","display_name":"Last changed date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"dependson":{"id":23,"type":0,"is_custom":false,"name":"dependson","display_name":"Depends on","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"estimated_time":{"id":43,"type":0,"is_custom":false,"name":"estimated_time","display_name":"Estimated Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"everconfirmed":{"id":39,"type":0,"is_custom":false,"name":"everconfirmed","display_name":"Ever Confirmed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"flagtypes.name":{"id":47,"type":0,"is_custom":false,"name":"flagtypes.name","display_name":"Flags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"keywords":{"id":11,"type":8,"is_custom":false,"name":"keywords","display_name":"Keywords","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Keyword1","sort_key":0,"is_active":false,"description":"1","is_open":false},{"name":"Keyword2","sort_key":0,"is_active":false,"description":"2","is_open":false}]},"last_visit_ts":{"id":57,"type":5,"is_custom":false,"name":"last_visit_ts","display_name":"Last Visit","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdesc":{"id":35,"type":0,"is_custom":false,"name":"longdesc","display_name":"Comment","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.count":{"id":37,"type":0,"is_custom":false,"name":"longdescs.count","display_name":"Number of Comments","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.isprivate":{"id":36,"type":0,"is_custom":false,"name":"longdescs.isprivate","display_name":"Comment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"op_sys":{"id":8,"type":2,"is_custom":false,"name":"op_sys","display_name":"OS/Version","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Windows","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Mac OS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Linux","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false}]},"owner_idle_time":{"id":54,"type":0,"is_custom":false,"name":"owner_idle_time","display_name":"Time Since Assignee Touched","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"percentage_complete":{"id":51,"type":0,"is_custom":false,"name":"percentage_complete","display_name":"Percentage Complete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"priority":{"id":14,"type":2,"is_custom":false,"name":"priority","display_name":"Priority","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Highest","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"High","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Normal","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Low","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Lowest","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"---","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"product":{"id":4,"type":2,"is_custom":false,"name":"product","display_name":"Product","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact":{"id":18,"type":0,"is_custom":false,"name":"qa_contact","display_name":"QAContact","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact_realname":{"id":21,"type":0,"is_custom":false,"name":"qa_contact_realname","display_name":"QAContactName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"remaining_time":{"id":44,"type":0,"is_custom":false,"name":"remaining_time","display_name":"Remaining Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"rep_platform":{"id":6,"type":2,"is_custom":false,"name":"rep_platform","display_name":"Platform","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"PC","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Macintosh","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false}]},"reporter":{"id":17,"type":0,"is_custom":false,"name":"reporter","display_name":"ReportedBy","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_accessible":{"id":40,"type":0,"is_custom":false,"name":"reporter_accessible","display_name":"Reporter Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_realname":{"id":20,"type":0,"is_custom":false,"name":"reporter_realname","display_name":"ReportedByName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"requestees.login_name":{"id":48,"type":0,"is_custom":false,"name":"requestees.login_name","display_name":"Flag Requestee","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"resolution":{"id":12,"type":2,"is_custom":false,"name":"resolution","display_name":"Resolution","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"FIXED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"INVALID","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WONTFIX","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"DUPLICATE","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WORKSFORME","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"see_also":{"id":55,"type":7,"is_custom":false,"name":"see_also","display_name":"See Also","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"setters.login_name":{"id":49,"type":0,"is_custom":false,"name":"setters.login_name","display_name":"Flag Setter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"short_desc":{"id":2,"type":0,"is_custom":false,"name":"short_desc","display_name":"Summary","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"status_whiteboard":{"id":10,"type":0,"is_custom":false,"name":"status_whiteboard","display_name":"Status Whiteboard","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"tag":{"id":56,"type":8,"is_custom":false,"name":"tag","display_name":"Personal Tags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"target_milestone":{"id":32,"type":0,"is_custom":false,"name":"target_milestone","display_name":"Target Milestone","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"---","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M2.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M3","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M3.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false}]},"version":{"id":5,"type":0,"is_custom":false,"name":"version","display_name":"Version","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"unspecified","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"a","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"b","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"c","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1.1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R2.0","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"work_time":{"id":50,"type":0,"is_custom":false,"name":"work_time","display_name":"Hours Worked","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]}},"products":{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"name":"ManualC1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":5,"name":"ManualC2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"name":"Component 1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":3,"name":"Component 2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"name":"TestComponent","description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}},"parameters":{"allowemailchange":"1","attachment_base":"","commentonchange_resolution":"0","commentonduplicate":"0","cookiepath":"/","defaultopsys":"","defaultplatform":"","defaultpriority":"---","defaultseverity":"enhancement","duplicate_or_move_bug_status":"RESOLVED","emailregexpdesc":"A legal address must contain exactly one \u0027@\u0027, and at least one \u0027.\u0027 after the @.","emailsuffix":"","letsubmitterchoosemilestone":"1","letsubmitterchoosepriority":"1","mailfrom":"bugzilla-daemon","maintainer":"admin@mylyn.eclipse.org","maxattachmentsize":"1000","maxlocalattachment":"0","musthavemilestoneonaccept":"0","noresolveonopenblockers":"0","password_complexity":"no_constraints","rememberlogin":"on","requirelogin":"0","search_allow_no_criteria":"1","urlbase":"","use_see_also":"1","useclassification":"0","usemenuforusers":"0","useqacontact":"1","usestatuswhiteboard":"1","usetargetmilestone":"1"}} \ No newline at end of file
+{"repositoryId":"http://dummy.url","fields":{"alias":{"id":38,"type":0,"is_custom":false,"name":"alias","display_name":"Alias","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to":{"id":16,"type":0,"is_custom":false,"name":"assigned_to","display_name":"AssignedTo","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to_realname":{"id":19,"type":0,"is_custom":false,"name":"assigned_to_realname","display_name":"AssignedToName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attach_data.thedata":{"id":53,"type":0,"is_custom":false,"name":"attach_data.thedata","display_name":"Attachment data","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.description":{"id":25,"type":0,"is_custom":false,"name":"attachments.description","display_name":"Attachment description","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.filename":{"id":26,"type":0,"is_custom":false,"name":"attachments.filename","display_name":"Attachment filename","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isobsolete":{"id":29,"type":0,"is_custom":false,"name":"attachments.isobsolete","display_name":"Attachment is obsolete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.ispatch":{"id":28,"type":0,"is_custom":false,"name":"attachments.ispatch","display_name":"Attachment is patch","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isprivate":{"id":30,"type":0,"is_custom":false,"name":"attachments.isprivate","display_name":"Attachment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.mimetype":{"id":27,"type":0,"is_custom":false,"name":"attachments.mimetype","display_name":"Attachment mime type","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.submitter":{"id":31,"type":0,"is_custom":false,"name":"attachments.submitter","display_name":"Attachment creator","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"blocked":{"id":24,"type":0,"is_custom":false,"name":"blocked","display_name":"Blocks","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_file_loc":{"id":7,"type":0,"is_custom":false,"name":"bug_file_loc","display_name":"URL","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_group":{"id":42,"type":0,"is_custom":false,"name":"bug_group","display_name":"Group","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_id":{"id":1,"type":0,"is_custom":false,"name":"bug_id","display_name":"Bug #","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_severity":{"id":13,"type":2,"is_custom":false,"name":"bug_severity","display_name":"Severity","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"blocker","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"critical","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"major","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"normal","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"minor","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"trivial","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false},{"name":"enhancement","sort_key":700,"visibility_values":[],"is_active":false,"is_open":false}]},"bug_status":{"id":9,"type":2,"is_custom":false,"name":"bug_status","display_name":"Status","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"sort_key":0,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false}]},{"name":"UNCONFIRMED","sort_key":100,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"CONFIRMED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"IN_PROGRESS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"RESOLVED","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"VERIFIED","comment_required":false}]},{"name":"VERIFIED","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false}]}]},"cc":{"id":22,"type":0,"is_custom":false,"name":"cc","display_name":"CC","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cclist_accessible":{"id":41,"type":0,"is_custom":false,"name":"cclist_accessible","display_name":"CC Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cf_bugid":{"id":65,"type":6,"is_custom":true,"name":"cf_bugid","display_name":"bug id custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_datetime":{"id":64,"type":5,"is_custom":true,"name":"cf_datetime","display_name":"date time custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_dropdown":{"id":61,"type":2,"is_custom":true,"name":"cf_dropdown","display_name":"drop down custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"---","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"one","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"three","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"two","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"cf_freetext":{"id":60,"type":1,"is_custom":true,"name":"cf_freetext","display_name":"free text custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_largetextbox":{"id":62,"type":4,"is_custom":true,"name":"cf_largetextbox","display_name":"large text box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_multiselect":{"id":63,"type":3,"is_custom":true,"name":"cf_multiselect","display_name":"multi selection box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"Blue","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Green","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Red","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Yellow","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"classification":{"id":3,"type":2,"is_custom":false,"name":"classification","display_name":"Classification","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Unclassified","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"comment_tag":{"id":58,"type":0,"is_custom":false,"name":"comment_tag","display_name":"Comment Tag","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"commenter":{"id":46,"type":0,"is_custom":false,"name":"commenter","display_name":"Commenter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"component":{"id":15,"type":2,"is_custom":false,"name":"component","display_name":"Component","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"TestComponent","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"Component 1","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"Component 2","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"ManualC1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"ManualC2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"content":{"id":52,"type":0,"is_custom":false,"name":"content","display_name":"Content","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"creation_ts":{"id":33,"type":0,"is_custom":false,"name":"creation_ts","display_name":"Creation date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"days_elapsed":{"id":59,"type":0,"is_custom":false,"name":"days_elapsed","display_name":"Days since bug changed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"deadline":{"id":45,"type":5,"is_custom":false,"name":"deadline","display_name":"Deadline","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"delta_ts":{"id":34,"type":0,"is_custom":false,"name":"delta_ts","display_name":"Last changed date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"dependson":{"id":23,"type":0,"is_custom":false,"name":"dependson","display_name":"Depends on","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"estimated_time":{"id":43,"type":0,"is_custom":false,"name":"estimated_time","display_name":"Estimated Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"everconfirmed":{"id":39,"type":0,"is_custom":false,"name":"everconfirmed","display_name":"Ever Confirmed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"flagtypes.name":{"id":47,"type":0,"is_custom":false,"name":"flagtypes.name","display_name":"Flags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"keywords":{"id":11,"type":8,"is_custom":false,"name":"keywords","display_name":"Keywords","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Keyword1","sort_key":0,"is_active":false,"description":"1","is_open":false},{"name":"Keyword2","sort_key":0,"is_active":false,"description":"2","is_open":false}]},"last_visit_ts":{"id":57,"type":5,"is_custom":false,"name":"last_visit_ts","display_name":"Last Visit","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdesc":{"id":35,"type":0,"is_custom":false,"name":"longdesc","display_name":"Comment","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.count":{"id":37,"type":0,"is_custom":false,"name":"longdescs.count","display_name":"Number of Comments","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.isprivate":{"id":36,"type":0,"is_custom":false,"name":"longdescs.isprivate","display_name":"Comment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"op_sys":{"id":8,"type":2,"is_custom":false,"name":"op_sys","display_name":"OS/Version","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Windows","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Mac OS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Linux","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false}]},"owner_idle_time":{"id":54,"type":0,"is_custom":false,"name":"owner_idle_time","display_name":"Time Since Assignee Touched","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"percentage_complete":{"id":51,"type":0,"is_custom":false,"name":"percentage_complete","display_name":"Percentage Complete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"priority":{"id":14,"type":2,"is_custom":false,"name":"priority","display_name":"Priority","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Highest","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"High","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Normal","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Low","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Lowest","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"---","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"product":{"id":4,"type":2,"is_custom":false,"name":"product","display_name":"Product","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact":{"id":18,"type":0,"is_custom":false,"name":"qa_contact","display_name":"QAContact","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact_realname":{"id":21,"type":0,"is_custom":false,"name":"qa_contact_realname","display_name":"QAContactName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"remaining_time":{"id":44,"type":0,"is_custom":false,"name":"remaining_time","display_name":"Remaining Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"rep_platform":{"id":6,"type":2,"is_custom":false,"name":"rep_platform","display_name":"Platform","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"PC","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Macintosh","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false}]},"reporter":{"id":17,"type":0,"is_custom":false,"name":"reporter","display_name":"ReportedBy","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_accessible":{"id":40,"type":0,"is_custom":false,"name":"reporter_accessible","display_name":"Reporter Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_realname":{"id":20,"type":0,"is_custom":false,"name":"reporter_realname","display_name":"ReportedByName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"requestees.login_name":{"id":48,"type":0,"is_custom":false,"name":"requestees.login_name","display_name":"Flag Requestee","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"resolution":{"id":12,"type":2,"is_custom":false,"name":"resolution","display_name":"Resolution","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"FIXED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"INVALID","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WONTFIX","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"DUPLICATE","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WORKSFORME","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"see_also":{"id":55,"type":7,"is_custom":false,"name":"see_also","display_name":"See Also","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"setters.login_name":{"id":49,"type":0,"is_custom":false,"name":"setters.login_name","display_name":"Flag Setter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"short_desc":{"id":2,"type":0,"is_custom":false,"name":"short_desc","display_name":"Summary","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"status_whiteboard":{"id":10,"type":0,"is_custom":false,"name":"status_whiteboard","display_name":"Status Whiteboard","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"tag":{"id":56,"type":8,"is_custom":false,"name":"tag","display_name":"Personal Tags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"target_milestone":{"id":32,"type":0,"is_custom":false,"name":"target_milestone","display_name":"Target Milestone","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"---","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M2.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M3","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M3.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false}]},"version":{"id":5,"type":0,"is_custom":false,"name":"version","display_name":"Version","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"unspecified","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"a","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"b","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"c","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1.1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R2.0","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"work_time":{"id":50,"type":0,"is_custom":false,"name":"work_time","display_name":"Hours Worked","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]}},"products":{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC1","sort_key":0,"is_active":true},{"id":5,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC2","sort_key":0,"is_active":true}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 1","sort_key":0,"is_active":true},{"id":3,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 2","sort_key":0,"is_active":true}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"TestComponent","sort_key":0,"is_active":true}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}},"parameters":{"allowemailchange":"1","attachment_base":"","commentonchange_resolution":"0","commentonduplicate":"0","cookiepath":"/","defaultopsys":"","defaultplatform":"","defaultpriority":"---","defaultseverity":"enhancement","duplicate_or_move_bug_status":"RESOLVED","emailregexpdesc":"A legal address must contain exactly one \u0027@\u0027, and at least one \u0027.\u0027 after the @.","emailsuffix":"","letsubmitterchoosemilestone":"1","letsubmitterchoosepriority":"1","mailfrom":"bugzilla-daemon","maintainer":"admin@mylyn.eclipse.org","maxattachmentsize":"1000","maxlocalattachment":"0","musthavemilestoneonaccept":"0","noresolveonopenblockers":"0","password_complexity":"no_constraints","rememberlogin":"on","requirelogin":"0","search_allow_no_criteria":"1","urlbase":"","use_see_also":"1","useclassification":"0","usemenuforusers":"0","useqacontact":"1","usestatuswhiteboard":"1","usetargetmilestone":"1"}} \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/products.json b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/products.json
index 5d60ffe08..d72e6559b 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/products.json
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/products.json
@@ -1 +1 @@
-{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"name":"ManualC1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":5,"name":"ManualC2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"name":"Component 1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":3,"name":"Component 2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"name":"TestComponent","description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}} \ No newline at end of file
+{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC1","sort_key":0,"is_active":true},{"id":5,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC2","sort_key":0,"is_active":true}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 1","sort_key":0,"is_active":true},{"id":3,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 2","sort_key":0,"is_active":true}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"TestComponent","sort_key":0,"is_active":true}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}} \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData.txt b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData.txt
new file mode 100644
index 000000000..024c77784
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData.txt
@@ -0,0 +1,26 @@
+TaskAttribute[id=root,values=[],options=null,metaData=null]
+ TaskAttribute[id=task.common.product,values=[],options={TestProduct=TestProduct, Product with Spaces=Product with Spaces, ManualTest=ManualTest},metaData={task.meta.label=Product, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true}]
+ TaskAttribute[id=task.common.component,values=[],options={TestComponent=TestComponent, Component 1=Component 1, Component 2=Component 2, ManualC1=ManualC1, ManualC2=ManualC2},metaData={task.meta.label=Component, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.summary,values=[],options=null,metaData={task.meta.label=Summary, task.meta.type=shortRichText, task.meta.readOnly=false, task.meta.required=true}]
+ TaskAttribute[id=task.common.version,values=[],options={unspecified=unspecified, a=a, b=b, c=c, R1=R1, R1.1=R1.1, R2.0=R2.0},metaData={task.meta.label=Version, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.description,values=[],options=null,metaData={task.meta.label=Description, task.meta.type=longRichText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.description, task.meta.required=true}]
+ TaskAttribute[id=os,values=[All],options={All=All, Windows=Windows, Mac OS=Mac OS, Linux=Linux, Other=Other},metaData={task.meta.label=OS, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=platform,values=[All],options={All=All, PC=PC, Macintosh=Macintosh, Other=Other},metaData={task.meta.label=Platform, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.priority,values=[---],options={Highest=Highest, High=High, Normal=Normal, Low=Low, Lowest=Lowest, ---=---},metaData={task.meta.label=Priority, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.severity,values=[enhancement],options={blocker=blocker, critical=critical, major=major, normal=normal, minor=minor, trivial=trivial, enhancement=enhancement},metaData={task.meta.label=Severity, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=alias,values=[],options=null,metaData={task.meta.label=Alias, task.meta.type=shortText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.user.assigned,values=[],options=null,metaData={task.meta.label=Assigned to, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=task.common.user.cc,values=[],options=null,metaData={task.meta.label=CC, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=task.common.addselfcc,values=[],options=null,metaData={task.meta.label=Add Self to CC, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=comment_is_private,values=[],options=null,metaData={task.meta.label=Description is private, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=qa_contact,values=[],options=null,metaData={task.meta.label=QA Contact, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=target_milestone,values=[],options={---=---, M1=M1, M1.0=M1.0, M2=M2, M2.0=M2.0, M3=M3, M3.0=M3.0},metaData={task.meta.label=Target milestone, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.resolution,values=[],options={=, FIXED=FIXED, INVALID=INVALID, WONTFIX=WONTFIX, DUPLICATE=DUPLICATE, WORKSFORME=WORKSFORME},metaData={task.meta.label=Resolution, task.meta.type=singleSelect, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=task.common.operation,values=[],options=null,metaData={task.meta.label=Operation, task.meta.type=operation, task.meta.readOnly=false, task.meta.required=false}]
+ TaskAttribute[id=task.common.status,values=[],options={UNCONFIRMED=UNCONFIRMED, CONFIRMED=CONFIRMED, IN_PROGRESS=IN_PROGRESS},metaData={task.meta.label=Status, task.meta.type=shortText, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=cf_bugid,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=integer, task.meta.required=false, task.meta.label=bug id custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_datetime,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=dateTime, task.meta.required=false, task.meta.label=date time custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_dropdown,values=[],options={---=---, one=one, three=three, two=two},metaData={task.meta.readOnly=false, task.meta.type=singleSelect, task.meta.required=true, task.meta.label=drop down custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_freetext,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=shortText, task.meta.required=false, task.meta.label=free text custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_largetextbox,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=longText, task.meta.required=false, task.meta.label=large text box custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_multiselect,values=[],options={Blue=Blue, Green=Green, Red=Red, Yellow=Yellow},metaData={task.meta.readOnly=false, task.meta.type=multiSelect, task.meta.required=false, task.meta.label=multi selection box custom field, task.meta.attributeKind=task.common.kind.default}] \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData1.txt b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData1.txt
new file mode 100644
index 000000000..93fb7ef4f
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData1.txt
@@ -0,0 +1,26 @@
+TaskAttribute[id=root,values=[],options=null,metaData=null]
+ TaskAttribute[id=task.common.product,values=[],options={TestProduct=TestProduct, Product with Spaces=Product with Spaces, ManualTest=ManualTest},metaData={task.meta.label=Product, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true}]
+ TaskAttribute[id=task.common.component,values=[],options={TestComponent=TestComponent, Component 1=Component 1, Component 2=Component 2, ManualC1=ManualC1, ManualC2=ManualC2},metaData={task.meta.label=Component, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.summary,values=[The Summary],options=null,metaData={task.meta.label=Summary, task.meta.type=shortRichText, task.meta.readOnly=false, task.meta.required=true}]
+ TaskAttribute[id=task.common.version,values=[],options={unspecified=unspecified, a=a, b=b, c=c, R1=R1, R1.1=R1.1, R2.0=R2.0},metaData={task.meta.label=Version, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.description,values=[The Description],options=null,metaData={task.meta.label=Description, task.meta.type=longRichText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.description, task.meta.required=true}]
+ TaskAttribute[id=os,values=[All],options={All=All, Windows=Windows, Mac OS=Mac OS, Linux=Linux, Other=Other},metaData={task.meta.label=OS, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=platform,values=[All],options={All=All, PC=PC, Macintosh=Macintosh, Other=Other},metaData={task.meta.label=Platform, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.priority,values=[---],options={Highest=Highest, High=High, Normal=Normal, Low=Low, Lowest=Lowest, ---=---},metaData={task.meta.label=Priority, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.severity,values=[enhancement],options={blocker=blocker, critical=critical, major=major, normal=normal, minor=minor, trivial=trivial, enhancement=enhancement},metaData={task.meta.label=Severity, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=alias,values=[],options=null,metaData={task.meta.label=Alias, task.meta.type=shortText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.user.assigned,values=[],options=null,metaData={task.meta.label=Assigned to, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=task.common.user.cc,values=[],options=null,metaData={task.meta.label=CC, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=task.common.addselfcc,values=[],options=null,metaData={task.meta.label=Add Self to CC, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=comment_is_private,values=[],options=null,metaData={task.meta.label=Description is private, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=qa_contact,values=[],options=null,metaData={task.meta.label=QA Contact, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=target_milestone,values=[],options={---=---, M1=M1, M1.0=M1.0, M2=M2, M2.0=M2.0, M3=M3, M3.0=M3.0},metaData={task.meta.label=Target milestone, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.resolution,values=[],options={=, FIXED=FIXED, INVALID=INVALID, WONTFIX=WONTFIX, DUPLICATE=DUPLICATE, WORKSFORME=WORKSFORME},metaData={task.meta.label=Resolution, task.meta.type=singleSelect, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=task.common.operation,values=[],options=null,metaData={task.meta.label=Operation, task.meta.type=operation, task.meta.readOnly=false, task.meta.required=false}]
+ TaskAttribute[id=task.common.status,values=[],options={UNCONFIRMED=UNCONFIRMED, CONFIRMED=CONFIRMED, IN_PROGRESS=IN_PROGRESS},metaData={task.meta.label=Status, task.meta.type=shortText, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=cf_bugid,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=integer, task.meta.required=false, task.meta.label=bug id custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_datetime,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=dateTime, task.meta.required=false, task.meta.label=date time custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_dropdown,values=[],options={---=---, one=one, three=three, two=two},metaData={task.meta.readOnly=false, task.meta.type=singleSelect, task.meta.required=true, task.meta.label=drop down custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_freetext,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=shortText, task.meta.required=false, task.meta.label=free text custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_largetextbox,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=longText, task.meta.required=false, task.meta.label=large text box custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_multiselect,values=[],options={Blue=Blue, Green=Green, Red=Red, Yellow=Yellow},metaData={task.meta.readOnly=false, task.meta.type=multiSelect, task.meta.required=false, task.meta.label=multi selection box custom field, task.meta.attributeKind=task.common.kind.default}] \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData2.txt b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData2.txt
new file mode 100644
index 000000000..196328e57
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version1/taskData2.txt
@@ -0,0 +1,26 @@
+TaskAttribute[id=root,values=[],options=null,metaData=null]
+ TaskAttribute[id=task.common.product,values=[TestProduct],options={TestProduct=TestProduct, Product with Spaces=Product with Spaces, ManualTest=ManualTest},metaData={task.meta.label=Product, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true}]
+ TaskAttribute[id=task.common.component,values=[TestComponent],options={TestComponent=TestComponent},metaData={task.meta.label=Component, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.summary,values=[],options=null,metaData={task.meta.label=Summary, task.meta.type=shortRichText, task.meta.readOnly=false, task.meta.required=true}]
+ TaskAttribute[id=task.common.version,values=[unspecified],options={unspecified=unspecified},metaData={task.meta.label=Version, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.description,values=[],options=null,metaData={task.meta.label=Description, task.meta.type=longRichText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.description, task.meta.required=true}]
+ TaskAttribute[id=os,values=[All],options={All=All, Windows=Windows, Mac OS=Mac OS, Linux=Linux, Other=Other},metaData={task.meta.label=OS, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=platform,values=[All],options={All=All, PC=PC, Macintosh=Macintosh, Other=Other},metaData={task.meta.label=Platform, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.priority,values=[---],options={Highest=Highest, High=High, Normal=Normal, Low=Low, Lowest=Lowest, ---=---},metaData={task.meta.label=Priority, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.severity,values=[enhancement],options={blocker=blocker, critical=critical, major=major, normal=normal, minor=minor, trivial=trivial, enhancement=enhancement},metaData={task.meta.label=Severity, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=alias,values=[],options=null,metaData={task.meta.label=Alias, task.meta.type=shortText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.user.assigned,values=[],options=null,metaData={task.meta.label=Assigned to, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=task.common.user.cc,values=[],options=null,metaData={task.meta.label=CC, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=task.common.addselfcc,values=[],options=null,metaData={task.meta.label=Add Self to CC, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=comment_is_private,values=[],options=null,metaData={task.meta.label=Description is private, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=qa_contact,values=[],options=null,metaData={task.meta.label=QA Contact, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=target_milestone,values=[---],options={---=---},metaData={task.meta.label=Target milestone, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.resolution,values=[],options={=, FIXED=FIXED, INVALID=INVALID, WONTFIX=WONTFIX, DUPLICATE=DUPLICATE, WORKSFORME=WORKSFORME},metaData={task.meta.label=Resolution, task.meta.type=singleSelect, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=task.common.operation,values=[],options=null,metaData={task.meta.label=Operation, task.meta.type=operation, task.meta.readOnly=false, task.meta.required=false}]
+ TaskAttribute[id=task.common.status,values=[],options={UNCONFIRMED=UNCONFIRMED, CONFIRMED=CONFIRMED, IN_PROGRESS=IN_PROGRESS},metaData={task.meta.label=Status, task.meta.type=shortText, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=cf_bugid,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=integer, task.meta.required=false, task.meta.label=bug id custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_datetime,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=dateTime, task.meta.required=false, task.meta.label=date time custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_dropdown,values=[],options={---=---, one=one, three=three, two=two},metaData={task.meta.readOnly=false, task.meta.type=singleSelect, task.meta.required=true, task.meta.label=drop down custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_freetext,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=shortText, task.meta.required=false, task.meta.label=free text custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_largetextbox,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=longText, task.meta.required=false, task.meta.label=large text box custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_multiselect,values=[],options={Blue=Blue, Green=Green, Red=Red, Yellow=Yellow},metaData={task.meta.readOnly=false, task.meta.type=multiSelect, task.meta.required=false, task.meta.label=multi selection box custom field, task.meta.attributeKind=task.common.kind.default}] \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/configuration.json b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/configuration.json
index 2f1449ae2..af4b5cc6e 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/configuration.json
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/configuration.json
@@ -1 +1 @@
-{"repositoryId":"http://dummy.url","fields":{"alias":{"id":38,"type":0,"is_custom":false,"name":"alias","display_name":"Alias","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to":{"id":16,"type":0,"is_custom":false,"name":"assigned_to","display_name":"AssignedTo","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to_realname":{"id":19,"type":0,"is_custom":false,"name":"assigned_to_realname","display_name":"AssignedToName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attach_data.thedata":{"id":53,"type":0,"is_custom":false,"name":"attach_data.thedata","display_name":"Attachment data","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.description":{"id":25,"type":0,"is_custom":false,"name":"attachments.description","display_name":"Attachment description","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.filename":{"id":26,"type":0,"is_custom":false,"name":"attachments.filename","display_name":"Attachment filename","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isobsolete":{"id":29,"type":0,"is_custom":false,"name":"attachments.isobsolete","display_name":"Attachment is obsolete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.ispatch":{"id":28,"type":0,"is_custom":false,"name":"attachments.ispatch","display_name":"Attachment is patch","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isprivate":{"id":30,"type":0,"is_custom":false,"name":"attachments.isprivate","display_name":"Attachment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.mimetype":{"id":27,"type":0,"is_custom":false,"name":"attachments.mimetype","display_name":"Attachment mime type","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.submitter":{"id":31,"type":0,"is_custom":false,"name":"attachments.submitter","display_name":"Attachment creator","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"blocked":{"id":24,"type":0,"is_custom":false,"name":"blocked","display_name":"Blocks","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_file_loc":{"id":7,"type":0,"is_custom":false,"name":"bug_file_loc","display_name":"URL","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_group":{"id":42,"type":0,"is_custom":false,"name":"bug_group","display_name":"Group","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_id":{"id":1,"type":0,"is_custom":false,"name":"bug_id","display_name":"Bug #","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_severity":{"id":13,"type":2,"is_custom":false,"name":"bug_severity","display_name":"Severity","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"blocker","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"critical","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"major","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"normal","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"minor","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"trivial","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false},{"name":"enhancement","sort_key":700,"visibility_values":[],"is_active":false,"is_open":false}]},"bug_status":{"id":9,"type":2,"is_custom":false,"name":"bug_status","display_name":"Status","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"sort_key":0,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false}]},{"name":"UNCONFIRMED","sort_key":100,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"CONFIRMED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"IN_PROGRESS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"RESOLVED","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"VERIFIED","comment_required":false}]},{"name":"VERIFIED","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false}]}]},"cc":{"id":22,"type":0,"is_custom":false,"name":"cc","display_name":"CC","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cclist_accessible":{"id":41,"type":0,"is_custom":false,"name":"cclist_accessible","display_name":"CC Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cf_bugid":{"id":65,"type":6,"is_custom":true,"name":"cf_bugid","display_name":"bug id custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_datetime":{"id":64,"type":5,"is_custom":true,"name":"cf_datetime","display_name":"date time custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_dropdown":{"id":61,"type":2,"is_custom":true,"name":"cf_dropdown","display_name":"drop down custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"---","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"one","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"three","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"two","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"cf_freetext":{"id":60,"type":1,"is_custom":true,"name":"cf_freetext","display_name":"free text custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_largetextbox":{"id":62,"type":4,"is_custom":true,"name":"cf_largetextbox","display_name":"large text box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_multiselect":{"id":63,"type":3,"is_custom":true,"name":"cf_multiselect","display_name":"multi selection box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"Blue","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Green","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Red","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Yellow","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"classification":{"id":3,"type":2,"is_custom":false,"name":"classification","display_name":"Classification","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Unclassified","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"comment_tag":{"id":58,"type":0,"is_custom":false,"name":"comment_tag","display_name":"Comment Tag","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"commenter":{"id":46,"type":0,"is_custom":false,"name":"commenter","display_name":"Commenter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"component":{"id":15,"type":2,"is_custom":false,"name":"component","display_name":"Component","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"TestComponent","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"Component 1","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"Component 2","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"ManualC1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"ManualC2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"content":{"id":52,"type":0,"is_custom":false,"name":"content","display_name":"Content","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"creation_ts":{"id":33,"type":0,"is_custom":false,"name":"creation_ts","display_name":"Creation date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"days_elapsed":{"id":59,"type":0,"is_custom":false,"name":"days_elapsed","display_name":"Days since bug changed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"deadline":{"id":45,"type":5,"is_custom":false,"name":"deadline","display_name":"Deadline","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"delta_ts":{"id":34,"type":0,"is_custom":false,"name":"delta_ts","display_name":"Last changed date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"dependson":{"id":23,"type":0,"is_custom":false,"name":"dependson","display_name":"Depends on","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"estimated_time":{"id":43,"type":0,"is_custom":false,"name":"estimated_time","display_name":"Estimated Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"everconfirmed":{"id":39,"type":0,"is_custom":false,"name":"everconfirmed","display_name":"Ever Confirmed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"flagtypes.name":{"id":47,"type":0,"is_custom":false,"name":"flagtypes.name","display_name":"Flags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"keywords":{"id":11,"type":8,"is_custom":false,"name":"keywords","display_name":"Keywords","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Keyword1","sort_key":0,"is_active":false,"description":"1","is_open":false},{"name":"Keyword2","sort_key":0,"is_active":false,"description":"2","is_open":false}]},"last_visit_ts":{"id":57,"type":5,"is_custom":false,"name":"last_visit_ts","display_name":"Last Visit","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdesc":{"id":35,"type":0,"is_custom":false,"name":"longdesc","display_name":"Comment","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.count":{"id":37,"type":0,"is_custom":false,"name":"longdescs.count","display_name":"Number of Comments","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.isprivate":{"id":36,"type":0,"is_custom":false,"name":"longdescs.isprivate","display_name":"Comment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"op_sys":{"id":8,"type":2,"is_custom":false,"name":"op_sys","display_name":"OS/Version","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Windows","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Mac OS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Linux","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false}]},"owner_idle_time":{"id":54,"type":0,"is_custom":false,"name":"owner_idle_time","display_name":"Time Since Assignee Touched","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"percentage_complete":{"id":51,"type":0,"is_custom":false,"name":"percentage_complete","display_name":"Percentage Complete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"priority":{"id":14,"type":2,"is_custom":false,"name":"priority","display_name":"Priority","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Highest","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"High","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Normal","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Low","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Lowest","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"---","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"product":{"id":4,"type":2,"is_custom":false,"name":"product","display_name":"Product","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact":{"id":18,"type":0,"is_custom":false,"name":"qa_contact","display_name":"QAContact","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact_realname":{"id":21,"type":0,"is_custom":false,"name":"qa_contact_realname","display_name":"QAContactName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"remaining_time":{"id":44,"type":0,"is_custom":false,"name":"remaining_time","display_name":"Remaining Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"rep_platform":{"id":6,"type":2,"is_custom":false,"name":"rep_platform","display_name":"Platform","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"PC","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Macintosh","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false}]},"reporter":{"id":17,"type":0,"is_custom":false,"name":"reporter","display_name":"ReportedBy","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_accessible":{"id":40,"type":0,"is_custom":false,"name":"reporter_accessible","display_name":"Reporter Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_realname":{"id":20,"type":0,"is_custom":false,"name":"reporter_realname","display_name":"ReportedByName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"requestees.login_name":{"id":48,"type":0,"is_custom":false,"name":"requestees.login_name","display_name":"Flag Requestee","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"resolution":{"id":12,"type":2,"is_custom":false,"name":"resolution","display_name":"Resolution","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"FIXED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"INVALID","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WONTFIX","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"DUPLICATE","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WORKSFORME","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"see_also":{"id":55,"type":7,"is_custom":false,"name":"see_also","display_name":"See Also","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"setters.login_name":{"id":49,"type":0,"is_custom":false,"name":"setters.login_name","display_name":"Flag Setter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"short_desc":{"id":2,"type":0,"is_custom":false,"name":"short_desc","display_name":"Summary","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"status_whiteboard":{"id":10,"type":0,"is_custom":false,"name":"status_whiteboard","display_name":"Status Whiteboard","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"tag":{"id":56,"type":8,"is_custom":false,"name":"tag","display_name":"Personal Tags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"target_milestone":{"id":32,"type":0,"is_custom":false,"name":"target_milestone","display_name":"Target Milestone","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"---","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M2.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M3","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M3.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false}]},"version":{"id":5,"type":0,"is_custom":false,"name":"version","display_name":"Version","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"unspecified","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"a","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"b","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"c","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1.1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R2.0","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"work_time":{"id":50,"type":0,"is_custom":false,"name":"work_time","display_name":"Hours Worked","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]}},"products":{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"name":"ManualC1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":5,"name":"ManualC2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"name":"Component 1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":3,"name":"Component 2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"name":"TestComponent","description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}},"parameters":{"allowemailchange":"1","attachment_base":"","commentonchange_resolution":"0","commentonduplicate":"0","cookiepath":"/","defaultopsys":"","defaultplatform":"","defaultpriority":"---","defaultseverity":"enhancement","duplicate_or_move_bug_status":"RESOLVED","emailregexpdesc":"A legal address must contain exactly one \u0027@\u0027, and at least one \u0027.\u0027 after the @.","emailsuffix":"","letsubmitterchoosemilestone":"1","letsubmitterchoosepriority":"1","mailfrom":"bugzilla-daemon","maintainer":"admin@mylyn.eclipse.org","maxattachmentsize":"1000","maxlocalattachment":"0","musthavemilestoneonaccept":"0","password_complexity":"no_constraints","rememberlogin":"on","requirelogin":"0","search_allow_no_criteria":"1","urlbase":"","use_see_also":"1","useclassification":"0","usemenuforusers":"0","useqacontact":"1","usestatuswhiteboard":"1","usetargetmilestone":"1"}} \ No newline at end of file
+{"repositoryId":"http://dummy.url","fields":{"alias":{"id":38,"type":0,"is_custom":false,"name":"alias","display_name":"Alias","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to":{"id":16,"type":0,"is_custom":false,"name":"assigned_to","display_name":"AssignedTo","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"assigned_to_realname":{"id":19,"type":0,"is_custom":false,"name":"assigned_to_realname","display_name":"AssignedToName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attach_data.thedata":{"id":53,"type":0,"is_custom":false,"name":"attach_data.thedata","display_name":"Attachment data","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.description":{"id":25,"type":0,"is_custom":false,"name":"attachments.description","display_name":"Attachment description","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.filename":{"id":26,"type":0,"is_custom":false,"name":"attachments.filename","display_name":"Attachment filename","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isobsolete":{"id":29,"type":0,"is_custom":false,"name":"attachments.isobsolete","display_name":"Attachment is obsolete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.ispatch":{"id":28,"type":0,"is_custom":false,"name":"attachments.ispatch","display_name":"Attachment is patch","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.isprivate":{"id":30,"type":0,"is_custom":false,"name":"attachments.isprivate","display_name":"Attachment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.mimetype":{"id":27,"type":0,"is_custom":false,"name":"attachments.mimetype","display_name":"Attachment mime type","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"attachments.submitter":{"id":31,"type":0,"is_custom":false,"name":"attachments.submitter","display_name":"Attachment creator","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"blocked":{"id":24,"type":0,"is_custom":false,"name":"blocked","display_name":"Blocks","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_file_loc":{"id":7,"type":0,"is_custom":false,"name":"bug_file_loc","display_name":"URL","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_group":{"id":42,"type":0,"is_custom":false,"name":"bug_group","display_name":"Group","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_id":{"id":1,"type":0,"is_custom":false,"name":"bug_id","display_name":"Bug #","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"bug_severity":{"id":13,"type":2,"is_custom":false,"name":"bug_severity","display_name":"Severity","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"blocker","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"critical","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"major","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"normal","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"minor","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"trivial","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false},{"name":"enhancement","sort_key":700,"visibility_values":[],"is_active":false,"is_open":false}]},"bug_status":{"id":9,"type":2,"is_custom":false,"name":"bug_status","display_name":"Status","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"sort_key":0,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false}]},{"name":"UNCONFIRMED","sort_key":100,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"CONFIRMED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"IN_PROGRESS","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"IN_PROGRESS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":true,"can_change_to":[{"name":"CONFIRMED","comment_required":false},{"name":"RESOLVED","comment_required":false}]},{"name":"RESOLVED","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false},{"name":"VERIFIED","comment_required":false}]},{"name":"VERIFIED","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false,"can_change_to":[{"name":"UNCONFIRMED","comment_required":false},{"name":"CONFIRMED","comment_required":false}]}]},"cc":{"id":22,"type":0,"is_custom":false,"name":"cc","display_name":"CC","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cclist_accessible":{"id":41,"type":0,"is_custom":false,"name":"cclist_accessible","display_name":"CC Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"cf_bugid":{"id":65,"type":6,"is_custom":true,"name":"cf_bugid","display_name":"bug id custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_datetime":{"id":64,"type":5,"is_custom":true,"name":"cf_datetime","display_name":"date time custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_dropdown":{"id":61,"type":2,"is_custom":true,"name":"cf_dropdown","display_name":"drop down custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"---","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"one","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"three","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"two","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"cf_freetext":{"id":60,"type":1,"is_custom":true,"name":"cf_freetext","display_name":"free text custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_largetextbox":{"id":62,"type":4,"is_custom":true,"name":"cf_largetextbox","display_name":"large text box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[]},"cf_multiselect":{"id":63,"type":3,"is_custom":true,"name":"cf_multiselect","display_name":"multi selection box custom field","is_mandatory":false,"is_on_bug_entry":true,"visibility_values":[],"values":[{"name":"Blue","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Green","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Red","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Yellow","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"classification":{"id":3,"type":2,"is_custom":false,"name":"classification","display_name":"Classification","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Unclassified","sort_key":0,"visibility_values":[],"is_active":false,"is_open":false}]},"comment_tag":{"id":58,"type":0,"is_custom":false,"name":"comment_tag","display_name":"Comment Tag","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"commenter":{"id":46,"type":0,"is_custom":false,"name":"commenter","display_name":"Commenter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"component":{"id":15,"type":2,"is_custom":false,"name":"component","display_name":"Component","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"TestComponent","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"Component 1","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"Component 2","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"ManualC1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"ManualC2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"content":{"id":52,"type":0,"is_custom":false,"name":"content","display_name":"Content","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"creation_ts":{"id":33,"type":0,"is_custom":false,"name":"creation_ts","display_name":"Creation date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"days_elapsed":{"id":59,"type":0,"is_custom":false,"name":"days_elapsed","display_name":"Days since bug changed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"deadline":{"id":45,"type":5,"is_custom":false,"name":"deadline","display_name":"Deadline","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"delta_ts":{"id":34,"type":0,"is_custom":false,"name":"delta_ts","display_name":"Last changed date","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"dependson":{"id":23,"type":0,"is_custom":false,"name":"dependson","display_name":"Depends on","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"estimated_time":{"id":43,"type":0,"is_custom":false,"name":"estimated_time","display_name":"Estimated Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"everconfirmed":{"id":39,"type":0,"is_custom":false,"name":"everconfirmed","display_name":"Ever Confirmed","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"flagtypes.name":{"id":47,"type":0,"is_custom":false,"name":"flagtypes.name","display_name":"Flags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"keywords":{"id":11,"type":8,"is_custom":false,"name":"keywords","display_name":"Keywords","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Keyword1","sort_key":0,"is_active":false,"description":"1","is_open":false},{"name":"Keyword2","sort_key":0,"is_active":false,"description":"2","is_open":false}]},"last_visit_ts":{"id":57,"type":5,"is_custom":false,"name":"last_visit_ts","display_name":"Last Visit","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdesc":{"id":35,"type":0,"is_custom":false,"name":"longdesc","display_name":"Comment","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.count":{"id":37,"type":0,"is_custom":false,"name":"longdescs.count","display_name":"Number of Comments","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"longdescs.isprivate":{"id":36,"type":0,"is_custom":false,"name":"longdescs.isprivate","display_name":"Comment is private","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"op_sys":{"id":8,"type":2,"is_custom":false,"name":"op_sys","display_name":"OS/Version","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Windows","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Mac OS","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Linux","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false}]},"owner_idle_time":{"id":54,"type":0,"is_custom":false,"name":"owner_idle_time","display_name":"Time Since Assignee Touched","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"percentage_complete":{"id":51,"type":0,"is_custom":false,"name":"percentage_complete","display_name":"Percentage Complete","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"priority":{"id":14,"type":2,"is_custom":false,"name":"priority","display_name":"Priority","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"Highest","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"High","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Normal","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Low","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Lowest","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"---","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"product":{"id":4,"type":2,"is_custom":false,"name":"product","display_name":"Product","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact":{"id":18,"type":0,"is_custom":false,"name":"qa_contact","display_name":"QAContact","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"qa_contact_realname":{"id":21,"type":0,"is_custom":false,"name":"qa_contact_realname","display_name":"QAContactName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"remaining_time":{"id":44,"type":0,"is_custom":false,"name":"remaining_time","display_name":"Remaining Hours","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"rep_platform":{"id":6,"type":2,"is_custom":false,"name":"rep_platform","display_name":"Platform","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"All","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"PC","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Macintosh","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"Other","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false}]},"reporter":{"id":17,"type":0,"is_custom":false,"name":"reporter","display_name":"ReportedBy","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_accessible":{"id":40,"type":0,"is_custom":false,"name":"reporter_accessible","display_name":"Reporter Accessible","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"reporter_realname":{"id":20,"type":0,"is_custom":false,"name":"reporter_realname","display_name":"ReportedByName","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"requestees.login_name":{"id":48,"type":0,"is_custom":false,"name":"requestees.login_name","display_name":"Flag Requestee","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"resolution":{"id":12,"type":2,"is_custom":false,"name":"resolution","display_name":"Resolution","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"values":[{"name":"","sort_key":100,"visibility_values":[],"is_active":false,"is_open":false},{"name":"FIXED","sort_key":200,"visibility_values":[],"is_active":false,"is_open":false},{"name":"INVALID","sort_key":300,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WONTFIX","sort_key":400,"visibility_values":[],"is_active":false,"is_open":false},{"name":"DUPLICATE","sort_key":500,"visibility_values":[],"is_active":false,"is_open":false},{"name":"WORKSFORME","sort_key":600,"visibility_values":[],"is_active":false,"is_open":false}]},"see_also":{"id":55,"type":7,"is_custom":false,"name":"see_also","display_name":"See Also","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"setters.login_name":{"id":49,"type":0,"is_custom":false,"name":"setters.login_name","display_name":"Flag Setter","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"short_desc":{"id":2,"type":0,"is_custom":false,"name":"short_desc","display_name":"Summary","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[]},"status_whiteboard":{"id":10,"type":0,"is_custom":false,"name":"status_whiteboard","display_name":"Status Whiteboard","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"tag":{"id":56,"type":8,"is_custom":false,"name":"tag","display_name":"Personal Tags","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]},"target_milestone":{"id":32,"type":0,"is_custom":false,"name":"target_milestone","display_name":"Target Milestone","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"---","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"---","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M1.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M2","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M2.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"M3","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"M3.0","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false}]},"version":{"id":5,"type":0,"is_custom":false,"name":"version","display_name":"Version","is_mandatory":true,"is_on_bug_entry":false,"visibility_values":[],"value_field":"product","values":[{"name":"unspecified","sort_key":0,"visibility_values":["TestProduct"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"a","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"b","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"c","sort_key":0,"visibility_values":["Product with Spaces"],"is_active":true,"is_open":false},{"name":"unspecified","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R1.1","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false},{"name":"R2.0","sort_key":0,"visibility_values":["ManualTest"],"is_active":true,"is_open":false}]},"work_time":{"id":50,"type":0,"is_custom":false,"name":"work_time","display_name":"Hours Worked","is_mandatory":false,"is_on_bug_entry":false,"visibility_values":[]}},"products":{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC1","sort_key":0,"is_active":true},{"id":5,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC2","sort_key":0,"is_active":true}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 1","sort_key":0,"is_active":true},{"id":3,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 2","sort_key":0,"is_active":true}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"TestComponent","sort_key":0,"is_active":true}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}},"parameters":{"allowemailchange":"1","attachment_base":"","commentonchange_resolution":"0","commentonduplicate":"0","cookiepath":"/","defaultopsys":"","defaultplatform":"","defaultpriority":"---","defaultseverity":"enhancement","duplicate_or_move_bug_status":"RESOLVED","emailregexpdesc":"A legal address must contain exactly one \u0027@\u0027, and at least one \u0027.\u0027 after the @.","emailsuffix":"","letsubmitterchoosemilestone":"1","letsubmitterchoosepriority":"1","mailfrom":"bugzilla-daemon","maintainer":"admin@mylyn.eclipse.org","maxattachmentsize":"1000","maxlocalattachment":"0","musthavemilestoneonaccept":"0","password_complexity":"no_constraints","rememberlogin":"on","requirelogin":"0","search_allow_no_criteria":"1","urlbase":"","use_see_also":"1","useclassification":"0","usemenuforusers":"0","useqacontact":"1","usestatuswhiteboard":"1","usetargetmilestone":"1"}} \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/products.json b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/products.json
index 5d60ffe08..d72e6559b 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/products.json
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/products.json
@@ -1 +1 @@
-{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"name":"ManualC1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":5,"name":"ManualC2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"name":"Component 1","description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}},{"id":3,"name":"Component 2","description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"name":"TestComponent","description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","sort_key":0,"is_active":true,"flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]}}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}} \ No newline at end of file
+{"ManualTest":{"id":3,"name":"ManualTest","is_active":true,"description":"Product for manual testing","default_milestone":"---","has_unconfirmed":false,"classification":"Unclassified","components":[{"id":4,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC1","sort_key":0,"is_active":true},{"id":5,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"ManualC2","sort_key":0,"is_active":true}],"versions":[{"name":"R1","sort_key":0,"is_active":true},{"name":"R1.1","sort_key":0,"is_active":true},{"name":"R2.0","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1","sort_key":0,"is_active":true},{"name":"M2","sort_key":0,"is_active":true},{"name":"M3","sort_key":0,"is_active":true}]},"Product with Spaces":{"id":2,"name":"Product with Spaces","is_active":true,"description":"Product with Spaces is the renamed Scratch Product.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":2,"description":"1","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 1","sort_key":0,"is_active":true},{"id":3,"description":"2","default_assigned_to":"tests@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"Component 2","sort_key":0,"is_active":true}],"versions":[{"name":"a","sort_key":0,"is_active":true},{"name":"b","sort_key":0,"is_active":true},{"name":"c","sort_key":0,"is_active":true},{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true},{"name":"M1.0","sort_key":0,"is_active":true},{"name":"M2.0","sort_key":0,"is_active":true},{"name":"M3.0","sort_key":0,"is_active":true}]},"TestProduct":{"id":1,"name":"TestProduct","is_active":true,"description":"This is a test product. This ought to be blown away and replaced with real stuff in a finished installation of bugzilla.","default_milestone":"---","has_unconfirmed":true,"classification":"Unclassified","components":[{"id":1,"description":"This is a test component in the test product database. This ought to be blown away and replaced with real stuff in a finished installation of Bugzilla.","default_assigned_to":"admin@mylyn.eclipse.org","default_qa_contact":"","flag_types":{"bug":[{"id":1,"name":"BugFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":false,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":2,"name":"BugFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":false,"grant_group":0,"request_group":0},{"id":5,"name":"BugFlag3","description":"3","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":false,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":6,"name":"BugFlag4","description":"4","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}],"attachment":[{"id":3,"name":"AttachmentFlag1","description":"1","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0},{"id":4,"name":"AttachmentFlag2","description":"2","cc_list":"","sort_key":1,"is_active":true,"is_requestable":true,"is_requesteeble":true,"is_multiplicable":true,"grant_group":0,"request_group":0}]},"name":"TestComponent","sort_key":0,"is_active":true}],"versions":[{"name":"unspecified","sort_key":0,"is_active":true}],"milestones":[{"name":"---","sort_key":0,"is_active":true}]}} \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData.txt b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData.txt
new file mode 100644
index 000000000..024c77784
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData.txt
@@ -0,0 +1,26 @@
+TaskAttribute[id=root,values=[],options=null,metaData=null]
+ TaskAttribute[id=task.common.product,values=[],options={TestProduct=TestProduct, Product with Spaces=Product with Spaces, ManualTest=ManualTest},metaData={task.meta.label=Product, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true}]
+ TaskAttribute[id=task.common.component,values=[],options={TestComponent=TestComponent, Component 1=Component 1, Component 2=Component 2, ManualC1=ManualC1, ManualC2=ManualC2},metaData={task.meta.label=Component, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.summary,values=[],options=null,metaData={task.meta.label=Summary, task.meta.type=shortRichText, task.meta.readOnly=false, task.meta.required=true}]
+ TaskAttribute[id=task.common.version,values=[],options={unspecified=unspecified, a=a, b=b, c=c, R1=R1, R1.1=R1.1, R2.0=R2.0},metaData={task.meta.label=Version, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.description,values=[],options=null,metaData={task.meta.label=Description, task.meta.type=longRichText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.description, task.meta.required=true}]
+ TaskAttribute[id=os,values=[All],options={All=All, Windows=Windows, Mac OS=Mac OS, Linux=Linux, Other=Other},metaData={task.meta.label=OS, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=platform,values=[All],options={All=All, PC=PC, Macintosh=Macintosh, Other=Other},metaData={task.meta.label=Platform, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.priority,values=[---],options={Highest=Highest, High=High, Normal=Normal, Low=Low, Lowest=Lowest, ---=---},metaData={task.meta.label=Priority, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.severity,values=[enhancement],options={blocker=blocker, critical=critical, major=major, normal=normal, minor=minor, trivial=trivial, enhancement=enhancement},metaData={task.meta.label=Severity, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=alias,values=[],options=null,metaData={task.meta.label=Alias, task.meta.type=shortText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.user.assigned,values=[],options=null,metaData={task.meta.label=Assigned to, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=task.common.user.cc,values=[],options=null,metaData={task.meta.label=CC, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=task.common.addselfcc,values=[],options=null,metaData={task.meta.label=Add Self to CC, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=comment_is_private,values=[],options=null,metaData={task.meta.label=Description is private, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=qa_contact,values=[],options=null,metaData={task.meta.label=QA Contact, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=target_milestone,values=[],options={---=---, M1=M1, M1.0=M1.0, M2=M2, M2.0=M2.0, M3=M3, M3.0=M3.0},metaData={task.meta.label=Target milestone, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.resolution,values=[],options={=, FIXED=FIXED, INVALID=INVALID, WONTFIX=WONTFIX, DUPLICATE=DUPLICATE, WORKSFORME=WORKSFORME},metaData={task.meta.label=Resolution, task.meta.type=singleSelect, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=task.common.operation,values=[],options=null,metaData={task.meta.label=Operation, task.meta.type=operation, task.meta.readOnly=false, task.meta.required=false}]
+ TaskAttribute[id=task.common.status,values=[],options={UNCONFIRMED=UNCONFIRMED, CONFIRMED=CONFIRMED, IN_PROGRESS=IN_PROGRESS},metaData={task.meta.label=Status, task.meta.type=shortText, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=cf_bugid,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=integer, task.meta.required=false, task.meta.label=bug id custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_datetime,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=dateTime, task.meta.required=false, task.meta.label=date time custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_dropdown,values=[],options={---=---, one=one, three=three, two=two},metaData={task.meta.readOnly=false, task.meta.type=singleSelect, task.meta.required=true, task.meta.label=drop down custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_freetext,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=shortText, task.meta.required=false, task.meta.label=free text custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_largetextbox,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=longText, task.meta.required=false, task.meta.label=large text box custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_multiselect,values=[],options={Blue=Blue, Green=Green, Red=Red, Yellow=Yellow},metaData={task.meta.readOnly=false, task.meta.type=multiSelect, task.meta.required=false, task.meta.label=multi selection box custom field, task.meta.attributeKind=task.common.kind.default}] \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData1.txt b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData1.txt
new file mode 100644
index 000000000..93fb7ef4f
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData1.txt
@@ -0,0 +1,26 @@
+TaskAttribute[id=root,values=[],options=null,metaData=null]
+ TaskAttribute[id=task.common.product,values=[],options={TestProduct=TestProduct, Product with Spaces=Product with Spaces, ManualTest=ManualTest},metaData={task.meta.label=Product, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true}]
+ TaskAttribute[id=task.common.component,values=[],options={TestComponent=TestComponent, Component 1=Component 1, Component 2=Component 2, ManualC1=ManualC1, ManualC2=ManualC2},metaData={task.meta.label=Component, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.summary,values=[The Summary],options=null,metaData={task.meta.label=Summary, task.meta.type=shortRichText, task.meta.readOnly=false, task.meta.required=true}]
+ TaskAttribute[id=task.common.version,values=[],options={unspecified=unspecified, a=a, b=b, c=c, R1=R1, R1.1=R1.1, R2.0=R2.0},metaData={task.meta.label=Version, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.description,values=[The Description],options=null,metaData={task.meta.label=Description, task.meta.type=longRichText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.description, task.meta.required=true}]
+ TaskAttribute[id=os,values=[All],options={All=All, Windows=Windows, Mac OS=Mac OS, Linux=Linux, Other=Other},metaData={task.meta.label=OS, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=platform,values=[All],options={All=All, PC=PC, Macintosh=Macintosh, Other=Other},metaData={task.meta.label=Platform, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.priority,values=[---],options={Highest=Highest, High=High, Normal=Normal, Low=Low, Lowest=Lowest, ---=---},metaData={task.meta.label=Priority, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.severity,values=[enhancement],options={blocker=blocker, critical=critical, major=major, normal=normal, minor=minor, trivial=trivial, enhancement=enhancement},metaData={task.meta.label=Severity, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=alias,values=[],options=null,metaData={task.meta.label=Alias, task.meta.type=shortText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.user.assigned,values=[],options=null,metaData={task.meta.label=Assigned to, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=task.common.user.cc,values=[],options=null,metaData={task.meta.label=CC, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=task.common.addselfcc,values=[],options=null,metaData={task.meta.label=Add Self to CC, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=comment_is_private,values=[],options=null,metaData={task.meta.label=Description is private, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=qa_contact,values=[],options=null,metaData={task.meta.label=QA Contact, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=target_milestone,values=[],options={---=---, M1=M1, M1.0=M1.0, M2=M2, M2.0=M2.0, M3=M3, M3.0=M3.0},metaData={task.meta.label=Target milestone, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.resolution,values=[],options={=, FIXED=FIXED, INVALID=INVALID, WONTFIX=WONTFIX, DUPLICATE=DUPLICATE, WORKSFORME=WORKSFORME},metaData={task.meta.label=Resolution, task.meta.type=singleSelect, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=task.common.operation,values=[],options=null,metaData={task.meta.label=Operation, task.meta.type=operation, task.meta.readOnly=false, task.meta.required=false}]
+ TaskAttribute[id=task.common.status,values=[],options={UNCONFIRMED=UNCONFIRMED, CONFIRMED=CONFIRMED, IN_PROGRESS=IN_PROGRESS},metaData={task.meta.label=Status, task.meta.type=shortText, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=cf_bugid,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=integer, task.meta.required=false, task.meta.label=bug id custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_datetime,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=dateTime, task.meta.required=false, task.meta.label=date time custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_dropdown,values=[],options={---=---, one=one, three=three, two=two},metaData={task.meta.readOnly=false, task.meta.type=singleSelect, task.meta.required=true, task.meta.label=drop down custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_freetext,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=shortText, task.meta.required=false, task.meta.label=free text custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_largetextbox,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=longText, task.meta.required=false, task.meta.label=large text box custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_multiselect,values=[],options={Blue=Blue, Green=Green, Red=Red, Yellow=Yellow},metaData={task.meta.readOnly=false, task.meta.type=multiSelect, task.meta.required=false, task.meta.label=multi selection box custom field, task.meta.attributeKind=task.common.kind.default}] \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData2.txt b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData2.txt
new file mode 100644
index 000000000..196328e57
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core.tests/testdata/Version2/taskData2.txt
@@ -0,0 +1,26 @@
+TaskAttribute[id=root,values=[],options=null,metaData=null]
+ TaskAttribute[id=task.common.product,values=[TestProduct],options={TestProduct=TestProduct, Product with Spaces=Product with Spaces, ManualTest=ManualTest},metaData={task.meta.label=Product, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true}]
+ TaskAttribute[id=task.common.component,values=[TestComponent],options={TestComponent=TestComponent},metaData={task.meta.label=Component, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.summary,values=[],options=null,metaData={task.meta.label=Summary, task.meta.type=shortRichText, task.meta.readOnly=false, task.meta.required=true}]
+ TaskAttribute[id=task.common.version,values=[unspecified],options={unspecified=unspecified},metaData={task.meta.label=Version, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=true, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.description,values=[],options=null,metaData={task.meta.label=Description, task.meta.type=longRichText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.description, task.meta.required=true}]
+ TaskAttribute[id=os,values=[All],options={All=All, Windows=Windows, Mac OS=Mac OS, Linux=Linux, Other=Other},metaData={task.meta.label=OS, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=platform,values=[All],options={All=All, PC=PC, Macintosh=Macintosh, Other=Other},metaData={task.meta.label=Platform, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.priority,values=[---],options={Highest=Highest, High=High, Normal=Normal, Low=Low, Lowest=Lowest, ---=---},metaData={task.meta.label=Priority, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.severity,values=[enhancement],options={blocker=blocker, critical=critical, major=major, normal=normal, minor=minor, trivial=trivial, enhancement=enhancement},metaData={task.meta.label=Severity, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=alias,values=[],options=null,metaData={task.meta.label=Alias, task.meta.type=shortText, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=task.common.user.assigned,values=[],options=null,metaData={task.meta.label=Assigned to, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=task.common.user.cc,values=[],options=null,metaData={task.meta.label=CC, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=task.common.addselfcc,values=[],options=null,metaData={task.meta.label=Add Self to CC, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false}]
+ TaskAttribute[id=comment_is_private,values=[],options=null,metaData={task.meta.label=Description is private, task.meta.type=boolean, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false}]
+ TaskAttribute[id=qa_contact,values=[],options=null,metaData={task.meta.label=QA Contact, task.meta.type=person, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.people, task.meta.required=false, task.meta.dependson.attribute=task.common.component}]
+ TaskAttribute[id=target_milestone,values=[---],options={---=---},metaData={task.meta.label=Target milestone, task.meta.type=singleSelect, task.meta.readOnly=false, task.meta.attributeKind=task.common.kind.default, task.meta.required=false, task.meta.dependson.attribute=task.common.product}]
+ TaskAttribute[id=task.common.resolution,values=[],options={=, FIXED=FIXED, INVALID=INVALID, WONTFIX=WONTFIX, DUPLICATE=DUPLICATE, WORKSFORME=WORKSFORME},metaData={task.meta.label=Resolution, task.meta.type=singleSelect, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=task.common.operation,values=[],options=null,metaData={task.meta.label=Operation, task.meta.type=operation, task.meta.readOnly=false, task.meta.required=false}]
+ TaskAttribute[id=task.common.status,values=[],options={UNCONFIRMED=UNCONFIRMED, CONFIRMED=CONFIRMED, IN_PROGRESS=IN_PROGRESS},metaData={task.meta.label=Status, task.meta.type=shortText, task.meta.readOnly=true, task.meta.required=false}]
+ TaskAttribute[id=cf_bugid,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=integer, task.meta.required=false, task.meta.label=bug id custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_datetime,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=dateTime, task.meta.required=false, task.meta.label=date time custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_dropdown,values=[],options={---=---, one=one, three=three, two=two},metaData={task.meta.readOnly=false, task.meta.type=singleSelect, task.meta.required=true, task.meta.label=drop down custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_freetext,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=shortText, task.meta.required=false, task.meta.label=free text custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_largetextbox,values=[],options=null,metaData={task.meta.readOnly=false, task.meta.type=longText, task.meta.required=false, task.meta.label=large text box custom field, task.meta.attributeKind=task.common.kind.default}]
+ TaskAttribute[id=cf_multiselect,values=[],options={Blue=Blue, Green=Green, Red=Red, Yellow=Yellow},metaData={task.meta.readOnly=false, task.meta.type=multiSelect, task.meta.required=false, task.meta.label=multi selection box custom field, task.meta.attributeKind=task.common.kind.default}] \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConfiguration.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConfiguration.java
index 87fb1571f..19d4b8225 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConfiguration.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConfiguration.java
@@ -12,11 +12,24 @@
package org.eclipse.mylyn.internal.bugzilla.rest.core;
import java.io.Serializable;
+import java.util.ArrayList;
+import java.util.List;
import java.util.Map;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.core.runtime.Status;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.Component;
import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.Field;
+import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.FieldValues;
import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.Parameters;
import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.Product;
+import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.SortableActiveEntry;
+import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.StatusTransition;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
+import org.eclipse.mylyn.tasks.core.data.TaskOperation;
import com.google.common.base.Function;
import com.google.common.base.Functions;
@@ -25,7 +38,7 @@ import com.google.common.collect.Ordering;
public class BugzillaRestConfiguration implements Serializable {
- private static final long serialVersionUID = 4078343382335204804L;
+ private static final long serialVersionUID = 4173223872076958202L;
private final String repositoryId;
@@ -89,4 +102,309 @@ public class BugzillaRestConfiguration implements Serializable {
return parameters;
}
-}
+ private Component getProductComponentWithName(Product product, String name) {
+ for (Component componentEntry : product.getComponents()) {
+ if (componentEntry.getName().equals(name)) {
+ return componentEntry;
+ }
+ }
+ return null;
+ }
+
+ public void updateInitialTaskData(TaskData data) throws CoreException {
+ for (String key : data.getRoot().getAttributes().keySet()) {
+ if (key.equals(BugzillaRestTaskSchema.getDefault().ADD_SELF_CC.getKey())
+ || key.equals(BugzillaRestTaskSchema.getDefault().NEW_COMMENT.getKey())
+ || key.equals(TaskAttribute.OPERATION)) {
+ continue;
+ }
+ TaskAttribute attribute = data.getRoot().getAttribute(key);
+ if (key.equals(BugzillaRestCreateTaskSchema.getDefault().PRODUCT.getKey())) {
+ List<String> products = new ArrayList<String>();
+ Field configFieldComponent = getFieldWithName("component");
+ FieldValues[] val = configFieldComponent.getValues();
+ if (val != null && val.length > 0) {
+ for (FieldValues fieldValues : val) {
+ fieldValues.getVisibilityValues();
+ for (String visibilityValue : fieldValues.getVisibilityValues()) {
+ if (!products.contains(visibilityValue)) {
+ products.add(visibilityValue);
+ }
+ }
+ }
+ attribute.clearOptions();
+ for (String productName : products) {
+ attribute.putOption(productName, productName);
+ }
+ }
+ } else {
+ String configName = mapTaskAttributeKey2ConfigurationFields(key);
+ Field configField = getFieldWithName(configName);
+ if (configField == null) {
+ continue;
+ }
+ FieldValues[] val = configField.getValues();
+ if (val != null && val.length > 0) {
+ for (FieldValues fieldValues : val) {
+ if (configName.equals("bug_status")) {
+ if (fieldValues.getName() == null) {
+ for (StatusTransition bugzillaRestBugStatusTransition : fieldValues.getCanChangeTo()) {
+ attribute.putOption(bugzillaRestBugStatusTransition.getName(),
+ bugzillaRestBugStatusTransition.getName());
+ }
+ }
+ } else if (configName.equals("component") || configName.equals("version")
+ || configName.equals("target_milestone")) {
+ TaskAttribute productAttribute = data.getRoot()
+ .getAttribute(BugzillaRestCreateTaskSchema.getDefault().PRODUCT.getKey());
+ String productValue = productAttribute.getValue();
+ for (String visibilityValue : fieldValues.getVisibilityValues()) {
+ if (visibilityValue.equals(productValue) || productValue.equals("")) {
+ attribute.putOption(fieldValues.getName(), fieldValues.getName());
+ }
+ }
+ } else {
+ attribute.putOption(fieldValues.getName(), fieldValues.getName());
+ }
+
+ }
+ if ((configName.equals("component") || configName.equals("version")
+ || configName.equals("target_milestone")) && attribute.getOptions().size() == 1
+ && attribute.getValue().equals("")) {
+ attribute.setValue((String) attribute.getOptions().values().toArray()[0]);
+ }
+ if ("".equals(attribute.getValue())) {
+ attribute.setValue(getValueFromParameter(key));
+ }
+ }
+ }
+ }
+ for (Field Field : fields.values()) {
+ if (Field.isCustom() && Field.isOnBugEntry()) {
+ TaskAttribute attribute = data.getRoot().createAttribute(Field.getName());
+ if (attribute != null) {
+ attribute.getMetaData().defaults().setLabel(Field.getDisplayName());
+ attribute.getMetaData().setKind(TaskAttribute.KIND_DEFAULT);
+ String type = getAttributeTypFromFieldTyp(Field.getType());
+ attribute.getMetaData().setType(type);
+ if (type.equals(TaskAttribute.TYPE_SINGLE_SELECT)) {
+ attribute.getMetaData().setRequired(true);
+ }
+
+ FieldValues[] values1 = Field.getValues();
+ if (values1 != null) {
+ for (FieldValues FieldValues : values1) {
+ attribute.putOption(FieldValues.getName(), FieldValues.getName());
+ }
+ }
+ attribute.getMetaData().setReadOnly(false);
+ }
+ }
+ }
+ }
+
+ private String getValueFromParameter(String attributeId) {
+ if (attributeId.equals(TaskAttribute.PRIORITY)) {
+ return getParameters().getDefaultpriority();
+ } else if (attributeId.equals(TaskAttribute.SEVERITY)) {
+ return getParameters().getDefaultseverity();
+ } else if (attributeId.equals("platform")) {
+ if (getParameters().getDefaultplatform() == null || getParameters().getDefaultplatform().equals("")) {
+ return "All";
+ } else {
+ return getParameters().getDefaultplatform();
+ }
+ } else if (attributeId.equals("os")) {
+ if (getParameters().getDefaultopsys() == null || getParameters().getDefaultopsys().equals("")) {
+ return "All";
+ } else {
+ return getParameters().getDefaultopsys();
+ }
+ }
+ return "";
+ }
+
+ private String getAttributeTypFromFieldTyp(int fieldTyp) throws CoreException {
+ switch (fieldTyp) {
+ case 1://Free Text
+ return TaskAttribute.TYPE_SHORT_TEXT;
+ case 2: //DropDown
+ return TaskAttribute.TYPE_SINGLE_SELECT;
+ case 3: //Multiple-Selection Box
+ return TaskAttribute.TYPE_MULTI_SELECT;
+ case 4: //Large Text Box
+ return TaskAttribute.TYPE_LONG_TEXT;
+ case 5: //Date/Time
+ return TaskAttribute.TYPE_DATETIME;
+ case 6: //Bug Id
+ return TaskAttribute.TYPE_INTEGER;
+ case 7: //Bug URLs
+ return TaskAttribute.TYPE_URL;
+ default:
+ Status status = new Status(IStatus.INFO, BugzillaRestCore.ID_PLUGIN,
+ "unknown custom field type " + fieldTyp);
+ StatusHandler.log(status);
+ throw new CoreException(status);
+ }
+ }
+
+ private String mapTaskAttributeKey2ConfigurationFields(String taskAttributeKey) {
+ String resultString;
+ if (taskAttributeKey.equals("task.common.summary")) {
+ resultString = "short_desc";
+ } else if (taskAttributeKey.equals(TaskAttribute.PRODUCT) //
+ || taskAttributeKey.equals(TaskAttribute.RESOLUTION) //
+ || taskAttributeKey.equals(TaskAttribute.PRIORITY) //
+ || taskAttributeKey.equals(TaskAttribute.COMPONENT) //
+ || taskAttributeKey.equals(TaskAttribute.VERSION)) {
+ resultString = taskAttributeKey.substring(12);
+ } else if (taskAttributeKey.equals(TaskAttribute.STATUS)) {
+ resultString = "bug_status";
+ } else if (taskAttributeKey.equals(TaskAttribute.USER_ASSIGNED)) {
+ resultString = "assigned_to";
+ } else if (taskAttributeKey.equals(TaskAttribute.USER_CC)) {
+ resultString = "cc";
+ } else if (taskAttributeKey.equals(TaskAttribute.DESCRIPTION)) {
+ resultString = "longdesc";
+ } else if (taskAttributeKey.equals("comment_is_private")) {
+ resultString = "longdescs.isprivate";
+ } else if (taskAttributeKey.equals("os")) {
+ resultString = "op_sys";
+ } else if (taskAttributeKey.equals("platform")) {
+ resultString = "rep_platform";
+ } else if (taskAttributeKey.equals(TaskAttribute.SEVERITY)) {
+ resultString = "bug_severity";
+ } else if (taskAttributeKey.equals("comment")) {
+ resultString = "longdesc";
+ } else {
+ resultString = taskAttributeKey;
+ }
+ return resultString;
+ }
+
+ private void setAttributeOptionsForProduct(TaskAttribute taskAttribute, Product actualProduct) {
+ taskAttribute.clearOptions();
+ if (taskAttribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().TARGET_MILESTONE.getKey())) {
+ internalSetAttributeOptions(taskAttribute, actualProduct.getMilestones());
+ } else if (taskAttribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().VERSION.getKey())) {
+ internalSetAttributeOptions(taskAttribute, actualProduct.getVersions());
+ } else if (taskAttribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().COMPONENT.getKey())) {
+ internalSetAttributeOptions(taskAttribute, actualProduct.getComponents());
+ }
+ }
+
+ private void internalSetAttributeOptions(TaskAttribute taskAttribute, SortableActiveEntry[] actualProductEntry) {
+ boolean found = false;
+ String actualValue = taskAttribute.getValue();
+ for (SortableActiveEntry SortableActiveEntry : actualProductEntry) {
+ if (SortableActiveEntry.isActive()) {
+ taskAttribute.putOption(SortableActiveEntry.getName(), SortableActiveEntry.getName());
+ if (!found) {
+ found = actualValue.equals(SortableActiveEntry.getName());
+ }
+ }
+ }
+ if (!found) {
+ taskAttribute.setValue(""); //$NON-NLS-1$
+ }
+ }
+
+ public boolean updateAfterComponentChange(TaskAttribute taskAttribute) {
+ if (taskAttribute != null) {
+ if (taskAttribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().COMPONENT.getKey())) {
+ TaskAttribute rootAttribute = taskAttribute.getTaskData().getRoot();
+ TaskAttribute productAttribute = taskAttribute.getTaskData()
+ .getRoot()
+ .getMappedAttribute(BugzillaRestCreateTaskSchema.getDefault().PRODUCT.getKey());
+ Product actualProduct = getProductWithName(productAttribute.getValue());
+ Component actualComponent = getProductComponentWithName(actualProduct, taskAttribute.getValue());
+ if (actualComponent != null) {
+ taskAttribute.getMetaData().putValue(TaskAttribute.META_DESCRIPTION,
+ actualComponent.getDescription());
+ TaskAttribute attributeQaContact = rootAttribute
+ .getMappedAttribute(BugzillaRestCreateTaskSchema.getDefault().QA_CONTACT.getKey());
+ if (attributeQaContact != null) {
+ attributeQaContact.setValue(actualComponent.getDefaultQaContact());
+ }
+ TaskAttribute attributeAssignedTo = rootAttribute
+ .getMappedAttribute(BugzillaRestCreateTaskSchema.getDefault().ASSIGNED_TO.getKey());
+ if (attributeAssignedTo != null) {
+ attributeAssignedTo.setValue(actualComponent.getDefaultAssignedTo());
+ }
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public boolean updateProductOptions(TaskAttribute taskAttribute) {
+ if (taskAttribute != null) {
+ if (taskAttribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().PRODUCT.getKey())) {
+ TaskAttribute rootAttribute = taskAttribute.getTaskData().getRoot();
+ Product actualProduct = getProductWithName(taskAttribute.getValue());
+
+ TaskAttribute attributeComponent = rootAttribute
+ .getMappedAttribute(BugzillaRestCreateTaskSchema.getDefault().COMPONENT.getKey());
+ if (attributeComponent != null) {
+ setAttributeOptionsForProduct(attributeComponent, actualProduct);
+ }
+ TaskAttribute attributeVersion = rootAttribute
+ .getMappedAttribute(BugzillaRestCreateTaskSchema.getDefault().VERSION.getKey());
+ if (attributeVersion != null) {
+ setAttributeOptionsForProduct(attributeVersion, actualProduct);
+ }
+ TaskAttribute attributeTargetMilestone = rootAttribute
+ .getMappedAttribute(BugzillaRestCreateTaskSchema.getDefault().TARGET_MILESTONE.getKey());
+ if (attributeTargetMilestone != null) {
+ setAttributeOptionsForProduct(attributeTargetMilestone, actualProduct);
+ }
+ }
+ return true;
+ }
+ return false;
+ }
+
+ public void addValidOperations(TaskData bugReport) {
+ TaskAttribute attributeStatus = bugReport.getRoot().getMappedAttribute(TaskAttribute.STATUS);
+ String attributeStatusValue = attributeStatus.getValue();
+ TaskAttribute operationAttribute = bugReport.getRoot().getAttribute(TaskAttribute.OPERATION);
+ if (operationAttribute == null) {
+ operationAttribute = bugReport.getRoot().createAttribute(TaskAttribute.OPERATION);
+ }
+ TaskAttribute attribute = bugReport.getRoot()
+ .createAttribute(TaskAttribute.PREFIX_OPERATION + attributeStatusValue);
+ TaskOperation.applyTo(attribute, attributeStatusValue, attributeStatusValue);
+ // set as default
+ TaskOperation.applyTo(operationAttribute, attributeStatusValue, attributeStatusValue);
+ Field status = getFieldWithName("bug_status");
+ for (FieldValues fieldValues : status.getValues()) {
+ if (((attributeStatusValue == null || attributeStatusValue.equals("")) && fieldValues.getName() == null)
+ || (attributeStatusValue != null && attributeStatusValue.equals(fieldValues.getName()))) {
+ for (StatusTransition statusTransition : fieldValues.getCanChangeTo()) {
+ attribute = bugReport.getRoot()
+ .createAttribute(TaskAttribute.PREFIX_OPERATION + statusTransition.name);
+ TaskOperation.applyTo(attribute, statusTransition.name, statusTransition.name);
+ if (statusTransition.name != null && statusTransition.name.equals("RESOLVED")) {
+ TaskAttribute attrResolvedInput = attribute.getTaskData()
+ .getRoot()
+ .createAttribute("resolutionInput");
+ attrResolvedInput.getMetaData().setType(TaskAttribute.TYPE_SINGLE_SELECT);
+ attribute.getMetaData().putValue(TaskAttribute.META_ASSOCIATED_ATTRIBUTE_ID, "resolutionInput");
+ Field resolution = getFieldWithName("resolution");
+ for (FieldValues resolutionValues : resolution.getValues()) {
+ if (resolutionValues.getName().compareTo("DUPLICATE") != 0) {
+ attrResolvedInput.putOption(resolutionValues.getName(), resolutionValues.getName());
+ }
+ }
+ }
+ }
+ }
+ }
+ attribute = bugReport.getRoot().createAttribute(TaskAttribute.PREFIX_OPERATION + "duplicate");
+ TaskOperation.applyTo(attribute, "duplicate", "Mark as Duplicate");
+ TaskAttribute attrResolvedInput = attribute.getTaskData().getRoot().createAttribute("dup_id");
+ attrResolvedInput.getMetaData().setType(TaskAttribute.TYPE_TASK_DEPENDENCY);
+ attribute.getMetaData().putValue(TaskAttribute.META_ASSOCIATED_ATTRIBUTE_ID, "dup_id");
+ }
+} \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConnector.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConnector.java
index 2de0da3a3..7fb1e1e2b 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConnector.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestConnector.java
@@ -14,8 +14,6 @@ package org.eclipse.mylyn.internal.bugzilla.rest.core;
import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.util.concurrent.ExecutionException;
-import java.util.concurrent.ExecutorService;
-import java.util.concurrent.Executors;
import java.util.concurrent.TimeUnit;
import org.eclipse.core.runtime.CoreException;
@@ -56,8 +54,6 @@ public class BugzillaRestConnector extends AbstractRepositoryConnector {
public static final Duration CONFIGURATION_CACHE_REFRESH_AFTER_WRITE_DURATION = new Duration(1, TimeUnit.DAYS);
- private final ExecutorService executor = Executors.newFixedThreadPool(3);
-
private static final ThreadLocal<IOperationMonitor> context = new ThreadLocal<IOperationMonitor>();
private boolean ignoredProperty(String propertyName) {
@@ -135,7 +131,8 @@ public class BugzillaRestConnector extends AbstractRepositoryConnector {
public ListenableFuture<Optional<BugzillaRestConfiguration>> reload(final RepositoryKey key,
Optional<BugzillaRestConfiguration> oldValue) throws Exception {
// asynchronous!
- ListenableFutureJob<Optional<BugzillaRestConfiguration>> job = new ListenableFutureJob("") {
+ ListenableFutureJob<Optional<BugzillaRestConfiguration>> job = new ListenableFutureJob<Optional<BugzillaRestConfiguration>>(
+ "") {
@Override
protected IStatus run(IProgressMonitor monitor) {
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestCreateTaskSchema.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestCreateTaskSchema.java
new file mode 100644
index 000000000..2e83dda91
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestCreateTaskSchema.java
@@ -0,0 +1,73 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Frank Becker and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Frank Becker - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.bugzilla.rest.core;
+
+import org.eclipse.mylyn.tasks.core.data.AbstractTaskSchema;
+import org.eclipse.mylyn.tasks.core.data.DefaultTaskSchema;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+
+public class BugzillaRestCreateTaskSchema extends AbstractTaskSchema {
+
+ private static final BugzillaRestCreateTaskSchema instance = new BugzillaRestCreateTaskSchema();
+
+ public static BugzillaRestCreateTaskSchema getDefault() {
+ return instance;
+ }
+
+ private final DefaultTaskSchema parent = DefaultTaskSchema.getInstance();
+
+ public final Field PRODUCT = inheritFrom(parent.PRODUCT).addFlags(Flag.REQUIRED).create();
+
+ public final Field COMPONENT = inheritFrom(parent.COMPONENT).addFlags(Flag.REQUIRED)
+ .dependsOn(PRODUCT.getKey())
+ .create();
+
+ public final Field SUMMARY = inheritFrom(parent.SUMMARY).addFlags(Flag.REQUIRED).create();
+
+ public final Field VERSION = createField(TaskAttribute.VERSION, "Version", TaskAttribute.TYPE_SINGLE_SELECT, null,
+ PRODUCT.getKey(), Flag.ATTRIBUTE, Flag.REQUIRED);
+
+ public final Field DESCRIPTION = inheritFrom(parent.DESCRIPTION).addFlags(Flag.REQUIRED).create();
+
+ public final Field OS = createField("os", "OS", TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+
+ public final Field PLATFORM = createField("platform", "Platform", TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+
+ public final Field PRIORITY = inheritFrom(parent.PRIORITY).create();
+
+ public final Field SEVERITY = inheritFrom(parent.SEVERITY).create();
+
+ public final Field ALIAS = createField("alias", "Alias", TaskAttribute.TYPE_SHORT_TEXT, Flag.ATTRIBUTE);
+
+ public final Field ASSIGNED_TO = inheritFrom(parent.USER_ASSIGNED).label("Assigned to")
+ .dependsOn(COMPONENT.getKey())
+ .create();
+
+ public final Field CC = createField(TaskAttribute.USER_CC, "CC", TaskAttribute.TYPE_PERSON, Flag.PEOPLE);
+
+ public final Field ADD_SELF_CC = inheritFrom(parent.ADD_SELF_CC).addFlags(Flag.PEOPLE).create();
+
+ public final Field COMMENT_IS_PRIVATE = createField("comment_is_private", "Description is private",
+ TaskAttribute.TYPE_BOOLEAN, Flag.ATTRIBUTE);
+
+ public final Field QA_CONTACT = createField("qa_contact", "QA Contact", TaskAttribute.TYPE_PERSON, null,
+ COMPONENT.getKey(), Flag.PEOPLE);
+
+ public final Field TARGET_MILESTONE = createField("target_milestone", "Target milestone",
+ TaskAttribute.TYPE_SINGLE_SELECT, null, PRODUCT.getKey(), Flag.ATTRIBUTE);
+
+ public final Field RESOLUTION = inheritFrom(parent.RESOLUTION).create();
+
+ public final Field OPERATION = createField(TaskAttribute.OPERATION, "Operation", TaskAttribute.TYPE_OPERATION);
+
+ public final Field STATUS = inheritFrom(parent.STATUS).create();
+}
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskAttributeMapper.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskAttributeMapper.java
new file mode 100644
index 000000000..8c4535ab8
--- /dev/null
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskAttributeMapper.java
@@ -0,0 +1,87 @@
+/*******************************************************************************
+ * Copyright (c) 2015 Frank Becker and others.
+ * All rights reserved. This program and the accompanying materials
+ * are made available under the terms of the Eclipse Public License v1.0
+ * which accompanies this distribution, and is available at
+ * http://www.eclipse.org/legal/epl-v10.html
+ *
+ * Contributors:
+ * Frank Becker - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.bugzilla.rest.core;
+
+import java.util.Map;
+
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jdt.annotation.NonNull;
+import org.eclipse.mylyn.commons.core.StatusHandler;
+import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.Product;
+import org.eclipse.mylyn.internal.bugzilla.rest.core.response.data.SortableActiveEntry;
+import org.eclipse.mylyn.tasks.core.RepositoryStatus;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
+
+public class BugzillaRestTaskAttributeMapper extends TaskAttributeMapper {
+
+ private final BugzillaRestConnector connector;
+
+ public BugzillaRestTaskAttributeMapper(TaskRepository taskRepository, BugzillaRestConnector connector) {
+ super(taskRepository);
+ this.connector = connector;
+ }
+
+ @Override
+ public Map<String, String> getOptions(@NonNull TaskAttribute attribute) {
+ if (attribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().TARGET_MILESTONE.getKey())
+ || attribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().VERSION.getKey())
+ || attribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().COMPONENT.getKey())) {
+ TaskAttribute productAttribute = attribute.getParentAttribute()
+ .getAttribute(BugzillaRestCreateTaskSchema.getDefault().PRODUCT.getKey());
+ BugzillaRestConfiguration repositoryConfiguration;
+ try {
+ repositoryConfiguration = connector.getRepositoryConfiguration(this.getTaskRepository());
+ if (repositoryConfiguration != null) {
+ if (!productAttribute.getValue().equals("")) { //$NON-NLS-1$
+ Product actualProduct = repositoryConfiguration.getProductWithName(productAttribute.getValue());
+ if (attribute.getId()
+ .equals(BugzillaRestCreateTaskSchema.getDefault().TARGET_MILESTONE.getKey())) {
+ internalSetAttributeOptions(attribute, actualProduct.getMilestones());
+ } else
+ if (attribute.getId().equals(BugzillaRestCreateTaskSchema.getDefault().VERSION.getKey())) {
+ internalSetAttributeOptions(attribute, actualProduct.getVersions());
+ } else if (attribute.getId()
+ .equals(BugzillaRestCreateTaskSchema.getDefault().COMPONENT.getKey())) {
+ internalSetAttributeOptions(attribute, actualProduct.getComponents());
+ }
+ }
+ }
+ } catch (CoreException e) {
+ StatusHandler.log(new RepositoryStatus(getTaskRepository(), IStatus.ERROR, BugzillaRestCore.ID_PLUGIN,
+ 0, "Failed to obtain repository configuration", e)); //$NON-NLS-1$
+ }
+ }
+ return super.getOptions(attribute);
+ }
+
+ private void internalSetAttributeOptions(TaskAttribute taskAttribute, SortableActiveEntry[] actualProductEntry) {
+ boolean found = false;
+ String actualValue = taskAttribute.getValue();
+ taskAttribute.clearOptions();
+ for (SortableActiveEntry SortableActiveEntry : actualProductEntry) {
+ if (SortableActiveEntry.isActive()) {
+ // TODO: remove when we have offline cache for the repository configuration
+ taskAttribute.putOption(SortableActiveEntry.getName(), SortableActiveEntry.getName());
+ if (!found) {
+ found = actualValue.equals(SortableActiveEntry.getName());
+ }
+ }
+ }
+ if (!found) {
+ taskAttribute.setValue(""); //$NON-NLS-1$
+ }
+ }
+
+}
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskDataHandler.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskDataHandler.java
index d99ec950e..99769e47d 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskDataHandler.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskDataHandler.java
@@ -45,16 +45,24 @@ public class BugzillaRestTaskDataHandler extends AbstractTaskDataHandler {
// fresh from the repository (not locally stored data that may not have
// been migrated).
data.setVersion("0"); //$NON-NLS-1$
- BugzillaRestTaskSchema.getDefault().initialize(data);
+ if (data.isNew()) {
+ BugzillaRestCreateTaskSchema.getDefault().initialize(data);
+ } else {
+ BugzillaRestTaskSchema.getDefault().initialize(data);
+ }
if (initializationData != null) {
connector.getTaskMapping(data).merge(initializationData);
}
+ BugzillaRestConfiguration config = connector.getRepositoryConfiguration(repository);
+ if (config != null) {
+ config.updateInitialTaskData(data);
+ }
return true;
}
@Override
public TaskAttributeMapper getAttributeMapper(TaskRepository repository) {
- return new TaskAttributeMapper(repository);
+ return new BugzillaRestTaskAttributeMapper(repository, connector);
}
}
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskSchema.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskSchema.java
index b620c141d..aac11f875 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskSchema.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/BugzillaRestTaskSchema.java
@@ -14,6 +14,7 @@ package org.eclipse.mylyn.internal.bugzilla.rest.core;
import org.eclipse.mylyn.tasks.core.data.AbstractTaskSchema;
import org.eclipse.mylyn.tasks.core.data.DefaultTaskSchema;
import org.eclipse.mylyn.tasks.core.data.TaskAttribute;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
public class BugzillaRestTaskSchema extends AbstractTaskSchema {
@@ -25,15 +26,69 @@ public class BugzillaRestTaskSchema extends AbstractTaskSchema {
private final DefaultTaskSchema parent = DefaultTaskSchema.getInstance();
- public final Field DESCRIPTION = inheritFrom(parent.DESCRIPTION).create();
+ public final Field BUG_ID = createField("bug_id", "ID:", TaskAttribute.TYPE_SHORT_TEXT, Flag.REQUIRED);
- public final Field SUMMARY = inheritFrom(parent.SUMMARY).create();
+ public final Field PRODUCT = inheritFrom(parent.PRODUCT).addFlags(Flag.REQUIRED).create();
+
+ public final Field COMPONENT = inheritFrom(parent.COMPONENT).addFlags(Flag.REQUIRED)
+ .dependsOn(PRODUCT.getKey())
+ .create();
+
+ public final Field SUMMARY = inheritFrom(parent.SUMMARY).addFlags(Flag.REQUIRED).create();
+
+ public final Field VERSION = createField("version", "Version", TaskAttribute.TYPE_SINGLE_SELECT, null,
+ PRODUCT.getKey(), Flag.ATTRIBUTE, Flag.REQUIRED);
+
+ public final Field DESCRIPTION = inheritFrom(parent.DESCRIPTION).addFlags(Flag.REQUIRED, Flag.READ_ONLY).create();
+
+ public final Field OS = createField("os", "OS", TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+
+ public final Field PLATFORM = createField("platform", "Platform", TaskAttribute.TYPE_SINGLE_SELECT, Flag.ATTRIBUTE);
+
+ public final Field PRIORITY = inheritFrom(parent.PRIORITY).create();
+
+ public final Field SEVERITY = inheritFrom(parent.SEVERITY).create();
+
+ public final Field STATUS = inheritFrom(parent.STATUS).create();
+
+ public final Field ALIAS = createField("alias", "Alias", TaskAttribute.TYPE_SHORT_TEXT, Flag.ATTRIBUTE);
+
+ public final Field ASSIGNED_TO = inheritFrom(parent.USER_ASSIGNED).label("Assigned to")
+ .dependsOn(COMPONENT.getKey())
+ .create();
+
+ public final Field CC = createField(TaskAttribute.USER_CC, "CC", TaskAttribute.TYPE_PERSON, Flag.PEOPLE);
+
+ public final Field ADD_SELF_CC = inheritFrom(parent.ADD_SELF_CC).addFlags(Flag.PEOPLE).create();
+
+ public final Field COMMENT_ISPRIVATE = inheritFrom(parent.COMMENT_ISPRIVATE).addFlags(Flag.ATTRIBUTE).create();
+
+ public final Field COMMENT_NUMBER = inheritFrom(parent.COMMENT_NUMBER).addFlags(Flag.ATTRIBUTE).create();
+
+ public final Field QA_CONTACT = createField("qa_contact", "QA Contact", TaskAttribute.TYPE_PERSON, null,
+ COMPONENT.getKey(), Flag.PEOPLE);
public final Field NEW_COMMENT = inheritFrom(parent.NEW_COMMENT).create();
- public final Field COMPONENT = inheritFrom(parent.COMPONENT).create();
+ public final Field RESOLUTION = inheritFrom(parent.RESOLUTION).create();
+
+ public final Field TARGET_MILESTONE = createField("target_milestone", "Target milestone",
+ TaskAttribute.TYPE_SINGLE_SELECT, null, PRODUCT.getKey(), Flag.ATTRIBUTE);
- public final Field DUMMYATTRIBUTE = createField("task.bugzilla.dummy.attribute", "Dummy Attribute", //$NON-NLS-1$ //$NON-NLS-2$
- TaskAttribute.TYPE_SHORT_TEXT, Flag.ATTRIBUTE);
+ public final Field OPERATION = createField(TaskAttribute.OPERATION, "Operation", TaskAttribute.TYPE_OPERATION);
+
+ @Override
+ public void initialize(TaskData taskData) {
+ for (Field field : getFields()) {
+ if (field.equals(COMMENT_ISPRIVATE) || field.equals(COMMENT_NUMBER)) {
+ continue;
+ }
+ TaskAttribute newField = field.createAttribute(taskData.getRoot());
+ if (field.equals(DESCRIPTION)) {
+ COMMENT_ISPRIVATE.createAttribute(newField);
+ COMMENT_NUMBER.createAttribute(newField);
+ }
+ }
+ }
-}
+} \ No newline at end of file
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/response/data/Component.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/response/data/Component.java
index ca52da95c..cf0500cbc 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/response/data/Component.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.core/src/org/eclipse/mylyn/internal/bugzilla/rest/core/response/data/Component.java
@@ -11,35 +11,24 @@
package org.eclipse.mylyn.internal.bugzilla.rest.core.response.data;
-import java.io.Serializable;
+public class Component extends SortableActiveEntry {
-public class Component implements Serializable {
- private static final long serialVersionUID = -3420463254677859338L;
+ private static final long serialVersionUID = -285913855003802343L;
private int id;
- private String name;
-
private String description;
private String default_assigned_to;
private String default_qa_contact;
- private int sort_key;
-
- private boolean is_active;
-
private FlagTypes flag_types;
public int getId() {
return id;
}
- public String getName() {
- return name;
- }
-
public String getDescription() {
return description;
}
@@ -52,14 +41,6 @@ public class Component implements Serializable {
return default_qa_contact;
}
- public int getSortKey() {
- return sort_key;
- }
-
- public boolean isActive() {
- return is_active;
- }
-
public FlagTypes getFlagTypes() {
return flag_types;
}
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.tests/config/local-All-TckTests.launch b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.tests/config/local-All-TckTests.launch
index 2bdd899e3..a118eb253 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.tests/config/local-All-TckTests.launch
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.tests/config/local-All-TckTests.launch
@@ -24,7 +24,7 @@
<stringAttribute key="org.eclipse.jdt.junit.TESTNAME" value=""/>
<stringAttribute key="org.eclipse.jdt.junit.TEST_KIND" value="org.eclipse.jdt.junit.loader.junit4"/>
<booleanAttribute key="org.eclipse.jdt.launching.ATTR_USE_START_ON_FIRST_THREAD" value="true"/>
-<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.6"/>
+<stringAttribute key="org.eclipse.jdt.launching.JRE_CONTAINER" value="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.launching.macosx.MacOSXType/Java SE 7 [1.7.0_71]"/>
<stringAttribute key="org.eclipse.jdt.launching.MAIN_TYPE" value=""/>
<stringAttribute key="org.eclipse.jdt.launching.PROGRAM_ARGUMENTS" value="-os ${target.os} -ws ${target.ws} -arch ${target.arch} -nl ${target.nl} -consoleLog -consolelog"/>
<stringAttribute key="org.eclipse.jdt.launching.PROJECT_ATTR" value="org.eclipse.mylyn.bugzilla.rest.tests"/>
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/META-INF/MANIFEST.MF b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/META-INF/MANIFEST.MF
index a5a3e0266..df91d31de 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/META-INF/MANIFEST.MF
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/META-INF/MANIFEST.MF
@@ -6,6 +6,7 @@ Bundle-Version: 1.0.0.qualifier
Require-Bundle: org.eclipse.core.runtime,
org.eclipse.ui,
org.eclipse.ui.forms,
+ org.eclipse.mylyn.commons.core;bundle-version="3.11.0",
org.eclipse.mylyn.commons.ui;bundle-version="3.11.0",
org.eclipse.mylyn.tasks.ui;bundle-version="3.11.0",
org.eclipse.mylyn.tasks.core;bundle-version="3.11.0",
diff --git a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/src/org/eclipse/mylyn/internal/bugzilla/rest/ui/BugzillaRestTaskEditorPage.java b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/src/org/eclipse/mylyn/internal/bugzilla/rest/ui/BugzillaRestTaskEditorPage.java
index 3d2a9d670..f8e11c321 100644
--- a/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/src/org/eclipse/mylyn/internal/bugzilla/rest/ui/BugzillaRestTaskEditorPage.java
+++ b/connector-bugzilla-rest/org.eclipse.mylyn.bugzilla.rest.ui/src/org/eclipse/mylyn/internal/bugzilla/rest/ui/BugzillaRestTaskEditorPage.java
@@ -16,14 +16,15 @@ import org.eclipse.mylyn.tasks.ui.editors.AbstractTaskEditorPage;
import org.eclipse.mylyn.tasks.ui.editors.TaskEditor;
public class BugzillaRestTaskEditorPage extends AbstractTaskEditorPage {
+
public BugzillaRestTaskEditorPage(TaskEditor editor) {
this(editor, BugzillaRestCore.CONNECTOR_KIND);
}
public BugzillaRestTaskEditorPage(TaskEditor editor, String connectorKind) {
super(editor, connectorKind);
- setNeedsPrivateSection(false);
- setNeedsSubmitButton(false);
+ setNeedsPrivateSection(true);
+ setNeedsSubmitButton(true);
}
}
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java
index 13660f564..7603904a6 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/AbstractRepositoryConnector.java
@@ -105,7 +105,7 @@ import org.eclipse.mylyn.tasks.core.sync.ISynchronizationSession;
* <li>{@link #canSynchronizeTask(TaskRepository, ITask)} returns <code>false</code> so full task data is never
* retrieved
* </ul>
- *
+ *
* @author Mik Kersten
* @author Rob Elves
* @author Shawn Minto
@@ -118,7 +118,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns true, if the connector provides a wizard for creating new tasks.
- *
+ *
* @since 2.0
*/
// TODO move this to ConnectorUi.hasNewTaskWizard()
@@ -126,14 +126,14 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns true, if the connector supports retrieval of tasks based on String keys.
- *
+ *
* @since 2.0
*/
public abstract boolean canCreateTaskFromKey(@NonNull TaskRepository repository);
/**
* Returns true, if the connector supports retrieval of task history for <code>task</code>.
- *
+ *
* @see #getHistory(TaskRepository, ITask, IProgressMonitor)
* @since 3.6
*/
@@ -143,7 +143,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns true, if the connector supports querying the repository.
- *
+ *
* @since 3.0
* @see #performQuery(TaskRepository, IRepositoryQuery, TaskDataCollector, ISynchronizationSession,
* IProgressMonitor)
@@ -154,7 +154,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns true, if the connectors support retrieving full task data for <code>task</code>.
- *
+ *
* @since 3.0
* @see #getTaskData(TaskRepository, String, IProgressMonitor)
*/
@@ -164,7 +164,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns true, if the connector supports deletion of <code>task</code> which is part of <code>repository</code>.
- *
+ *
* @since 3.3
*/
public boolean canDeleteTask(@NonNull TaskRepository repository, @NonNull ITask task) {
@@ -174,7 +174,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Return true, if the connector supports creation of task repositories. The default default implementation returns
* true.
- *
+ *
* @since 3.4
*/
public boolean canCreateRepository() {
@@ -183,7 +183,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns the unique kind of the repository, e.g. "bugzilla".
- *
+ *
* @since 2.0
*/
@NonNull
@@ -191,7 +191,7 @@ public abstract class AbstractRepositoryConnector {
/**
* The connector's summary i.e. "JIRA (supports 3.3.1 and later)"
- *
+ *
* @since 2.0
*/
@NonNull
@@ -203,7 +203,7 @@ public abstract class AbstractRepositoryConnector {
* Implementations typically match the task identifier based on repository specific patterns. For a Bugzilla task
* URL for example the implementation would match on <code>bugs.cgi</code> and return the repository specific
* portion of the URL: &quot;<i>http://bugs/</i><b>bugs.cgi?bugid=</b>123&quot;.
- *
+ *
* @return a task identifier or <code>null</code>, if <code>taskUrl</code> is not recognized
* @see #getTaskData(TaskRepository, String, IProgressMonitor)
*/
@@ -215,7 +215,7 @@ public abstract class AbstractRepositoryConnector {
* <p>
* The default implementations returns the substring of the text returned by {@link #getLabel()} up to the first
* occurrence of <em>(</em> or a space.
- *
+ *
* @since 2.3
*/
@Nullable
@@ -242,7 +242,7 @@ public abstract class AbstractRepositoryConnector {
* Returns the attachment handler. The method is expected to always return the same instance.
* <p>
* The default implementation returns <code>null</code>.
- *
+ *
* @return the attachment handler, or null, if attachments are not supported
* @since 3.0
*/
@@ -253,7 +253,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns the full task data. The method is expected to always return the same instance.
- *
+ *
* @param repository
* the task repository matching this connector
* @param taskIdOrKey
@@ -273,7 +273,7 @@ public abstract class AbstractRepositoryConnector {
* Returns the task data handler. The method is expected to always return the same instance.
* <p>
* The default implementation returns <code>null</code>.
- *
+ *
* @return the task data handler, or null, task data submission is not supported
* @since 3.0
*/
@@ -289,7 +289,7 @@ public abstract class AbstractRepositoryConnector {
* <p>
* Implementations typically match the task identifier based on repository specific patterns such as
* &quot;http://bugs/<b>bugs.cgibugid=123</b>&quot;.
- *
+ *
* @return a task identifier or <code>null</code>, if <code>taskUrl</code> is not recognized
* @see #getTaskData(TaskRepository, String, IProgressMonitor)
* @since 2.0
@@ -310,7 +310,7 @@ public abstract class AbstractRepositoryConnector {
* tasks.
* <p>
* Implementations typically scan <code>comment</code> for repository specific patterns such as KEY-123 for JIRA.
- *
+ *
* @return null, if the method is not supported; an array of task identifiers otherwise
* @since 2.0
*/
@@ -322,7 +322,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns a mapping for {@link TaskData}. The mapping maps the connector specific representation to the standard
* schema defined in {@link ITaskMapping}.
- *
+ *
* @since 3.0
*/
@NonNull
@@ -336,7 +336,7 @@ public abstract class AbstractRepositoryConnector {
* For subtasks implementations are expected to return relations creates by {@link TaskRelation#subtask(String)}.
* <p>
* The default implementation returns <code>null</code>.
- *
+ *
* @return a list of relations or null if <code>taskData</code> does not have relations or if task relations are not
* supported
* @since 3.0
@@ -349,7 +349,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns a task URL for the task referenced by <code>taskIdOrKey</code> in the repository referenced by
* <code>repositoryUrl</code>.
- *
+ *
* @return a task URL or null if the connector does not support task URLs
* @see #getTaskIdFromTaskUrl(String)
* @see #getRepositoryUrlFromTaskUrl(String)
@@ -362,7 +362,7 @@ public abstract class AbstractRepositoryConnector {
* Returns a URL for <code>element</code> that contains authentication information such as a session ID.
* <p>
* Returns <code>null</code> by default. Clients may override.
- *
+ *
* @param repository
* the repository for <code>element</code>
* @param element
@@ -380,7 +380,7 @@ public abstract class AbstractRepositoryConnector {
* Returns a browsable URL for <code>element</code>.
* <p>
* Returns <code>null</code> by default. Clients may override.
- *
+ *
* @param repository
* the repository for <code>element</code>
* @param element
@@ -398,7 +398,7 @@ public abstract class AbstractRepositoryConnector {
* <code>task</code>.
* <p>
* See {@link AbstractRepositoryConnector} for more details how this method interacts with other methods.
- *
+ *
* @since 3.0
* @see #updateTaskFromTaskData(TaskRepository, ITask, TaskData)
*/
@@ -410,7 +410,7 @@ public abstract class AbstractRepositoryConnector {
* repository which is the common case and default.
* <p>
* The default implementation returns <code>false</code>.
- *
+ *
* @since 3.0
*/
public boolean hasLocalCompletionState(@NonNull TaskRepository repository, @NonNull ITask task) {
@@ -421,7 +421,7 @@ public abstract class AbstractRepositoryConnector {
* Returns <code>true</code>, if <code>task</code> has a due date that is managed on the repository.
* <p>
* The default implementation returns <code>false</code>.
- *
+ *
* @since 3.0
*/
public boolean hasRepositoryDueDate(@NonNull TaskRepository repository, @NonNull ITask task,
@@ -433,7 +433,7 @@ public abstract class AbstractRepositoryConnector {
* Returns <code>true</code> to indication that the repository configuration is stale and requires update
* <p>
* The default implementation returns <code>true</code> every 24 hours.
- *
+ *
* @return true to indicate that the repository configuration is stale and requires update
* @since 3.0
*/
@@ -450,7 +450,7 @@ public abstract class AbstractRepositoryConnector {
* Returns true, if users can manage create repositories for this connector.
* <p>
* The default implementation returns true.
- *
+ *
* @since 2.0
*/
public boolean isUserManaged() {
@@ -464,7 +464,7 @@ public abstract class AbstractRepositoryConnector {
* Implementors must complete executing <code>query</code> before returning from this method.
* <p>
* See {@link AbstractRepositoryConnector} for more details how this method interacts with other methods.
- *
+ *
* @param repository
* task repository to run query against
* @param query
@@ -487,20 +487,20 @@ public abstract class AbstractRepositoryConnector {
/**
* Delete the task from the server
- *
+ *
* @throws UnsupportedOperationException
* if this is not implemented by the connector
* @since 3.3
*/
@NonNull
- public IStatus deleteTask(@NonNull TaskRepository repository, @NonNull ITask task, @NonNull IProgressMonitor monitor)
- throws CoreException {
+ public IStatus deleteTask(@NonNull TaskRepository repository, @NonNull ITask task,
+ @NonNull IProgressMonitor monitor) throws CoreException {
throw new UnsupportedOperationException();
}
/**
* Hook into the synchronization process.
- *
+ *
* @since 3.0
*/
public void postSynchronization(@NonNull ISynchronizationSession event, @NonNull IProgressMonitor monitor)
@@ -516,7 +516,7 @@ public abstract class AbstractRepositoryConnector {
* Hook into the synchronization process.
* <p>
* See {@link AbstractRepositoryConnector} for more details how this method interacts with other methods.
- *
+ *
* @since 3.0
*/
public void preSynchronization(@NonNull ISynchronizationSession event, @NonNull IProgressMonitor monitor)
@@ -532,7 +532,7 @@ public abstract class AbstractRepositoryConnector {
* Updates the local repository configuration cache (e.g. products and components). Connectors are encouraged to
* implement {@link #updateRepositoryConfiguration(TaskRepository, ITask, IProgressMonitor)} in addition this
* method.
- *
+ *
* @param repository
* the repository to update configuration for
* @since 3.0
@@ -544,7 +544,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Updates the local repository configuration cache (e.g. products and components). The default implementation
* invokes {@link #updateRepositoryConfiguration(TaskRepository, IProgressMonitor)}.
- *
+ *
* @param repository
* the repository to update configuration for
* @param task
@@ -562,7 +562,7 @@ public abstract class AbstractRepositoryConnector {
* used to map common attributes.
* <p>
* See {@link AbstractRepositoryConnector} for more details how this method interacts with other methods.
- *
+ *
* @see #hasTaskChanged(TaskRepository, ITask, TaskData)
* @see TaskMapper#applyTo(ITask)
* @since 3.0
@@ -574,7 +574,7 @@ public abstract class AbstractRepositoryConnector {
* Called when a new task is created, before it is opened in a task editor. Connectors should override this method
* if they need information from the {@link TaskData} to determine kind labels or other information that should be
* displayed in a new task editor.
- *
+ *
* @since 3.5
*/
public void updateNewTaskFromTaskData(@NonNull TaskRepository taskRepository, @NonNull ITask task,
@@ -586,7 +586,7 @@ public abstract class AbstractRepositoryConnector {
* is submitted to the repository. Implementers may override to implement custom migration rules.
* <p>
* Does nothing by default.
- *
+ *
* @param event
* provides additional details
* @since 3.4
@@ -596,7 +596,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Returns if the user using the repository is the owner of the task. Subclasses may override.
- *
+ *
* @param repository
* repository task is associated with
* @param task
@@ -611,7 +611,7 @@ public abstract class AbstractRepositoryConnector {
/**
* Retrieves the history for <code>task</code>. Throws {@link UnsupportedOperationException} by default.
- *
+ *
* @param repository
* the repository
* @param task
@@ -635,7 +635,7 @@ public abstract class AbstractRepositoryConnector {
* requires connecting to the repository.
* <p>
* Throws {@link UnsupportedOperationException} if not implemented by clients.
- *
+ *
* @param repository
* the repository
* @param monitor
@@ -654,7 +654,7 @@ public abstract class AbstractRepositoryConnector {
* Set the category of the {@code repository} to the default TaskRepository.CATEGORY_BUGS.
* <p>
* Subclasses may override.
- *
+ *
* @param repository
* the repository
* @since 3.11
@@ -662,4 +662,5 @@ public abstract class AbstractRepositoryConnector {
public void applyDefaultCategory(@NonNull TaskRepository repository) {
repository.setCategory(TaskRepository.CATEGORY_BUGS);
}
+
}
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java
index 2b70dfc66..db258e8c7 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/AbstractTaskSchema.java
@@ -44,12 +44,14 @@ public abstract class AbstractTaskSchema {
private final String indexKey;
+ private final String dependsOn;
+
protected Field(String key, String label, String type) {
- this(key, label, type, null, (Flag[]) null);
+ this(key, label, type, null, null, (Flag[]) null);
}
protected Field(String key, String label, String type, Flag... flags) {
- this(key, label, type, null, flags);
+ this(key, label, type, null, null, flags);
}
/**
@@ -68,6 +70,27 @@ public abstract class AbstractTaskSchema {
* @since 3.7
*/
public Field(String key, String label, String type, String indexKey, Flag... flags) {
+ this(key, label, type, indexKey, null, flags);
+ }
+
+ /**
+ * @param key
+ * the task attribute key, which may be a common task attribute key defined in defined in
+ * {@link TaskAttribute}
+ * @param label
+ * the user-visible label that is used by the user to identify this field
+ * @param type
+ * the type of the field, should be one of the constants defined in TaskAttribute (
+ * <code>TaskAttribute.TYPE_*</code>)
+ * @param indexKey
+ * the index key, or null if this should not be indexed
+ * @param dependsOn
+ * the key of the TaskAttribute which is the parent of the dependency
+ * @param flags
+ * the flags, or null
+ * @since 3.17
+ */
+ public Field(String key, String label, String type, String indexKey, String dependsOn, Flag... flags) {
Assert.isNotNull(key);
Assert.isNotNull(label);
Assert.isNotNull(type);
@@ -75,6 +98,7 @@ public abstract class AbstractTaskSchema {
this.label = label;
this.type = type;
this.indexKey = indexKey;
+ this.dependsOn = dependsOn;
if (flags == null || flags.length == 0) {
this.flags = EnumSet.noneOf(Flag.class);
} else {
@@ -91,6 +115,9 @@ public abstract class AbstractTaskSchema {
metaData.setReadOnly(isReadOnly());
metaData.setKind(getKind());
metaData.setRequired(isRequired());
+ if (getDependsOn() != null) {
+ metaData.setDependsOn(getDependsOn());
+ }
// options
Map<String, String> options = getDefaultOptions();
if (options != null) {
@@ -200,23 +227,29 @@ public abstract class AbstractTaskSchema {
return flags.contains(Flag.REQUIRED);
}
+ /**
+ * @since 3.17
+ */
+ public String getDependsOn() {
+ return dependsOn;
+ }
+
}
public enum Flag {
- ATTRIBUTE, OPERATION, PEOPLE, READ_ONLY,
- /**
- * A flag used to indicate that the field is related to a description.
- *
- * @since 3.11
- * @see TaskAttribute#KIND_DESCRIPTION
- */
- DESCRIPTION,
- /**
- * A flag used to indicate that the field is required.
- *
- * @since 3.11
- * @see TaskAttribute#META_REQUIRED
- */
+ ATTRIBUTE, OPERATION, PEOPLE, READ_ONLY, /**
+ * A flag used to indicate that the field is related to a
+ * description.
+ *
+ * @since 3.11
+ * @see TaskAttribute#KIND_DESCRIPTION
+ */
+ DESCRIPTION, /**
+ * A flag used to indicate that the field is required.
+ *
+ * @since 3.11
+ * @see TaskAttribute#META_REQUIRED
+ */
REQUIRED
};
@@ -231,11 +264,14 @@ public abstract class AbstractTaskSchema {
private String type;
+ private String dependsOn;
+
public FieldFactory(Field source) {
this.flags = EnumSet.copyOf(source.flags);
this.key = source.key;
this.label = source.label;
this.type = source.type;
+ this.dependsOn = source.dependsOn;
}
public FieldFactory addFlags(Flag... flags) {
@@ -244,7 +280,8 @@ public abstract class AbstractTaskSchema {
}
public Field create() {
- return createField(key, label, type, (!flags.isEmpty()) ? flags.toArray(new Flag[0]) : null);
+ return createField(key, label, type, null, dependsOn,
+ (!flags.isEmpty()) ? flags.toArray(new Flag[0]) : null);
}
public FieldFactory flags(Flag... flags) {
@@ -272,6 +309,14 @@ public abstract class AbstractTaskSchema {
return this;
}
+ /**
+ * @since 3.17
+ */
+ public FieldFactory dependsOn(String dependsOn) {
+ this.dependsOn = dependsOn;
+ return this;
+ }
+
}
private final Map<String, Field> fieldByKey = new LinkedHashMap<String, Field>();
@@ -316,7 +361,15 @@ public abstract class AbstractTaskSchema {
* @see Field#Field(String, String, String, String, Flag...)
*/
protected Field createField(String key, String label, String type, String indexKey, Flag... flags) {
- Field field = new Field(key, label, type, indexKey, flags);
+ return createField(key, label, type, indexKey, null, flags);
+ }
+
+ /**
+ * @since 3.17
+ */
+ protected Field createField(String key, String label, String type, String indexKey, String dependsOn,
+ Flag... flags) {
+ Field field = new Field(key, label, type, indexKey, dependsOn, flags);
fieldByKey.put(key, field);
return field;
}
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 269488723..7ea11c65e 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
@@ -21,7 +21,7 @@ import org.eclipse.core.runtime.Assert;
/**
* Encapsulates attributes for task data.
- *
+ *
* @author Rob Elves
* @author Steffen Pingel
* @author Miles Parker
@@ -111,7 +111,7 @@ public final class TaskAttribute {
/**
* A {@link TaskAttributeMetaData#getKind() kind} used to indicate that the field is related to a description.
- *
+ *
* @since 3.11
*/
public static final String KIND_DESCRIPTION = "task.common.kind.description"; //$NON-NLS-1$
@@ -127,12 +127,26 @@ public final class TaskAttribute {
public static final String META_ATTRIBUTE_TYPE = "task.meta.type"; //$NON-NLS-1$
/**
- * A key for {@link TaskAttributeMetaData} that is used for specifying the media type of a
- * {@link #TYPE_LONG_RICH_TEXT} or {@link #TYPE_SHORT_RICH_TEXT}. The media type if specified must be a valid <a
- * href="http://en.wikipedia.org/wiki/Internet_media_type">Internet Media Type</a> (also known as Content-Type,
- * mime-type) according to <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a> and <a
- * href="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</a>.
+ * A key for {@link TaskAttributeMetaData} that is used for specifying the ID of the parent {@link TaskAttribute}
+ * for attributes that have a dependency. When the parent is changed we look for all attributes with have a
+ * {@link TaskAttributeMetaData} of this key and an value of the ID from the changed {@link TaskAttribute} and also
+ * trigger a change. With this we can refresh the options of each {@link TaskAttribute}.<br>
+ * <br>
+ * Example: In Bugzilla we have COMPONENT, VERSION, TARGET_MILESTONE as depends on the PRODUCT. We can so update the
+ * options of the attributes to match the definition of the PRODUCT.
*
+ * @see #BugzillaRestCreateTaskSchema
+ * @since 3.16
+ */
+ public static final String META_DEPENDS_ON_ATTRIBUTE_ID = "task.meta.dependson.attribute"; //$NON-NLS-1$
+
+ /**
+ * A key for {@link TaskAttributeMetaData} that is used for specifying the media type of a
+ * {@link #TYPE_LONG_RICH_TEXT} or {@link #TYPE_SHORT_RICH_TEXT}. The media type if specified must be a valid
+ * <a href="http://en.wikipedia.org/wiki/Internet_media_type">Internet Media Type</a> (also known as Content-Type,
+ * mime-type) according to <a href="http://www.ietf.org/rfc/rfc2045.txt">RFC 2045</a> and
+ * <a href="http://www.ietf.org/rfc/rfc2046.txt">RFC 2046</a>.
+ *
* @see #TYPE_LONG_RICH_TEXT
* @see #TYPE_SHORT_RICH_TEXT
* @see #META_ATTRIBUTE_TYPE
@@ -152,7 +166,7 @@ public final class TaskAttribute {
* Key for {@link TaskAttributeMetaData} used to specify that a field requires a value before it can be submitted to
* the server. This meta-data is used by the framework as a UI hint and does not guarantee that a connector will
* enforce compliance before attempting to post task data.
- *
+ *
* @since 3.11
*/
public static final String META_REQUIRED = "task.meta.required"; //$NON-NLS-1$
@@ -165,7 +179,7 @@ public final class TaskAttribute {
/**
* Key for the meta datum that determines if an attribute is disabled. This is used to indicate that an attribute
* should not be modified, e.g. due to work-flow state but it may still be generally writeable.
- *
+ *
* @since 3.5
* @see TaskAttributeMetaData#isDisabled()
*/
@@ -173,7 +187,7 @@ public final class TaskAttribute {
/**
* Key for the meta datum that provides a description of an attribute, e.g. for display in a tooltip.
- *
+ *
* @since 3.5
* @see TaskAttributeMetaData
*/
@@ -184,7 +198,7 @@ public final class TaskAttribute {
* content. Provides a way for connectors to specify non-standard attributes as plain-text indexable. By default,
* {@link #SUMMARY summary} and {@link #DESCRIPTION description} are indexed. Note that setting this meta-data is
* advisory only and will not guarantee that content is indexed.
- *
+ *
* @since 3.7
*/
public static final String META_INDEXED_AS_CONTENT = "task.meta.index.content"; //$NON-NLS-1$
@@ -471,8 +485,9 @@ public final class TaskAttribute {
public TaskAttribute getMappedAttribute(String attributeId) {
Assert.isNotNull(attributeId);
- return (attributeById != null) ? attributeById.get(getTaskData().getAttributeMapper().mapToRepositoryKey(this,
- attributeId)) : null;
+ return (attributeById != null)
+ ? attributeById.get(getTaskData().getAttributeMapper().mapToRepositoryKey(this, attributeId))
+ : null;
}
public TaskAttribute getMappedAttribute(String[] path) {
@@ -555,7 +570,7 @@ public final class TaskAttribute {
* testing whether or not {@link #getValue()} returns an empty string, as it is possible that an empty string value
* has been explicitly set for the attribute. Call {@link #clearValues()} to return the attribute to the unset
* state.
- *
+ *
* @return true if any value is set (may be an empty string), false if no value is set.
* @since 3.9
*/
@@ -582,7 +597,7 @@ public final class TaskAttribute {
/**
* Adds an attribute option value
- *
+ *
* @param key
* The option value used when sending the form to the server
* @param value
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMapper.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMapper.java
index c73fec783..fae2b654a 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMapper.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMapper.java
@@ -39,8 +39,8 @@ public class TaskAttributeMapper {
@NonNull
public TaskAttribute createTaskAttachment(@NonNull TaskData taskData) {
- TaskAttribute taskAttribute = taskData.getRoot().createAttribute(
- mapToRepositoryKey(taskData.getRoot(), TaskAttribute.NEW_ATTACHMENT));
+ TaskAttribute taskAttribute = taskData.getRoot()
+ .createAttribute(mapToRepositoryKey(taskData.getRoot(), TaskAttribute.NEW_ATTACHMENT));
// TaskAttachmentMapper mapper = TaskAttachmentMapper.createFrom(taskAttribute);
// mapper.setContentType("");
// mapper.setFileName("");
@@ -54,11 +54,11 @@ public class TaskAttributeMapper {
if (newAttribute.getValues().equals(oldAttribute.getValues())) {
return true;
}
- // the comment mapping accidentally changed throughout the Mylyn 3.7 cycle therefore some
+ // the comment mapping accidentally changed throughout the Mylyn 3.7 cycle therefore some
// cases need to be considered equal even though attribute values differ
if (oldAttribute != null) {
TaskAttribute commentIdAttribute = oldAttribute.getAttribute("task.common.comment.id"); //$NON-NLS-1$
- // ID not present
+ // ID not present
if ((commentIdAttribute == null || commentIdAttribute.getValue().equals("")) //$NON-NLS-1$
&& newAttribute.getValue().equals("")) { //$NON-NLS-1$
return true;
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMetaData.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMetaData.java
index 5a52aa36e..e574b9bd2 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMetaData.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskAttributeMetaData.java
@@ -115,6 +115,14 @@ public class TaskAttributeMetaData {
return taskAttribute.getMetaDatum(TaskAttribute.META_ATTRIBUTE_MEDIA_TYPE);
}
+ /**
+ * @since 3.17
+ * @see TaskAttribute#META_DEPENDS_ON_ATTRIBUTE_ID
+ */
+ public String getDependsOn() {
+ return taskAttribute.getMetaDatum(TaskAttribute.META_DEPENDS_ON_ATTRIBUTE_ID);
+ }
+
public TaskAttributeMetaData putValue(String key, String value) {
taskAttribute.putMetaDatum(key, value);
return this;
@@ -124,7 +132,7 @@ public class TaskAttributeMetaData {
* The default option property is not used. Connectors are expected to set default values in
* {@link AbstractTaskDataHandler#initializeTaskData(org.eclipse.mylyn.tasks.core.TaskRepository, TaskData, org.eclipse.mylyn.tasks.core.ITaskMapping, org.eclipse.core.runtime.IProgressMonitor)}
* .
- *
+ *
* @deprecated Not used, set default value in
* {@link AbstractTaskDataHandler#initializeTaskData(org.eclipse.mylyn.tasks.core.TaskRepository, TaskData, org.eclipse.mylyn.tasks.core.ITaskMapping, org.eclipse.core.runtime.IProgressMonitor)}
* instead.
@@ -146,7 +154,7 @@ public class TaskAttributeMetaData {
// taskAttribute.removeMetaDatum(TaskAttribute.META_DETAIL_LEVEL);
// }
// return this;
-// }
+// }
public TaskAttributeMetaData setKind(String value) {
if (value != null) {
@@ -214,4 +222,14 @@ public class TaskAttributeMetaData {
return this;
}
+ /**
+ * @since 3.17
+ * @see TaskAttribute#META_DEPENDS_ON_ATTRIBUTE_ID
+ * @return this
+ */
+ public TaskAttributeMetaData setDependsOn(String value) {
+ taskAttribute.putMetaDatum(TaskAttribute.META_DEPENDS_ON_ATTRIBUTE_ID, value);
+ return this;
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModel.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModel.java
index 5202887b8..69ced64ed 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModel.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModel.java
@@ -66,7 +66,7 @@ public class TaskDataModel {
/**
* Invoke upon change to attribute value.
- *
+ *
* @param attribute
* changed attribute
*/
@@ -77,14 +77,15 @@ public class TaskDataModel {
}
unsavedChangedAttributes.add(attribute);
-
if (this.listeners != null) {
final TaskDataModelEvent event = new TaskDataModelEvent(this, EventKind.CHANGED, attribute);
TaskDataModelListener[] listeners = this.listeners.toArray(new TaskDataModelListener[0]);
+
for (final TaskDataModelListener listener : listeners) {
SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable e) {
- StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Listener failed", e)); //$NON-NLS-1$
+ StatusHandler
+ .log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Listener failed", e)); //$NON-NLS-1$
}
public void run() throws Exception {
@@ -97,7 +98,7 @@ public class TaskDataModel {
/**
* Returns the instance of <code>taskAttribute</code> that the user last read.
- *
+ *
* @param taskAttribute
* the attribute
* @return the last read state; null, if <code>taskAttribute</code> has never been read
@@ -181,7 +182,8 @@ public class TaskDataModel {
for (final TaskDataModelListener listener : listeners) {
SafeRunner.run(new ISafeRunnable() {
public void handleException(Throwable e) {
- StatusHandler.log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Listener failed", e)); //$NON-NLS-1$
+ StatusHandler
+ .log(new Status(IStatus.ERROR, ITasksCoreConstants.ID_PLUGIN, "Listener failed", e)); //$NON-NLS-1$
}
public void run() throws Exception {
diff --git a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModelListener.java b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModelListener.java
index 95f6c955f..74a6f2402 100644
--- a/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModelListener.java
+++ b/org.eclipse.mylyn.tasks.core/src/org/eclipse/mylyn/tasks/core/data/TaskDataModelListener.java
@@ -28,5 +28,4 @@ public abstract class TaskDataModelListener {
*/
public void modelRefreshed() {
}
-
}
diff --git a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractAttributeEditor.java b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractAttributeEditor.java
index 9c1a50bd5..6d353e633 100644
--- a/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractAttributeEditor.java
+++ b/org.eclipse.mylyn.tasks.ui/src/org/eclipse/mylyn/tasks/ui/editors/AbstractAttributeEditor.java
@@ -45,7 +45,7 @@ public abstract class AbstractAttributeEditor {
/**
* The key used to associate the editor control with the corresponding task attribute. This enables lookup of the
* model element from the widget hierarchy.
- *
+ *
* @since 3.5
* @see Control#getData(String)
* @see #getControl()
@@ -85,6 +85,16 @@ public abstract class AbstractAttributeEditor {
} finally {
refreshInProgress = false;
}
+ String changedAttribute = event.getTaskAttribute().getId();
+ for (TaskAttribute taskAttribute : event.getTaskAttribute()
+ .getTaskData()
+ .getRoot()
+ .getAttributes()
+ .values()) {
+ if (changedAttribute.equals(taskAttribute.getMetaData().getDependsOn())) {
+ event.getModel().attributeChanged(taskAttribute);
+ }
+ }
}
}
};
@@ -342,7 +352,7 @@ public abstract class AbstractAttributeEditor {
* <code>UnsupportedOperationException</code>.
* <p>
* Subclasses should overwrite this method.
- *
+ *
* @since 3.1
* @throws UnsupportedOperationException
* if this method is not supported by the editor
@@ -354,7 +364,7 @@ public abstract class AbstractAttributeEditor {
/**
* Subclasses that implement refresh should override this method to return true, so that they will be automatically
* refreshed when the model changes.
- *
+ *
* @return whether the editor should be automatically refreshed when the model changes
* @since 3.6
*/
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 917677e4d..f1e2558b2 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
@@ -150,14 +150,14 @@ import org.eclipse.ui.views.contentoutline.IContentOutlinePage;
/**
* Extend to provide a task editor page.
- *
+ *
* @author Mik Kersten
* @author Rob Elves
* @author Steffen Pingel
* @since 3.0
*/
-public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISelectionProvider,
- ISelectionChangedListener {
+public abstract class AbstractTaskEditorPage extends TaskFormPage
+ implements ISelectionProvider, ISelectionChangedListener {
/**
* Causes the form page to reflow on resize.
@@ -225,8 +225,8 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
TaskMigrator migrator = new TaskMigrator(oldTask);
migrator.setDelete(true);
migrator.setEditor(getTaskEditor());
- migrator.setMigrateDueDate(!connector.hasRepositoryDueDate(getTaskRepository(),
- newTask, taskData));
+ migrator.setMigrateDueDate(
+ !connector.hasRepositoryDueDate(getTaskRepository(), newTask, taskData));
migrator.execute(newTask);
}
if (expandLastComment) {
@@ -319,11 +319,11 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
} else {
getTaskEditor().setMessage(Messages.AbstractTaskEditorPage_Task_has_incoming_changes,
IMessageProvider.WARNING, new HyperlinkAdapter() {
- @Override
- public void linkActivated(HyperlinkEvent e) {
- AbstractTaskEditorPage.this.refresh();
- }
- });
+ @Override
+ public void linkActivated(HyperlinkEvent e) {
+ AbstractTaskEditorPage.this.refresh();
+ }
+ });
setSubmitEnabled(false);
}
}
@@ -664,11 +664,11 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
getTaskEditor().setMessage(
Messages.AbstractTaskEditorPage_Synchronize_to_update_editor_contents,
IMessageProvider.INFORMATION, new HyperlinkAdapter() {
- @Override
- public void linkActivated(HyperlinkEvent e) {
- AbstractTaskEditorPage.this.refresh();
- }
- });
+ @Override
+ public void linkActivated(HyperlinkEvent e) {
+ AbstractTaskEditorPage.this.refresh();
+ }
+ });
}
});
}
@@ -719,7 +719,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
attributeEditorToolkit.dispose();
}
- // start life-cycle of previous editor controls
+ // start life-cycle of previous editor controls
if (attributeEditorFactory == null) {
attributeEditorFactory = createAttributeEditorFactory();
Assert.isNotNull(attributeEditorFactory);
@@ -749,6 +749,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
}
TaskRepository taskRepository = TasksUi.getRepositoryManager().getRepository(taskDataState.getConnectorKind(),
taskDataState.getRepositoryUrl());
+
return new TaskDataModel(taskRepository, input.getTask(), taskDataState);
}
@@ -853,7 +854,8 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
}
- private void createParts(String path, final Composite parent, final Collection<TaskEditorPartDescriptor> descriptors) {
+ private void createParts(String path, final Composite parent,
+ final Collection<TaskEditorPartDescriptor> descriptors) {
for (Iterator<TaskEditorPartDescriptor> it = descriptors.iterator(); it.hasNext();) {
final TaskEditorPartDescriptor descriptor = it.next();
if (path == null || path.equals(descriptor.getPath())) {
@@ -1217,7 +1219,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
* Invoked after task submission has completed. This method is invoked on the UI thread in all cases whether
* submission was successful, canceled or failed. The value returned by <code>event.getJob().getStatus()</code>
* indicates the result of the submit job. Sub-classes may override but are encouraged to invoke the super method.
- *
+ *
* @since 3.2
* @see SubmitJob
*/
@@ -1358,7 +1360,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Subclasses may override to disable the task editor find functionality.
- *
+ *
* @since 3.11
*/
protected void createFindSupport() {
@@ -1406,7 +1408,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Updates the editor contents in place.
- *
+ *
* @deprecated Use {@link #refresh()} instead
*/
@Deprecated
@@ -1507,7 +1509,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
* <p>
* Clients may override.
* </p>
- *
+ *
* @param control
* the control to register the listener for
*/
@@ -1540,7 +1542,8 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
ISelection selection = event.getSelection();
if (selection instanceof TextSelection) {
// only update global actions
- ((TaskEditorActionContributor) getEditorSite().getActionBarContributor()).updateSelectableActions(event.getSelection());
+ ((TaskEditorActionContributor) getEditorSite().getActionBarContributor())
+ .updateSelectableActions(event.getSelection());
return;
}
if (selection.isEmpty()) {
@@ -1648,7 +1651,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Returns true, if the page has an always visible footer.
- *
+ *
* @see #setNeedsFooter(boolean)
*/
private boolean needsFooter() {
@@ -1657,7 +1660,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Specifies that the page should provide an always visible footer. This flag is not set by default.
- *
+ *
* @see #createFooterContent(Composite)
* @see #needsFooter()
*/
@@ -1684,7 +1687,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Returns true, if the page supports a submit operation.
- *
+ *
* @since 3.2
* @see #setNeedsSubmit(boolean)
*/
@@ -1694,7 +1697,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Specifies that the page supports the submit operation. This flag is set to true by default.
- *
+ *
* @since 3.2
* @see #needsSubmit()
* @see #doSubmit()
@@ -1705,7 +1708,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Returns true, if the page provides a submit button.
- *
+ *
* @since 3.2
* @see #setNeedsSubmitButton(boolean)
*/
@@ -1715,7 +1718,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Specifies that the page supports submitting. This flag is set to false by default.
- *
+ *
* @since 3.2
* @see #needsSubmitButton()
*/
@@ -1725,7 +1728,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Returns true, if the page provides a submit button.
- *
+ *
* @since 3.2
* @see #setNeedsPrivateSection(boolean)
*/
@@ -1735,7 +1738,7 @@ public abstract class AbstractTaskEditorPage extends TaskFormPage implements ISe
/**
* Specifies that the page should provide the private section. This flag is not set by default.
- *
+ *
* @since 3.2
* @see #needsPrivateSection()
*/

Back to the top