Skip to main content
summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorspingel2008-05-27 04:40:19 +0000
committerspingel2008-05-27 04:40:19 +0000
commitea831752ea1d851dbe3b549a6de1b48954f0e477 (patch)
treedbbf67a8cb3eef7764b408d387bcc0cdaae3f01f /org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks
parent19ab33f48055164ed5c9f076539a917749901eae (diff)
downloadorg.eclipse.mylyn.tasks-ea831752ea1d851dbe3b549a6de1b48954f0e477.tar.gz
org.eclipse.mylyn.tasks-ea831752ea1d851dbe3b549a6de1b48954f0e477.tar.xz
org.eclipse.mylyn.tasks-ea831752ea1d851dbe3b549a6de1b48954f0e477.zip
NEW - bug 212209: provide a flexible bug reporting facility
https://bugs.eclipse.org/bugs/show_bug.cgi?id=212209
Diffstat (limited to 'org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks')
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/AttributeTaskMapper.java99
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java20
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/IRepositoryConstants.java2
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskContributorManager.java42
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java246
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TasksBugsPlugin.java34
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/NewTaskFromErrorAction.java11
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/ReportBugAction.java10
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorPage.java89
-rw-r--r--org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java27
10 files changed, 399 insertions, 181 deletions
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/AttributeTaskMapper.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/AttributeTaskMapper.java
index 8a9ab5cad..e9355c90c 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/AttributeTaskMapper.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/AttributeTaskMapper.java
@@ -8,14 +8,21 @@
package org.eclipse.mylyn.internal.tasks.bugs;
+import java.util.Date;
import java.util.Map;
import java.util.Map.Entry;
import org.eclipse.core.runtime.Assert;
+import org.eclipse.core.runtime.CoreException;
+import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.mylyn.internal.tasks.core.deprecated.DefaultTaskSchema;
import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
import org.eclipse.mylyn.internal.tasks.core.deprecated.TaskSelection;
+import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
+import org.eclipse.mylyn.tasks.core.ITaskMapping;
import org.eclipse.mylyn.tasks.core.TaskRepository;
+import org.eclipse.mylyn.tasks.core.ITask.PriorityLevel;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
import org.eclipse.mylyn.tasks.ui.TasksUi;
/**
@@ -64,4 +71,96 @@ public class AttributeTaskMapper {
}
}
+ @SuppressWarnings("restriction")
+ public TaskData createTaskData(IProgressMonitor monitor) throws CoreException {
+ ITaskMapping taskMapping = getTaskMapping();
+ return TasksUiInternal.createTaskData(getTaskRepository(), taskMapping, taskMapping, monitor);
+ }
+
+ public ITaskMapping getTaskMapping() {
+ return new KeyValueMapping(attributes);
+ }
+
+ private static class KeyValueMapping implements ITaskMapping {
+
+ private final Map<String, String> attributes;
+
+ public KeyValueMapping(Map<String, String> attributes) {
+ Assert.isNotNull(attributes);
+ this.attributes = attributes;
+ }
+
+ public void copyFrom(ITaskMapping source) {
+ }
+
+ public Date getCompletionDate() {
+ // ignore
+ return null;
+ }
+
+ public String getComponent() {
+ return attributes.get(IRepositoryConstants.COMPONENT);
+ }
+
+ public Date getCreationDate() {
+ // ignore
+ return null;
+ }
+
+ public String getDescription() {
+ // ignore
+ return null;
+ }
+
+ public Date getDueDate() {
+ // ignore
+ return null;
+ }
+
+ public Date getModificationDate() {
+ // ignore
+ return null;
+ }
+
+ public String getOwner() {
+ // ignore
+ return null;
+ }
+
+ public PriorityLevel getPriority() {
+ // ignore
+ return null;
+ }
+
+ public String getProduct() {
+ return attributes.get(IRepositoryConstants.PRODUCT);
+ }
+
+ public String getSummary() {
+ // ignore
+ return null;
+ }
+
+ public TaskData getTaskData() {
+ // ignore
+ return null;
+ }
+
+ public String getTaskKey() {
+ // ignore
+ return null;
+ }
+
+ public String getTaskKind() {
+ // ignore
+ return null;
+ }
+
+ public String getTaskUrl() {
+ // ignore
+ return null;
+ }
+
+ }
+
}
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java
index 1b5e51c80..514618ec0 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/DefaultTaskContributor.java
@@ -10,6 +10,7 @@ package org.eclipse.mylyn.internal.tasks.bugs;
import java.io.PrintWriter;
import java.io.StringWriter;
+import java.util.HashMap;
import java.util.Map;
import org.eclipse.core.runtime.IBundleGroup;
@@ -26,29 +27,25 @@ public class DefaultTaskContributor extends AbstractTaskContributor {
@Override
public Map<String, String> getAttributes(IStatus status) {
- return null;
- }
-
- @Override
- public String getDescription(IStatus status) {
+ Map<String, String> attributes = new HashMap<String, String>();
if (status instanceof FeatureStatus) {
StringBuilder sb = new StringBuilder();
sb.append("\n\n\n");
sb.append("-- Installed Plug-ins --\n");
- IBundleGroup bundleGroup = ((FeatureStatus)status).getBundleGroup();
-
+ IBundleGroup bundleGroup = ((FeatureStatus) status).getBundleGroup();
+
sb.append(bundleGroup.getIdentifier());
sb.append(" ");
sb.append(bundleGroup.getVersion());
-
+
Bundle[] bundles = bundleGroup.getBundles();
if (bundles != null) {
for (Bundle bundle : bundles) {
sb.append(bundle.getBundleId());
}
}
- return sb.toString();
-
+ attributes.put(IRepositoryConstants.DESCRIPTION, sb.toString());
+
} else {
StringBuilder sb = new StringBuilder();
sb.append("\n\n-- Error Details --\n");
@@ -58,8 +55,9 @@ public class DefaultTaskContributor extends AbstractTaskContributor {
status.getException().printStackTrace(new PrintWriter(writer));
sb.append(writer.getBuffer());
}
- return sb.toString();
+ attributes.put(IRepositoryConstants.DESCRIPTION, sb.toString());
}
+ return attributes;
}
@Override
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/IRepositoryConstants.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/IRepositoryConstants.java
index 0f85efffb..691b92ce8 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/IRepositoryConstants.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/IRepositoryConstants.java
@@ -24,4 +24,6 @@ public class IRepositoryConstants {
@Deprecated
public static final String BRANDING = "branding";
+ public static final String DESCRIPTION = "description";
+
}
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskContributorManager.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskContributorManager.java
index 1f7a46edf..4e7eaa597 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskContributorManager.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskContributorManager.java
@@ -9,6 +9,7 @@
package org.eclipse.mylyn.internal.tasks.bugs;
import java.util.List;
+import java.util.Map;
import java.util.concurrent.CopyOnWriteArrayList;
import org.eclipse.core.runtime.CoreException;
@@ -16,12 +17,14 @@ import org.eclipse.core.runtime.IConfigurationElement;
import org.eclipse.core.runtime.IExtension;
import org.eclipse.core.runtime.IExtensionPoint;
import org.eclipse.core.runtime.IExtensionRegistry;
+import org.eclipse.core.runtime.ISafeRunnable;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Platform;
+import org.eclipse.core.runtime.SafeRunner;
import org.eclipse.core.runtime.Status;
import org.eclipse.mylyn.commons.core.StatusHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
import org.eclipse.mylyn.tasks.bugs.AbstractTaskContributor;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
/**
* @author Steffen Pingel
@@ -96,18 +99,39 @@ public class TaskContributorManager {
taskContributors.remove(taskContributor);
}
- public void updateAttributes(RepositoryTaskData taskData, IStatus status) {
+ public void postProcess(final IStatus status, final TaskData taskData) {
readExtensions();
- for (AbstractTaskContributor contributor : taskContributors) {
- String description = contributor.getDescription(status);
- if (description != null) {
- taskData.setDescription(description);
- return;
- }
+ for (final AbstractTaskContributor contributor : taskContributors) {
+ SafeRunner.run(new ISafeRunnable() {
+ public void handleException(Throwable e) {
+ StatusHandler.log(new Status(IStatus.ERROR, TasksBugsPlugin.ID_PLUGIN, "Task contributor failed", e));
+ }
+
+ public void run() throws Exception {
+ contributor.postProcess(status, taskData);
+ }
+ });
}
+ }
- taskData.setDescription(defaultTaskContributor.getDescription(status));
+ public void preProcess(final IStatus status, final Map<String, String> attributes) {
+ readExtensions();
+
+ for (final AbstractTaskContributor contributor : taskContributors) {
+ SafeRunner.run(new ISafeRunnable() {
+ public void handleException(Throwable e) {
+ StatusHandler.log(new Status(IStatus.ERROR, TasksBugsPlugin.ID_PLUGIN, "Task contributor failed", e));
+ }
+
+ public void run() throws Exception {
+ Map<String, String> contributorAttributes = contributor.getAttributes(status);
+ if (contributorAttributes != null) {
+ attributes.putAll(contributorAttributes);
+ }
+ }
+ });
+ }
}
}
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java
index f3a5baa1f..e217b4c44 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TaskErrorReporter.java
@@ -8,160 +8,164 @@
package org.eclipse.mylyn.internal.tasks.bugs;
-import java.lang.reflect.InvocationTargetException;
import java.util.Map;
import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.CoreException;
-import org.eclipse.core.runtime.IProgressMonitor;
import org.eclipse.core.runtime.IStatus;
-import org.eclipse.core.runtime.OperationCanceledException;
-import org.eclipse.jface.operation.IRunnableWithProgress;
+import org.eclipse.jface.wizard.WizardDialog;
import org.eclipse.mylyn.commons.core.AbstractErrorReporter;
-import org.eclipse.mylyn.internal.tasks.core.AbstractTask;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractAttributeFactory;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractLegacyRepositoryConnector;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.AbstractTaskDataHandler;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.RepositoryTaskData;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.TaskSelection;
-import org.eclipse.mylyn.internal.tasks.ui.RepositoryAwareStatusHandler;
-import org.eclipse.mylyn.internal.tasks.ui.TasksUiPlugin;
-import org.eclipse.mylyn.internal.tasks.ui.deprecated.NewTaskEditorInput;
-import org.eclipse.mylyn.tasks.core.AbstractRepositoryConnector;
-import org.eclipse.mylyn.tasks.core.TaskRepository;
-import org.eclipse.mylyn.tasks.ui.TasksUi;
-import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
-import org.eclipse.ui.IWorkbenchPage;
-import org.eclipse.ui.PlatformUI;
+import org.eclipse.mylyn.internal.tasks.bugs.wizards.ReportErrorWizard;
+import org.eclipse.mylyn.internal.tasks.ui.util.TasksUiInternal;
+import org.eclipse.mylyn.tasks.core.data.TaskData;
/**
* @author Steffen Pingel
*/
-@SuppressWarnings( { "restriction", "deprecation" })
-public class TaskErrorReporter extends AbstractErrorReporter {
+public class TaskErrorReporter {
- private final PluginRepositoryMappingManager manager;
+ private final PluginRepositoryMappingManager mappingManager;
+
+ private final TaskContributorManager contributorManager;
public TaskErrorReporter() {
- manager = new PluginRepositoryMappingManager();
+ this.contributorManager = new TaskContributorManager();
+ this.mappingManager = new PluginRepositoryMappingManager();
+ }
+
+ public TaskContributorManager getContributorManager() {
+ return contributorManager;
}
- // API 3.0 remove: always enable
- public boolean isEnabled() {
- return false; //manager.hasMappings();
+ public PluginRepositoryMappingManager getMappingManager() {
+ return mappingManager;
}
- @Override
public int getPriority(IStatus status) {
Assert.isNotNull(status);
-
String pluginId = status.getPlugin();
for (int i = 0; i <= pluginId.length(); i++) {
- if (manager.getMapping(pluginId.substring(0, i)) != null) {
- return PRIORITY_DEFAULT;
+ if (mappingManager.getMapping(pluginId.substring(0, i)) != null) {
+ return AbstractErrorReporter.PRIORITY_DEFAULT;
}
}
-
- return PRIORITY_NONE;
+ return AbstractErrorReporter.PRIORITY_NONE;
}
- @Override
- public void handle(IStatus status) {
+ public void process(IStatus status) {
Assert.isNotNull(status);
- if (true) {
- RepositoryAwareStatusHandler.getInstance().fail(status, true);
- return;
- }
-
- String pluginId = status.getPlugin();
- Map<String, String> attributes = manager.getAllAttributes(pluginId);
- AttributeTaskMapper mapper = new AttributeTaskMapper(attributes);
- TaskRepository taskRepository = mapper.getTaskRepository();
- try {
- if (taskRepository != null) {
- AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
- taskRepository.getConnectorKind());
- if (connector instanceof AbstractLegacyRepositoryConnector) {
- if (openLegacyTaskEditor(status, taskRepository, mapper)) {
- return;
- }
- }
- }
-
- TaskSelection taskSelection = mapper.createTaskSelection();
-
- // fall back to opening wizard
- TasksUiUtil.openNewTaskEditor(null, taskSelection, taskRepository);
- } catch (OperationCanceledException e) {
- // ignore
- }
+ AttributeTaskMapper mapper = preProcess(status);
+ postProcess(mapper);
}
- @Deprecated
- private boolean openLegacyTaskEditor(IStatus status, TaskRepository taskRepository, AttributeTaskMapper mapper) {
- RepositoryTaskData taskData = createLegacyTaskData(taskRepository, mapper);
- if (taskData != null) {
- taskData.setSummary(status.getMessage());
-
- TaskContributorManager manager = new TaskContributorManager();
- manager.updateAttributes(taskData, status);
-
- String editorId = manager.getEditorId(status);
-
- NewTaskEditorInput editorInput = new NewTaskEditorInput(taskRepository, taskData);
- IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
- TasksUiUtil.openEditor(editorInput, editorId, page);
- return true;
- }
- return false;
+ public AttributeTaskMapper preProcess(IStatus status) {
+ Assert.isNotNull(status);
+ String pluginId = status.getPlugin();
+ Map<String, String> attributes = mappingManager.getAllAttributes(pluginId);
+ contributorManager.preProcess(status, attributes);
+ return new AttributeTaskMapper(attributes);
}
- @Deprecated
- private RepositoryTaskData createLegacyTaskData(final TaskRepository taskRepository, AttributeTaskMapper mapper) {
- AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
- taskRepository.getConnectorKind());
- if (!(connector instanceof AbstractLegacyRepositoryConnector)) {
- return null;
- }
- final AbstractTaskDataHandler taskDataHandler = ((AbstractLegacyRepositoryConnector) connector).getLegacyTaskDataHandler();
- if (taskDataHandler == null) {
- return null;
- }
-
- AbstractAttributeFactory attributeFactory = taskDataHandler.getAttributeFactory(
- taskRepository.getRepositoryUrl(), taskRepository.getConnectorKind(), AbstractTask.DEFAULT_TASK_KIND);
-
- final RepositoryTaskData taskData = new RepositoryTaskData(attributeFactory, taskRepository.getConnectorKind(),
- taskRepository.getRepositoryUrl(), TasksUiPlugin.getDefault().getNextNewRepositoryTaskId());
- taskData.setNew(true);
-
- mapper.applyTo(taskData);
-
+ public void postProcess(AttributeTaskMapper mapper) {
+ Assert.isNotNull(mapper);
+ TaskData taskData;
try {
- IRunnableWithProgress runnable = new IRunnableWithProgress() {
- public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
- try {
- if (!taskDataHandler.initializeTaskData(taskRepository, taskData, monitor)) {
- throw new InvocationTargetException(new Exception());
- }
- } catch (CoreException e) {
- throw new InvocationTargetException(e);
- } catch (OperationCanceledException e) {
- throw new InterruptedException();
- }
- }
- };
-
- PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable);
- } catch (InvocationTargetException e) {
- return null;
- } catch (InterruptedException e) {
- throw new OperationCanceledException();
+ taskData = mapper.createTaskData(null);
+ TasksUiInternal.createAndOpenNewTask(taskData);
+ } catch (CoreException e) {
+ // TODO Auto-generated catch block
+ e.printStackTrace();
}
+ }
- taskDataHandler.cloneTaskData(mapper.createTaskSelection().getLegacyTaskData(), taskData);
-
- return taskData;
+ public void handle(final IStatus status) {
+ ReportErrorWizard wizard = new ReportErrorWizard(TaskErrorReporter.this, status);
+ WizardDialog dialog = new WizardDialog(TasksUiInternal.getShell(), wizard);
+ dialog.setBlockOnOpen(false);
+ dialog.open();
}
+ // legacy support
+// TaskRepository taskRepository = mapper.getTaskRepository();
+// if (taskRepository != null) {
+// AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
+// taskRepository.getConnectorKind());
+// if (connector instanceof AbstractLegacyRepositoryConnector) {
+// try {
+// if (openLegacyTaskEditor(status, taskRepository, mapper)) {
+// return;
+// }
+// } catch (OperationCanceledException e) {
+// return;
+// }
+// }
+// }
+//
+// @Deprecated
+// private boolean openLegacyTaskEditor(IStatus status, TaskRepository taskRepository, AttributeTaskMapper mapper) {
+// RepositoryTaskData taskData = createLegacyTaskData(taskRepository, mapper);
+// if (taskData != null) {
+// taskData.setSummary(status.getMessage());
+//
+// TaskContributorManager manager = new TaskContributorManager();
+// manager.updateAttributes(taskData, status);
+//
+// String editorId = manager.getEditorId(status);
+//
+// NewTaskEditorInput editorInput = new NewTaskEditorInput(taskRepository, taskData);
+// IWorkbenchPage page = PlatformUI.getWorkbench().getActiveWorkbenchWindow().getActivePage();
+// TasksUiUtil.openEditor(editorInput, editorId, page);
+// return true;
+// }
+// return false;
+// }
+//
+// @Deprecated
+// private RepositoryTaskData createLegacyTaskData(final TaskRepository taskRepository, AttributeTaskMapper mapper) {
+// AbstractRepositoryConnector connector = TasksUi.getRepositoryManager().getRepositoryConnector(
+// taskRepository.getConnectorKind());
+// if (!(connector instanceof AbstractLegacyRepositoryConnector)) {
+// return null;
+// }
+// final AbstractTaskDataHandler taskDataHandler = ((AbstractLegacyRepositoryConnector) connector).getLegacyTaskDataHandler();
+// if (taskDataHandler == null) {
+// return null;
+// }
+//
+// AbstractAttributeFactory attributeFactory = taskDataHandler.getAttributeFactory(
+// taskRepository.getRepositoryUrl(), taskRepository.getConnectorKind(), AbstractTask.DEFAULT_TASK_KIND);
+//
+// final RepositoryTaskData taskData = new RepositoryTaskData(attributeFactory, taskRepository.getConnectorKind(),
+// taskRepository.getRepositoryUrl(), TasksUiPlugin.getDefault().getNextNewRepositoryTaskId());
+// taskData.setNew(true);
+//
+// mapper.applyTo(taskData);
+//
+// try {
+// IRunnableWithProgress runnable = new IRunnableWithProgress() {
+// public void run(IProgressMonitor monitor) throws InvocationTargetException, InterruptedException {
+// try {
+// if (!taskDataHandler.initializeTaskData(taskRepository, taskData, monitor)) {
+// throw new InvocationTargetException(new Exception());
+// }
+// } catch (CoreException e) {
+// throw new InvocationTargetException(e);
+// } catch (OperationCanceledException e) {
+// throw new InterruptedException();
+// }
+// }
+// };
+//
+// PlatformUI.getWorkbench().getProgressService().busyCursorWhile(runnable);
+// } catch (InvocationTargetException e) {
+// return null;
+// } catch (InterruptedException e) {
+// throw new OperationCanceledException();
+// }
+//
+// taskDataHandler.cloneTaskData(mapper.createTaskSelection().getLegacyTaskData(), taskData);
+//
+// return taskData;
+// }
+
}
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TasksBugsPlugin.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TasksBugsPlugin.java
index 3d1dc6472..2ae9d6014 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TasksBugsPlugin.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/TasksBugsPlugin.java
@@ -8,6 +8,11 @@
package org.eclipse.mylyn.internal.tasks.bugs;
+import org.eclipse.core.runtime.IStatus;
+import org.eclipse.mylyn.commons.core.AbstractErrorReporter;
+import org.eclipse.swt.widgets.Display;
+import org.eclipse.ui.IWorkbench;
+import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import org.osgi.framework.BundleContext;
@@ -16,8 +21,31 @@ import org.osgi.framework.BundleContext;
*/
public class TasksBugsPlugin extends AbstractUIPlugin {
+ public static class Reporter extends AbstractErrorReporter {
+
+ @Override
+ public int getPriority(IStatus status) {
+ return getTaskErrorReporter().getPriority(status);
+ }
+
+ @Override
+ public void handle(final IStatus status) {
+ IWorkbench workbench = PlatformUI.getWorkbench();
+ if (workbench != null) {
+ Display display = workbench.getDisplay();
+ if (display != null && !display.isDisposed()) {
+ display.asyncExec(new Runnable() {
+ public void run() {
+ getTaskErrorReporter().handle(status);
+ }
+ });
+ }
+ }
+ }
+ }
+
public static final String ID_PLUGIN = "org.eclipse.mylyn.tasks.bugs";
-
+
private static TasksBugsPlugin INSTANCE;
private static TaskErrorReporter taskErrorReporter;
@@ -32,7 +60,7 @@ public class TasksBugsPlugin extends AbstractUIPlugin {
}
return taskErrorReporter;
}
-
+
public TasksBugsPlugin() {
}
@@ -47,5 +75,5 @@ public class TasksBugsPlugin extends AbstractUIPlugin {
INSTANCE = null;
super.stop(context);
}
-
+
}
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/NewTaskFromErrorAction.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/NewTaskFromErrorAction.java
index 0063f7e7c..0446a18d5 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/NewTaskFromErrorAction.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/NewTaskFromErrorAction.java
@@ -17,8 +17,6 @@ import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.mylyn.internal.tasks.bugs.TasksBugsPlugin;
-import org.eclipse.mylyn.internal.tasks.core.deprecated.TaskSelection;
-import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
@@ -84,13 +82,8 @@ public class NewTaskFromErrorAction implements IObjectActionDelegate {
StringBuilder sb = new StringBuilder();
buildDescriptionFromLogEntry(entry, sb, includeChildren);
- if (TasksBugsPlugin.getTaskErrorReporter().isEnabled()) {
- Status status = new Status(entry.getSeverity(), entry.getPluginId(), entry.getMessage());
- TasksBugsPlugin.getTaskErrorReporter().handle(status);
- } else {
- TaskSelection taskSelection = new TaskSelection("", sb.toString());
- TasksUiUtil.openNewTaskEditor(shell, taskSelection, null);
- }
+ Status status = new Status(entry.getSeverity(), entry.getPluginId(), entry.getMessage());
+ TasksBugsPlugin.getTaskErrorReporter().handle(status);
}
public void run() {
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/ReportBugAction.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/ReportBugAction.java
index 9a6f72ea4..751ab24b4 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/ReportBugAction.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/ReportBugAction.java
@@ -11,9 +11,7 @@ package org.eclipse.mylyn.internal.tasks.bugs.actions;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.wizard.WizardDialog;
-import org.eclipse.mylyn.internal.tasks.bugs.TasksBugsPlugin;
import org.eclipse.mylyn.internal.tasks.bugs.wizards.ReportBugOrEnhancementWizard;
-import org.eclipse.mylyn.internal.tasks.ui.actions.NewTaskAction;
import org.eclipse.ui.IWorkbenchWindow;
import org.eclipse.ui.IWorkbenchWindowActionDelegate;
@@ -32,12 +30,8 @@ public class ReportBugAction implements IWorkbenchWindowActionDelegate {
}
public void run(IAction action) {
- if (TasksBugsPlugin.getTaskErrorReporter().isEnabled()) {
- WizardDialog dialog = new WizardDialog(window.getShell(), new ReportBugOrEnhancementWizard());
- dialog.open();
- } else {
- new NewTaskAction().run(action);
- }
+ WizardDialog dialog = new WizardDialog(window.getShell(), new ReportBugOrEnhancementWizard());
+ dialog.open();
}
public void selectionChanged(IAction action, ISelection selection) {
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorPage.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorPage.java
index 09d2ae0e1..0b0b8878b 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorPage.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorPage.java
@@ -8,13 +8,20 @@
package org.eclipse.mylyn.internal.tasks.bugs.wizards;
-import org.eclipse.core.runtime.Assert;
import org.eclipse.core.runtime.IStatus;
+import org.eclipse.jface.layout.GridDataFactory;
import org.eclipse.jface.wizard.WizardPage;
+import org.eclipse.mylyn.internal.tasks.bugs.AttributeTaskMapper;
+import org.eclipse.mylyn.tasks.core.TaskRepository;
import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionAdapter;
+import org.eclipse.swt.events.SelectionEvent;
import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Button;
import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Group;
import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Link;
/**
* @author Steffen Pingel
@@ -23,23 +30,85 @@ public class ReportErrorPage extends WizardPage {
private final IStatus status;
- public ReportErrorPage(IStatus status) {
+ private final AttributeTaskMapper mapper;
+
+ protected TaskRepository taskRepository;
+
+ public ReportErrorPage(AttributeTaskMapper mapper, IStatus status) {
super("reportError");
- Assert.isNotNull(status);
+ this.mapper = mapper;
this.status = status;
setTitle("Unexpected Error");
setMessage("An unexcpeted error has occured");
}
- public void createControl(Composite parent) {
+ public void createControl(Composite parent) {
Composite composite = new Composite(parent, SWT.NONE);
- GridLayout layout = new GridLayout(1, true);
- composite.setLayout(layout);
-
- Label label = new Label(parent, SWT.NONE);
+ composite.setLayout(new GridLayout(1, true));
+
+ Group errorGroup = new Group(composite, SWT.NONE);
+ GridDataFactory.fillDefaults().align(SWT.FILL, SWT.TOP).grab(true, false).applyTo(errorGroup);
+ errorGroup.setText("Error");
+ errorGroup.setLayout(new GridLayout(1, true));
+
+ Label label = new Label(errorGroup, SWT.NONE);
label.setText(status.getMessage());
-
+
+ Link link = new Link(composite, SWT.NONE);
+ link.setText("<a href=\"errorlog\">Show in error log</a>");
+
+ // space
+ new Label(composite, SWT.NONE);
+
+ if (mapper.isMappingComplete()) {
+ final Button defaultRepositoryButton = new Button(composite, SWT.RADIO);
+ defaultRepositoryButton.setText("Report to: " + mapper.getTaskRepository().getRepositoryLabel());
+ defaultRepositoryButton.setSelection(true);
+
+ final Button selectRepositoryButton = new Button(composite, SWT.RADIO);
+ selectRepositoryButton.setText("Select repository");
+
+ defaultRepositoryButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ if (defaultRepositoryButton.getSelection()) {
+ selectRepositoryButton.setSelection(false);
+ }
+ taskRepository = mapper.getTaskRepository();
+ getContainer().updateButtons();
+ }
+ });
+
+ selectRepositoryButton.addSelectionListener(new SelectionAdapter() {
+ @Override
+ public void widgetSelected(SelectionEvent event) {
+ if (selectRepositoryButton.getSelection()) {
+ defaultRepositoryButton.setSelection(false);
+ }
+ taskRepository = null;
+ getContainer().updateButtons();
+ }
+ });
+
+ taskRepository = mapper.getTaskRepository();
+ } else {
+ taskRepository = null;
+ }
setControl(composite);
}
-
+
+ @Override
+ public boolean canFlipToNextPage() {
+ return taskRepository == null;
+ }
+
+ public TaskRepository getTaskRepository() {
+ return taskRepository;
+ }
+
+ @Override
+ public boolean isPageComplete() {
+ return true;
+ }
+
} \ No newline at end of file
diff --git a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java
index dd3268cd9..83925fd49 100644
--- a/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java
+++ b/org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/wizards/ReportErrorWizard.java
@@ -10,9 +10,10 @@ package org.eclipse.mylyn.internal.tasks.bugs.wizards;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.jface.wizard.Wizard;
+import org.eclipse.mylyn.internal.tasks.bugs.AttributeTaskMapper;
+import org.eclipse.mylyn.internal.tasks.bugs.TaskErrorReporter;
import org.eclipse.mylyn.internal.tasks.core.ITaskRepositoryFilter;
import org.eclipse.mylyn.internal.tasks.ui.wizards.NewTaskPage;
-import org.eclipse.mylyn.tasks.core.ITaskMapping;
/**
* @author Steffen Pingel
@@ -21,31 +22,37 @@ public class ReportErrorWizard extends Wizard {
private final IStatus status;
- private final ITaskMapping taskMapping;
+ private final AttributeTaskMapper mapper;
private ReportErrorPage reportErrorPage;
private NewTaskPage newTaskPage;
- public ReportErrorWizard(IStatus status, ITaskMapping taskMapping) {
+ private final TaskErrorReporter taskErrorReporter;
+
+ public ReportErrorWizard(TaskErrorReporter taskErrorReporter, IStatus status) {
+ this.taskErrorReporter = taskErrorReporter;
this.status = status;
- this.taskMapping = taskMapping;
+ this.mapper = taskErrorReporter.preProcess(status);
setWindowTitle("Report Error");
}
@SuppressWarnings("restriction")
@Override
public void addPages() {
- reportErrorPage = new ReportErrorPage(status);
- addPage(reportErrorPage);
- newTaskPage = new NewTaskPage(ITaskRepositoryFilter.CAN_CREATE_NEW_TASK, taskMapping);
+ reportErrorPage = new ReportErrorPage(mapper, status);
addPage(reportErrorPage);
+ newTaskPage = new NewTaskPage(ITaskRepositoryFilter.CAN_CREATE_NEW_TASK, mapper.getTaskMapping());
+ addPage(newTaskPage);
}
@Override
public boolean performFinish() {
- // ignore
- return false;
+ if (reportErrorPage.getTaskRepository() != null) {
+ taskErrorReporter.postProcess(mapper);
+ return true;
+ } else {
+ return newTaskPage.performFinish();
+ }
}
-
}

Back to the top