/*******************************************************************************
* Copyright (c) 2008, 2016 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
* Patrik Suzzi <psuzzi@gmail.com> - Bug 496319
******************************************************************************/
package org.eclipse.ui.internal.ide.commands;
import java.util.Properties;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.core.commands.ExecutionException;
import org.eclipse.core.runtime.IProduct;
import org.eclipse.core.runtime.Platform;
import org.eclipse.swt.dnd.Clipboard;
import org.eclipse.swt.dnd.TextTransfer;
import org.eclipse.swt.dnd.Transfer;
import org.eclipse.ui.internal.ProductProperties;
/**
* Copies the main build information to the clipboard, including os version and
* windowing system. Useful for debugging and bug reporting/verification.
*
* @since 3.4
*
*/
public class CopyBuildIdToClipboardHandler extends AbstractHandler {
/** Platform O.S. */
private static final String OS_NAME = "os.name"; //$NON-NLS-1$
/** O.S. Version */
private static final String OS_VERSION = "os.version"; //$NON-NLS-1$
/** Platform architecture property name */
private static final String OSGI_ARCH = "osgi.arch"; //$NON-NLS-1$
/** Platform windowing system */
private static final String OSGI_WS = "osgi.ws"; //$NON-NLS-1$
/** GTK version */
private static final String SWT_GTK_VERSION = "org.eclipse.swt.internal.gtk.version"; //$NON-NLS-1$
/** WebKitGTK version */
static final String SWT_WEBKITGTK_VERSION = "org.eclipse.swt.internal.webkitgtk.version"; //$NON-NLS-1$
@Override
public Object execute(ExecutionEvent event) throws ExecutionException {
final IProduct product = Platform.getProduct();
if (product == null )
throw new ExecutionException("No product is defined."); //$NON-NLS-1$
String aboutText = ProductProperties.getAboutText(product);
String lines[] = aboutText.split("\\r?\\n"); //$NON-NLS-1$
if (lines.length<=3){
throw new ExecutionException("Product About Text is not properly defined."); //$NON-NLS-1$
}
Properties sp = System.getProperties();
String osInfo = String.format("OS: %s, v.%s, %s / %s", //$NON-NLS-1$
sp.get(OS_NAME), sp.get(OS_VERSION), sp.get(OSGI_ARCH), sp.get(OSGI_WS));
// defined in gtk systems
String gtkVer = sp.getProperty(SWT_GTK_VERSION);
if (gtkVer != null) {
osInfo += String.format(" %s", gtkVer); //$NON-NLS-1$
}
// defined after launching WebKit, e.g. in Welcome Window
String webkitGtkVer = sp.getProperty(SWT_WEBKITGTK_VERSION);
if (webkitGtkVer != null) {
osInfo += String.format(", WebKit %s", webkitGtkVer); //$NON-NLS-1$
}
String toCopy = String.format("%s%n%s%n%s%n%s%n", lines[0], lines[2], lines[3], osInfo); //$NON-NLS-1$
Clipboard clipboard = new Clipboard(null);
try {
TextTransfer textTransfer = TextTransfer.getInstance();
Transfer[] transfers = new Transfer[] { textTransfer };
Object[] data = new Object[] { toCopy };
clipboard.setContents(data, transfers);
} finally {
clipboard.dispose();
}
return null;
}
}