UserView.java 5.86 KB
package fi.insomnia.bortal.view;

import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;

import javax.ejb.EJB;
import javax.faces.application.FacesMessage;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.context.FacesContext;
import javax.faces.event.AbortProcessingException;
import javax.faces.event.ActionEvent;
import javax.faces.event.ActionListener;
import javax.faces.model.ListDataModel;

import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.insomnia.bortal.I18n;
import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.beans.JaasBeanLocal;
import fi.insomnia.bortal.beans.SecurityLogType;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;

@ManagedBean(name = "userView")
@SessionScoped
public class UserView {

    @ManagedProperty("#{sessionHandler}")
    private SessionHandler sessionhandler;

    @EJB
    private UserBeanLocal userBean;
    @EJB
    private SecurityBeanLocal securitybean;
    @EJB
    private RoleBeanLocal roleBean;

    private static final Logger logger = LoggerFactory.getLogger(UserView.class);
    private User user;
    private ListDataModel<User> items;
    private String login;
    private String password;

    public String edit() {
        userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);

        setUser(items.getRowData());

        return "userEdit";
    }

    private Set<String> userRoleIds;

    public List<Role> getUserRoles() {
        userRoleIds = new HashSet<String>();
        List<Role> roles = user.getRoles();
        if (roles == null) {
            roles = new ArrayList<Role>();
        } else {
            for (Role role : roles) {
                userRoleIds.add(role.getId().getId().toString());
            }
        }
        return roleBean.listRoles();
    }

    public void saveRoles() {
        logger.debug("saving roles: {}", userRoleIds);
        for (Role role : roleBean.listRoles()) {
            Integer roleid = role.getId().getId();
            boolean contains = userRoleIds.contains(roleid.toString());
            logger.debug("Roleid {} is contained in roleids {}", roleid, contains);
            if (contains) {
                if (!role.getUsers().contains(user)) {
                    logger.debug("Adding role {} to user {}", role.getName(), user.getLogin());
                    role.getUsers().add(user);
                    roleBean.mergeChanges(role);
                }
            } else {
                role.getUsers().remove(user);
                logger.debug("Removing role {} form user {}", role.getName(), user.getLogin());
                roleBean.mergeChanges(role);
            }
        }

    }

    public User getSelf() {
        userBean.fatalNotLoggedIn();
        user = userBean.getCurrentUser();
        return user;
    }

    public String createUser() {
        userBean.fatalPermission(Permission.LOGIN, RolePermission.WRITE, "does not have permission to create user!");

        if (null != userBean.getUser(login)) {
            FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("userview.userExists")));
            return "create";
        }
        logger.debug("Creating new user: {}", login);
        // Luodaan uusi käyttäjä UserBeanin funktiolla createNewUser jolle
        // annetaan parametrina pakolliset tiedot ( login ja salasana )
        // Paluuarvona saadaan uusi uljas käyttäjä-olio.
        setUser(userBean.createNewUser(login, password));
        login = "";
        password = "";
        if (getUser() == null) {
            logger.warn("Could not create user. function returned null!");
            return "create";
        }
        securitybean.logMessage(userBean.getCurrentUser(), "Created new user ", getUser().getLogin(), " with id: ", getUser().getId().toString());

        return "edit";
    }

    public void saveUser() {
        User thisusr = getUser();
        if (!userBean.isCurrentUser(thisusr)) {
            userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
        }
        setUser(userBean.mergeChanges(getUser()));
        FacesContext.getCurrentInstance().addMessage(null, new FacesMessage(I18n.get("user.successfullySaved")));

    }

    public ListDataModel<User> getUsers() {
        userBean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);

        List<User> users;
        users = userBean.getUsers();

        items = new ListDataModel<User>(users);
        logger.info("Fetching users. Found {}", items.getRowCount());

        return items;

    }

    // Getters and setters...
    public String getLogin() {
        return login;
    }

    public void setLogin(String login) {
        this.login = login;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    public void setUser(User user) {
        this.user = user;
    }

    public User getUser() {
        return user;
    }

    public void setSessionhandler(SessionHandler sessionhandler) {
        this.sessionhandler = sessionhandler;
    }

    public SessionHandler getSessionhandler() {
        return sessionhandler;
    }

    public void setUserRoleIds(Set<String> userRoleIds) {
        logger.debug("Set new user role id:s {}", userRoleIds);
        this.userRoleIds = userRoleIds;
    }

    public Set<String> getUserRoleIds() {

        logger.debug("Getting user role id:s: {}", userRoleIds);
        return userRoleIds;
    }

}