package enterprise.web.tookit.user;
import java.util.ArrayList;
import java.util.List;
import javax.annotation.Resource;
import javax.ejb.EJBException;
import javax.ejb.Stateless;
import javax.jms.JMSException;
import javax.jms.MessageProducer;
import javax.jms.Queue;
import javax.jms.QueueConnection;
import javax.jms.QueueConnectionFactory;
import javax.jms.Session;
import javax.jms.TextMessage;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import org.apache.log4j.Logger;
import enterprise.web.tookit.exception.ValidationException;
/**
* @since 09/12/2012
*
* @author regis rocha
*
* @description Session Bean implementation class UserBean
*
*/
@Stateless(mappedName = "/ejb/UserBean")
public class UserBean implements UserBeanRemote {
/**
* Default constructor.
*/
public UserBean() {
}
/**
* LOG
*/
private transient final Logger LOG = Logger.getLogger(UserBean.class);
/**
* Persistence Context credencial
*/
@PersistenceContext(unitName = "credencial")
private EntityManager credencial;
/**
* Connection Factory jms
*/
@Resource(mappedName = "ConnectionFactory")
private QueueConnectionFactory factory;
/**
* Queue to recover password
*/
@Resource(mappedName = "queue/recuperarSenha")
private Queue queue;
@Override
public void createUser(User user) {
final UserDao dao = new UserDao(credencial);
final List<UserRole> listRoles = new ArrayList<UserRole>();
listRoles.add(this.getRoleMaster());
user.setListUserRoles(listRoles);
dao.persist(user);
}
@Override
public void updatePasswordUser(User user) {
// TODO Auto-generated method stub
}
@Override
public void dropUser(User user) {
// TODO Auto-generated method stub
}
@Override
public void addRolesToUser(User user) {
// TODO Auto-generated method stub
}
@Override
public void createRoles(User user) {
// TODO Auto-generated method stub
}
/**
* @since 24/12/2012
*
* @author regis rocha
*
* @description Verifica se existe algum usuario com o email informado por argumento. Caso ja existe um
* valor boolean TRUE sera retornado. Caso contrario ou seja nao exista usuario para o email
* informado sera retornado um valor boolean FALSE.
*
* @param String
*
* @return boolean - FALSE caso NAO exista nenhum usuario com o email informado.
*/
@Override
public boolean emailExist(final String email) {
final UserDao dao = new UserDao(credencial);
final boolean exist = dao.emailExist(email);
return exist;
}
/**
* @since 24/01/2013
*
* @author regis rocha
*
* @desciption Obtem a Role Master, que tera acesso a todas as funcionalidades do sistema.
*
* @return UserRole
*/
@Override
public UserRole getRoleMaster() {
final UserDao dao = new UserDao(credencial);
return dao.getRoleMaster();
}
/**
* @since 27/02/2013
*
* @author regis rocha
*
* @description Processo de recuperacao de senha, onde sera enviado para uma fila jms que o mesmo ira
* acionar a funcionalidade de envio de email para o destinatario previamente cadastrado pelo
* usuario.
*
* @param String
*
* @throws ValidationException
* - Caso ocorra algum erro de validacao.
*
* @throws JMSException
*/
@Override
public void recoverPassword(final String email) throws ValidationException, EJBException {
if (!this.emailExist(email)) {
throw new ValidationException("E-mail de Usu�rio n�o existe! Favor Verificar o e-mail informado.");
}
try {
final QueueConnection connection = this.factory.createQueueConnection();
connection.start();
final Session session = connection.createSession(Boolean.FALSE, Session.AUTO_ACKNOWLEDGE);
final MessageProducer producer = session.createProducer(this.queue);
final TextMessage message = session.createTextMessage();
message.setText(email);
producer.send(message);
producer.close();
session.close();
connection.close();
} catch (JMSException e) {
LOG.error("", e);
throw new EJBException(e.getMessage(), e);
} catch (Exception e) {
LOG.error("", e);
throw new EJBException(e.getMessage(), e);
}
}
}