package edu.asu.spring.quadriga.dao.impl;
import java.util.Date;
import java.util.List;
import java.util.Properties;
import javax.annotation.Resource;
import org.hibernate.Query;
import org.hibernate.Session;
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.IUserDAO;
import edu.asu.spring.quadriga.dto.QuadrigaUserDTO;
import edu.asu.spring.quadriga.dto.QuadrigaUserDeniedDTO;
import edu.asu.spring.quadriga.dto.QuadrigaUserRequestsDTO;
import edu.asu.spring.quadriga.exceptions.QuadrigaStorageException;
import edu.asu.spring.quadriga.exceptions.UserOwnsOrCollaboratesDeletionException;
import edu.asu.spring.quadriga.mapper.UserDTOMapper;
/**
* This class is responsible for Querying the MySQL database and fetch the class
* objects related to User module
*
* @author Ram Kumar Kumaresan
*
*/
@Repository
public class UserDAO extends BaseDAO<QuadrigaUserDTO> implements IUserDAO {
@Autowired
private SessionFactory sessionFactory;
@Autowired
private UserDTOMapper userMapper;
@Resource(name = "database_error_msgs")
private Properties messages;
private static final Logger logger = LoggerFactory.getLogger(UserDAO.class);
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public List<QuadrigaUserDTO> getUserDTOList(String userRoleId) throws QuadrigaStorageException {
List<QuadrigaUserDTO> usersDTOList = null;
try {
Query query = sessionFactory.getCurrentSession().createQuery(
" from QuadrigaUserDTO user where user.quadrigarole like :quadrigarole");
query.setParameter("quadrigarole", "%" + userRoleId + "%");
usersDTOList = query.list();
return usersDTOList;
} catch (Exception e) {
logger.error("Error in adding an account request: ", e);
throw new QuadrigaStorageException(e);
}
}
/**
* {@inheritDoc}
*/
@Override
public int addAccountRequest(String userName) throws QuadrigaStorageException {
if (userName == null || userName.equals(""))
return FAILURE;
QuadrigaUserRequestsDTO userRequestDTO = userMapper.getUserRequestDTO(userName);
try {
sessionFactory.getCurrentSession().save(userRequestDTO);
return SUCCESS;
} catch (Exception e) {
logger.error("Error in adding an account request: ", e);
throw new QuadrigaStorageException(e);
}
}
/**
* Add a new user account request to Quadriga.
*
* @param username
* Username of new user.
* @param password
* Password for new user.
* @param fullname
* Full name of new user.
* @param email
* Email of new user.
* @return true if request was stored successfully; otherwise false.
* @throws QuadrigaStorageException
* in case there is a DB error.
*/
@Override
public boolean addNewUserAccountRequest(String username, String password, String fullname, String email)
throws QuadrigaStorageException {
QuadrigaUserRequestsDTO userRequestDTO = new QuadrigaUserRequestsDTO(username, username, new Date(), username,
new Date());
userRequestDTO.setPasswd(password);
userRequestDTO.setEmail(email);
userRequestDTO.setFullname(fullname);
try {
sessionFactory.getCurrentSession().save(userRequestDTO);
sessionFactory.getCurrentSession().flush();
return true;
} catch (Exception e) {
throw new QuadrigaStorageException(e);
}
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public List<QuadrigaUserRequestsDTO> getUserRequestDTOList() throws QuadrigaStorageException {
List<QuadrigaUserRequestsDTO> userRequestDTOList = null;
try {
Query query = sessionFactory.getCurrentSession().getNamedQuery("QuadrigaUserRequestsDTO.findAll");
userRequestDTOList = query.list();
return userRequestDTOList;
} catch (Exception e) {
logger.error("Error in fetching all user account requests: ", e);
throw new QuadrigaStorageException(e);
}
}
public QuadrigaUserDTO findUser(String username) throws QuadrigaStorageException {
try {
Object userObj = sessionFactory.getCurrentSession().load(QuadrigaUserDTO.class, username);
if (userObj != null)
return (QuadrigaUserDTO) userObj;
return null;
} catch (Exception e) {
logger.error("Couldn't find user.");
throw new QuadrigaStorageException(e);
}
}
/**
* {@inheritDoc}
*/
@SuppressWarnings("unchecked")
@Override
public List<QuadrigaUserDTO> getUserDTOListNotInRole(String userRoleId) throws QuadrigaStorageException {
List<QuadrigaUserDTO> usersDTOList = null;
try {
Query query = sessionFactory.getCurrentSession().createQuery(
" from QuadrigaUserDTO user where user.quadrigarole not like :quadrigarole");
query.setParameter("quadrigarole", "%" + userRoleId + "%");
usersDTOList = query.list();
return usersDTOList;
} catch (Exception e) {
logger.error("Error in adding an account request: ", e);
throw new QuadrigaStorageException(e);
}
}
/**
* {@inheritDoc}
*/
@Override
public int deactivateUser(String sUserId, String sDeactiveRoleDBId, String sAdminId)
throws QuadrigaStorageException {
try {
QuadrigaUserDTO userDTO = (QuadrigaUserDTO) sessionFactory.getCurrentSession().get(QuadrigaUserDTO.class,
sUserId);
if (userDTO != null) {
if (userDTO.getQuadrigarole().length() == 0)
userDTO.setQuadrigarole(sDeactiveRoleDBId);
else
userDTO.setQuadrigarole(userDTO.getQuadrigarole() + "," + sDeactiveRoleDBId);
userDTO.setUpdatedby(sAdminId);
userDTO.setUpdateddate(new Date());
sessionFactory.getCurrentSession().update(userDTO);
return SUCCESS;
} else
return FAILURE;
} catch (Exception e) {
logger.error("Error in deactivating user account: ", e);
throw new QuadrigaStorageException(e);
}
}
/**
* {@inheritDoc}
*/
@Override
public int updateUserRoles(String sUserId, String sRoles, String loggedInUser) throws QuadrigaStorageException {
// check if the user name is null
if ((sUserId == null) || (sUserId.isEmpty())) {
throw new QuadrigaStorageException();
}
QuadrigaUserDTO userDTO;
try {
userDTO = (QuadrigaUserDTO) sessionFactory.getCurrentSession().get(QuadrigaUserDTO.class, sUserId);
} catch (Exception e) {
logger.error("Error in deactivating user account: ", e);
throw new QuadrigaStorageException(e);
}
if (userDTO != null) {
userDTO.setQuadrigarole(sRoles);
userDTO.setUpdatedby(loggedInUser);
userDTO.setUpdateddate(new Date());
sessionFactory.getCurrentSession().update(userDTO);
return SUCCESS;
} else {
return FAILURE;
}
}
/**
* {@inheritDoc}
*/
@Override
public int approveUserRequest(String sUserId, String sRoles, String sAdminId) throws QuadrigaStorageException {
try {
QuadrigaUserRequestsDTO userRequestDTO = (QuadrigaUserRequestsDTO) sessionFactory.getCurrentSession().get(
QuadrigaUserRequestsDTO.class, sUserId);
if (userRequestDTO != null) {
QuadrigaUserDTO userDTO = new QuadrigaUserDTO();
userDTO.setFullname(userRequestDTO.getFullname());
userDTO.setUsername(userRequestDTO.getUsername());
userDTO.setPasswd(userRequestDTO.getPasswd());
userDTO.setEmail(userRequestDTO.getEmail());
userDTO.setQuadrigarole(sRoles);
userDTO.setCreatedby(sAdminId);
userDTO.setCreateddate(new Date());
userDTO.setUpdatedby(sAdminId);
userDTO.setUpdateddate(new Date());
Session session = sessionFactory.getCurrentSession();
session.save(userDTO);
session.delete(userRequestDTO);
return SUCCESS;
} else
return FAILURE;
} catch (Exception e) {
logger.error("Error in deactivating user account: ", e);
throw new QuadrigaStorageException(e);
}
}
/**
* {@inheritDoc}
*/
@Override
public int denyUserRequest(String sUserId, String sAdminId) throws QuadrigaStorageException {
try {
QuadrigaUserRequestsDTO userRequestDTO = (QuadrigaUserRequestsDTO) sessionFactory.getCurrentSession().get(
QuadrigaUserRequestsDTO.class, sUserId);
if (userRequestDTO != null) {
QuadrigaUserDeniedDTO userDeniedDTO = new QuadrigaUserDeniedDTO();
userDeniedDTO.setActionid(generateUniqueID());
userDeniedDTO.setFullname(userRequestDTO.getFullname());
userDeniedDTO.setUsername(userRequestDTO.getUsername());
userDeniedDTO.setPasswd(userRequestDTO.getPasswd());
userDeniedDTO.setEmail(userRequestDTO.getEmail());
userDeniedDTO.setDeniedby(sAdminId);
userDeniedDTO.setUpdatedby(sAdminId);
userDeniedDTO.setUpdateddate(new Date());
userDeniedDTO.setCreatedby(sAdminId);
userDeniedDTO.setCreateddate(new Date());
Session session = sessionFactory.getCurrentSession();
session.save(userDeniedDTO);
session.delete(userRequestDTO);
return SUCCESS;
} else
return FAILURE;
} catch (Exception e) {
logger.error("Error in deactivating user account: ", e);
throw new QuadrigaStorageException(e);
}
}
/**
* {@inheritDoc}
*/
@Override
public int deleteUser(String deleteUser, String deactivatedRole) throws QuadrigaStorageException,
UserOwnsOrCollaboratesDeletionException {
QuadrigaUserDTO userDTO = (QuadrigaUserDTO) sessionFactory.getCurrentSession().get(QuadrigaUserDTO.class,
deleteUser);
if (userDTO != null) {
if (!userDTO.getQuadrigarole().contains(deactivatedRole))
throw new QuadrigaStorageException(messages.getProperty("delete_user_not_deactivated"));
if (userDTO.getProjectDTOList().size() != 0) {
throw new UserOwnsOrCollaboratesDeletionException(messages.getProperty("delete_user_project_owner"));
} else if (userDTO.getWorkspaceDTOList().size() != 0) {
throw new UserOwnsOrCollaboratesDeletionException(messages.getProperty("delete_user_workspace_owner"));
} else if (userDTO.getProjectCollaboratorDTOList().size() != 0) {
throw new UserOwnsOrCollaboratesDeletionException(
messages.getProperty("delete_user_project_collaborator"));
} else if (userDTO.getWorkspaceCollaboratorDTOList().size() != 0) {
throw new UserOwnsOrCollaboratesDeletionException(
messages.getProperty("delete_user_workspace_collaborator"));
} else {
sessionFactory.getCurrentSession().delete(userDTO);
return SUCCESS;
}
} else {
return FAILURE;
}
}
@Override
public QuadrigaUserRequestsDTO getUserRequestDTO(String username) throws QuadrigaStorageException {
try {
Object obj = sessionFactory.getCurrentSession().get(QuadrigaUserRequestsDTO.class, username);
if (obj != null)
return (QuadrigaUserRequestsDTO) obj;
return null;
} catch (Exception e) {
throw new QuadrigaStorageException(e);
}
}
/**
* This method inserts the quadiriga Admin user record into the daabase
*
* @param userName
* - Quadriga admin user name
* @param sRoles
* - quadriga Roles possed by the admin
* @throws QuadrigaStorageException
* - represents any database exception
* @author kiran batna
*/
@Override
public void insertQuadrigaAdminUser(String userName, String sRoles) throws QuadrigaStorageException {
try {
QuadrigaUserDTO user = (QuadrigaUserDTO) sessionFactory.getCurrentSession().get(QuadrigaUserDTO.class,
userName);
if (user == null) {
// insert the record into the quadriga user table
Date date = new Date();
QuadrigaUserDTO quadrigaAdmin = new QuadrigaUserDTO();
quadrigaAdmin.setFullname(userName);
quadrigaAdmin.setUsername(userName);
quadrigaAdmin.setPasswd(null);
quadrigaAdmin.setQuadrigarole(sRoles);
quadrigaAdmin.setCreatedby(userName);
quadrigaAdmin.setCreateddate(date);
quadrigaAdmin.setUpdatedby(userName);
quadrigaAdmin.setUpdateddate(date);
sessionFactory.getCurrentSession().save(quadrigaAdmin);
}
} catch (Exception ex) {
ex.printStackTrace();
throw new QuadrigaStorageException();
}
}
@Override
public QuadrigaUserDTO getDTO(String id) {
return getDTO(QuadrigaUserDTO.class, id);
}
@Override
public QuadrigaUserDeniedDTO getDeniedUser(String id) {
return (QuadrigaUserDeniedDTO) sessionFactory.getCurrentSession().get(QuadrigaUserDeniedDTO.class, id);
}
}