/*
* Copyright 2016 Nokia Solutions and Networks
* Licensed under the Apache License, Version 2.0,
* see license.txt file for details.
*/
package org.robotframework.ide.eclipse.main.plugin.console;
import java.io.ByteArrayInputStream;
import java.io.InputStream;
import org.eclipse.core.resources.IFile;
import org.eclipse.core.resources.IResource;
import org.eclipse.core.resources.ResourcesPlugin;
import org.eclipse.core.runtime.CoreException;
import org.eclipse.core.runtime.IPath;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.window.Window;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.dialogs.SaveAsDialog;
import org.robotframework.ide.eclipse.main.plugin.RedImages;
/**
* @author Michal Anglart
*
*/
class SaveRedSessionAction extends Action {
private final Shell shell;
private RedSessionConsole console;
SaveRedSessionAction(final Shell shell, final RedSessionConsole sessionConsole) {
super("Save session output to file", IAction.AS_PUSH_BUTTON);
setImageDescriptor(RedImages.getSaveImage());
this.shell = shell;
this.console = sessionConsole;
}
@Override
public void run() {
final SaveAsDialog dialog = new SaveAsDialog(shell);
if (dialog.open() == Window.OK) {
final IPath chosenPath = dialog.getResult();
final IFile file = ResourcesPlugin.getWorkspace().getRoot().getFile(chosenPath);
try {
if (file.exists()) {
final boolean shouldOverride = MessageDialog.openQuestion(shell, "File already exist",
"The file " + chosenPath.toString() + "already exist. Do you want ot override it?");
if (shouldOverride) {
final String consoleOutput = console.getDocument().get();
final InputStream source = new ByteArrayInputStream(consoleOutput.getBytes());
file.setContents(source, IResource.NONE, null);
}
} else {
final String consoleOutput = console.getDocument().get();
final InputStream source = new ByteArrayInputStream(consoleOutput.getBytes());
file.create(source, IResource.NONE, null);
}
} catch (final CoreException e) {
MessageDialog.openError(shell, "Unable to save file",
"Problem when writing to file. Details:\n" + e.getMessage());
}
}
}
void dispose() {
this.console = null;
}
}