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

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

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

import fi.insomnia.bortal.clientutils.BortalLocalContextHolder;
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;

/**
 * Session Bean implementation class EventBean
 */
@Stateless
@LocalBean
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;

	@PersistenceContext
	private EntityManager em;
	@EJB
	private LoggingBeanLocal loggingbean;
	@EJB
	private PermissionBeanLocal permbean;

	@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());
			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 = permbean.getAnonUser();
			settings.setAdmin(defaultUser);
			eventOrganiserFacade.create(settings);
		}

		return settings;
	}

	@Override
	public LanEvent getCurrentEvent() {

		LanEvent ret = getEventByHostname(BortalLocalContextHolder.getHostname());

		return ret;
	}

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

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

		}
		eventFacade.create(event);

	}

	@Override
	public String flushCache() {
		return eventFacade.flushCache();

	}
}