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;
import tmcsim.simulationmanager.model.IncidentListTableModel.INCIDENT_LIST_COLUMNS;
/**
* DeleteIncidentAction is an AbstractAction that is used for removing
* an incident from the simulation that has not been started. When the action
* is performed, the incident selected in the incident list table on the
* SimulationManagerView is chosen for triggering. If the user has not
* selected an incident to trigger, an information window is shown to prompt
* the user to select an incident. If an incident has been selected, the
* action calls the SimulationManagerModel with the Incident Log Number to remove
* the incident.
*
*
* The NETWORK_ID_SPINNER key should be assigned the IncidentListTable object
* from the SimulationManagerView object.
*/
@SuppressWarnings("serial")
public class DeleteIncidentAction 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 DeleteIncidentAction(SimulationManagerView view) {
super("Delete");
theSimManagerView = view;
}
public void actionPerformed(ActionEvent evt) {
if(getValue(INCIDENT_LIST_TABLE) == null) {
Logger.getLogger("tmcsim.simulationmanager.actions").logp(
Level.WARNING, "LoadParamicsNetworkAction",
"actionPerformed",
"Object for INCIDENT_LIST_TABLE is null.");
return;
}
Runnable deleteRunnable = new Runnable(){
public void run() {
try {
if(((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRowCount() == 0) {
throw new ScriptException("Please select the incident you wish to delete.");
}
int selectedRow = ((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRow();
Integer incidentLogNum = (Integer)((JTable)getValue(INCIDENT_LIST_TABLE)).getValueAt(
selectedRow, INCIDENT_LIST_COLUMNS.LOG_NUM_COL.colNum);
theSimManagerView.getModel().deleteIncident(incidentLogNum);
}
catch (ScriptException se) {
theSimManagerView.ScriptExceptionHandler(se);
}
catch (SimulationException se) {
theSimManagerView.SimulationExceptionHandler(se);
}
}
};
Thread theThread = new Thread(deleteRunnable);
theThread.start();
}
}