package net.sourceforge.seqware.common.dao.hibernate; import java.util.ArrayList; import java.util.List; import java.util.Map; import net.sourceforge.seqware.common.dao.WorkflowRunParamDAO; import net.sourceforge.seqware.common.model.File; import net.sourceforge.seqware.common.model.Registration; import net.sourceforge.seqware.common.model.WorkflowRun; import net.sourceforge.seqware.common.model.WorkflowRunParam; import org.hibernate.SQLQuery; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * <p> * WorkflowRunParamDAOHibernate class. * </p> * * @author boconnor * @version $Id: $Id */ public class WorkflowRunParamDAOHibernate extends HibernateDaoSupport implements WorkflowRunParamDAO { final Logger localLogger = LoggerFactory.getLogger(WorkflowRunParamDAOHibernate.class); /** * <p> * Constructor for WorkflowRunParamDAOHibernate. * </p> */ public WorkflowRunParamDAOHibernate() { super(); } /** {@inheritDoc} */ @Override public void insert(WorkflowRunParam workflowRunParam) { this.getHibernateTemplate().save(workflowRunParam); getSession().flush(); } /** {@inheritDoc} */ @Override public void update(WorkflowRunParam workflowRunParam) { getHibernateTemplate().update(workflowRunParam); getSession().flush(); } /** {@inheritDoc} */ @Override public void delete(WorkflowRunParam workflowRunParam) { getHibernateTemplate().delete(workflowRunParam); } private Integer getProcessingSWID(Integer fileId) { Integer swid = null; String query = "select sw_accession from processing pr inner join processing_files pf on pr.processing_id=pf.processing_id where pf.file_id = ?"; List list = this.getSession().createSQLQuery(query).setInteger(0, fileId).list(); if (list.get(0) != null) { swid = Integer.parseInt(list.get(0).toString()); } return swid; } /** * {@inheritDoc} * * @param paramNameFileHash */ @Override public void insertFilesAsWorkflowRunParam(WorkflowRun workflowRun, Map<String, List<File>> paramNameFileHash) { localLogger.debug("Start insert files ..."); for (String paramName : paramNameFileHash.keySet()) { List<File> files = paramNameFileHash.get(paramName); localLogger.debug("Param Name = " + paramName); if (files != null && files.size() > 0) { String paramQuery = ""; for (int i = 0; i < files.size() - 1; i++) { paramQuery = paramQuery + "(?,?,?,?,?),"; } paramQuery = paramQuery + "(?,?,?,?,?)"; String query = "INSERT INTO workflow_run_param (workflow_run_id, key, value, parent_processing_accession, type) VALUES" + paramQuery; SQLQuery sql = this.getSession().createSQLQuery(query); Integer workflowRunId = workflowRun.getWorkflowRunId(); int countParam = 5; // 0,1,2,3,4 5,6,7,8,9 localLogger.debug("Insert Files :"); for (int i = 0; i < files.size(); i++) { int startPos = countParam * i; sql.setInteger(startPos, workflowRunId); sql.setString(startPos + 1, paramName); sql.setString(startPos + 2, files.get(i).getFilePath()); // NOTE: in our DB files generally don't have multiple processing // events but since it // uses a linker table many-to-many is possible. Keep this in mind for // the code below, // it just records the sw_accession for the first linked processing // event sql.setInteger(startPos + 3, getProcessingSWID(files.get(i).getFileId())); sql.setString(startPos + 4, "file"); localLogger.debug("Key = " + paramName + "; Value = " + files.get(i).getFilePath() + "; parent swAccession = " + getProcessingSWID(files.get(i).getFileId()) + "; type = file"); } localLogger.debug("INSERT STATEMENT: " + query); sql.executeUpdate(); } } } /** {@inheritDoc} */ @Override public WorkflowRunParam updateDetached(WorkflowRunParam workflowRunParam) { return (WorkflowRunParam) this.getHibernateTemplate().merge(workflowRunParam); } /** {@inheritDoc} */ @Override public List<WorkflowRunParam> list() { ArrayList<WorkflowRunParam> l = new ArrayList<>(); String query = "from WorkflowRunParam"; List list = this.getHibernateTemplate().find(query); for (Object e : list) { l.add((WorkflowRunParam) e); } return l; } /** {@inheritDoc} */ @Override public void update(Registration registration, WorkflowRunParam workflowRunParam) { if (registration == null) { localLogger.error("WorkflowRunParamDAOHibernate update registration is null"); } else if (registration.isLIMSAdmin() || workflowRunParam.givesPermission(registration)) { localLogger.info("update workflow run param object"); update(workflowRunParam); } else { localLogger.error("WorkflowRunParamDAOHibernate update is not authorized"); } } /** {@inheritDoc} */ @Override public void insert(Registration registration, WorkflowRunParam workflowRunParam) { if (registration == null) { localLogger.error("WorkflowRunParamDAOHibernate insert registration is null"); } else if (registration.isLIMSAdmin() || workflowRunParam.givesPermission(registration)) { localLogger.info("insert workflow run param object"); insert(workflowRunParam); } else { localLogger.error("WorkflowRunParamDAOHibernate insert is not authorized"); } } /** {@inheritDoc} */ @Override public void insertFilesAsWorkflowRunParam(Registration registration, WorkflowRun workflowRun, Map<String, List<File>> files) { if (registration == null) { localLogger.error("WorkflowRunParamDAOHibernate insertFilesAsWorkflowRunParam registration is null"); } else if (registration.isLIMSAdmin() || workflowRun.givesPermission(registration)) { localLogger.info("insertFilesAsWorkflowRunParam workflow run param object"); insertFilesAsWorkflowRunParam(workflowRun, files); } else { localLogger.error("WorkflowRunParamDAOHibernate insertFilesAsWorkflowRunParam is not authorized"); } } /** {@inheritDoc} */ @Override public WorkflowRunParam updateDetached(Registration registration, WorkflowRunParam workflowRunParam) { // Should probably grab an instance of this object from the database, but // clearly this method isn't being used at the moment if (registration == null) { localLogger.error("WorkflowRunParamDAOHibernate updateDetached registration is null"); } else if (registration.isLIMSAdmin() || workflowRunParam.givesPermission(registration)) { localLogger.info("updateDetached workflow run param object"); return updateDetached(workflowRunParam); } else { localLogger.error("WorkflowRunParamDAOHibernate updateDetached is not authorized"); } return null; } }