OrgRoleFacade.java 4.18 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.facade;

import java.util.List;

import javax.ejb.EJB;
import javax.ejb.LocalBean;
import javax.ejb.Stateless;
import javax.persistence.criteria.CriteriaBuilder;
import javax.persistence.criteria.CriteriaQuery;
import javax.persistence.criteria.ListJoin;
import javax.persistence.criteria.Root;

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

import fi.codecrew.moya.beans.EventBeanLocal;
import fi.codecrew.moya.model.EventOrganiser;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.LanEvent;
import fi.codecrew.moya.model.OrgRole;
import fi.codecrew.moya.model.OrgRole_;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.Role_;
import fi.codecrew.moya.model.User;

/**
 * Session Bean implementation class OrgRoleFacade
 */
@Stateless
@LocalBean
public class OrgRoleFacade extends IntegerPkGenericFacade<OrgRole> {

	@EJB
	private EventBeanLocal eventBean;

	@SuppressWarnings("unused")
	private static final Logger logger = LoggerFactory.getLogger(OrgRoleFacade.class);

	public OrgRoleFacade() {
		super(OrgRole.class);
	}

	public List<OrgRole> findForUser(User user, EventOrganiser organisation) {
		CriteriaBuilder cb = getEm().getCriteriaBuilder();
		CriteriaQuery<OrgRole> cq = cb.createQuery(OrgRole.class);
		Root<OrgRole> root = cq.from(OrgRole.class);
		cq.where(cb.equal(root.get(OrgRole_.eventOrganisation), organisation), cb.isMember(user, root.get(OrgRole_.users)));

		return getEm().createQuery(cq).getResultList();
	}

	public List<OrgRole> findForUser(User user) {
		return findForUser(user, eventBean.getCurrentEvent().getOrganiser());
	}

	public OrgRole createRole(EventOrganiser org, String roleName) {
		OrgRole ret = new OrgRole();
		ret.setEventOrganisation(org);
		ret.setName(roleName);
		create(ret);
		return ret;
	}

	public List<OrgRole> findAll() {
		CriteriaBuilder cb = getEm().getCriteriaBuilder();
		CriteriaQuery<OrgRole> cq = cb.createQuery(OrgRole.class);
		Root<OrgRole> root = cq.from(OrgRole.class);
		cq.where(cb.equal(root.get(OrgRole_.eventOrganisation), eventBean
				.getCurrentEvent().getOrganiser()));

		return getEm().createQuery(cq).getResultList();
	}

	public List<OrgRole> findByOrganizer(EventOrganiser organiser) {
		CriteriaBuilder cb = getEm().getCriteriaBuilder();
		CriteriaQuery<OrgRole> cq = cb.createQuery(OrgRole.class);
		Root<OrgRole> root = cq.from(OrgRole.class);
		cq.where(cb.equal(root.get(OrgRole_.eventOrganisation), organiser));

		return getEm().createQuery(cq).getResultList();
	}

	public List<OrgRole> findUserRequestable() {
		EventOrganiser org = eventBean.getCurrentEvent().getOrganiser();

		CriteriaBuilder cb = getEm().getCriteriaBuilder();
		CriteriaQuery<OrgRole> cq = cb.createQuery(OrgRole.class);
		Root<OrgRole> root = cq.from(OrgRole.class);
		cq.where(cb.equal(root.get(OrgRole_.eventOrganisation), org),
				cb.isTrue(root.get(OrgRole_.userRequestable))
				);

		return getEm().createQuery(cq).getResultList();

	}

	public List<Role> findRolesForUser(EventUser u) {
		LanEvent event = u.getEvent();

		CriteriaBuilder cb = getEm().getCriteriaBuilder();
		CriteriaQuery<Role> cq = cb.createQuery(Role.class);
		Root<OrgRole> root = cq.from(OrgRole.class);
		ListJoin<OrgRole, Role> eventRoles = root.join(OrgRole_.eventRoles);
		cq.select(eventRoles);

		cq.where(
				cb.equal(root.get(OrgRole_.eventOrganisation), event.getOrganiser()),
				cb.isMember(u.getUser(), root.get(OrgRole_.users)),
				cb.equal(eventRoles.get(Role_.event), event)
				);

		List<Role> ret = getEm().createQuery(cq).getResultList();
		
		return ret;

	}
}