/******************************************************************************* * Copyright (c) 2006, 2015 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 - Jeff Briggs, Henry Hughes, Ryan Morse * Red Hat - ongoing maintenance *******************************************************************************/ package org.eclipse.linuxtools.internal.systemtap.ui.consolelog.actions; import java.io.File; import java.text.MessageFormat; import org.eclipse.core.runtime.Path; import org.eclipse.jface.action.IAction; import org.eclipse.linuxtools.systemtap.ui.consolelog.internal.ConsoleLogPlugin; import org.eclipse.linuxtools.systemtap.ui.consolelog.internal.Localization; import org.eclipse.linuxtools.systemtap.ui.consolelog.structures.ScriptConsole; import org.eclipse.linuxtools.systemtap.ui.consolelog.structures.ScriptConsole.ScriptConsoleObserver; import org.eclipse.swt.SWT; import org.eclipse.swt.widgets.FileDialog; import org.eclipse.ui.PlatformUI; /** * This class is used to allow the user to save the log generated from an active console */ public class SaveLogAction extends ConsoleAction implements ScriptConsoleObserver { private String logFileName = null; /** * Creates the action for the given script console. * @param consoleParam The console which log is to be saved. * @since 2.0 */ public SaveLogAction(ScriptConsole consoleParam) { super(consoleParam, ConsoleLogPlugin.getDefault().getBundle().getEntry("icons/actions/save_log.gif"), //$NON-NLS-1$ Localization.getString("action.saveLog.name"), //$NON-NLS-1$ Localization.getString("action.saveLog.desc"), //$NON-NLS-1$ IAction.AS_CHECK_BOX); consoleParam.addScriptConsoleObserver(this); } /** * The main method of this class. Handles getting the current <code>ScriptConsole</code> * and telling it to save the output to the selected file. */ @Override public void run() { File file = getFile(); if (file != null) { if (console.saveStreamAndReturnResult(file)) { logFileName = file.toString(); } } updateChecked(); } /** * Brings up a dialog box for the user to select a place to save the log output. * @return File representing the desired destination for the log. */ private File getFile() { FileDialog dialog = new FileDialog(PlatformUI .getWorkbench().getActiveWorkbenchWindow() .getShell(), SWT.SAVE); if (logFileName != null) { Path logPath = new Path(logFileName); dialog.setFilterPath(logPath.removeLastSegments(1).toOSString()); dialog.setFileName(logPath.lastSegment()); } dialog.setText(Localization.getString( !isLogging() ? "SaveLogAction.OutputFile" //$NON-NLS-1$ : "SaveLogAction.OutputFileLocation")); //$NON-NLS-1$ dialog.setOverwrite(true); String path = dialog.open(); return path != null ? new File(path) : null; } public void updateChecked() { if (isLogging()) { setToolTipText(MessageFormat.format( Localization.getString("action.saveLog.name2"), //$NON-NLS-1$ logFileName)); setChecked(true); } else { setToolTipText(Localization.getString("action.saveLog.name")); //$NON-NLS-1$ setChecked(false); } } private boolean isLogging() { return logFileName != null; } @Override public void runningStateChanged(boolean started, boolean stopped) { // Uncheck the button whenever a script restarts, for it will be associated with // a new command and therefore a new logger. if (started && !stopped) { logFileName = null; updateChecked(); } } }