private SnapshotView makeDeliverView(Stream stream, File workspace) throws ScmException {
    /* Replace evil characters with less evil characters */
    String newJobName = jobName.replaceAll("\\s", "_");

    viewtag =
        "CCUCM_" + newJobName + "_" + System.getenv("COMPUTERNAME") + "_" + stream.getShortname();

    File viewroot = new File(workspace, "view");

    return Util.makeView(stream, workspace, listener, loadModule, viewroot, viewtag);
  }
  private void deliver(
      Baseline baseline, Stream dstream, EstablishResult er, boolean forceDeliver, int triesLeft)
      throws IOException {
    logger.verbose(
        "Delivering "
            + baseline.getShortname()
            + " to "
            + dstream.getShortname()
            + ". Tries left: "
            + triesLeft);
    if (triesLeft < 1) {
      out.println("[" + Config.nameShort + "] Unable to deliver, giving up.");
      er.setResultType(ResultType.DELIVER_IN_PROGRESS_NOT_CANCELLED);
      return;
    }

    Deliver deliver = null;
    try {
      out.println("[" + Config.nameShort + "] Starting deliver(tries left: " + triesLeft + ")");
      deliver =
          new Deliver(
              baseline,
              baseline.getStream(),
              dstream,
              snapview.getViewRoot(),
              snapview.getViewtag());
      deliver.deliver(true, false, true, false);
      // baseline.deliver( baseline.getStream(), dstream, snapview.getViewRoot(),
      // snapview.getViewtag(), true, false, true );
      er.setResultType(ResultType.SUCCESS);
    } catch (DeliverException e) {
      out.println("[" + Config.nameShort + "] Failed to deliver: " + e.getMessage());
      logger.debug("Failed to deliver: " + e.getMessage());
      logger.debug(e);

      /* Figure out what happened */
      if (e.getType().equals(DeliverException.Type.REQUIRES_REBASE)) {
        er.setResultType(ResultType.DELIVER_REQUIRES_REBASE);
      }

      if (e.getType().equals(DeliverException.Type.MERGE_ERROR)) {
        er.setResultType(ResultType.MERGE_ERROR);
      }

      if (e.getType().equals(DeliverException.Type.INTERPROJECT_DELIVER_DENIED)) {
        er.setResultType(ResultType.INTERPROJECT_DELIVER_DENIED);
      }

      if (e.getType().equals(DeliverException.Type.DELIVER_IN_PROGRESS)) {
        out.println("[" + Config.nameShort + "] Deliver already in progress");

        if (!forceDeliver) {
          er.setResultType(ResultType.DELIVER_IN_PROGRESS);
        } else {

          /**
           * rollback deliver.. *******A DELIVER OPERATION IS ALREADY IN PROGRESS. Details about the
           * delivery:
           *
           * <p><b Deliver operation in progress on stream "stream:pds316_deliver_test@\PDS_PVOB"/>
           * Started by "PDS316" on "2011-09-28T11:23:53+02:00" Using integration activity
           * "deliver.pds316_deliver_test.20110928.112353". <bUsing view "pds316_deliver_test_int"
           * />. Baselines will be delivered to the default target stream
           * "stream:deliver_test_int@\PDS_PVOB" in project "project:deliver_test@\PDS_PVOB".
           *
           * <p>Baselines to be delivered:
           *
           * <p>*******Please try again later.
           */
          String msg = e.getMessage();
          String stream = "";
          String oldViewtag = null;

          out.println("[" + Config.nameShort + "] Forcing this deliver.");

          Pattern STREAM_PATTERN =
              Pattern.compile("Deliver operation .* on stream \\\"(.*)\\\"", Pattern.MULTILINE);
          Pattern TAG_PATTERN = Pattern.compile("Using view \\\"(.*)\\\".", Pattern.MULTILINE);

          Matcher mSTREAM = STREAM_PATTERN.matcher(msg);
          while (mSTREAM.find()) {
            stream = mSTREAM.group(1);
          }

          Matcher mTAG = TAG_PATTERN.matcher(msg);
          while (mTAG.find()) {
            oldViewtag = mTAG.group(1);
          }

          File newView = null;
          if (oldViewtag == null) {
            newView = snapview.getViewRoot();
          } else {
            newView = new File(workspace + "\\rm_delv_view");
          }

          try {
            // rolling back the previous deliver operation
            Stream ostream =
                Stream.get(stream, baseline.getPVob())
                    .load(); // .deliverRollBack( oldViewtag, newView );
            Deliver.rollBack(oldViewtag, ostream, newView);
          } catch (ClearCaseException ex) {
            out.println(ex.getMessage());
            throw new IOException(ex.getMessage(), ex.getCause());
          }

          // Recursive method call of INVOKE(...);
          logger.verbose("Trying to deliver again...");
          deliver(baseline, dstream, er, forceDeliver, triesLeft - 1);
        }
      }
    } catch (CleartoolException e) {
      logger.warning("Unable to get status from stream: " + e.getMessage());
      throw new IOException(e);
    } catch (Exception e) {
      logger.warning("Unable deliver: " + e.getMessage());

      throw new IOException(e);
    }
  }