VotingBean.java 5.58 KB
/*
 * Copyright Codecrew Ry
 * 
 * All rights reserved.
 * 
 * This license applies to any software containing a notice placed by the 
 * copyright holder. Such software is herein referred to as the Software. 
 * This license covers modification, distribution and use of the Software. 
 * 
 * Any distribution and use in source and binary forms, with or without 
 * modification is not permitted without explicit written permission from the 
 * copyright owner. 
 * 
 * A non-exclusive royalty-free right is granted to the copyright owner of the 
 * Software to use, modify and distribute all modifications to the Software in 
 * future versions of the Software. 
 * 
 */
package fi.codecrew.moya.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.codecrew.moya.enums.apps.CompoPermission;
import fi.codecrew.moya.facade.CompoEntryFacade;
import fi.codecrew.moya.facade.CompoEntryFileFacade;
import fi.codecrew.moya.facade.CompoFacade;
import fi.codecrew.moya.facade.VoteFacade;
import fi.codecrew.moya.model.Compo;
import fi.codecrew.moya.model.CompoEntry;
import fi.codecrew.moya.model.CompoEntryFile;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.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);
	}

	@RolesAllowed(CompoPermission.S_MANAGE)
	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(boolean showHidden) {
		return compoFacade.getList(showHidden);
	}

	@Override
	@RolesAllowed({ CompoPermission.S_SUBMIT_ENTRY,
			CompoPermission.S_MANAGE,
	})
	public Compo addEntry(CompoEntry entry) {
		Compo co = compoFacade.reload(entry.getCompo());
		entry.setCreator(permissionBean.getCurrentUser());

		if (entry.getTitle() == null)
		{
			entry.setTitle("");
		}
		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 findEntryWithFiles(Integer entryId) {
	// CompoEntry ret = compoEntryFacade.find(entryId);
	// // logger.debug("Found files {}", ret.getFiles().size());
	//
	// return ret;
	//
	// }

	@Override
	@RolesAllowed(CompoPermission.S_MANAGE)
	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;
	}

	@Override
	@RolesAllowed(CompoPermission.S_MANAGE)
	public Compo saveCompo(Compo compo) {
		return compoFacade.merge(compo);
	}

	@Override
	public void create(CompoEntryFile cef) {
		compoEntryFileFacade.create(cef);
	}

	@Override
	public List<CompoEntry> getEntriesForCurrentUser() {
		EventUser user = permissionBean.getCurrentUser();
		return compoEntryFacade.findUsersEntries(user);
	}
}