package edu.asu.spring.quadriga.dao.workbench.impl; import java.util.ArrayList; import java.util.List; import java.util.Properties; import javax.annotation.Resource; import org.hibernate.Query; import org.hibernate.SessionFactory; import org.slf4j.Logger; import org.slf4j.LoggerFactory; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Repository; import org.springframework.transaction.annotation.Transactional; import edu.asu.spring.quadriga.dao.impl.BaseDAO; import edu.asu.spring.quadriga.dao.workbench.IProjectCollaboratorDAO; import edu.asu.spring.quadriga.domain.IUser; import edu.asu.spring.quadriga.dto.ProjectCollaboratorDTO; import edu.asu.spring.quadriga.dto.ProjectDTO; import edu.asu.spring.quadriga.dto.QuadrigaUserDTO; import edu.asu.spring.quadriga.mapper.ProjectCollaboratorDTOMapper; import edu.asu.spring.quadriga.mapper.UserDTOMapper; @Repository @Transactional public class ProjectCollaboratorDAO extends BaseDAO<ProjectCollaboratorDTO> implements IProjectCollaboratorDAO { @Autowired private SessionFactory sessionFactory; @Autowired private ProjectCollaboratorDTOMapper projectMapper; @Autowired private UserDTOMapper userMapper; @Resource(name = "database_error_msgs") private Properties messages; private static final Logger logger = LoggerFactory.getLogger(ProjectCollaboratorDAO.class); /** * {@inheritDoc} */ @Override public List<IUser> getProjectNonCollaborators(String projectid) { List<IUser> user = null; IUser nonCollaborator = null; ProjectDTO project = (ProjectDTO) sessionFactory.getCurrentSession().get(ProjectDTO.class, projectid); user = new ArrayList<IUser>(); Query query = sessionFactory.getCurrentSession().createQuery("SELECT user FROM QuadrigaUserDTO user WHERE user.username NOT IN " + "(SELECT collaborator.collaboratorDTOPK.collaboratoruser FROM ProjectCollaboratorDTO collaborator " + " WHERE collaborator.collaboratorDTOPK.projectid =:projectid)"); query.setParameter("projectid", projectid); @SuppressWarnings("unchecked") List<QuadrigaUserDTO> collaborator = query.list(); for(QuadrigaUserDTO tempCollab : collaborator) { if(!project.getProjectowner().getUsername().equals(tempCollab.getUsername())) { nonCollaborator = userMapper.getUser(tempCollab); user.add(nonCollaborator); } } return user; } @Override public ProjectCollaboratorDTO getDTO(String id) { return getDTO(ProjectCollaboratorDTO.class, id); } @Override public List<QuadrigaUserDTO> getUsersNotCollaborating(String dtoId) { Query query = sessionFactory.getCurrentSession().createQuery("SELECT user FROM QuadrigaUserDTO user WHERE user.username NOT IN " + "(SELECT collaborator.collaboratorDTOPK.collaboratoruser FROM ProjectCollaboratorDTO collaborator " + " WHERE collaborator.collaboratorDTOPK.projectid =:projectid)"); query.setParameter("projectid", dtoId); return query.list(); } }