| /******************************************************************************* |
| * Copyright (c) 2007, 2008 IBM Corporation 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: |
| * IBM Corporation - initial API and implementation |
| * Benjamin Cabe <benjamin.cabe@anyware-tech.com> - |
| * Fix for Bug 222375 [Markers] copy markers from markers view should 'pretty print' |
| *******************************************************************************/ |
| package org.eclipse.ui.internal.views.markers; |
| |
| import org.eclipse.core.commands.ExecutionEvent; |
| import org.eclipse.core.resources.IMarker; |
| import org.eclipse.swt.dnd.TextTransfer; |
| import org.eclipse.swt.dnd.Transfer; |
| import org.eclipse.ui.part.MarkerTransfer; |
| import org.eclipse.ui.views.markers.MarkerField; |
| import org.eclipse.ui.views.markers.MarkerViewHandler; |
| |
| /** |
| * MarkerCopyHandler is the handler for the copy action when the markers view is |
| * selected. |
| * |
| * @since 3.4 |
| * |
| */ |
| public class MarkerCopyHandler extends MarkerViewHandler { |
| |
| /* |
| * (non-Javadoc) |
| * |
| * @see org.eclipse.core.commands.IHandler#execute(org.eclipse.core.commands.ExecutionEvent) |
| */ |
| @Override |
| public Object execute(ExecutionEvent event) { |
| ExtendedMarkersView view = getView(event); |
| if (view == null) |
| return null; |
| |
| setClipboard(view); |
| return this; |
| } |
| |
| /** |
| * Set the workbench clipboard for the markers. |
| * |
| * @param view |
| */ |
| private void setClipboard(ExtendedMarkersView view) { |
| |
| IMarker[] markers = view.getSelectedMarkers(); |
| |
| String markerReport = createMarkerReport(view, markers); |
| |
| // Place the markers on the clipboard |
| Object[] data; |
| Transfer[] transferTypes; |
| if (markerReport == null) { |
| data = new Object[] { markers }; |
| transferTypes = new Transfer[] { MarkerTransfer.getInstance() }; |
| } else { |
| data = new Object[] { markers, markerReport }; |
| transferTypes = new Transfer[] { MarkerTransfer.getInstance(), |
| TextTransfer.getInstance() }; |
| } |
| |
| view.getClipboard().setContents(data, transferTypes); |
| |
| } |
| |
| /** |
| * Creates a plain-text report of the selected markers based on predefined |
| * properties. |
| * |
| * @param view |
| * the view being copied |
| * @param markers |
| * @return the marker report |
| */ |
| static String createMarkerReport(ExtendedMarkersView view, IMarker[] markers) { |
| StringBuffer report = new StringBuffer(); |
| |
| MarkerField[] fields = view.getVisibleFields(); |
| |
| final String NEWLINE = System.getProperty("line.separator"); //$NON-NLS-1$ |
| final char DELIMITER = '\t'; |
| |
| // create header |
| for (int i = 0; i < fields.length; i++) { |
| report.append(fields[i].getColumnHeaderText()); |
| if (i == fields.length - 1) { |
| report.append(NEWLINE); |
| } else { |
| report.append(DELIMITER); |
| } |
| } |
| |
| for (int i = 0; i < markers.length; i++) { |
| |
| for (int j = 0; j < fields.length; j++) { |
| report.append(fields[j].getValue(MarkerSupportInternalUtilities |
| .newMarkerItem(markers[i]))); |
| if (j == fields.length - 1) { |
| report.append(NEWLINE); |
| } else { |
| report.append(DELIMITER); |
| } |
| } |
| } |
| |
| return report.toString(); |
| } |
| } |