VotingBean.java 4.09 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.LocalBean;
import javax.ejb.Stateless;

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

import fi.insomnia.bortal.enums.apps.CompoPermission;
import fi.insomnia.bortal.facade.CompoEntryFacade;
import fi.insomnia.bortal.facade.CompoEntryFileFacade;
import fi.insomnia.bortal.facade.CompoFacade;
import fi.insomnia.bortal.facade.VoteFacade;
import fi.insomnia.bortal.model.Compo;
import fi.insomnia.bortal.model.CompoEntry;
import fi.insomnia.bortal.model.CompoEntryFile;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.Vote;

/**
 * Session Bean implementation class VotingBean
 */
@Stateless
@LocalBean
@DeclareRoles({
		CompoPermission.S_SUBMIT_ENTRY,
		CompoPermission.S_MANAGE })
public class VotingBean implements VotingBeanLocal {

	@EJB
	private CompoFacade compoFacade;
	@EJB
	private CompoEntryFacade compoEntryFacade;
	@EJB
	private CompoEntryFileFacade compoEntryFileFacade;
	@EJB
	private VoteFacade voteFacade;
	@EJB
	private EventBean eventBean;
	@EJB
	private PermissionBeanLocal permissionBean;
	private static final Logger logger = LoggerFactory.getLogger(VotingBean.class);

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

	public void createVote(Vote v) {
		voteFacade.create(v);
	}

	public void createCompo(Compo c) {
		c.setEvent(eventBean.getCurrentEvent());
		compoFacade.create(c);
	}

	public void addEntry(CompoEntry compoEntry, CompoEntryFile compoEntryFile) {
		compoEntry.setCreated(Calendar.getInstance());
		compoEntry.setCreator(permissionBean.getCurrentUser());

		Compo c = compoFacade.merge(compoEntry.getCompo());

		c.getCompoEntries().add(compoEntry);
		compoFacade.flush();
		compoEntryFile.setEntriesId(compoEntry);
		compoEntry.getFiles().add(compoEntryFile);
	}

	public Compo getCompoById(Integer compoId) {
		return compoFacade.find(compoId);
	}

	public List<Compo> getCompoList() {
		return compoFacade.getList();
	}

	@Override
	@RolesAllowed({ CompoPermission.S_SUBMIT_ENTRY,
			CompoPermission.S_MANAGE,
	})
	public Compo addEntry(CompoEntry entry) {
		Compo co = compoFacade.find(entry.getCompo().getId());
		if (co.getCompoEntries() == null) {
			co.setCompoEntries(new ArrayList<CompoEntry>());
		}
		if (!co.getCompoEntries().contains(entry))
		{
			co.getCompoEntries().add(entry);
		}
		return co;

	}

	@Override
	public CompoEntry saveEntry(CompoEntry entry) {
		return compoEntryFacade.merge(entry);
	}

	@Override
	public List<CompoEntryFile> getEntryFiles(CompoEntry entry) {
		return compoEntryFileFacade.findFor(entry);
	}

	@Override
	public CompoEntryFile findEntryFile(Integer id) {
		return compoEntryFileFacade.find(id);
	}

	@Override
	public CompoEntry findEntry(Integer entryId) {
		return compoEntryFacade.find(entryId);
	}

	@Override
	public CompoEntry saveSort(CompoEntry e) {
		CompoEntry entry = compoEntryFacade.find(e.getId());
		entry.setSort(e.getSort());
		return entry;
	}

	@Override
	public Vote saveVote(CompoEntry entry, Integer vote) {
		entry = compoEntryFacade.find(entry.getId());
		EventUser user = permissionBean.getCurrentUser();
		Vote voteEntity = voteFacade.find(entry, user);
		if (vote != null)
		{
			if (voteEntity == null)
			{
				voteEntity = new Vote();
				if (user.getVotes() == null) {
					user.setVotes(new ArrayList<Vote>());
				}
				if (entry.getVotes() == null) {
					entry.setVotes(new ArrayList<Vote>());
				}

				voteEntity.setVoter(user);
				user.getVotes().add(voteEntity);

				voteEntity.setCompoEntry(entry);
				entry.getVotes().add(voteEntity);

				voteFacade.create(voteEntity);
			}
			voteEntity.setScore(vote);
			logger.info("Setting vote to {} on {}", vote, voteEntity);
			voteEntity.setTime(Calendar.getInstance());
		}
		return voteEntity;
	}
}