/*******************************************************************************
* Copyright (c) 2013 Red Hat, Inc.
* 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:
* Red Hat - initial API and implementation
*******************************************************************************/
package org.eclipse.linuxtools.internal.systemtap.ui.ide.handlers;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.InputStreamReader;
import java.nio.charset.Charset;
import java.util.Arrays;
import org.eclipse.core.commands.AbstractHandler;
import org.eclipse.core.commands.ExecutionEvent;
import org.eclipse.linuxtools.internal.systemtap.ui.ide.IDEPerspective;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.IFilteredDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.row.FilteredRowDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.row.RowDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.table.FilteredTableDataSet;
import org.eclipse.linuxtools.systemtap.graphing.core.datasets.table.TableDataSet;
import org.eclipse.linuxtools.systemtap.graphing.ui.views.GraphSelectorEditor;
import org.eclipse.linuxtools.systemtap.graphing.ui.views.GraphSelectorEditorInput;
import org.eclipse.linuxtools.systemtap.graphing.ui.widgets.ExceptionErrorDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.ui.IWorkbenchPage;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.WorkbenchException;
/**
* This handler imports data from an external file to populate
* a {@link GraphSelectorEditor}.
* into an external file, which can be imported back in later.
*/
public class ImportDataSetHandler extends AbstractHandler {
@Override
public Object execute(ExecutionEvent event) {
FileDialog dialog = new FileDialog(PlatformUI.getWorkbench().getActiveWorkbenchWindow().getShell(), SWT.OPEN);
dialog.setFilterExtensions(new String[]{Messages.DataSetFileExtension});
dialog.setText(Messages.ImportDataSetAction_DialogTitle);
String path = dialog.open();
if (path != null) {
execute(path);
}
return null;
}
/**
* Import a data set from the specified path.
* @param path The path of the data set to import.
*/
public void execute(String path) {
IFilteredDataSet dataset = null;
File file = new File(path);
try (InputStreamReader fr = new InputStreamReader(new FileInputStream(file), Charset.defaultCharset());
BufferedReader br = new BufferedReader(fr)) {
String id = br.readLine();
String[] titles = br.readLine().split(", "); //$NON-NLS-1$
if (id == null && titles == null) {
throw new IOException();
} else if (id.equals(RowDataSet.ID)) {
dataset = new FilteredRowDataSet(titles);
} else if (id.equals(TableDataSet.ID)) {
dataset = new FilteredTableDataSet(titles);
} else {
throw new IOException();
}
dataset.readFromFile(file);
String title = path.substring(path.lastIndexOf('/')+1);
IWorkbenchPage p = PlatformUI.getWorkbench().showPerspective(IDEPerspective.ID, PlatformUI.getWorkbench().getActiveWorkbenchWindow());
GraphSelectorEditor ivp = (GraphSelectorEditor)p.openEditor(new GraphSelectorEditorInput(title), GraphSelectorEditor.ID);
ivp.createScriptSets(path, Arrays.asList(title), Arrays.asList(dataset));
} catch (FileNotFoundException fnfe) {
ExceptionErrorDialog.openError(Messages.ImportDataSetAction_FileNotFound, fnfe);
} catch (IOException ioe) {
ExceptionErrorDialog.openError(Messages.ImportDataSetAction_FileInvalid, ioe);
} catch (WorkbenchException we) {
ExceptionErrorDialog.openError(Messages.RunScriptChartHandler_couldNotSwitchToGraphicPerspective, we);
}
}
}