package tmcsim.simulationmanager.actions; import java.awt.event.ActionEvent; import java.util.StringTokenizer; 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.IncidentTimeSpinnerModel; import tmcsim.simulationmanager.model.IncidentListTableModel.INCIDENT_LIST_COLUMNS; /** * RescheduleIncidentAction is an AbstractAction that is used for rescheduling * an incident that has been loaded into the simulation, but not 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 and * the time parsed from the IncidentTimeModel object. *
*
* The INCIDENT_LIST_TABLE key should be assigned the IncidentListTable object * from the SimulationManagerView object. *
*
* The INCIDENT_TIME_MODEL key should be assigned the IncidentTimeModel object * from the SimulationManagerView object. * @author Matthew Cechini */ @SuppressWarnings("serial") public class RescheduleIncidentAction 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"; /** * This key string is used to reference the IncidentTimeModel object * from the SimulationManagerView object. */ public static final String INCIDENT_TIME_MODEL = "INCIDENT_TIME_MODEL"; /** Reference to the SimulationManagerView object. */ private SimulationManagerView theSimManagerView = null; /** * Constructor. * @param view View class object for the Simulation Manager. */ public RescheduleIncidentAction(SimulationManagerView view) { super("Reschedule"); theSimManagerView = view; } public void actionPerformed(ActionEvent evt) { if(getValue(INCIDENT_LIST_TABLE) == null) { Logger.getLogger("tmcsim.simulationmanager.actions").logp( Level.WARNING, "RescheduleIncidentAction", "actionPerformed", "Object for INCIDENT_LIST_TABLE is null."); return; } if(getValue(INCIDENT_TIME_MODEL) == null) { Logger.getLogger("tmcsim.simulationmanager.actions").logp( Level.WARNING, "RescheduleIncidentAction", "actionPerformed", "Object for INCIDENT_TIME_MODEL is null."); return; } Runnable reschedRunnable = new Runnable(){ public void run() { try { if(((JTable)getValue(INCIDENT_LIST_TABLE)).getSelectedRowCount() == 0) throw new ScriptException("Please select the incident you wish to reschedule."); 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); StringTokenizer strTok = new StringTokenizer( (String)((IncidentTimeSpinnerModel)getValue(INCIDENT_TIME_MODEL)).getValue(), ":"); Long newTime = Long.parseLong(strTok.nextToken()) * 3600 + Long.parseLong(strTok.nextToken()) * 60 + Long.parseLong(strTok.nextToken()); theSimManagerView.getModel().rescheduleIncident(newTime, incidentLogNum); ((JTable)getValue(INCIDENT_LIST_TABLE)).setValueAt(newTime, selectedRow, INCIDENT_LIST_COLUMNS.SCHEDULED_COL.colNum); } catch (ScriptException se) { theSimManagerView.ScriptExceptionHandler(se); } catch (SimulationException se) { theSimManagerView.SimulationExceptionHandler(se); } } }; Thread theThread = new Thread(reschedRunnable); theThread.start(); } }