/*
* Contributions to FindBugs
* Copyright (C) 2008, Andrei Loskutov
*
* This library is free software; you can redistribute it and/or
* modify it under the terms of the GNU Lesser General Public
* License as published by the Free Software Foundation; either
* version 2.1 of the License, or (at your option) any later version.
*
* This library is distributed in the hope that it will be useful,
* but WITHOUT ANY WARRANTY; without even the implied warranty of
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
* Lesser General Public License for more details.
*
* You should have received a copy of the GNU Lesser General Public
* License along with this library; if not, write to the Free Software
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
*/
package de.tobject.findbugs.actions;
import java.util.Set;
import org.eclipse.core.resources.IMarker;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.IStructuredSelection;
import org.eclipse.ui.IObjectActionDelegate;
import org.eclipse.ui.IWorkbenchPart;
import de.tobject.findbugs.FindbugsPlugin;
import de.tobject.findbugs.reporter.MarkerUtil;
import de.tobject.findbugs.util.Util;
public class CopyMarkerDetailsAction implements IObjectActionDelegate {
private ISelection selection;
public CopyMarkerDetailsAction() {
super();
}
public void selectionChanged(IAction action, ISelection newSelection) {
this.selection = newSelection;
}
public void setActivePart(IAction action, IWorkbenchPart targetPart) {
// noop
}
public void run(IAction action) {
if (selection.isEmpty() || !(selection instanceof IStructuredSelection)) {
return;
}
Set<IMarker> markers = getMarkers();
String content = getContent(markers);
Util.copyToClipboard(content);
}
private String getContent(Set<IMarker> markers) {
StringBuilder fullText = new StringBuilder();
for (IMarker marker : markers) {
try {
StringBuilder line = new StringBuilder();
IResource resource = marker.getResource();
if (resource != null) {
IPath location = resource.getLocation();
if (location != null) {
line.append(location.toPortableString());
} else {
line.append(resource.getFullPath());
}
}
Integer lineNumber = (Integer) marker.getAttribute(IMarker.LINE_NUMBER);
line.append(":").append(lineNumber);
String message = (String) marker.getAttribute(IMarker.MESSAGE);
line.append(" ").append(message);
line.append(System.getProperty("line.separator", "\n"));
fullText.append(line.toString());
} catch (CoreException e) {
FindbugsPlugin.getDefault().logException(e, "Exception while parsing content of FindBugs markers.");
}
}
return fullText.toString();
}
private Set<IMarker> getMarkers() {
return MarkerUtil.getMarkerFromSelection(selection);
}
}