Blob Blame History Raw
From 2ee22249927079a00b9130512085647e84f3d64b Mon Sep 17 00:00:00 2001
From: Frank Becker <Frank@Frank-Becker.de>
Date: Mon, 3 Jun 2013 21:46:52 +0200
Subject: [PATCH] 403024: Ability to reopen a task when 'REOPENED' state is not
 available. (nor only use xmlrpc activate Workflow and default milestone
 separate) Change-Id: I4269767dabfac05cac115150e69ec2356f5a6873 Task-Url:
 https://bugs.eclipse.org/bugs/show_bug.cgi?id=403024

---
 .../internal/bugzilla/core/BugzillaClient.java     |  9 ++-
 .../internal/bugzilla/core/IBugzillaConstants.java |  6 +-
 .../mylyn/internal/bugzilla/core/Messages.java     |  4 ++
 .../internal/bugzilla/core/messages.properties     |  2 +
 .../core/service/BugzillaXmlRpcClient.java         | 80 ++++++++++++++--------
 .../internal/bugzilla/core/service/Messages.java   | 31 +++++++++
 .../bugzilla/core/service/messages.properties      |  3 +
 .../ui/tasklist/BugzillaRepositoryMigrator.java    | 10 +++
 .../tasklist/BugzillaRepositorySettingsPage.java   | 53 +++++++++++---
 .../internal/bugzilla/ui/tasklist/Messages.java    |  8 +++
 .../bugzilla/ui/tasklist/messages.properties       |  6 +-
 11 files changed, 169 insertions(+), 43 deletions(-)
 create mode 100644 org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/Messages.java
 create mode 100644 org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/messages.properties

diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java
index 06647e6..4f2921f 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/BugzillaClient.java
@@ -729,6 +729,8 @@ public class BugzillaClient {
 			throws IOException, CoreException {
 		GzipGetMethod method = null;
 		int attempt = 0;
+		StatusHandler.log(new Status(IStatus.INFO, BugzillaCorePlugin.ID_PLUGIN,
+				Messages.BugzillaClient_Start_GetConfiguration + repositoryUrl));
 		while (attempt < 2) {
 			try {
 				method = getConnectGzip(repositoryUrl + IBugzillaConstants.URL_GET_CONFIG_RDF, monitor, eTagValue);
@@ -748,6 +750,7 @@ public class BugzillaClient {
 										stream, getCharacterEncoding());
 
 								repositoryConfiguration = configFactory.getConfiguration();
+								repositoryConfiguration.setRepositoryUrl(repositoryUrl.toExternalForm());
 								Header eTag = method.getResponseHeader("ETag"); //$NON-NLS-1$
 								if (eTag != null) {
 									repositoryConfiguration.setETagValue(eTag.getValue());
@@ -769,7 +772,7 @@ public class BugzillaClient {
 									getXmlRpcClient();
 									if (xmlRpcClient != null) {
 										xmlRpcClient.updateConfiguration(monitor, repositoryConfiguration,
-												configParameters.get(IBugzillaConstants.BUGZILLA_DESCRIPTOR_FILE));
+												configParameters);
 									} else {
 										repositoryConfiguration.setValidTransitions(monitor,
 												configParameters.get(IBugzillaConstants.BUGZILLA_DESCRIPTOR_FILE), null);
@@ -779,6 +782,8 @@ public class BugzillaClient {
 									}
 
 									if (!repositoryConfiguration.getOptionValues(BugzillaAttribute.PRODUCT).isEmpty()) {
+										StatusHandler.log(new Status(IStatus.INFO, BugzillaCorePlugin.ID_PLUGIN,
+												Messages.BugzillaClient_Stop_GetConfiguration + repositoryUrl));
 										return repositoryConfiguration;
 									} else {
 										if (attempt == 0) {
@@ -809,6 +814,8 @@ public class BugzillaClient {
 				}
 			}
 		}
+		StatusHandler.log(new Status(IStatus.INFO, BugzillaCorePlugin.ID_PLUGIN,
+				Messages.BugzillaClient_Start_GetConfiguration + repositoryUrl));
 		return null;
 	}
 
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java
index 7a2513e..4d8eb8d 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/IBugzillaConstants.java
@@ -252,7 +252,11 @@ public interface IBugzillaConstants {
 
 	public static final String BUGZILLA_DESCRIPTOR_FILE = "bugzilla.desciptorFile"; //$NON-NLS-1$
 
-	public static final String BUGZILLA_USE_XMLRPC = "bugzilla.xmlrpc.status.transition"; //$NON-NLS-1$
+	public static final String BUGZILLA_USE_XMLRPC = "bugzilla.xmlrpc"; //$NON-NLS-1$
+
+	public static final String BUGZILLA_USE_XMLRPC_WORKFLOW = "bugzilla.xmlrpc.status.transition"; //$NON-NLS-1$
+
+	public static final String BUGZILLA_USE_XMLRPC_DEFAULT_MILESTONE = "bugzilla.xmlrpc.default.milestone"; //$NON-NLS-1$
 
 	public static final String DEFAULT_LANG = "en (default)"; //$NON-NLS-1$
 
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/Messages.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/Messages.java
index 0d4a71c..2900bd4 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/Messages.java
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/Messages.java
@@ -219,6 +219,10 @@
 
 	public static String BugzillaClient_description_required_when_submitting_attachments;
 
+	public static String BugzillaClient_Start_GetConfiguration;
+
+	public static String BugzillaClient_Stop_GetConfiguration;
+
 	public static String BugzillaClient_Unable_to_retrieve_new_task;
 
 	public static String BugzillaOperation_Accept_to_ASSIGNED;
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/messages.properties org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/messages.properties
index 31c9faf..636eabc 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/messages.properties
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/messages.properties
@@ -107,6 +107,8 @@ BugzillaAttachmentMapper_URL=URL:
 BugzillaClient_could_not_post_form_null_returned=Could not post form, client returned null method.
 BugzillaClient_description_required_when_submitting_attachments=A description is required when submitting attachments.
 BugzillaClient_Unable_to_retrieve_new_task=Unable to retrieve new task.
+BugzillaClient_Start_GetConfiguration=Start getRepositoryConfiguration for 
+BugzillaClient_Stop_GetConfiguration=Stop getRepositoryConfiguration for 
 
 BugzillaOperation_Accept_to_ASSIGNED=Accept (change status to ASSIGNED)
 BugzillaOperation_confirmed=Confirm (change status to CONFIRMED)
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/BugzillaXmlRpcClient.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/BugzillaXmlRpcClient.java
index af2d235..51da85d 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/BugzillaXmlRpcClient.java
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/BugzillaXmlRpcClient.java
@@ -32,6 +32,7 @@ import org.eclipse.core.runtime.IProgressMonitor;
 import org.eclipse.core.runtime.IStatus;
 import org.eclipse.core.runtime.Status;
 import org.eclipse.core.runtime.SubProgressMonitor;
+import org.eclipse.mylyn.commons.core.StatusHandler;
 import org.eclipse.mylyn.commons.net.AbstractWebLocation;
 import org.eclipse.mylyn.commons.net.AuthenticationCredentials;
 import org.eclipse.mylyn.commons.net.AuthenticationType;
@@ -54,6 +55,7 @@ import org.eclipse.mylyn.tasks.core.data.TaskAttributeMapper;
 import org.eclipse.mylyn.tasks.core.data.TaskCommentMapper;
 import org.eclipse.mylyn.tasks.core.data.TaskData;
 import org.eclipse.mylyn.tasks.core.data.TaskDataCollector;
+import org.eclipse.osgi.util.NLS;
 
 @SuppressWarnings("restriction")
 public class BugzillaXmlRpcClient extends CommonXmlRpcClient {
@@ -413,51 +415,71 @@ public class BugzillaXmlRpcClient extends CommonXmlRpcClient {
 	}
 
 	public void updateConfiguration(IProgressMonitor monitor, RepositoryConfiguration repositoryConfiguration,
-			String fileName) throws CoreException {
-		repositoryConfiguration.setValidTransitions(monitor, fileName, this);
-		if (!repositoryConfiguration.getOptionValues(BugzillaAttribute.PRODUCT).isEmpty()) {
+			Map<String, String> configParameters) throws CoreException {
+		if (Boolean.parseBoolean(configParameters.get(IBugzillaConstants.BUGZILLA_USE_XMLRPC_WORKFLOW))) {
+			repositoryConfiguration.setValidTransitions(monitor,
+					configParameters.get(IBugzillaConstants.BUGZILLA_DESCRIPTOR_FILE), this);
+		}
+		if (!repositoryConfiguration.getOptionValues(BugzillaAttribute.PRODUCT).isEmpty()
+				&& Boolean.parseBoolean(configParameters.get(IBugzillaConstants.BUGZILLA_USE_XMLRPC_DEFAULT_MILESTONE))) {
 			updateProductInfo(monitor, repositoryConfiguration);
 		}
 	}
 
 	public void updateProductInfo(IProgressMonitor monitor, RepositoryConfiguration repositoryConfiguration)
 			throws CoreException {
+		ArrayList<Object> productIDNew = new ArrayList<Object>();
+		StatusHandler.log(new Status(IStatus.INFO, BugzillaCorePlugin.ID_PLUGIN, Messages.BugzillaXmlRpcClient_Start_UpdateProductInfo
+				+ repositoryConfiguration.getRepositoryUrl()));
 		try {
 			Object[] productIDs = getAccessibleProducts(monitor);
-			Object[] products = getProducts(monitor, productIDs);
-			for (Object object : products) {
-				if (object instanceof HashMap<?, ?>) {
-					String defaultMilestone = null;
-					String product = (String) ((HashMap<?, ?>) object).get("name"); //$NON-NLS-1$
-					HashMap<?, ?> values = (HashMap<?, ?>) ((HashMap<?, ?>) object).get("internals"); //$NON-NLS-1$
-					Object defaultMilestoneObj = null;
-					if (values != null) {
-						if (values instanceof HashMap<?, ?>) {
-							defaultMilestoneObj = ((HashMap<?, ?>) values).get("defaultmilestone"); //$NON-NLS-1$
-						}
-					} else {
-						defaultMilestoneObj = ((HashMap<?, ?>) object).get("default_milestone"); //$NON-NLS-1$
-					}
-					if (defaultMilestoneObj != null) {
-						if (defaultMilestoneObj instanceof String) {
-							defaultMilestone = (String) defaultMilestoneObj;
-						} else if (defaultMilestoneObj instanceof Double) {
-							defaultMilestone = ((Double) defaultMilestoneObj).toString();
-						} else if (defaultMilestoneObj instanceof Integer) {
-							defaultMilestone = ((Integer) defaultMilestoneObj).toString();
+			for (Object productID : productIDs) {
+				productIDNew.clear();
+				productIDNew.add(productID);
+				try {
+					Object[] products = getProducts(monitor, productIDNew.toArray());
+					for (Object object : products) {
+						if (object instanceof HashMap<?, ?>) {
+							String defaultMilestone = null;
+							String product = (String) ((HashMap<?, ?>) object).get("name"); //$NON-NLS-1$
+							HashMap<?, ?> values = (HashMap<?, ?>) ((HashMap<?, ?>) object).get("internals"); //$NON-NLS-1$
+							Object defaultMilestoneObj = null;
+							if (values != null) {
+								if (values instanceof HashMap<?, ?>) {
+									defaultMilestoneObj = ((HashMap<?, ?>) values).get("defaultmilestone"); //$NON-NLS-1$
+								}
+							} else {
+								defaultMilestoneObj = ((HashMap<?, ?>) object).get("default_milestone"); //$NON-NLS-1$
+							}
+							if (defaultMilestoneObj != null) {
+								if (defaultMilestoneObj instanceof String) {
+									defaultMilestone = (String) defaultMilestoneObj;
+								} else if (defaultMilestoneObj instanceof Double) {
+									defaultMilestone = ((Double) defaultMilestoneObj).toString();
+								} else if (defaultMilestoneObj instanceof Integer) {
+									defaultMilestone = ((Integer) defaultMilestoneObj).toString();
+								}
+							}
+							if (product != null && !product.equals("") //$NON-NLS-1$
+									&& defaultMilestone != null && !defaultMilestone.equals("")) { //$NON-NLS-1$
+								repositoryConfiguration.setDefaultMilestone(product, defaultMilestone);
+							}
 						}
 					}
-					if (product != null && !product.equals("") //$NON-NLS-1$
-							&& defaultMilestone != null && !defaultMilestone.equals("")) { //$NON-NLS-1$
-						repositoryConfiguration.setDefaultMilestone(product, defaultMilestone);
-					}
+				} catch (Exception e) {
+					Status status = new Status(IStatus.ERROR, BugzillaCorePlugin.ID_PLUGIN, NLS.bind(
+							Messages.BugzillaXmlRpcClient_CanNotGetTheDefaultMilestoneForProductWithID,
+							productIDNew.get(0)));
+					StatusHandler.log(status);
 				}
 			}
 		} catch (XmlRpcException e) {
 			throw new CoreException(new Status(IStatus.ERROR, BugzillaCorePlugin.ID_PLUGIN,
 					"Can not get the Default Milestones using XMLRPC")); //$NON-NLS-1$
+		} finally {
+			StatusHandler.log(new Status(IStatus.INFO, BugzillaCorePlugin.ID_PLUGIN, Messages.BugzillaXmlRpcClient_Stop_UpdateProductInfo
+					+ repositoryConfiguration.getRepositoryUrl()));
 		}
-
 	}
 
 	public int getUserID() {
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/Messages.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/Messages.java
new file mode 100644
index 0000000..9b672ca
--- /dev/null
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/Messages.java
@@ -0,0 +1,31 @@
+/*******************************************************************************
+ * Copyright (c) 2013 Tasktop Technologies 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:
+ *     Tasktop Technologies - initial API and implementation
+ *******************************************************************************/
+
+package org.eclipse.mylyn.internal.bugzilla.core.service;
+
+import org.eclipse.osgi.util.NLS;
+
+public class Messages extends NLS {
+	private static final String BUNDLE_NAME = "org.eclipse.mylyn.internal.bugzilla.core.service.messages"; //$NON-NLS-1$
+
+	public static String BugzillaXmlRpcClient_CanNotGetTheDefaultMilestoneForProductWithID;
+
+	public static String BugzillaXmlRpcClient_Start_UpdateProductInfo;
+
+	public static String BugzillaXmlRpcClient_Stop_UpdateProductInfo;
+	static {
+		// initialize resource bundle
+		NLS.initializeMessages(BUNDLE_NAME, Messages.class);
+	}
+
+	private Messages() {
+	}
+}
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/messages.properties org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/messages.properties
new file mode 100644
index 0000000..734191b
--- /dev/null
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.core/src/org/eclipse/mylyn/internal/bugzilla/core/service/messages.properties
@@ -0,0 +1,3 @@
+BugzillaXmlRpcClient_CanNotGetTheDefaultMilestoneForProductWithID=Can not get the Default Milestone for Product with ID {0} using XMLRPC
+BugzillaXmlRpcClient_Start_UpdateProductInfo=Start updateProductInfo for 
+BugzillaXmlRpcClient_Stop_UpdateProductInfo=Stop updateProductInfo for 
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java
index 1f31898..4eea2cf 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositoryMigrator.java
@@ -12,6 +12,7 @@
 package org.eclipse.mylyn.internal.bugzilla.ui.tasklist;
 
 import org.eclipse.mylyn.internal.bugzilla.core.BugzillaCorePlugin;
+import org.eclipse.mylyn.internal.bugzilla.core.IBugzillaConstants;
 import org.eclipse.mylyn.internal.tasks.ui.editors.TaskEditorExtensions;
 import org.eclipse.mylyn.tasks.core.AbstractRepositoryMigrator;
 import org.eclipse.mylyn.tasks.core.TaskRepository;
@@ -40,6 +41,15 @@ public class BugzillaRepositoryMigrator extends AbstractRepositoryMigrator {
 			repository.setProperty(TaskEditorExtensions.REPOSITORY_PROPERTY_AVATAR_SUPPORT, Boolean.TRUE.toString());
 			migrated = true;
 		}
+		if (repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_DEFAULT_MILESTONE) == null
+				&& repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC) == null
+				&& repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_WORKFLOW) != null) {
+			repository.setProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC,
+					repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_WORKFLOW));
+			repository.setProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_DEFAULT_MILESTONE,
+					repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_WORKFLOW));
+			migrated = true;
+		}
 		return migrated;
 	}
 
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java
index eabb201..c1b47a7 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/BugzillaRepositorySettingsPage.java
@@ -78,7 +78,7 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 
 	private static final String LABEL_SHORT_LOGINS = Messages.BugzillaRepositorySettingsPage_local_users_enabled;
 
-	private static final String LABEL_VERSION_NUMBER = "3.0 - 4.0"; //$NON-NLS-1$
+	private static final String LABEL_VERSION_NUMBER = "3.0 - 4.4"; //$NON-NLS-1$
 
 	private static final String TITLE = Messages.BugzillaRepositorySettingsPage_bugzilla_repository_settings;
 
@@ -104,7 +104,11 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 
 	private Combo languageSettingCombo;
 
-	private Button useXMLRPCstatusTransitions;
+	private Button useXMLRPC;
+
+	private Button useXMLRPCWorkflowTransitions;
+
+	private Button useXMLRPCDefaultMilestones;
 
 	private Button autodetectXMLRPCFile;
 
@@ -283,9 +287,7 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 				.align(SWT.FILL, SWT.CENTER)
 				.hint(300, SWT.DEFAULT)
 				.applyTo(descriptorFile);
-		useXMLRPCstatusTransitions = new Button(workflowGroup, SWT.CHECK | SWT.LEFT);
-		useXMLRPCstatusTransitions.setText(Messages.BugzillaRepositorySettingsPage_UseXmlRpc);
-		useXMLRPCstatusTransitions.setToolTipText(Messages.BugzillaRepositorySettingsPage_RequiresBugzilla3_6);
+		new Label(workflowGroup, SWT.NONE);
 		Composite descriptorComposite = new Composite(workflowGroup, SWT.NONE);
 		gridLayout = new GridLayout(2, false);
 		gridLayout.marginWidth = 0;
@@ -392,6 +394,22 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 				languageSettingCombo.select(languageSettingCombo.indexOf(IBugzillaConstants.DEFAULT_LANG));
 			}
 		}
+
+		Group xmlrpcGroup = new Group(parent, SWT.SHADOW_ETCHED_IN);
+		xmlrpcGroup.setLayout(new GridLayout(3, false));
+		xmlrpcGroup.setText(Messages.BugzillaRepositorySettingsPage_XMLRPC);
+		xmlrpcGroup.setToolTipText(Messages.BugzillaRepositorySettingsPage_RequiresBugzilla3_6);
+		GridDataFactory.fillDefaults().grab(true, false).align(SWT.FILL, SWT.CENTER).span(2, 1).applyTo(xmlrpcGroup);
+		useXMLRPC = new Button(xmlrpcGroup, SWT.CHECK | SWT.LEFT);
+		useXMLRPC.setText(Messages.BugzillaRepositorySettingsPage_XMLRPC_Active);
+		useXMLRPC.setToolTipText(Messages.BugzillaRepositorySettingsPage_RequiresBugzilla3_6);
+		useXMLRPCWorkflowTransitions = new Button(xmlrpcGroup, SWT.CHECK | SWT.LEFT);
+		useXMLRPCWorkflowTransitions.setText(Messages.BugzillaRepositorySettingsPage_XMLRPC_WorkflowTransitions);
+		useXMLRPCWorkflowTransitions.setToolTipText(Messages.BugzillaRepositorySettingsPage_RequiresBugzilla3_6);
+		useXMLRPCDefaultMilestones = new Button(xmlrpcGroup, SWT.CHECK | SWT.LEFT);
+		useXMLRPCDefaultMilestones.setText(Messages.BugzillaRepositorySettingsPage_XMLRPC_DefaultMilestones);
+		useXMLRPCDefaultMilestones.setToolTipText(Messages.BugzillaRepositorySettingsPage_RequiresBugzilla3_6);
+
 		Group adminGroup = new Group(parent, SWT.SHADOW_ETCHED_IN);
 		adminGroup.setLayout(new GridLayout(3, true));
 		adminGroup.setText(Messages.BugzillaRepositorySettingsPage_admin_parameter);
@@ -452,7 +470,7 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 					use_see_also.setSelection(!value);
 
 					value = Boolean.parseBoolean(myTemplate.getAttribute("useXMLRPC")); //$NON-NLS-1$
-					useXMLRPCstatusTransitions.setSelection(value);
+					useXMLRPC.setSelection(value);
 				} else {
 					useclassification.setSelection(true);
 					usetargetmilestone.setSelection(false);
@@ -460,7 +478,9 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 					usestatuswhiteboard.setSelection(false);
 					usebugaliases.setSelection(true);
 					use_see_also.setSelection(true);
-					useXMLRPCstatusTransitions.setSelection(false);
+					useXMLRPC.setSelection(false);
+					useXMLRPCWorkflowTransitions.setSelection(false);
+					useXMLRPCDefaultMilestones.setSelection(false);
 				}
 			} else {
 				// we use the repository values
@@ -478,7 +498,11 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 				use_see_also.setSelection(!value);
 
 				value = Boolean.parseBoolean(repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC));
-				useXMLRPCstatusTransitions.setSelection(value);
+				useXMLRPC.setSelection(value);
+				value = Boolean.parseBoolean(repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_WORKFLOW));
+				useXMLRPCWorkflowTransitions.setSelection(value);
+				value = Boolean.parseBoolean(repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_DEFAULT_MILESTONE));
+				useXMLRPCDefaultMilestones.setSelection(value);
 			}
 		}
 	}
