PollBean.java 3.21 KB
package fi.insomnia.bortal.beans;

import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

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

import fi.insomnia.bortal.facade.PollAnswerFacade;
import fi.insomnia.bortal.facade.PollFacade;
import fi.insomnia.bortal.facade.PollQuestionFacade;
import fi.insomnia.bortal.facade.PossibleAnswerFacade;
import fi.insomnia.bortal.model.Poll;
import fi.insomnia.bortal.model.PollAnswer;
import fi.insomnia.bortal.model.PollQuestion;
import fi.insomnia.bortal.model.PossibleAnswer;

/**
 * Session Bean implementation class PollBean
 */

@Stateless
@DeclareRoles({ "POLL/ANSWER", "POLL/VIEW_RESULTS", "POLL/CREATE" })
public class PollBean implements PollBeanLocal {

	@EJB
	private PollFacade pollFacade;

	@EJB
	private PollAnswerFacade pollAnswerFacade;

	@EJB
	private EventBeanLocal eventBean;

	@EJB
	private PermissionBeanLocal permbean;

	@EJB
	private PossibleAnswerFacade possibleAnswerFacade;

	@EJB
	private PollQuestionFacade pqfacade;

	private static final Logger logger = LoggerFactory.getLogger(PollBean.class);

	/**
	 * Default constructor.
	 */
	public PollBean() {
		// TODO Auto-generated constructor stub
	}

	@Override
	@RolesAllowed("POLL/ANSWER")
	public List<Poll> findPolls() {
		List<Poll> list = new ArrayList<Poll>();

		for (Poll p : pollFacade.findAll(eventBean.getCurrentEvent())) {
			if (pollIsUsable(p)) {
				list.add(p);
			}
			logger.debug("Checked poll {}. listsize {}", p, list.size());

		}

		logger.debug("Returning poll");
		return list;
	}

	private boolean pollIsUsable(Poll poll) {
		Calendar now = Calendar.getInstance();

		// Already valid
		if (poll.getBegin().after(now)) {
			logger.debug("Poll {} not opened yet", poll);
			return false;
		}

		// Still valid
		if (poll.getEnd().before(now)) {
			logger.debug("Poll {} already closed", poll);
			return false;
		}

		logger.debug("Poll has {} questions", poll.getQuestions());
		// At least one question that is on a page
		for (PollQuestion q : poll.getQuestions()) {
			logger.debug("Check question  {} page {}", q, q.getPage());
			if (q.getPage() > 0) {
				return true;
			}
		}

		// No usable questions
		return false;
	}

	@Override
	@RolesAllowed("POLL/ANSWER")
	public boolean createAnswers(List<PollAnswer> answers) {

		for (PollAnswer answer : answers) {
			answer.setUser(permbean.getCurrentUser());
			if (answer.getId().getId() == null) {
				pollAnswerFacade.create(answer);
			}
		}

		return false;
	}

	@Override
	public PossibleAnswer findPossibleAnwerById(int id) {
		PossibleAnswer ans = possibleAnswerFacade.find(eventBean.getCurrentEvent().getId(), Integer.valueOf(id));
		logger.debug("Searching from facade {} found {}", id, ans.getId().getId());
		return ans;
	}

	@Override
	@RolesAllowed("POLL/CREATE")
	public void createPoll(Poll poll) {
		pollFacade.create(poll);

	}

	@Override
	@RolesAllowed("POLL/ANSWER")
	public void createAnswers(PollQuestion q) {
		pqfacade.create(q);
	}

	@Override
	@RolesAllowed("POLL/ANSWER")
	public Poll find(Integer pollId) {
		return pollFacade.find(eventBean.getCurrentEvent(), pollId);
	}
}