package tmcsim.simulationmanager.actions;
import java.awt.event.ActionEvent;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.swing.AbstractAction;
import javax.swing.JTable;
import tmcsim.common.ScriptException;
import tmcsim.common.SimulationException;
import tmcsim.simulationmanager.SimulationManagerView;
/**
* TriggerIncidentAction is an AbstractAction that is used for triggering
* a simulation incident. When the action is performed, the incident selected
* in the incident list table on the Simulation Manager is chosen for triggering.
* This is done by sending the incident's log number to the Simulation Manager
* model. If an incident is not selected in the table, a notification
* window is shown to the user prompting for an incident to be selected.
*
*
* The INCIDENT_LIST_TABLE key must be assigned the IncidentListTable object
* from the SimulationManagerView object.
*/
@SuppressWarnings("serial")
public class TriggerIncidentAction extends AbstractAction {
/**
* This key string is used to reference the IncidentListTable object
* from the SimulationManagerView object.
*/
public static final String INCIDENT_LIST_TABLE = "INCIDENT_LIST_TABLE";
/** Reference to the SimulationManagerView object. */
private SimulationManagerView theSimManagerView = null;
/**
* Constructor.
* @param view View class object for the Simulation Manager.
*/
public TriggerIncidentAction(SimulationManagerView view) {
super("Trigger");
theSimManagerView = view;
}
public void actionPerformed(ActionEvent evt) {
if(getValue(INCIDENT_LIST_TABLE) == null) {
Logger.getLogger("tmcsim.simulationmanager.actions").logp(
Level.WARNING, "TriggerIncidentAction", "actionPerformed",
"Object for INCIDENT_LIST_TABLE is null.");
return;
}
Runnable triggerRunnable = new Runnable(){
public void run() {
try {
if(((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRowCount() == 0)
throw new ScriptException("Please select the incident you wish to trigger.");
theSimManagerView.getModel().triggerIncident(
(Integer)((JTable)getValue(INCIDENT_LIST_TABLE)).getValueAt(
((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRow(), 0));
}
catch (ScriptException se) {
theSimManagerView.ScriptExceptionHandler(se);
}
catch (SimulationException se) {
theSimManagerView.SimulationExceptionHandler(se);
}
}
};
Thread theThread = new Thread(triggerRunnable);
theThread.start();
}
}