package com.moreemrecife.security;
import java.util.HashMap;
import java.util.Map;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.ejb.Remote;
import javax.ejb.Stateless;
import javax.naming.InitialContext;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import com.moreemrecife.dao.AccessControlDao;
import com.moreemrecife.dto.FunctionTO;
import com.moreemrecife.dto.GroupTO;
import com.moreemrecife.dto.UserTO;
import com.moreemrecife.jpa.EntityManagerHelper;
import com.moreemrecife.jpa.Function;
import com.moreemrecife.jpa.Group;
import com.moreemrecife.jpa.GroupFunction;
import com.moreemrecife.jpa.User;
/**
* Session Bean implementation class AccessControlBean
*/
@Stateless(mappedName = "ejb.AccessControlBean")
@Remote(AccessControl.class)
public class AccessControlBean implements AccessControl {
Logger logger = Logger.getLogger(this.getClass().getName());
// @Resource
// private SessionContext ctx;
@PersistenceContext(unitName = "RealEstateJPA")
private EntityManager entityManager;
/**
* Default constructor.
*/
public AccessControlBean() {
}
@Override
public UserTO retrieveUserInfo(String login) {
// Disponibiliza o entityManager injetado para o restante da aplica��o
// InitialContext ctx;
try {
// ctx = new InitialContext();
// EntityManager entityManager = (EntityManager) ctx.lookup("RealEstateJPA");
EntityManagerHelper.set(entityManager);
User u = AccessControlDao.selectUser(login);
UserTO to = convertUserTO(u);
return to;
} catch (Exception e) {
logger.log(Level.SEVERE, "Error on call to retrieveUserInfo()", e);
}
return null;
}
@Override
public boolean validateAccess(String login, String password) {
EntityManagerHelper.set(entityManager);
User u = AccessControlDao.selectUser(login);
if (u != null && u.getPassword().equals(password)) // TODO improve the password match routine!!!
return true;
return false;
}
@Override
public int saveFunction(FunctionTO to) {
EntityManagerHelper.set(entityManager);
Function data = new Function();
data.setId(to.getId());
data.setName(to.getName());
data.setDescription(to.getDescription());
return AccessControlDao.saveFunction(data);
}
/**
* Converte uma entidade para objeto de transporte.
* Camada view n�o pode acessar entities.
* @param dao Objeto da camada de persist�ncia
* @return objeto convertido
*/
public static UserTO convertUserTO(User dao) {
UserTO to = new UserTO();
to.setEmail(dao.getEmail());
to.setId(dao.getId());
to.setLastname(dao.getLastname());
to.setLogin(dao.getLogin());
to.setName(dao.getName());
to.setGroup(convertGroupTO(dao.getGroup()));
return to;
}
/**
* Converte uma entidade para objeto de transporte.
* Camada view n�o pode acessar entities.
* @param dao Objeto da camada de persist�ncia
* @return objeto convertido
*/
public static GroupTO convertGroupTO(Group dao) {
GroupTO to = new GroupTO();
to.setId(dao.getId());
to.setName(dao.getName());
Map<String, FunctionTO> functions = new HashMap<String, FunctionTO>();
for (GroupFunction gf : dao.getFunctions()) {
Function f = gf.getFunction();
functions.put(f.getName(), convertFunctionTO(f));
}
to.setFunctions(functions);
return to;
}
/**
* Converte uma entidade para objeto de transporte.
* Camada view n�o pode acessar entities.
* @param dao Objeto da camada de persist�ncia
* @return objeto convertido
*/
private static FunctionTO convertFunctionTO(Function f) {
FunctionTO to = new FunctionTO();
to.setId(f.getId());
to.setName(f.getName());
return to;
}
@Override
/**
* Just a test
*/
public int testCall() {
return 12345;
}
}