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

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

import javax.ejb.EJB;
import javax.ejb.Stateless;

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

import fi.insomnia.bortal.facade.AccessRightFacade;
import fi.insomnia.bortal.facade.RoleFacade;
import fi.insomnia.bortal.facade.RoleRightFacade;
import fi.insomnia.bortal.model.AccessRight;
import fi.insomnia.bortal.model.Event;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;

/**
 * 
 * @author tuukka
 */
@Stateless
public class RoleBean implements RoleBeanLocal {

    @EJB
    private RoleFacade roleFacade;
    @EJB
    private AccessRightFacade arf;
    @EJB 
    private RoleRightFacade rrfacade;
    @EJB
    private AccessRightFacade accessrightFacade;
    private static final Logger logger = LoggerFactory.getLogger(RoleBean.class);

    public List<Role> listRoles() {
        return roleFacade.findAll();
    }

    public Role mergeChanges(Role role) {
        return roleFacade.merge(role);
    }

    public Role create(Role role) {

        roleFacade.create(role);
        return role;
    }

    public List<Role> getPossibleParents(Role role) {
        List<Role> roleList = listRoles();

        if (role == null)
            return roleList;

        List<Role> children = getAllChilds(role, new HashSet<Role>());

        for (Role unit : children) {
            if (roleList.contains(unit)) {
                roleList.remove(unit);
            }
        }

        return roleList;
    }

    private static List<Role> getAllChilds(Role role, Set<Role> checkedRoles) {

        List<Role> returnList = new ArrayList<Role>();

        if (checkedRoles.contains(role) || role == null) {
            return returnList;
        }

        for (Role unit : role.getChildren()) {
            List<Role> someList = getAllChilds(unit, checkedRoles);

            returnList.addAll(someList);
        }
        checkedRoles.add(role);

        return returnList;
    }

    public List<RoleRight> getEventRoleRights(Event e, Role r) {
       
        List<AccessRight> rights = arf.findAll();
        List<RoleRight> ret = new ArrayList<RoleRight>();
        for(AccessRight ar : rights)
        {
            RoleRight roleright = rrfacade.find(e, ar, r);
            if(roleright == null)
            {
                roleright = new RoleRight(e);
                roleright.setAccessRight(ar);
                roleright.setRole(r);
                rrfacade.create(roleright);
            }
            
            ret.add(roleright);
        }
        return ret;
    }

    @Override
    public RoleRight mergeChanges(RoleRight row) {
        return rrfacade.merge(row);
    }

    // Add business logic below. (Right-click in editor and choose
    // "Insert Code > Add Business Method")
}