EventBean.java 3.59 KB
package fi.insomnia.bortal.beans;

import javax.ejb.EJB;
import javax.ejb.Stateless;
import javax.persistence.EntityManager;
import javax.persistence.PersistenceContext;

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

import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.EventFacade;
import fi.insomnia.bortal.facade.EventOrganiserFacade;
import fi.insomnia.bortal.model.EventOrganiser;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.utilities.BortalLocalContextHolder;

/**
 * Session Bean implementation class EventBean
 */
@Stateless
public class EventBean implements EventBeanLocal {

    private static final String DEFAULT_EVENT_NAME = "Default event";
    private static final String DEFAULT_ORGANISATION_NAME = "Default organisation";
    private static final Logger logger = LoggerFactory.getLogger(EventBean.class);
    @EJB
    private EventFacade eventFacade;

    @EJB
    private EventOrganiserFacade eventOrganiserFacade;

    @EJB
    private UserBeanLocal userBean;

    @EJB
    private EventStatusBeanLocal eventStatusBean;
    @PersistenceContext
    private EntityManager em;
    @EJB
    private SecurityBeanLocal secubean;

    @Override
    public LanEvent getEventByHostname(String hostname) {

        LanEvent ret = eventFacade.findByHostname(hostname);
        if (ret == null) {
            ret = findOrCreateDefaultEvent();
        }
        return ret;
    }

    public LanEvent findOrCreateDefaultEvent() {
        LanEvent ret = eventFacade.findByName(DEFAULT_EVENT_NAME);
        if (ret == null) {
            logger.info("Default Event does not exist! creating new.");
            ret = new LanEvent();

            ret.setName(DEFAULT_EVENT_NAME);
            ret.setOrganiser(findOrCreateDefaultEventOrganisation());
            ret.setStatus(eventStatusBean.findOrCreateDefaultEventStatus());
            eventFacade.create(ret);
            em.flush();
        }
        return ret;
    }

    public EventOrganiser findOrCreateDefaultEventOrganisation() {
        EventOrganiser settings = eventOrganiserFacade.findByOrganisation(DEFAULT_ORGANISATION_NAME);

        if (settings == null) {
            settings = new EventOrganiser();
            settings.setOrganisation(DEFAULT_ORGANISATION_NAME);

            User defaultUser = userBean.getAnonUser();
            settings.setAdmin(defaultUser);
            eventOrganiserFacade.create(settings);
        }

        return settings;
    }

    public LanEvent getCurrentEvent() {
        LanEvent ret = getEventByHostname(BortalLocalContextHolder.getHostname());

        return ret;
    }

    @Override
    public LanEvent mergeChanges(LanEvent event) {
        //TODO: Hmm.. 
        if(!userBean.isCurrentUser(event.getOrganiser().getAdmin()) && !userBean.getCurrentUser().isSuperadmin())
        {
            throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to merge event: " + event + " without being admin of that group");
        }
        return eventFacade.merge(event);
    }

    @Override
    public void create(LanEvent event) {
        //TODO: Hmm.. 
        if (!userBean.isCurrentUser(event.getOrganiser().getAdmin()) && !userBean.getCurrentUser().isSuperadmin()) {
            throw new PermissionDeniedException(secubean, userBean.getCurrentUser(), "User tried to create a new event for organiser " + event.getOrganiser() + " without being admin of that group");

        }
        eventFacade.create(event);

    }

    public String flushCache()
    {
       return eventFacade.flushCache();
        
    }
}