/** * {@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; }