package pl.net.bluesoft.rnd.processtool.dao.impl;
import java.util.ArrayList;
import java.util.Collection;
import org.apache.commons.collections.CollectionUtils;
import org.hibernate.Criteria;
import org.hibernate.Session;
import org.hibernate.criterion.Projections;
import org.hibernate.criterion.Restrictions;
import pl.net.bluesoft.rnd.processtool.dao.UserProcessQueueDAO;
import pl.net.bluesoft.rnd.processtool.hibernate.SimpleHibernateBean;
import pl.net.bluesoft.rnd.processtool.model.QueueType;
import pl.net.bluesoft.rnd.processtool.model.UserProcessQueue;
/**
*
* @author Maciej Pawlak
*
*/
public class UserProcessQueueDAOImpl extends SimpleHibernateBean<UserProcessQueue> implements UserProcessQueueDAO
{
@Override
public UserProcessQueue getUserProcessQueueByTaskId(Long taskId, String assigneLogin)
{
return (UserProcessQueue)session.createCriteria(UserProcessQueue.class)
.add(Restrictions.eq("taskId", taskId))
.add(Restrictions.eq("login", assigneLogin))
.uniqueResult();
}
public UserProcessQueueDAOImpl(Session session)
{
super(session);
}
@Override
public UserProcessQueue getUserProcessAssignedToOthers(Long processId, String creatorLogin)
{
return getUserProcessQueueElement(processId, creatorLogin, QueueType.ASSIGNED_TO_CURRENT_USER);
}
@Override
public UserProcessQueue getUserProcessAssignedToHim(Long processId, String creatorLogin)
{
return getUserProcessQueueElement(processId, creatorLogin, QueueType.ASSIGNED_TO_CURRENT_USER);
}
@Override
public UserProcessQueue getUserProcessAssignedFromOthers(Long processId,String assigne)
{
return getUserProcessQueueElement(processId, assigne, QueueType.ASSIGNED_TO_CURRENT_USER);
}
@Override
@SuppressWarnings("unchecked")
public Collection<UserProcessQueue> getAllUserProcessQueueElements(Long processId, QueueType... types)
{
Criteria criteria = session.createCriteria(UserProcessQueue.class)
.add(Restrictions.eq("processId", processId));
if(types.length > 0)
criteria.add(Restrictions.in("queueType", types));
return (Collection<UserProcessQueue>)criteria.list();
}
private UserProcessQueue getUserProcessQueueElement(Long processId, String creatorLogin, QueueType type)
{
return (UserProcessQueue)session.createCriteria(UserProcessQueue.class)
.add(Restrictions.eq("processId", processId))
.add(Restrictions.eq("login", creatorLogin))
.add(Restrictions.eq("queueType", type))
.uniqueResult();
}
@Override
public int getQueueLength(String userLogin, QueueType ... queueTypes)
{
Collection<QueueType> types = new ArrayList<QueueType>();
CollectionUtils.addAll(types, queueTypes);
return getQueueLength(userLogin, types);
}
@Override
public int getQueueLength(String userLogin, Collection<QueueType> queueTypes)
{
Criteria criteria = session.createCriteria(UserProcessQueue.class)
.add(Restrictions.eq("login", userLogin))
.add(Restrictions.in("queueType", queueTypes))
.setProjection(Projections.rowCount());
Long taskCount = (Long)criteria.uniqueResult();
return taskCount.intValue();
}
@SuppressWarnings("unchecked")
@Override
public Collection<UserProcessQueue> getAllUserProcessQueueByTaskId(Long taskId)
{
Criteria criteria = session.createCriteria(UserProcessQueue.class)
.add(Restrictions.eq("taskId", taskId));
return (Collection<UserProcessQueue>)criteria.list();
}
}