RoleRightFacade.java 1.95 KB
package fi.insomnia.bortal.facade;

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

import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;
import javax.persistence.TypedQuery;

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

import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.RoleRight;

@Stateless
@LocalBean
public class RoleRightFacade extends EventChildGenericFacade<RoleRight> {

	@PersistenceContext
	private EntityManager em;
	private static final Logger logger = LoggerFactory.getLogger(RoleRightFacade.class);

	public RoleRightFacade() {
		super(RoleRight.class);
	}

	@Override
	protected EntityManager getEm() {
		return em;
	}

	public RoleRight find(Permission permission, Role role) {
		if (permission == null || role == null) {
			return null;
		}
		TypedQuery<RoleRight> q = this.getEm().createNamedQuery("RoleRight.findByRightAndRole", RoleRight.class);
		q.setParameter("permission", permission);
		q.setParameter("role", role);
		return getSingleNullableResult(q);
	}

	public List<RoleRight> find(Collection<Role> roles, Permission permission) {
		if (roles.size() == 0) {
			return new ArrayList<RoleRight>();
		}
		TypedQuery<RoleRight> q = getEm().createNamedQuery("RoleRight.findByRolesForPermission", RoleRight.class);
		Set<Integer> roleids = new HashSet<Integer>();

		for (Role r : roles) {
			roleids.add(r.getId().getId());
		}
		Integer eventId = roles.iterator().next().getEvent().getId();

		q.setParameter("eventId", eventId);
		q.setParameter("roleids", roleids);
		q.setParameter("permission", permission);
		return q.getResultList();
	}

	public RoleRight createRoleRight(Role role, Permission perm) {
		RoleRight ret = new RoleRight(role, perm, false, false, false);
		create(ret);
		getEm().flush();
		return ret;

	}

}