package eu.geclipse.traceview.internal;
import org.eclipse.core.runtime.IStatus;
import org.eclipse.core.runtime.Status;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
import org.eclipse.jface.dialogs.ErrorDialog;
import org.eclipse.jface.viewers.ISelection;
import org.eclipse.jface.viewers.StructuredSelection;
import org.eclipse.swt.widgets.Display;
import org.eclipse.ui.IActionDelegate;
import org.eclipse.ui.PartInitException;
import org.eclipse.ui.PlatformUI;
import eu.geclipse.traceview.IProcess;
import eu.geclipse.traceview.ITraceView;
import eu.geclipse.traceview.TraceVisualization;
public abstract class AbstractProcessAction extends Action implements IActionDelegate {
private Object[] selectedObjs;
public void run( final IAction action ) {
boolean allProcs = true;
for (Object obj : this.selectedObjs) {
if (!(obj instanceof IProcess)) allProcs = false;
}
if (!allProcs) {
ErrorDialog.openError( Display.getDefault().getActiveShell(),
"Error", "This action can only be performed on processes",
new Status(IStatus.ERROR, Activator.PLUGIN_ID, "This action can only be performed on processes"));
} else {
try {
IProcess[] procs = new IProcess[this.selectedObjs.length];
for (int i = 0; i < procs.length; i++) {
procs[i] = ( IProcess )this.selectedObjs[i];
}
ITraceView traceView = ( ITraceView )PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage()
.showView( "eu.geclipse.traceview.views.TraceView" );
TraceVisualization vis = traceView.getVisualisationForTrace(((IProcess)this.selectedObjs[0]).getTrace());
if (vis instanceof AbstractGraphVisualization) {
AbstractGraphVisualization graphVis = (AbstractGraphVisualization) vis;
performAction( graphVis, procs );
}
} catch( PartInitException e ) {
// TODO Auto-generated catch block
e.printStackTrace();
}
}
}
abstract void performAction(AbstractGraphVisualization vis, IProcess[] procs);
public void selectionChanged( final IAction action, final ISelection selection ) {
if( selection instanceof StructuredSelection ) {
StructuredSelection structuredSelection = ( StructuredSelection )selection;
this.selectedObjs = structuredSelection.toArray();
}
}
}