@@ -539,7 +563,11 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 			changed = changed || repositoryAuth.getPassword().compareTo(getPassword()) != 0;
 		}
 		changed = changed
-				|| Boolean.parseBoolean(repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC)) != useXMLRPCstatusTransitions.getSelection();
+				|| Boolean.parseBoolean(repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC)) != useXMLRPC.getSelection();
+		changed = changed
+				|| Boolean.parseBoolean(repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_WORKFLOW)) != useXMLRPCWorkflowTransitions.getSelection();
+		changed = changed
+				|| Boolean.parseBoolean(repository.getProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_DEFAULT_MILESTONE)) != useXMLRPCDefaultMilestones.getSelection();
 		changed = changed
 				|| !equals(repository.getProperty(IBugzillaConstants.BUGZILLA_DESCRIPTOR_FILE),
 						descriptorFile.getText());
@@ -667,8 +695,11 @@ public class BugzillaRepositorySettingsPage extends AbstractRepositorySettingsPa
 		repository.setProperty(IBugzillaConstants.REPOSITORY_SETTING_SHORT_LOGIN,
 				String.valueOf(cleanQAContact.getSelection()));
 		repository.setProperty(IBugzillaConstants.BUGZILLA_LANGUAGE_SETTING, languageSettingCombo.getText());
