package edu.asu.spring.quadriga.dao.workbench.impl; import java.util.List; import org.hibernate.HibernateException; 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 edu.asu.spring.quadriga.dao.impl.BaseDAO; import edu.asu.spring.quadriga.dao.workbench.IRetrieveProjectDAO; import edu.asu.spring.quadriga.domain.workbench.IProject; import edu.asu.spring.quadriga.dto.ProjectDTO; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; @Repository public class RetrieveProjectDAO extends BaseDAO<ProjectDTO> implements IRetrieveProjectDAO { @Autowired private SessionFactory sessionFactory; private static final Logger logger = LoggerFactory.getLogger(RetrieveProjectDAO.class); @Override @SuppressWarnings("unchecked") public List<ProjectDTO> getProjectDTOList(String sUserName) throws QuadrigaStorageException { List<ProjectDTO> projectDTOList = null; try { Query query = sessionFactory.getCurrentSession().createQuery( " from ProjectDTO project where project.projectowner.username =:username"); query.setParameter("username", sUserName); projectDTOList = query.list(); } catch (HibernateException e) { logger.info("getProjectList details method :" + e.getMessage()); throw new QuadrigaStorageException(e); } return projectDTOList; } /** * * {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public List<ProjectDTO> getCollaboratorProjectDTOListOfUser(String sUserName) throws QuadrigaStorageException { List<ProjectDTO> projectDTOList = null; try { Query query = sessionFactory .getCurrentSession() .createQuery( "Select distinct projectCollab.projectDTO from ProjectCollaboratorDTO projectCollab where projectCollab.quadrigaUserDTO.username =:username"); query.setParameter("username", sUserName); projectDTOList = query.list(); } catch (Exception e) { logger.info("getCollaboratorProjectList method :" + e.getMessage()); throw new QuadrigaStorageException(e); } return projectDTOList; } @SuppressWarnings("unchecked") @Override public List<ProjectDTO> getProjectDTOListAsWorkspaceOwner(String sUserName) throws QuadrigaStorageException { List<ProjectDTO> projectDTOList = null; try { Query query = sessionFactory .getCurrentSession() .createQuery( "Select projWork.projectDTO from ProjectWorkspaceDTO projWork where projWork.workspaceDTO.workspaceowner.username = :username group by projWork.projectDTO.projectid"); query.setParameter("username", sUserName); projectDTOList = query.list(); } catch (Exception e) { logger.info("getCollaboratorProjectList method :" + e.getMessage()); throw new QuadrigaStorageException(e); } return projectDTOList; } @SuppressWarnings("unchecked") @Override public List<ProjectDTO> getProjectDTOListAsWorkspaceCollaborator(String sUserName) throws QuadrigaStorageException { List<ProjectDTO> projectDTOList = null; try { Query query = sessionFactory .getCurrentSession() .createQuery( "Select projWork.projectDTO from ProjectWorkspaceDTO projWork where projWork.workspaceDTO in (Select wcDTO.workspaceDTO from WorkspaceCollaboratorDTO wcDTO where wcDTO.collaboratorDTOPK.collaboratoruser = :collaboratoruser)"); query.setParameter("collaboratoruser", sUserName); projectDTOList = query.list(); } catch (Exception e) { logger.info("getProjectListAsWorkspaceCollaborator method :" + e.getMessage()); throw new QuadrigaStorageException(e); } return projectDTOList; } /** * {@inheritDoc} */ @SuppressWarnings("unchecked") @Override public List<ProjectDTO> getProjectDTOListByCollaboratorRole(String sUserName, String collaboratorRole) throws QuadrigaStorageException { List<ProjectDTO> projectDTOList = null; try { Query query = sessionFactory .getCurrentSession() .createQuery( "Select projWork.projectDTO from ProjectWorkspaceDTO projWork where projWork.workspaceDTO in (Select wcDTO.workspaceDTO from WorkspaceCollaboratorDTO wcDTO where wcDTO.quadrigaUserDTO.username = :username )"); query.setParameter("username", sUserName); projectDTOList = query.list(); } catch (Exception e) { logger.info("getCollaboratorProjectList method :" + e.getMessage()); throw new QuadrigaStorageException(e); } return projectDTOList; } /** * {@inheritDoc} */ @Override public ProjectDTO getProjectDTOByUnixName(String unixName) throws QuadrigaStorageException { Query query = sessionFactory.getCurrentSession().createQuery( " from ProjectDTO project where project.unixname = :unixname"); query.setParameter("unixname", unixName); ProjectDTO projectDTO = (ProjectDTO) query.uniqueResult(); return projectDTO; } @Override public ProjectDTO getDTO(String id) { return getDTO(ProjectDTO.class, id); } /** * * This method fetches all the projects with the given accessibility * * Uses Hibernate to get {@link ProjectDTO} of a {@link IProject} ID. */ @SuppressWarnings("unchecked") @Override public List<ProjectDTO> getAllProjectsDTOByAccessibility(String accessibility) throws QuadrigaStorageException { List<ProjectDTO> projectDTOList = null; try { Query query = sessionFactory.getCurrentSession().createQuery( "from ProjectDTO project where project.accessibility = :accessibility"); query.setParameter("accessibility", accessibility); projectDTOList = query.list(); return projectDTOList; } catch (HibernateException e) { logger.info("getAllProjectsDTO By Accessibility method :" + e.getMessage()); throw new QuadrigaStorageException(e); } } /** * * This method fetches all the projects that contain the given search term * and accessibility * * Uses Hibernate to get {@link ProjectDTO} of a {@link IProject} ID. */ @SuppressWarnings("unchecked") @Override public List<ProjectDTO> getAllProjectsDTOBySearchTermAndAccessiblity(String searchTerm, String accessibility) throws QuadrigaStorageException { List<ProjectDTO> projectDTOList = null; try { Query query = sessionFactory.getCurrentSession().createQuery( "from ProjectDTO project where project.accessibility=:accessibility AND " + "(project.description like :searchTerm " + " OR " + "project.projectname like :searchTerm )"); query.setParameter("accessibility", accessibility); query.setParameter("searchTerm", "%" + searchTerm + "%"); projectDTOList = query.list(); return projectDTOList; } catch (HibernateException e) { logger.error("getAllProjectsDTO By SearchTerm And Accessiblity method :" + e.getMessage()); throw new QuadrigaStorageException(e); } } }