package net.sourceforge.seqware.common.dao.hibernate; import java.lang.reflect.InvocationTargetException; import java.util.ArrayList; import java.util.List; import net.sourceforge.seqware.common.dao.WorkflowParamValueDAO; import net.sourceforge.seqware.common.model.Registration; import net.sourceforge.seqware.common.model.WorkflowParamValue; import net.sourceforge.seqware.common.util.NullBeanUtils; import org.apache.commons.beanutils.BeanUtilsBean; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.dao.DataAccessResourceFailureException; import org.springframework.orm.hibernate3.support.HibernateDaoSupport; /** * <p> * WorkflowParamValueDAOHibernate class. * </p> * * @author boconnor * @version $Id: $Id */ public class WorkflowParamValueDAOHibernate extends HibernateDaoSupport implements WorkflowParamValueDAO { final Logger localLogger = LoggerFactory.getLogger(WorkflowParamValueDAOHibernate.class); /** * <p> * Constructor for WorkflowParamValueDAOHibernate. * </p> */ public WorkflowParamValueDAOHibernate() { super(); } /** {@inheritDoc} */ @Override public Integer insert(WorkflowParamValue workflowParamValue) { // this.getSession().evict(workflowParam.getWorkflow()); return (Integer) this.getHibernateTemplate().save(workflowParamValue); } /** {@inheritDoc} */ @Override public void update(WorkflowParamValue workflowParamValue) { getHibernateTemplate().update(workflowParamValue); getSession().flush(); } /** {@inheritDoc} */ @Override public void delete(WorkflowParamValue workflowParamValue) { getHibernateTemplate().delete(workflowParamValue); } /** {@inheritDoc} */ @Override public WorkflowParamValue findByID(Integer id) { String query = "from WorkflowParamValue as workflowParamValue where workflowParamValue.workflowParamValueId = ?"; WorkflowParamValue workflowParamValue = null; Object[] parameters = { id }; List list = this.getHibernateTemplate().find(query, parameters); if (list.size() > 0) { workflowParamValue = (WorkflowParamValue) list.get(0); } return workflowParamValue; } /** {@inheritDoc} */ @Override public WorkflowParamValue updateDetached(WorkflowParamValue workflowParamValue) { WorkflowParamValue dbObject = reattachWorkflowParamValue(workflowParamValue); try { BeanUtilsBean beanUtils = new NullBeanUtils(); beanUtils.copyProperties(dbObject, workflowParamValue); return (WorkflowParamValue) this.getHibernateTemplate().merge(dbObject); } catch (IllegalAccessException | InvocationTargetException e) { localLogger.error("Error updating detached workflowparamvalue", e); } return null; } /** {@inheritDoc} */ @Override public List<WorkflowParamValue> list() { ArrayList<WorkflowParamValue> l = new ArrayList<>(); String query = "from WorkflowParamValue"; List list = this.getHibernateTemplate().find(query); for (Object e : list) { l.add((WorkflowParamValue) e); } return l; } /** {@inheritDoc} */ @Override public void update(Registration registration, WorkflowParamValue workflowParamValue) { WorkflowParamValue dbObject = reattachWorkflowParamValue(workflowParamValue); if (registration == null) { localLogger.error("WorkflowParamValueDAOHibernate update: registration is null"); } else if (registration.isLIMSAdmin() || (workflowParamValue.givesPermission(registration) && dbObject.givesPermission(registration))) { localLogger.info("Updating workflow param value object"); update(workflowParamValue); } else localLogger.error("WorkflowParamValueDAOHibernate update not authorized"); } /** {@inheritDoc} */ @Override public Integer insert(Registration registration, WorkflowParamValue workflowParamValue) { if (registration == null) { localLogger.error("WorkflowParamValueDAOHibernate insert: registration is null"); } else if (registration.isLIMSAdmin() || workflowParamValue.givesPermission(registration)) { localLogger.info("insert workflow param value object"); return insert(workflowParamValue); } else localLogger.error("WorkflowParamValueDAOHibernate insert not authorized"); return null; } /** {@inheritDoc} */ @Override public WorkflowParamValue updateDetached(Registration registration, WorkflowParamValue workflowParamValue) { WorkflowParamValue dbObject = reattachWorkflowParamValue(workflowParamValue); if (registration == null) { localLogger.error("WorkflowParamValueDAOHibernate updateDetached: registration is null"); } else if (registration.isLIMSAdmin() || dbObject.givesPermission(registration)) { localLogger.info("updateDetached workflow param value object"); return updateDetached(workflowParamValue); } else localLogger.error("WorkflowParamValueDAOHibernate updateDetached not authorized"); return null; } private WorkflowParamValue reattachWorkflowParamValue(WorkflowParamValue workflowParam) throws IllegalStateException, DataAccessResourceFailureException { WorkflowParamValue dbObject = workflowParam; if (!getSession().contains(workflowParam)) { dbObject = findByID(workflowParam.getWorkflowParamValueId()); } return dbObject; } }