diff --git a/trick_source/java/src/main/java/trick/simcontrol/SimControlApplication.java b/trick_source/java/src/main/java/trick/simcontrol/SimControlApplication.java index b6b0ae9c..94fe771d 100644 --- a/trick_source/java/src/main/java/trick/simcontrol/SimControlApplication.java +++ b/trick_source/java/src/main/java/trick/simcontrol/SimControlApplication.java @@ -9,6 +9,7 @@ package trick.simcontrol; //======================================== import java.awt.BorderLayout; import java.awt.Color; +import java.awt.Component; import java.awt.Dimension; import java.awt.Font; import java.awt.GridBagConstraints; @@ -103,11 +104,24 @@ public class SimControlApplication extends TrickApplication implements PropertyC //======================================== // Public data //======================================== + final public static Dimension FULL_SIZE = new Dimension(680, 640); + final public static Dimension LITE_SIZE = new Dimension(340, 360); //======================================== // Protected data //======================================== + protected static String host; + protected static int port = -1; + + /** whether or not to print a send_hs file to the status message panel */ + protected static boolean isRestartOptionOn; + + /** whether automatically exit when sim is done/killed. */ + protected static boolean isAutoExitOn; + + /** The action controller that performs actions for such as clicking button, selection a menu item and etc. */ + protected SimControlActionController actionController; //======================================== @@ -119,9 +133,6 @@ public class SimControlApplication extends TrickApplication implements PropertyC private int overrun_present ; private int message_present ; private int message_port ; - - /** whether automatically exit when sim is done/killed. */ - private static boolean isAutoExitOn; // The panel that displays the current sim state description as well as progress. private JXTitledPanel runtimeStatePanel; @@ -154,11 +165,6 @@ public class SimControlApplication extends TrickApplication implements PropertyC private JXLabel statusLabel; - /* - * The action controller that performs actions for such as clicking button, selection a menu item and etc. - */ - private SimControlActionController actionController; - // The animation image player panel private AnimationPlayer logoImagePanel; @@ -171,9 +177,6 @@ public class SimControlApplication extends TrickApplication implements PropertyC private SocketChannel healthStatusSocketChannel ; private JComboBox runningSimList; - private static String host; - private static int port = -1; - private static boolean isRestartOptionOn; //True if an error was encountered during the attempt to connect to Variable Server during intialize() private boolean errOnInitConnect = false; //Time out when attempting to establish connection with Variable Server in milliseconds @@ -188,9 +191,6 @@ public class SimControlApplication extends TrickApplication implements PropertyC final private static String LOCALHOST = "localhost"; - final private Dimension FULL_SIZE = new Dimension(680, 640); - final private Dimension LITE_SIZE = new Dimension(340, 360); - //======================================== // Actions //======================================== @@ -348,8 +348,53 @@ public class SimControlApplication extends TrickApplication implements PropertyC */ @Action public void connect() { - // get host and port for selected sim - if (runningSimList != null && runningSimList.getSelectedItem() != null) { + parseConnectionFromSimList(); // get host and port from running sim list + getInitializationPacket(); // init variable server connection + if (commandSimcom == null) { + String errMsg = "Sorry, can't connect. Please make sure the availability of both server and port!"; + printErrorMessage(errMsg); + return; + } + setEnabledAllActions(true); // enable all actions + scheduleGetSimState(); // set up the sim status variables + startStatusMonitors(); // start monitors for sim and health status + } + + + /** + * Helper method for starting monitors for sim status as well as health status. + */ + protected void startStatusMonitors() { + MonitorSimStatusTask monitorSimStatusTask = new MonitorSimStatusTask(this); + monitorSimStatusTask.addPropertyChangeListener(this); + getContext().getTaskService().execute(monitorSimStatusTask); + + // For receiving hs messages. + getContext().getTaskService().execute(new MonitorHealthStatusTask(this)); + } + + /** + * Sets all actions as either enabled or disabled + * @param isEnabled the state to set each action as + */ + protected void setEnabledAllActions(boolean isEnabled) { + if(actionMap == null) + return; + + Object[] keys = actionMap.allKeys(); + // If there is a server connection established, enable all actions. + for (int i = 0; i < keys.length; i++) { + String theKey = (String)keys[i]; + getAction(theKey).setEnabled(isEnabled); + } + } + + /** + * Parse the host and port from the runningSimList object + */ + protected void parseConnectionFromSimList() { + + if (runningSimList != null && runningSimList.getSelectedItem() != null) { String selectedStr = runningSimList.getSelectedItem().toString(); // remove the run info if it is shown int leftPre = selectedStr.indexOf("("); @@ -366,51 +411,17 @@ public class SimControlApplication extends TrickApplication implements PropertyC if (elements == null || elements.length < 2) { String errMsg = "Can't connect! Please provide valid host name and port number separated by : or whitespace!"; printErrorMessage(errMsg); - return; - } - host = elements[0].trim(); - try { - port = Integer.parseInt(elements[1].trim()); - } catch (NumberFormatException nfe) { - String errMsg = elements[1] + " is not a valid port number!"; - printErrorMessage(errMsg); - return; - } + } else { + host = elements[0].trim(); + try { port = Integer.parseInt(elements[1].trim()); } + catch (NumberFormatException nfe) { + String errMsg = elements[1] + " is not a valid port number!"; + printErrorMessage(errMsg); + } + } } - - getInitializationPacket(); - - if (commandSimcom == null) { - String errMsg = "Sorry, can't connect. Please make sure the availability of both server and port!"; - printErrorMessage(errMsg); - return; - } else { - Object[] keys = actionMap.allKeys(); - // If there is a server connection established, enable all actions. - for (int i = 0; i < keys.length; i++) { - String theKey = (String)keys[i]; - getAction(theKey).setEnabled(true); - } - } - - scheduleGetSimState(); - - startStatusMonitors(); - } - - - /** - * Helper method for starting monitors for sim status as well as health status. - */ - private void startStatusMonitors() { - MonitorSimStatusTask monitorSimStatusTask = new MonitorSimStatusTask(this); - monitorSimStatusTask.addPropertyChangeListener(this); - getContext().getTaskService().execute(monitorSimStatusTask); - - // For receiving hs messages. - getContext().getTaskService().execute(new MonitorHealthStatusTask(this)); } - + //======================================== // Set/Get methods //======================================== @@ -455,7 +466,7 @@ public class SimControlApplication extends TrickApplication implements PropertyC (new RetrieveHostPortTask()).execute(); return; } - + actionController.setVariableServerConnection(commandSimcom); simState = new SimState(); @@ -565,7 +576,6 @@ public class SimControlApplication extends TrickApplication implements PropertyC } } - //======================================== // Methods //======================================== @@ -840,9 +850,8 @@ public class SimControlApplication extends TrickApplication implements PropertyC statusSimcom.put(status_vars) ; statusSimcom.put("trick.var_cycle(0.25)\n"); - - getAction("connect").setEnabled(false); - runningSimList.setEnabled(false); + setActionsEnabled("connect", false); + setGUIEnabled(runningSimList, false); } catch (NumberFormatException nfe) { @@ -857,6 +866,14 @@ public class SimControlApplication extends TrickApplication implements PropertyC } } + private void setGUIEnabled(Component gui, boolean flag) { + if(gui != null) gui.setEnabled(flag); + } + + private void setGUIsEnabled(Component[] guis, boolean flag) { + for(Component gui : guis) setGUIEnabled(gui, flag); + } + /** * Convenient method for setting the state of specified actions. * @@ -1263,7 +1280,7 @@ public class SimControlApplication extends TrickApplication implements PropertyC /** * Updates the GUI as needed if SIM states are changed. */ - private void updateGUI() { + protected void updateGUI() { String newStatusDesc = SimState.SIM_MODE_DESCRIPTION[simState.getMode()]; recTime.setText(simState.getTwoFractionFormatted(simState.getExecOutTime()));