package org.jactr.eclipse.runtime.ui.misc;
/*
* default logging
*/
import org.apache.commons.logging.Log;
import org.apache.commons.logging.LogFactory;
import org.eclipse.jface.action.Action;
import org.eclipse.swt.SWT;
import org.jactr.eclipse.runtime.RuntimePlugin;
import org.jactr.eclipse.runtime.marker.MarkerIndex.MarkerRecord;
import org.jactr.eclipse.runtime.session.control.ISessionController2;
public class TimeBasedAction extends Action implements ITimeBasedAction
{
/**
* Logger definition
*/
static private final transient Log LOGGER = LogFactory
.getLog(TimeBasedAction.class);
private Object _node;
private boolean _isRunTo;
private RunContentMenuCreator _menuCreator;
public TimeBasedAction(RunContentMenuCreator menuCreator, Object toWhen,
boolean isRunTo)
{
super(toWhen.toString(), SWT.PUSH);
_isRunTo = isRunTo;
_node = toWhen;
_menuCreator = menuCreator;
}
public double getActionTime()
{
if (_node instanceof Number) return ((Number) _node).doubleValue();
if (_node instanceof MarkerRecord)
{
MarkerRecord record = (MarkerRecord) _node;
return record._time;
}
return 0;
}
public void update(double currentTime)
{
if (_isRunTo)
{
boolean valid = currentTime < getActionTime();
setEnabled(valid);
if (!valid) setToolTipText("Time has passed");
}
}
@Override
public void run()
{
_menuCreator.setLastRun(null);
if (LOGGER.isDebugEnabled())
LOGGER.debug(String.format("Firing %s", _node));
ISessionController2 controller = _menuCreator.getController();
if (_isRunTo)
{
if (controller.canRunTo(_node))
try
{
controller.runTo(_node);
_menuCreator.setLastRun(this);
}
catch (Exception e)
{
RuntimePlugin.error(
String.format("Failed to run to %s", this.getText()), e);
}
}
else if (controller.canRunFor(_node))
try
{
controller.runFor(_node);
_menuCreator.setLastRun(this);
}
catch (Exception e)
{
RuntimePlugin.error(
String.format("Failed to run for %s", this.getText()), e);
}
}
}