package edu.asu.spring.quadriga.dao.workspace.impl; import org.hibernate.Query; import org.hibernate.SessionFactory; 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.workspace.IWorkspaceAccessDAO; import edu.asu.spring.quadriga.dto.QuadrigaUserDTO; import edu.asu.spring.quadriga.dto.WorkspaceDTO; import edu.asu.spring.quadriga.exceptions.QuadrigaAccessException; import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException; @Repository public class WorkspaceAccessDAO extends BaseDAO<WorkspaceDTO> implements IWorkspaceAccessDAO { @Autowired private SessionFactory sessionFactory; /** * {@inheritDoc} */ @Override public boolean chkWorkspaceOwner(String userName, String workspaceId) throws QuadrigaStorageException { WorkspaceDTO workspace = null; QuadrigaUserDTO workspaceOwner = null; boolean isOwner; try { isOwner = false; workspace = (WorkspaceDTO) sessionFactory.getCurrentSession().get(WorkspaceDTO.class, workspaceId); workspaceOwner = workspace.getWorkspaceowner(); if(workspaceOwner.getUsername().equals(userName)) { isOwner = true; } } catch(Exception ex) { System.out.println(ex.getMessage()); throw new QuadrigaStorageException(); } return isOwner; } /** * {@inheritDoc} */ @Override public boolean chkWorkspaceOwnerEditorRole(String userName, String workspaceId) throws QuadrigaStorageException { int count; boolean isEditor; isEditor = false; Query query = null; //check if he is a project editor query = sessionFactory.getCurrentSession().createQuery("SELECT COUNT(p.projectEditorDTOPK.projectid) FROM ProjectEditorDTO p WHERE p.projectEditorDTOPK.projectid IN" + " (SELECT ws.projectWorkspaceDTOPK.projectid FROM ProjectWorkspaceDTO ws WHERE ws.projectWorkspaceDTOPK.workspaceid =:workspaceid) " + " AND p.quadrigaUserDTO.username =:username"); query.setParameter("username", userName); query.setParameter("workspaceid", workspaceId); count = ((Number) query.iterate().next()).intValue(); if(count > 0) { isEditor = true; } //check if the user is workspace editor if(!isEditor) { query = sessionFactory.getCurrentSession().createQuery("SELECT COUNT(ws.workspaceEditorDTOPK.workspaceid) FROM WorkspaceEditorDTO ws " + " WHERE ws.workspaceEditorDTOPK.workspaceid =:workspaceid AND ws.quadrigaUserDTO.username =:username"); query.setParameter("username",userName); query.setParameter("workspaceid", workspaceId); count = ((Number)query.iterate().next()).intValue(); if(count > 0) { isEditor = true; } } return isEditor; } /** * {@inheritDoc} */ @Override public boolean chkWorkspaceProjectInheritOwnerEditorRole(String userName, String workspaceId) throws QuadrigaStorageException { boolean isEditor; int count; isEditor = false; //check if he is a workspace editor Query query = sessionFactory.getCurrentSession().createQuery("SELECT COUNT(p.projectEditorDTOPK.projectid) FROM ProjectEditorDTO p WHERE p.projectEditorDTOPK.projectid IN" + " (SELECT ws.projectWorkspaceDTOPK.projectid FROM ProjectWorkspaceDTO ws WHERE ws.projectWorkspaceDTOPK.workspaceid =:workspaceid) " + " AND p.quadrigaUserDTO.username =:username"); query.setParameter("username", userName); query.setParameter("workspaceid", workspaceId); count = ((Number) query.iterate().next()).intValue(); if(count > 0) { isEditor = true; } return isEditor; } /** * {@inheritDoc} */ @Override public boolean chkWorkspaceExists(String workspaceId) throws QuadrigaStorageException { boolean isExists; WorkspaceDTO workspace = null; try { isExists = false; workspace = (WorkspaceDTO) sessionFactory.getCurrentSession().get(WorkspaceDTO.class, workspaceId); if( workspace != null) { isExists = true; } } catch(Exception ex) { throw new QuadrigaStorageException(); } return isExists; } /** * {@inheritDoc} */ @Override public boolean chkIsWorkspaceAssocaited(String userName) throws QuadrigaStorageException { int count; boolean isAssociated; try { isAssociated = false; Query query = sessionFactory.getCurrentSession().createQuery("SELECT COUNT(ws.workspaceid) FROM WorkspaceDTO ws WHERE ws.workspaceowner.username =:username"); query.setParameter("username",userName); count = ((Long) query.iterate().next()).intValue(); if(count > 0) { isAssociated = true; } else { isAssociated = false; } } catch(Exception ex) { throw new QuadrigaStorageException(); } return isAssociated; } /** * {@inheritDoc} * @throws QuadrigaAccessException */ @Override public boolean chkIsCollaboratorWorkspaceAssociated(String userName, String role) throws QuadrigaStorageException { int count; boolean isAssociated; try { isAssociated = false; Query query = sessionFactory.getCurrentSession().createQuery("SELECT COUNT(w.collaboratorDTOPK.workspaceid) FROM WorkspaceCollaboratorDTO w" + " WHERE w.collaboratorDTOPK.collaboratoruser = :collaboratoruser AND " + " w.collaboratorDTOPK.collaboratorrole = :collaboratorrole"); query.setParameter("collaboratoruser", userName); query.setParameter("collaboratorrole", role); count = ((Long)query.iterate().next()).intValue(); if(count > 0) { isAssociated = true; } else { isAssociated = false; } } catch(Exception ex) { throw new QuadrigaStorageException(); } return isAssociated; } @Override public WorkspaceDTO getDTO(String id) { return getDTO(WorkspaceDTO.class, id); } }