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.JSpinner;
import javax.swing.SpinnerNumberModel;
import tmcsim.common.ScriptException;
import tmcsim.common.SimulationException;
import tmcsim.common.CADEnums.PARAMICS_STATUS;
import tmcsim.simulationmanager.SimulationManagerView;
/**
* LoadParamicsNetworkAction is an AbstractAction that is used for loading
* a Paramics traffic network. When the action is performed, the action gets
* the network ID from the NetworkIDSpinner in the SimulationManagerView. The
* action sets the paramics status to SENDING_NETWORK_ID and calls the
* SimulationManagerModel to load the Paramics network.
*
*
* The NETWORK_ID_SPINNER key should be assigned the NetworkIDSpinner object
* from the SimulationManagerView object.
* @author Matthew Cechini
*/
@SuppressWarnings("serial")
public class LoadParamicsNetworkAction extends AbstractAction {
/**
* This key string is used to reference the NetworkIDSpinner object
* from the SimulationManagerView object.
*/
public static final String NETWORK_ID_SPINNER = "NETWORK_ID_SPINNER";
/** Reference to the SimulationManagerView object. */
private SimulationManagerView theSimManagerView = null;
/**
* Constructor.
* @param view View class object for the Simulation Manager.
*/
public LoadParamicsNetworkAction(SimulationManagerView view) {
super("Load Network");
theSimManagerView = view;
}
public void actionPerformed(ActionEvent evt) {
if(getValue(NETWORK_ID_SPINNER) == null) {
Logger.getLogger("tmcsim.simulationmanager.actions").logp(
Level.WARNING, "LoadParamicsNetworkAction",
"actionPerformed",
"Object for NETWORK_ID_SPINNER is null.");
return;
}
Runnable loadNetworkRunnable = new Runnable(){
public void run() {
try {
int id = ((SpinnerNumberModel) ((JSpinner) getValue(NETWORK_ID_SPINNER))
.getModel()).getNumber().intValue();
theSimManagerView.setParamicsStatus(
PARAMICS_STATUS.SENDING_NETWORK_ID);
theSimManagerView.getModel().loadParamicsNetwork(id);
}
catch (NumberFormatException nfe) {
theSimManagerView.ScriptExceptionHandler(
new ScriptException("Invalid Network ID"));
}
catch (ScriptException se) {
theSimManagerView.ScriptExceptionHandler(se);
}
catch (SimulationException se) {
theSimManagerView.SimulationExceptionHandler(se);
}
}
};
Thread theThread = new Thread(loadNetworkRunnable);
theThread.start();
}
}