// Path: src/main/java/com/soasta/jenkins/cloud/CloudCommandBuilder.java
// public class CloudCommandBuilder {
//     /**
//      * URL of the server to use (deprecated).
//      */
//     private String url;
//     /**
//      * ID of the server to use.
//      * @see CloudTestServer
//      */
//     private String cloudTestServerID;
//     private TaskListener listener;
//     private FilePath workspace;
// 
//     public CloudTestServer getServer() {
//         return CloudTestServer.getByID(cloudTestServerID);
//     }
//     
//     public CloudCommandBuilder setUrl(String url)
//     {
//       this.url = url;
//       return this;
//     }
// 
//     public String getUrl() {
//         return url;
//     }
//     
//     public CloudCommandBuilder setCloudTestServerID(String value)
//     {
//       this.cloudTestServerID = value;
//       return this;
//     }
// 
//     public String getCloudTestServerID() {
//         return cloudTestServerID;
//     }
//     
//     public CloudCommandBuilder setWorkspace(FilePath workspace)
//     {
//       this.workspace = workspace;
//       return this;
//     }
//     
//     public CloudCommandBuilder setListener(TaskListener listener)
//     {
//       this.listener = listener;
//       return this;
//     }
// 
//     public ArgumentListBuilder build() throws IOException, InterruptedException {
//       CloudTestServer s = getServer();
//       if (s == null)
//           throw new AbortException("No TouchTest server is configured in the system configuration.");
//       
//       FilePath scommand = new SCommandInstaller(s).scommand(workspace.toComputer().getNode(), listener);
//       
//       ArgumentListBuilder args = new ArgumentListBuilder();
//       args.add(scommand)
//           .add("url=" + s.getUrl());
// 
//       if(!s.getApitoken().trim().isEmpty() && s.getUsername().trim().isEmpty() && s.getPassword() == null) {
//           args.add("apitoken=" + s.getApitoken());
//       }
//       else if(!s.getApitoken().trim().isEmpty() && (!s.getUsername().trim().isEmpty() || s.getPassword() != null)) {
//           throw new AbortException("Cannot set both Username or Password and API Token");
//       }
//       else if(s.getApitoken().trim().isEmpty() && !s.getUsername().trim().isEmpty()) {
//           args.add("username="+s.getUsername());
//           args.addMasked("password=" + s.getPassword());
//       }
//       
//       ProxyConfiguration proxyConfig = Jenkins.getInstance().proxy;
// 
//       if (proxyConfig != null && proxyConfig.name != null) {
//           // Jenkins is configured to use a proxy server.
// 
//           // Extract the destination CloudTest host.
//           String host = new URL(s.getUrl()).getHost();
// 
//           if (ProxyChecker.useProxy(host, proxyConfig)) {
//               // Add the SCommand proxy parameters.
//               args.add("httpproxyhost=" + proxyConfig.name)
//                   .add("httpproxyport=" + proxyConfig.port);
// 
//               // If there are proxy credentials, add those too.
//               if (proxyConfig.getUserName() != null) {
//                   args.add("httpproxyusername=" + proxyConfig.getUserName())
//                       .addMasked("httpproxypassword=" + proxyConfig.getPassword());
//               }
//           }
//       }
// 
//       return args;
//     }
// }
// 
// Path: src/main/java/com/soasta/jenkins/cloud/CloudStatus.java
// public enum CloudStatus
// {
//   TERMINATED,
//   READY,
//   FAILED
// }


import java.io.File;
import java.io.IOException;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.util.ArgumentListBuilder;
import jenkins.tasks.SimpleBuildStep;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import com.soasta.jenkins.cloud.CloudCommandBuilder;
import com.soasta.jenkins.cloud.CloudStatus;
import javax.xml.parsers.*;
import java.io.*;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Recorder;
      this.timeOut = getDefaultTimeout();
    }
    else
    {
      this.timeOut = timeOut;
    }
  }
  
  public String getName()
  {
    return name;
  }
  
  public String getCloudTestServerID()
  {
    return cloudTestServerID;
  }
  
  public int getTimeOut()
  {
    return timeOut;
  }
  
  @Override 
  public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
    String command = getCommand();
    // Create a unique sub-directory to store all test results.
      String resultsDir = "." + command;
      // set the basic commands. 
      ArgumentListBuilder args =
