blob: 734649bdb92cb50f5b1556cc242c36efe9940c11 [file] [log] [blame]
/*******************************************************************************
* Copyright (c) 2004, 2011 Frank Becker and others.
*
* This program and the accompanying materials are made available under the
* terms of the Eclipse Public License v. 2.0 which is available at
* https://www.eclipse.org/legal/epl-2.0
*
* SPDX-License-Identifier: EPL-2.0
*
* Contributors:
* Frank Becker - initial API and implementation
*******************************************************************************/
package org.eclipse.mylyn.internal.tasks.bugs.actions;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.mylyn.commons.workbench.WorkbenchUtil;
import org.eclipse.mylyn.tasks.core.TaskMapping;
import org.eclipse.mylyn.tasks.ui.TasksUiUtil;
import org.eclipse.ui.views.markers.MarkerViewHandler;
import org.eclipse.ui.views.markers.internal.MarkerType;
import org.eclipse.ui.views.markers.internal.MarkerTypesModel;
/**
* Creates a new task from the selected marker entry.
*
* @author Frank Becker
* @since 3.0
*/
@SuppressWarnings("restriction")
public class NewTaskFromMarkerHandler extends MarkerViewHandler {
public Object execute(ExecutionEvent event) throws ExecutionException {
IMarker[] markers = getSelectedMarkers(event);
if (markers.length == 0 || markers[0] == null) {
MessageDialog.openInformation(null, Messages.NewTaskFromMarkerHandler_New_Task_from_Marker,
Messages.NewTaskFromMarkerHandler_No_marker_selected);
return null;
}
final IMarker marker = markers[0];
TaskMapping mapping = new TaskMapping() {
@Override
public String getSummary() {
StringBuilder sb = new StringBuilder();
try {
MarkerType type = MarkerTypesModel.getInstance().getType(marker.getType());
sb.append(type.getLabel() + ": "); //$NON-NLS-1$
} catch (CoreException e) {
// ignore
}
return sb.toString() + marker.getAttribute("message", ""); //$NON-NLS-1$ //$NON-NLS-2$
}
@Override
public String getDescription() {
return buildDescriptionFromMarkerItem(marker);
}
};
TasksUiUtil.openNewTaskEditor(WorkbenchUtil.getShell(), mapping, null);
return null;
}
private String buildDescriptionFromMarkerItem(IMarker marker) {
StringBuilder sb = new StringBuilder();
sb.append(Messages.NewTaskFromMarkerHandler_Resource_
+ marker.getResource().getFullPath().removeLastSegments(1).toString().substring(1) + "/" //$NON-NLS-1$
+ marker.getResource().getName());
int lineNumber = marker.getAttribute(IMarker.LINE_NUMBER, -1);
if (lineNumber != -1) {
sb.append(Messages.NewTaskFromMarkerHandler_LOCATION_LINE + lineNumber);
}
return sb.toString();
}
}