Index: trunk/src/tmcsim/cadsimulator/stillimagecontrol/ATMSCommunicator.java
===================================================================
--- trunk/src/tmcsim/cadsimulator/stillimagecontrol/ATMSCommunicator.java	(revision 2)
+++ trunk/src/tmcsim/cadsimulator/stillimagecontrol/ATMSCommunicator.java	(revision 44)
@@ -7,117 +7,146 @@
 
 /**
- * ATMSCommunicator handles communication between the CAD Simulator and the 
- * ATMS Server.  The funcationality provided includes querying the current time 
- * on the ATMS server and replacing images on the ATMS to model 
- * traffic flow changes.  The ATMSCommunicator uses the plink.exe external 
- * application to establish an SSH communication with the ATMS server, which is
- * used to execute commands remotely.  
- * 
+ * ATMSCommunicator handles communication between the CAD Simulator and the ATMS
+ * Server. The funcationality provided includes querying the current time on the
+ * ATMS server and replacing images on the ATMS to model traffic flow changes.
+ * The ATMSCommunicator uses the plink.exe external application to establish an
+ * SSH communication with the ATMS server, which is used to execute commands
+ * remotely.
+ *
  * @author Matthew Cechini
  * @version
  */
-public class ATMSCommunicator {
-    
-    /** Connection user name. */
+public class ATMSCommunicator
+{
+
+    /**
+     * Connection user name.
+     */
     protected String username;
-    
-    /** Connection password. */
+    /**
+     * Connection password.
+     */
     protected String password;
-    
-    /** ATMS Server Host name. */
+    /**
+     * ATMS Server Host name.
+     */
     protected String viewerHost;
-    
-    /** Absolute directory path for images. */
+    /**
+     * Absolute directory path for images.
+     */
     protected String image_dir;
-    
-    /** Base plink command string. */
+    /**
+     * Base plink command string.
+     */
     protected String plinkBaseCMD;
-    
-    /** Constructor. */
-    public ATMSCommunicator(String host, String user, String pwd, String dir) {
+    protected String remoteShellCmd;
+
+    /**
+     * Constructor.
+     */
+    public ATMSCommunicator(String host, String user, String pwd, String dir)
+    {
         viewerHost = host;
-        username   = user;
-        password   = pwd;
-        image_dir  = dir;
-        
-        plinkBaseCMD = "plink -l " + username + " -pw " + password + " " + viewerHost + " ";        
+        username = user;
+        password = pwd;
+        image_dir = dir;
+        String osname = System.getProperty("os.name");
+        if (osname.startsWith("Windows"))
+        {
+            remoteShellCmd = "plink -l " + username + " -pw " + password + " " + viewerHost + " \"date\"";
+        }
+        else
+        {
+            remoteShellCmd = "date"; //sshpass -p " + password + " " + "ssh -t -l " + username + viewerHost + " date &";
+        }
     }
-    
+
     /**
-     * Get the current ATMS server time as the number of seconds since Jan 1, 1970.
-     * 
+     * Get the current ATMS server time as the number of seconds since Jan 1,
+     * 1970.
+     *
      * @return Current time in seconds.
      * @throws RemoteException If there is an exception in RMI communication.
-     */ 
-    public long getCurrentTime() throws Exception {
-        
+     */
+    public long getCurrentTime() throws Exception
+    {
+
         Calendar currentCal = Calendar.getInstance();
 
-        Process timeProc = Runtime.getRuntime().exec(plinkBaseCMD + " \"date\"");
+        Process timeProc = Runtime.getRuntime().exec(remoteShellCmd);
         timeProc.waitFor();
-        
-        if(timeProc.exitValue() == 0) {
+//        System.out.println("timeProc exit = " + timeProc.exitValue());
+//        byte[] procBytes = new byte[timeProc.getInputStream().available()];
+//        timeProc.getInputStream().read(procBytes);
+//        String returnString = new String(procBytes);
+//        System.out.println("timeProc returned: " + returnString);
+
+        if (timeProc.exitValue() == 0)
+        {
             String tempToken = null;
             byte[] dateBytes = new byte[timeProc.getInputStream().available()];
             timeProc.getInputStream().read(dateBytes);
-            
+
             StringTokenizer spaceTok = new StringTokenizer(new String(dateBytes), " ");
-            while(spaceTok.hasMoreTokens()) {
+            while (spaceTok.hasMoreTokens())
+            {
                 tempToken = spaceTok.nextToken();
-                
-                if(tempToken.indexOf(":") != -1) {
+
+                if (tempToken.indexOf(":") != -1)
+                {
                     StringTokenizer colonTok = new StringTokenizer(new String(tempToken), ":");
-                    
+
                     currentCal.set(Calendar.HOUR, Integer.parseInt(colonTok.nextToken()));
                     currentCal.set(Calendar.MINUTE, Integer.parseInt(colonTok.nextToken()));
                     currentCal.set(Calendar.SECOND, Integer.parseInt(colonTok.nextToken()));
-                    
-                    System.out.println("Time retreieved from ATRMS server: " + 
-                            DateFormat.getDateTimeInstance().format(currentCal.getTime()));                                 
-                    
+
+                    System.out.println("Time retreieved from ATRMS server: "
+                            + DateFormat.getDateTimeInstance().format(currentCal.getTime()));
+
                 }
             }
-        }       
-        
-        return currentCal.getTimeInMillis();        
+        }
+
+        return currentCal.getTimeInMillis();
 
     }
 
     /**
-     * Show a new image for an ATMS camera.  The ATMS camera files are named
-     * <ATMS_Camera_ID>.xpm.  If a camera file exists, delete it.  Then copy
-     * the parameter file name to <ATMS_Camera_ID>.xpm.  If the camera ID or 
-     * new file does not exist, throw an exception.     
-     * 
+     * Show a new image for an ATMS camera. The ATMS camera files are named
+     * <ATMS_Camera_ID>.xpm. If a camera file exists, delete it. Then copy the
+     * parameter file name to <ATMS_Camera_ID>.xpm. If the camera ID or new file
+     * does not exist, throw an exception.
+     *
      * @param ATMS_cameraID ATMS indexed camera ID.
      * @param fileName Filename to show.
      * @throws RemoteException If there is an exception in RMI communication.
-     */ 
-    public void showImage(Integer ATMS_cameraID, String fileName) throws RemoteException {
-        
+     */
+    public void showImage(Integer ATMS_cameraID, String fileName) throws RemoteException
+    {
+
         System.out.println("Showing CameraID " + ATMS_cameraID + ", with filename: " + fileName);
         /*
-        Process imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"ls " + image_dir + "/cctvImage" + ATMS_cameraID + ".xpm\"");
-        imageProc.waitFor();
-        
-        if(imageProc.exitValue() != 0) {
-            throw new Exception(image_dir + "/cctvImage" + ATMS_cameraID + ".xpm does not exist");
-        }
-            
-        imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"ls " + image_dir + "/" + fileName + ".xpm\"");
-        imageProc.waitFor();
+         Process imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"ls " + image_dir + "/cctvImage" + ATMS_cameraID + ".xpm\"");
+         imageProc.waitFor();
 
-        if(imageProc.exitValue() != 0) {
-            throw new Exception(image_dir + "/" + fileName + ".xpm does not exist");
-        }
-    
-        imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"rm " + image_dir + "/cctvImage" + ATMS_cameraID + ".xpm\"");
-        imageProc.waitFor();
-        
-        imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"cp " + image_dir + "/" + fileName + ".xpm" + 
-                                  "   " + image_dir + "/" + "cctvImage" + ATMS_cameraID + ".xpm\"");        
-        imageProc.waitFor();
-        */
-        
-    }   
+         if(imageProc.exitValue() != 0) {
+         throw new Exception(image_dir + "/cctvImage" + ATMS_cameraID + ".xpm does not exist");
+         }
+
+         imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"ls " + image_dir + "/" + fileName + ".xpm\"");
+         imageProc.waitFor();
+
+         if(imageProc.exitValue() != 0) {
+         throw new Exception(image_dir + "/" + fileName + ".xpm does not exist");
+         }
+
+         imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"rm " + image_dir + "/cctvImage" + ATMS_cameraID + ".xpm\"");
+         imageProc.waitFor();
+
+         imageProc = Runtime.getRuntime().exec(plinkBaseCMD + "\"cp " + image_dir + "/" + fileName + ".xpm" +
+         "   " + image_dir + "/" + "cctvImage" + ATMS_cameraID + ".xpm\"");
+         imageProc.waitFor();
+         */
+
+    }
 }