// Path: src/main/java/com/soasta/jenkins/cloud/CloudCommandBuilder.java
// public class CloudCommandBuilder {
//     /**
//      * URL of the server to use (deprecated).
//      */
//     private String url;
//     /**
//      * ID of the server to use.
//      * @see CloudTestServer
//      */
//     private String cloudTestServerID;
//     private TaskListener listener;
//     private FilePath workspace;
// 
//     public CloudTestServer getServer() {
//         return CloudTestServer.getByID(cloudTestServerID);
//     }
//     
//     public CloudCommandBuilder setUrl(String url)
//     {
//       this.url = url;
//       return this;
//     }
// 
//     public String getUrl() {
//         return url;
//     }
//     
//     public CloudCommandBuilder setCloudTestServerID(String value)
//     {
//       this.cloudTestServerID = value;
//       return this;
//     }
// 
//     public String getCloudTestServerID() {
//         return cloudTestServerID;
//     }
//     
//     public CloudCommandBuilder setWorkspace(FilePath workspace)
//     {
//       this.workspace = workspace;
//       return this;
//     }
//     
//     public CloudCommandBuilder setListener(TaskListener listener)
//     {
//       this.listener = listener;
//       return this;
//     }
// 
//     public ArgumentListBuilder build() throws IOException, InterruptedException {
//       CloudTestServer s = getServer();
//       if (s == null)
//           throw new AbortException("No TouchTest server is configured in the system configuration.");
//       
//       FilePath scommand = new SCommandInstaller(s).scommand(workspace.toComputer().getNode(), listener);
//       
//       ArgumentListBuilder args = new ArgumentListBuilder();
//       args.add(scommand)
//           .add("url=" + s.getUrl());
// 
//       if(!s.getApitoken().trim().isEmpty() && s.getUsername().trim().isEmpty() && s.getPassword() == null) {
//           args.add("apitoken=" + s.getApitoken());
//       }
//       else if(!s.getApitoken().trim().isEmpty() && (!s.getUsername().trim().isEmpty() || s.getPassword() != null)) {
//           throw new AbortException("Cannot set both Username or Password and API Token");
//       }
//       else if(s.getApitoken().trim().isEmpty() && !s.getUsername().trim().isEmpty()) {
//           args.add("username="+s.getUsername());
//           args.addMasked("password=" + s.getPassword());
//       }
//       
//       ProxyConfiguration proxyConfig = Jenkins.getInstance().proxy;
// 
//       if (proxyConfig != null && proxyConfig.name != null) {
//           // Jenkins is configured to use a proxy server.
// 
//           // Extract the destination CloudTest host.
//           String host = new URL(s.getUrl()).getHost();
// 
//           if (ProxyChecker.useProxy(host, proxyConfig)) {
//               // Add the SCommand proxy parameters.
//               args.add("httpproxyhost=" + proxyConfig.name)
//                   .add("httpproxyport=" + proxyConfig.port);
// 
//               // If there are proxy credentials, add those too.
//               if (proxyConfig.getUserName() != null) {
//                   args.add("httpproxyusername=" + proxyConfig.getUserName())
//                       .addMasked("httpproxypassword=" + proxyConfig.getPassword());
//               }
//           }
//       }
// 
//       return args;
//     }
// }
// 
// Path: src/main/java/com/soasta/jenkins/cloud/CloudStatus.java
// public enum CloudStatus
// {
//   TERMINATED,
//   READY,
//   FAILED
// }


// Path: src/main/java/com/soasta/jenkins/cloud/postbuild/CloudCommandBasePostBuild.java
import java.io.File;
import java.io.IOException;
import hudson.FilePath;
import hudson.Launcher;
import hudson.model.AbstractBuild;
import hudson.model.BuildListener;
import hudson.model.Run;
import hudson.model.TaskListener;
import hudson.util.ArgumentListBuilder;
import jenkins.tasks.SimpleBuildStep;
import org.w3c.dom.*;
import org.xml.sax.InputSource;
import com.soasta.jenkins.cloud.CloudCommandBuilder;
import com.soasta.jenkins.cloud.CloudStatus;
import javax.xml.parsers.*;
import java.io.*;
import hudson.tasks.BuildStepMonitor;
import hudson.tasks.Recorder;

      this.timeOut = getDefaultTimeout();
    }
    else
    {
      this.timeOut = timeOut;
    }
  }
  
  public String getName()
  {
    return name;
  }
  
  public String getCloudTestServerID()
  {
    return cloudTestServerID;
  }
  
  public int getTimeOut()
  {
    return timeOut;
  }
  
  @Override 
  public void perform(Run<?, ?> run, FilePath workspace, Launcher launcher, TaskListener listener) throws InterruptedException, IOException {
    String command = getCommand();
    // Create a unique sub-directory to store all test results.
      String resultsDir = "." + command;
      // set the basic commands. 
      ArgumentListBuilder args =
      new CloudCommandBuilder()