diff options
author | spingel | 2008-05-27 04:40:19 +0000 |
---|---|---|
committer | spingel | 2008-05-27 04:40:19 +0000 |
commit | ea831752ea1d851dbe3b549a6de1b48954f0e477 (patch) | |
tree | dbbf67a8cb3eef7764b408d387bcc0cdaae3f01f /org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks | |
parent | 19ab33f48055164ed5c9f076539a917749901eae (diff) | |
download | org.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')
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(); + } } - } |