public boolean generateActualJobs(
      Vector<ComputeJob> computeJobs, String backend, Hashtable<String, String> config) {
    int generationCount = -1;
    // read templates
    String templatesDir = config.get(JobGenerator.TEMPLATE_DIR);

    if (backend.equalsIgnoreCase(JobGenerator.GRID)) {
      readTemplatesGrid(templatesDir);
      gridHandler = new CommandLineImputationGridHandler();
      gridHandler.setWorksheet(worksheet);
      generationCount = gridHandler.getNextJobID();

      // adding dag dependencies
      if (workflowHasDependencies) {
        dagScript += "nodes = [\n";
      }
    } else if (backend.equalsIgnoreCase(JobGenerator.CLUSTER)) readTemplatesCluster(templatesDir);

    for (ComputeJob computeJob : computeJobs) {
      System.out.println(">>> generation job: " + computeJob.getName());

      // generate files for selected back-end
      if (backend.equalsIgnoreCase(JobGenerator.GRID))
        generateActualJobGrid(computeJob, config, generationCount);
      else if (backend.equalsIgnoreCase(JobGenerator.CLUSTER))
        generateActualJobCluster(computeJob, config);

      generationCount++;
    }

    // write cluster submit script
    if (backend.equalsIgnoreCase(JobGenerator.CLUSTER))
      writeToFile(
          config.get(JobGenerator.OUTPUT_DIR)
              + System.getProperty("file.separator")
              + "submit_"
              + config.get(JobGenerator.GENERATION_ID)
              + ".sh",
          submitScript);
    else if (backend.equalsIgnoreCase(JobGenerator.GRID) && workflowHasDependencies) {
      // produce targetsListFile
      gridHandler.writeJobsLogsToFile(config);

      // finilize dag
      dagScript += "\n];";
      // cut last coma and new line
      dagDependencies = dagDependencies.substring(0, dagDependencies.length() - 2);
      dagDependencies = "\ndependencies = {\n" + dagDependencies + "\n}";
      dagScript += dagDependencies;

      // write dag file
      writeToFile(
          config.get(JobGenerator.OUTPUT_DIR)
              + System.getProperty("file.separator")
              + "dag_"
              + config.get(JobGenerator.GENERATION_ID)
              + ".jdl",
          dagScript);
    }

    return true;
  }