-		repository.setProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC,
-				Boolean.toString(useXMLRPCstatusTransitions.getSelection()));
+		repository.setProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC, Boolean.toString(useXMLRPC.getSelection()));
+		repository.setProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_WORKFLOW,
+				Boolean.toString(useXMLRPCWorkflowTransitions.getSelection()));
+		repository.setProperty(IBugzillaConstants.BUGZILLA_USE_XMLRPC_DEFAULT_MILESTONE,
+				Boolean.toString(useXMLRPCDefaultMilestones.getSelection()));
 		repository.setProperty(IBugzillaConstants.BUGZILLA_DESCRIPTOR_FILE, descriptorFile.getText());
 		if (!autodetectPlatformOS.getSelection()) {
 			repository.setProperty(IBugzillaConstants.BUGZILLA_DEF_PLATFORM,
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/Messages.java org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/Messages.java
index f30aa00..4081048 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/Messages.java
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/Messages.java
@@ -119,6 +119,14 @@ public class Messages extends NLS {
 
 	public static String BugzillaRepositorySettingsPage_Validating_server_settings;
 
+	public static String BugzillaRepositorySettingsPage_XMLRPC;
+
+	public static String BugzillaRepositorySettingsPage_XMLRPC_Active;
+
+	public static String BugzillaRepositorySettingsPage_XMLRPC_DefaultMilestones;
+
+	public static String BugzillaRepositorySettingsPage_XMLRPC_WorkflowTransitions;
+
 	public static String BugzillaTaskAttachmentPage_Advanced;
 
 }
diff --git org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/messages.properties org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/messages.properties
index c547c84..b76360c 100644
--- org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/messages.properties
+++ org.eclipse.mylyn.tasks/org.eclipse.mylyn.bugzilla.ui/src/org/eclipse/mylyn/internal/bugzilla/ui/tasklist/messages.properties
@@ -43,7 +43,11 @@ BugzillaRepositorySettingsPage_insiderGroup=Enable private comments:
 BugzillaRepositorySettingsPage_insiderGroup_ToolTip=User ID is member of the insider group\nso private comments are supported
 BugzillaRepositorySettingsPage_local_users_enabled=Local users enabled:
 BugzillaRepositorySettingsPage_override_auto_detection_of_platform=Override auto detection of Platform and OS for new bug reports.
-BugzillaRepositorySettingsPage_RequiresBugzilla3_6=Requires Bugzilla > 3.6\nThe description file is not used
+BugzillaRepositorySettingsPage_RequiresBugzilla3_6=To use XMLRPC you need Bugzilla > 3.6
+BugzillaRepositorySettingsPage_XMLRPC=XMLRPC
+BugzillaRepositorySettingsPage_XMLRPC_Active=Active
+BugzillaRepositorySettingsPage_XMLRPC_DefaultMilestones=Default Milestones
+BugzillaRepositorySettingsPage_XMLRPC_WorkflowTransitions=Workflow Transitions
 BugzillaRepositorySettingsPage_Retrieving_repository_configuration=Retrieving repository configuration
 BugzillaRepositorySettingsPage_SelectDescriptorFile=Select descriptor file
 BugzillaRepositorySettingsPage_Server_URL_is_invalid=Server URL is invalid.
-- 
1.8.2.1