/**
   * Initiates a deployment operation on the server, using a source archive abstraction and an
   * optional deployment plan if the server specific information is not embedded in the source
   * archive. The deploymentOptions is a key-value pair map of deployment options for this
   * operations. Once the deployment is successful, the targets server instances
   *
   * @param source is the j2ee module abstraction (with or without the server specific artifacts).
   * @param deploymenPlan is the optional deployment plan is the source archive is portable.
   * @param the deployment options
   * @return a JESProgressObject to receive deployment events.
   */
  public JESProgressObject deploy(
      Target[] targets, Archive source, Archive deploymentPlan, Map deploymentOptions) {
    if (!isConnected()) {
      throw new IllegalStateException(
          localStrings.getString("enterprise.deployment.client.disconnected_state"));
    }

    SunTarget[] targetList = getSunTargets(targets);
    ProgressObjectImpl progressObject = new DeployAction(targetList);
    Object args[] = new Object[8];
    args[0] = dasConnection;
    args[1] = source;
    args[2] = deploymentPlan;
    args[3] =
        (deploymentOptions == null)
            ? new HashMap()
            : DeploymentProperties.propsToMap((Properties) deploymentOptions);
    args[4] = targetList;
    args[5] = domain;
    args[6] = localConnection;
    args[7] = serverId;
    progressObject.setCommand(CommandType.DISTRIBUTE, args);
    Thread newThread = new Thread(progressObject);
    newThread.start();
    return progressObject;
  }
 private JESProgressObject changeState(Target[] targets, String moduleID, CommandType cmd) {
   if (!isConnected()) {
     throw new IllegalStateException(
         localStrings.getString("enterprise.deployment.client.disconnected_state"));
   }
   SunTarget[] targetList = getSunTargets(targets);
   ProgressObjectImpl progressObject = new ChangeStateAction(targetList);
   Object args[] = new Object[5];
   args[0] = dasConnection;
   args[1] = targetList;
   args[2] = moduleID;
   args[3] = cmd;
   args[4] = domain;
   progressObject.setCommand(cmd, args);
   Thread newThread = new Thread(progressObject);
   newThread.start();
   return progressObject;
 }
 private JESProgressObject doApplicationReferenceAction(
     Target[] targets, String moduleID, Map options, CommandType cmd) {
   if (!isConnected()) {
     throw new IllegalStateException(
         localStrings.getString("enterprise.deployment.client.disconnected_state"));
   }
   SunTarget[] targetList = getSunTargets(targets);
   ProgressObjectImpl progressObject = new ApplicationReferenceAction(targetList);
   Object args[] = new Object[5];
   args[0] = dasConnection;
   args[1] = targetList;
   args[2] = moduleID;
   args[3] = cmd;
   args[4] =
       (options == null) ? new HashMap() : DeploymentProperties.propsToMap((Properties) options);
   progressObject.setCommand(cmd, args);
   Thread newThread = new Thread(progressObject);
   newThread.start();
   return progressObject;
 }
 public JESProgressObject undeploy(Target[] targets, String moduleID, Map options) {
   if (!isConnected()) {
     throw new IllegalStateException(
         localStrings.getString("enterprise.deployment.client.disconnected_state"));
   }
   SunTarget[] targetList = getSunTargets(targets);
   ProgressObjectImpl progressObject = new UndeployAction(targetList);
   Object args[] = new Object[6];
   args[0] = dasConnection;
   args[1] = moduleID;
   args[2] =
       (options == null) ? new HashMap() : DeploymentProperties.propsToMap((Properties) options);
   args[3] = targetList;
   args[4] = domain;
   args[5] = localConnection;
   progressObject.setCommand(CommandType.UNDEPLOY, args);
   Thread newThread = new Thread(progressObject);
   newThread.start();
   return progressObject;
 }
 /**
  * Wait for a Progress object to be in a completed state (sucessful or failed) and return the
  * DeploymentStatus for this progress object.
  *
  * @param the progress object to wait for completion
  * @return the deployment status
  */
 public DeploymentStatus waitFor(JESProgressObject po) {
   DeploymentStatus status = null;
   do {
     try {
       Thread.currentThread().sleep(100);
     } catch (InterruptedException ie) {
       // Exception swallowed deliberately
     }
     status = po.getCompletedStatus();
   } while (status == null);
   return status;
 }