From 7399641103fe09b6bf772fb5a4427bdfd0fa895c Mon Sep 17 00:00:00 2001
From: tjc <tjc@ee4ac58c-ac51-4696-9907-e4b3aa274f04>
Date: Wed, 21 Mar 2007 17:03:43 +0000
Subject: [PATCH] add runProgram

git-svn-id: svn+ssh://svn.internal.sanger.ac.uk/repos/svn/pathsoft/artemis/trunk@5723 ee4ac58c-ac51-4696-9907-e4b3aa274f04
---
 uk/ac/sanger/artemis/j2ssh/SshPSUClient.java | 103 ++++++++++++++++++-
 1 file changed, 101 insertions(+), 2 deletions(-)

diff --git a/uk/ac/sanger/artemis/j2ssh/SshPSUClient.java b/uk/ac/sanger/artemis/j2ssh/SshPSUClient.java
index 2b18ca03d..7523b931c 100644
--- a/uk/ac/sanger/artemis/j2ssh/SshPSUClient.java
+++ b/uk/ac/sanger/artemis/j2ssh/SshPSUClient.java
@@ -62,11 +62,16 @@ public class SshPSUClient extends Thread
   private String logfile  = null;
   private String db       = null;
   private String wdir     = null;
-
+  private boolean justProg = false;
+  
   //
   private SshClient ssh;
   private String user;
   private boolean keep = false;
+  
+  //
+  StdoutStdErrHandler stdouth;
+  StdoutStdErrHandler stderrh;
 
   public SshPSUClient(String args[])
   {
@@ -96,6 +101,14 @@ public class SshPSUClient extends Thread
     ssh = sshLogin.getSshClient();
     user = sshLogin.getUser();
   }
+  
+  public SshPSUClient(final String cmd)
+  {
+    this.cmd = cmd;
+    SshLogin sshLogin = new SshLogin();
+    ssh = sshLogin.getSshClient();
+    justProg = true;
+  }
 
   private SshClient rescue()
   {
@@ -128,7 +141,10 @@ public class SshPSUClient extends Thread
 
       logger4j.debug("RUN "+program);
 
-      completed = runBlastOrFasta(program);
+      if(justProg)
+        runProgram();
+      else
+        completed = runBlastOrFasta(program);
 
       // Quit
       //ssh.disconnect();
@@ -492,6 +508,89 @@ public class SshPSUClient extends Thread
     return true;
   }
 
+  
+  
+  /**
+  *
+  * Run fasta or blast on the server ssh'ed into
+  *
+  */
+  private boolean runProgram()
+                    throws IOException
+  {
+    SessionChannelClient session = null;
+
+    try 
+    {
+      if(!ssh.isConnected())
+        rescue();
+
+      session = ssh.openSessionChannel();
+    }
+    catch(IOException exp)
+    {
+      logger4j.debug("NOT STARTED runProgram()");
+      if(System.getProperty("debug") != null)
+      {
+        exp.printStackTrace();
+      }
+      rescue();
+    }
+    
+    // run the application
+    logger4j.debug(cmd);
+
+    try
+    {
+      session.executeCommand(cmd);
+    }
+    catch(IOException exp)
+    {
+      logger4j.debug("runProgram()");
+      if(System.getProperty("debug") != null)
+      {
+        exp.printStackTrace();
+      }
+    }
+
+    logger4j.debug("STARTED session "+cmd);
+
+    // Reading from the session InputStream
+    stdouth = new StdoutStdErrHandler(session, true);
+    stderrh = new StdoutStdErrHandler(session, false);
+    
+    stdouth.start();
+    stderrh.start();
+
+    try
+    {
+      // make sure we hang around for stdout
+      while(stdouth.isAlive() || stderrh.isAlive())
+        Thread.sleep(5);
+    }
+    catch(InterruptedException ie)
+    {
+      ie.printStackTrace();
+    }
+       
+    // stdout & stderr
+    //logger4j.debug("STDOUT \n"+stdouth.getOutput());
+    logger4j.debug("STDERR :"+stderrh.getOutput());
+
+    session.close();
+    return true;
+  }
+  
+  public String getStdOut()
+  {
+    return stdouth.getOutput();
+  }
+
+  public String getStdErr()
+  {
+    return stderrh.getOutput();
+  }
+  
   /**
   *
   * Return an active SftpClient object
-- 
GitLab