Ejemplo n.º 1
0
  /**
   * {@inheritDoc}
   *
   * @return
   */
  @Override
  public ReturnValue clean_up() {
    try {
      writer.flush();
      writer.close();
      if (options.has("stdout")) {
        Log.stdout(writer.toString());
      }

    } catch (IOException ex) {
      Log.error("Writer is already closed.", ex);
    }
    return ret;
  }
  /**
   * {@inheritDoc}
   *
   * @return
   */
  @Override
  public ReturnValue do_run() {
    ReturnValue ret = new ReturnValue();
    ResultSet rs = null;
    MetadataDB mdb = null;
    PreparedStatement prepareStatement = null;
    try {
      String query =
          new StringBuilder()
              .append(
                  "select w.sw_accession, w.workflow_run_id, w.status, f.* FROM workflow_run w LEFT OUTER JOIN workflow_run_input_files f ")
              .append(
                  "ON w.workflow_run_id = f.workflow_run_id WHERE (status = 'completed' OR status= 'failed') AND ")
              .append("f.workflow_run_id IS NULL ORDER BY w.sw_accession;")
              .toString();

      Log.info("Executing query: " + query);
      mdb = DBAccess.get();

      List<int[]> ids =
          mdb.executeQuery(
              query,
              new ResultSetHandler<List<int[]>>() {
                @Override
                public List<int[]> handle(ResultSet rs) throws SQLException {
                  List<int[]> ids = new ArrayList<>();
                  while (rs.next()) {
                    ids.add(new int[] {rs.getInt("sw_accession"), rs.getInt("workflow_run_id")});
                  }
                  return ids;
                }
              });

      mdb.getDb().setAutoCommit(false);
      prepareStatement =
          mdb.getDb()
              .prepareStatement(
                  "INSERT INTO workflow_run_input_files (workflow_run_id, file_id) VALUES(?,?)");
      for (int[] i : ids) {
        int workflowSWID = i[0];
        int workflowRunID = i[1];
        Log.stdout("Working on workflow_run " + workflowSWID);

        // populate input files
        List<Integer> listOfFiles = this.getListOfFiles(workflowSWID);
        Log.stdout("Found " + listOfFiles.size() + " input files for workflow_run " + workflowSWID);
        // insert into new workflow_run_input_files table
        for (Integer fSWID : listOfFiles) {
          Integer fileID = this.metadata.getFile(fSWID).getFileId();
          prepareStatement.setInt(1, workflowRunID);
          prepareStatement.setInt(2, fileID);
          prepareStatement.executeUpdate();
        }
      }
      Log.stdout("Success!");
      mdb.getDb().commit();
      return ret;
    } catch (SQLException ex) {
      Log.fatal("Population failed, aborting.");
      Logger.getLogger(WorkflowRunFilesInitialPopulationPlugin.class.getName())
          .log(Level.SEVERE, null, ex);
      ret.setExitStatus(ReturnValue.FAILURE);
    } finally {
      if (mdb != null) {
        DbUtils.closeQuietly(mdb.getDb(), mdb.getSql(), rs);
      }
      DBAccess.close();
      DbUtils.closeQuietly(prepareStatement);
    }
    ret.setExitStatus(ReturnValue.FAILURE);
    return ret;
  }