/*****************************************************************************
* Copyright (c) 2006, 2008 g-Eclipse Consortium
* 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
*
* Initial development of the original code was made for the
* g-Eclipse project founded by European Union
* project number: FP6-IST-034327 http://www.geclipse.eu/
*
* Contributors:
* Christof Klausecker GUP, JKU - initial API and implementation
*****************************************************************************/
package eu.geclipse.traceview.internal;
import org.eclipse.jface.action.Action;
import org.eclipse.jface.action.IAction;
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.ITrace;
import eu.geclipse.traceview.ITraceView;
import eu.geclipse.traceview.IVectorEvent;
/**
* Action to activate the cause effect marker
*/
public class CauseEffectAction extends Action implements IActionDelegate {
private Object selectedObj;
public void run( final IAction action ) {
boolean equal = true;
IVectorEvent event = ( IVectorEvent )this.selectedObj;
ITrace trace = event.getProcess().getTrace();
IVectorEvent causeEvent = ( IVectorEvent )trace.getUserData( CauseEffectMarker.MARKER_ID );
for( int i = 0; i < event.getVectorClock().length; i++ ) {
if( causeEvent == null
|| event.getVectorClock()[ i ] != causeEvent.getVectorClock()[ i ] )
{
equal = false;
continue;
}
}
IVectorEvent newCauseEvent;
if( !equal )
newCauseEvent = ( IVectorEvent )this.selectedObj;
else
newCauseEvent = null;
trace.setUserData( CauseEffectMarker.MARKER_ID, newCauseEvent );
Display.getDefault().asyncExec( new Runnable() {
public void run() {
try {
ITraceView traceView = ( ITraceView )PlatformUI.getWorkbench()
.getActiveWorkbenchWindow()
.getActivePage()
.showView( "eu.geclipse.traceview.views.TraceView" ); //$NON-NLS-1$
traceView.redraw();
} catch( PartInitException exception ) {
Activator.logException( exception );
}
}
} );
}
public void selectionChanged( final IAction action, final ISelection selection )
{
if( selection instanceof StructuredSelection ) {
StructuredSelection structuredSelection = ( StructuredSelection )selection;
this.selectedObj = structuredSelection.getFirstElement();
}
}
}