diff options
Diffstat (limited to 'org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/NewTaskFromErrorAction.java')
-rw-r--r-- | org.eclipse.mylyn.tasks.bugs/src/org/eclipse/mylyn/internal/tasks/bugs/actions/NewTaskFromErrorAction.java | 78 |
1 files changed, 37 insertions, 41 deletions
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 5f0aafe7f..9d498634f 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 @@ -15,13 +15,17 @@ package org.eclipse.mylyn.internal.tasks.bugs.actions; import org.eclipse.jface.action.IAction; import org.eclipse.jface.viewers.ISelection; -import org.eclipse.jface.viewers.IStructuredSelection; +import org.eclipse.jface.viewers.ISelectionChangedListener; +import org.eclipse.jface.viewers.ISelectionProvider; +import org.eclipse.jface.viewers.SelectionChangedEvent; +import org.eclipse.jface.viewers.TreeViewer; import org.eclipse.mylyn.internal.commons.core.ErrorReporterManager; import org.eclipse.mylyn.internal.tasks.bugs.wizards.ErrorLogStatus; -import org.eclipse.ui.IObjectActionDelegate; -import org.eclipse.ui.IWorkbenchPart; -import org.eclipse.ui.internal.views.log.LogEntry; -import org.eclipse.ui.internal.views.log.LogSession; +import org.eclipse.pde.internal.runtime.logview.LogEntry; +import org.eclipse.pde.internal.runtime.logview.LogSession; +import org.eclipse.swt.widgets.TreeItem; +import org.eclipse.ui.IViewActionDelegate; +import org.eclipse.ui.IViewPart; /** * Creates a new task from the selected error log entry. @@ -29,11 +33,11 @@ import org.eclipse.ui.internal.views.log.LogSession; * @author Jeff Pound * @author Steffen Pingel */ -public class NewTaskFromErrorAction implements IObjectActionDelegate { +public class NewTaskFromErrorAction implements IViewActionDelegate, ISelectionChangedListener { public static final String ID = "org.eclipse.mylyn.tasklist.ui.repositories.actions.create"; //$NON-NLS-1$ - private LogEntry entry; + private TreeViewer treeViewer; /** * Fills a {@link StringBuilder} with {@link LogEntry} information, optionally including subentries too @@ -80,42 +84,29 @@ public class NewTaskFromErrorAction implements IObjectActionDelegate { // includeChildren = true; // } // StringBuilder sb = new StringBuilder(); -// buildDescriptionFromLogEntry(entry, sb, true); +// buildDescriptionFromLogEntry(entry, sb, includeChildren); - ErrorLogStatus status = createStatus(entry); - - new ErrorReporterManager().fail(status); - } - - private ErrorLogStatus createStatus(LogEntry entry) { ErrorLogStatus status = new ErrorLogStatus(entry.getSeverity(), entry.getPluginId(), entry.getCode(), entry.getMessage()); - try { - status.setDate(entry.getDate()); - status.setStack(entry.getStack()); - LogSession session = entry.getSession(); - if (session != null) { - status.setLogSessionData(session.getSessionData()); - } - - if (entry.hasChildren()) { - Object[] children = entry.getChildren(entry); - if (children != null) { - for (Object child : children) { - if (child instanceof LogEntry) { - ErrorLogStatus childStatus = createStatus((LogEntry) child); - status.add(childStatus); - } - } - } - } - } catch (Exception e) { - // ignore any errors for setting additional attributes + status.setDate(entry.getDate()); + status.setStack(entry.getStack()); + LogSession session = entry.getSession(); + if (session != null) { + status.setLogSessionData(session.getSessionData()); } - return status; + new ErrorReporterManager().fail(status); } public void run() { + TreeItem[] items = treeViewer.getTree().getSelection(); + LogEntry entry = null; + if (items.length > 0) { + entry = (LogEntry) items[0].getData(); + } + if (entry == null) { + return; + } + createTask(entry); } @@ -123,14 +114,19 @@ public class NewTaskFromErrorAction implements IObjectActionDelegate { run(); } + public void init(IViewPart view) { + ISelectionProvider sp = view.getViewSite().getSelectionProvider(); + sp.addSelectionChangedListener(this); + sp.setSelection(sp.getSelection()); + } + public void selectionChanged(IAction action, ISelection selection) { - Object object = ((IStructuredSelection) selection).getFirstElement(); - if (object instanceof LogEntry) { - entry = (LogEntry) object; - } + // this selection is always empty? explicitly register a listener in + // init() instead } - public void setActivePart(IAction action, IWorkbenchPart targetPart) { + public void selectionChanged(SelectionChangedEvent event) { + treeViewer = (TreeViewer) event.getSource(); } } |