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

import java.util.ArrayList;
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.enums.apps.PollPermission;
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.LanEvent;
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({ PollPermission.S_ANSWER, PollPermission.S_CREATE, PollPermission.S_VIEW_RESULTS })
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(PollPermission.S_ANSWER)
	public List<Poll> findUsablePolls() {
		return pollFacade.findAllUsable(eventBean.getCurrentEvent());
	}

	@Override
	@RolesAllowed(PollPermission.S_VIEW_RESULTS)
	public List<Poll> findAllPolls() {

		return pollFacade.findAll();

	}

	// private boolean pollIsUsable(Poll poll) {
	// Date now = new Date();
	//
	// // 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(PollPermission.S_ANSWER)
	public boolean createAnswers(List<PollAnswer> answers) {

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

		return false;
	}

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

	@Override
	@RolesAllowed(PollPermission.S_CREATE)
	public void createPoll(Poll poll) {
		LanEvent ev = eventBean.getCurrentEvent();
		poll.setEvent(ev);
		if (ev.getPolls() == null)
		{
			ev.setPolls(new ArrayList<Poll>());
		}
		ev.getPolls().add(poll);

	}

	@Override
	@RolesAllowed(PollPermission.S_ANSWER)
	public void createAnswers(PollQuestion q) {
		pqfacade.create(q);
	}

	@Override
	@RolesAllowed(PollPermission.S_ANSWER)
	public Poll find(Integer pollId) {
		return pollFacade.find(pollId);
	}

	@Override
	@RolesAllowed(PollPermission.S_CREATE)
	public Poll savePoll(Poll poll) {
		return pollFacade.merge(poll);
	}

}