RoleView.java 4.19 KB
/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package fi.insomnia.bortal.view;

import fi.insomnia.bortal.beans.RoleBeanLocal;
import fi.insomnia.bortal.beans.SecurityBeanLocal;
import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.handler.SessionHandler;
import fi.insomnia.bortal.model.AccessRight;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;

import java.util.List;
import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.model.DataModel;
import javax.faces.model.ListDataModel;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

/**
 * 
 * @author tuukka
 */
@ManagedBean(name = "roleView")
@SessionScoped
public class RoleView {

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

    @EJB
    private RoleBeanLocal roleBean;
    private static final Logger logger = LoggerFactory.getLogger(RoleView.class);

    @EJB
    private SecurityBeanLocal securitybean;
    private Role role;
    private DataModel<Role> items;

    private ListDataModel<RoleRight> rolerights;

    public DataModel<Role> getRoles() {
        items = new ListDataModel<Role>(roleBean.listRoles());
        logger.info("Fetching roles. Found {}", items.getRowCount());

        return items;
    }

    public DataModel<RoleRight> getRoleRights() {
        if (rolerights == null) {
            logger.info("Fetching new rolerights from database");
            rolerights = new ListDataModel<RoleRight>(roleBean.getEventRoleRights(sessionhandler.getCurrentEvent(), role));
        }
        return rolerights;
    }

    public String save() {

        if (!sessionhandler.canWrite(Permission.ROLE_MANAGEMENT)) {
            // Give message to administration what happened here.
            throw new PermissionDeniedException(securitybean, getSessionhandler().getUser(), "User " + getSessionhandler().getUser() + " does not have permission to modify role!");
        }

        role = roleBean.mergeChanges(getRole());

        return "roleSaved";
    }

    public String editRoleRight() {
        logger.info("Roleright array: {}" ,rolerights);
        RoleRight row = rolerights.getRowData();
        roleBean.mergeChanges(row);
        logger.info("Saving roleright {}, r {}, w {}, x {}", new String[] { row.getAccessRight().getName(), new Boolean(row.isRead()).toString(), new Boolean(row.isWrite()).toString(), new Boolean(row.isExecute()).toString() });
        rolerights = null;

        return "editRoleright";
    }

    public String create() {

        if (!sessionhandler.canWrite(Permission.ROLE_MANAGEMENT)) {
            // Give message to administration what happened here.
            throw new PermissionDeniedException(securitybean, getSessionhandler().getUser(), "User " + getSessionhandler().getUser() + " does not have permission to create role!");
        }
        logger.debug("Creating role {}", getRole());
        role = roleBean.create(getRole());

        return "roleCreated";
    }

    public String edit() {
        setRole(items.getRowData());
        rolerights = null;
        items = null;
        
        return "roleEdit";
    }

    /** Creates a new instance of RoleView */
    public RoleView() {
    }

    /**
     * @return the role
     */
    public Role getRole() {
        if (role == null) {
            role = new Role(sessionhandler.getCurrentEvent());
        }
        return role;
    }

    /**
     * @param role
     *            the role to set
     */
    public void setRole(Role role) {
        this.role = role;
    }

    /**
     * @return the sessionhandler
     */
    public SessionHandler getSessionhandler() {
        return sessionhandler;
    }

    /**
     * @param sessionhandler
     *            the sessionhandler to set
     */
    public void setSessionhandler(SessionHandler sessionhandler) {
        this.sessionhandler = sessionhandler;
    }

    /**
     * @return the possibleParents
     */
    public List<Role> getPossibleParents() {
        return roleBean.getPossibleParents(getRole());
    }
}