/******************************************************************************* * Copyright (c) 2010 Andrew Gvozdev 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: * Andrew Gvozdev (Quoin Inc.) - Initial API and implementation * Alex Collins (Broadcom Corp.) - Global console *******************************************************************************/ package org.eclipse.cdt.internal.ui.buildconsole; import java.net.URI; import org.eclipse.core.filesystem.EFS; import org.eclipse.core.filesystem.IFileStore; import org.eclipse.core.filesystem.URIUtil; import org.eclipse.core.resources.IProject; import org.eclipse.core.runtime.CoreException; import org.eclipse.jface.action.Action; import org.eclipse.jface.dialogs.MessageDialog; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.Display; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.swt.widgets.Shell; import org.eclipse.cdt.core.resources.IConsole; import org.eclipse.cdt.core.resources.ResourcesUtil; import org.eclipse.cdt.ui.CUIPlugin; import org.eclipse.cdt.ui.IBuildConsoleManager; import org.eclipse.cdt.internal.ui.CPluginImages; /** * Action to copy build log from working file to a user selected file. */ public class CopyBuildLogAction extends Action { private BuildConsolePage fConsolePage; public CopyBuildLogAction(BuildConsolePage page) { super(); setToolTipText(ConsoleMessages.CopyLog_ActionTooltip); CPluginImages.setImageDescriptors(this, CPluginImages.T_LCL, CPluginImages.IMG_SAVE_CONSOLE); fConsolePage = page; } @Override public void run() { IBuildConsoleManager consoleManager = fConsolePage.getConsole().getConsoleManager(); IProject project = fConsolePage.getProject(); IConsole console = consoleManager.getProjectConsole(project); Shell shell = Display.getCurrent().getActiveShell(); if (console instanceof BuildConsolePartitioner) { URI srcURI = ((BuildConsolePartitioner)console).getLogURI(); if (srcURI==null) { MessageDialog.openWarning(shell, ConsoleMessages.CopyLog_UnavailableLog, ConsoleMessages.CopyLog_BuildNotLogged); return; } IFileStore srcStore = null; try { srcStore = EFS.getStore(srcURI); } catch (CoreException e) { CUIPlugin.log(e); MessageDialog.openError(shell, ConsoleMessages.CopyLog_UnavailableLog, ConsoleMessages.CopyLog_UnableToAccess+srcURI); return; } if (!srcStore.fetchInfo().exists()) { MessageDialog.openError(shell, ConsoleMessages.CopyLog_UnavailableLog, ConsoleMessages.CopyLog_LogFileIsNotAvailable); return; } // open file dialog FileDialog dialog = new FileDialog(shell, SWT.NONE); dialog.setText(ConsoleMessages.CopyLog_ChooseDestination); String destLocation = dialog.open(); if (destLocation!=null) { URI destURI = URIUtil.toURI(destLocation); if (destURI==null) { MessageDialog.openError(shell, ConsoleMessages.CopyLog_UnavailableLog, ConsoleMessages.CopyLog_InvalidDestination+destLocation); return; } try { IFileStore destStore = EFS.getStore(destURI); srcStore.copy(destStore, EFS.OVERWRITE, null); } catch (CoreException e) { CUIPlugin.log(e); MessageDialog.openError(shell, ConsoleMessages.CopyLog_ErrorCopyingFile, ConsoleMessages.CopyLog_ErrorWhileCopyingLog+e.getLocalizedMessage()); } finally { ResourcesUtil.refreshWorkspaceFiles(destURI); } } } else { MessageDialog.openWarning(shell, ConsoleMessages.CopyLog_UnavailableLog, ConsoleMessages.CopyLog_BuildNotLogged); } } }