package com.netifera.platform.net.daemon.sniffing.ui;
import java.lang.reflect.InvocationTargetException;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.dialogs.MessageDialog;
import org.eclipse.jface.dialogs.ProgressMonitorDialog;
import org.eclipse.swt.SWT;
import org.eclipse.swt.widgets.FileDialog;
import org.eclipse.swt.widgets.Shell;
import org.eclipse.ui.PlatformUI;
import org.eclipse.ui.plugin.AbstractUIPlugin;
import com.netifera.platform.api.model.ISpace;
import com.netifera.platform.net.daemon.sniffing.ISniffingDaemon;
import com.netifera.platform.net.sniffing.ICaptureFileInterface;
public class CaptureFileAction extends Action {
public final static String ID = "capture-file-action";
private final SniffingActionManager manager;
CaptureFileAction(SniffingActionManager manager) {
this.manager = manager;
setId(ID);
setToolTipText("Open A Packet Capture File");
setImageDescriptor(AbstractUIPlugin.imageDescriptorFromPlugin(
Activator.PLUGIN_ID, "icons/open_capfile.png"));
}
public void run() {
final ISpace space = Activator.getDefault().getCurrentSpace();
if(space == null) {
return;
}
final Shell shell = PlatformUI.getWorkbench().getDisplay().getActiveShell();
manager.disableAll();
FileDialog dialog = new FileDialog(shell, SWT.OPEN);
dialog.setText("Select a PCAP capture file to open");
String path = dialog.open();
if(path == null) {
manager.setState();
return;
}
final ISniffingDaemon daemon = Activator.getDefault().getSniffingDaemon();
final ICaptureFileInterface iface = daemon.createCaptureFileInterface(path);
if(!iface.isValid()) {
MessageDialog.openError(shell, "Open '" + path + "' failed.", iface.getErrorMessage());
manager.setState();
return;
}
CaptureFileRunnable runnable = new CaptureFileRunnable(iface, daemon, manager, space);
try {
new ProgressMonitorDialog(shell).run(true, true, runnable);
} catch (InvocationTargetException e) {
// TODO Auto-generated catch block
e.printStackTrace();
} catch (InterruptedException e) {
daemon.cancelCaptureFile();
}
}
}