package org.oddjob.monitor.action;
import javax.swing.KeyStroke;
import org.apache.log4j.Logger;
import org.oddjob.FailedToStopException;
import org.oddjob.Stoppable;
import org.oddjob.monitor.Standards;
import org.oddjob.monitor.context.ExplorerContext;
import org.oddjob.monitor.model.JobAction;
import org.oddjob.util.ThreadManager;
/**
* Implement a stop action.
*
* @author Rob Gordon
*/
public class StopAction extends JobAction {
private static final Logger logger = Logger.getLogger(StopAction.class);
/** The job. */
private Object job = null;
/** The ThreadManager that will run the stop. */
private ThreadManager threadManager;
/*
* (non-Javadoc)
* @see org.oddjob.monitor.model.JobOption#getName()
*/
public String getName() {
return "Stop";
}
public String getGroup() {
return JOB_GROUP;
}
public Integer getMnemonicKey() {
return Standards.STOP_MNEMONIC_KEY;
}
public KeyStroke getAcceleratorKey() {
return Standards.STOP_ACCELERATOR_KEY;
}
@Override
protected void doPrepare(ExplorerContext explorerContext) {
if (isPrepared()) {
return;
}
Object component = explorerContext.getThisComponent();
if (component instanceof Stoppable) {
this.job = component;
setEnabled(true);
this.threadManager = explorerContext.getThreadManager();
}
else {
setEnabled(false);
}
}
@Override
protected void doFree(ExplorerContext explorerContext) {
job = null;
}
@Override
protected void doAction() throws Exception {
threadManager.run(new Runnable() {
public void run() {
try {
((Stoppable) job).stop();
} catch (FailedToStopException e) {
logger.warn(e);
}
}
}, "Stopping " + job);
}
}