/**
   * Get notified of change of job status. Executed in context of uploader thread
   *
   * @param jobId the id of the job
   * @param status the status of the job
   */
  public void setUploadStatus(String jobId, Status status) {
    UploadJob uj = jobs.get(jobId);
    if (uj == null) {
      s_logger.warn("setUploadStatus for jobId: " + jobId + ", status=" + status + " no job found");
      return;
    }
    TemplateUploader tu = uj.getTemplateUploader();
    s_logger.warn("Upload Completion for jobId: " + jobId + ", status=" + status);
    s_logger.warn(
        "UploadedBytes="
            + tu.getUploadedBytes()
            + ", error="
            + tu.getUploadError()
            + ", pct="
            + tu.getUploadPercent());

    switch (status) {
      case ABORTED:
      case NOT_STARTED:
      case UNRECOVERABLE_ERROR:
        // Delete the entity only if its a volume. TO DO - find a better way of finding it a volume.
        if (uj.getTemplateUploader().getUploadLocalPath().indexOf("volume") > -1) {
          uj.cleanup();
        }
        break;
      case UNKNOWN:
        return;
      case IN_PROGRESS:
        s_logger.info("Resuming jobId: " + jobId + ", status=" + status);
        tu.setResume(true);
        threadPool.execute(tu);
        break;
      case RECOVERABLE_ERROR:
        threadPool.execute(tu);
        break;
      case UPLOAD_FINISHED:
        tu.setUploadError("Upload success, starting install ");
        String result = postUpload(jobId);
        if (result != null) {
          s_logger.error("Failed post upload script: " + result);
          tu.setStatus(Status.UNRECOVERABLE_ERROR);
          tu.setUploadError("Failed post upload script: " + result);
        } else {
          s_logger.warn(
              "Upload completed successfully at " + new SimpleDateFormat().format(new Date()));
          tu.setStatus(Status.POST_UPLOAD_FINISHED);
          tu.setUploadError(
              "Upload completed successfully at " + new SimpleDateFormat().format(new Date()));
        }
        // Delete the entity only if its a volume. TO DO - find a better way of finding it a volume.
        if (uj.getTemplateUploader().getUploadLocalPath().indexOf("volume") > -1) {
          uj.cleanup();
        }
        break;
      default:
        break;
    }
  }