/******************************************************************************* * Copyright (c) 2004, 2009 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: * Jeff Pound - intial API and implementation * Tasktop Technologies - improvements * Chris Aniszczyk <zx@us.ibm.com> - bug 208819 *******************************************************************************/ 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.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; /** * Creates a new task from the selected error log entry. * * @author Jeff Pound * @author Steffen Pingel */ public class NewTaskFromErrorAction implements IObjectActionDelegate { public static final String ID = "org.eclipse.mylyn.tasklist.ui.repositories.actions.create"; //$NON-NLS-1$ private LogEntry entry; private void createTask(LogEntry entry) { 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 } return status; } public void run() { createTask(entry); } public void run(IAction action) { run(); } public void selectionChanged(IAction action, ISelection selection) { Object object = ((IStructuredSelection) selection).getFirstElement(); if (object instanceof LogEntry) { entry = (LogEntry) object; } } public void setActivePart(IAction action, IWorkbenchPart targetPart) { } }