CompoView.java 6.08 KB
package fi.codecrew.moya.web.cdiview.voting;

import java.io.IOException;

import javax.ejb.EJB;
import javax.enterprise.context.ConversationScoped;
import javax.enterprise.inject.Produces;
import javax.faces.model.ListDataModel;
import javax.inject.Named;

import org.primefaces.event.RateEvent;
import org.primefaces.model.UploadedFile;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.VotingBeanLocal;
import fi.codecrew.moya.enums.apps.CompoPermission;
import fi.codecrew.moya.model.Compo;
import fi.codecrew.moya.model.CompoEntry;
import fi.codecrew.moya.model.CompoEntryFile;
import fi.codecrew.moya.web.cdiview.GenericCDIView;

@Named
@ConversationScoped
public class CompoView extends GenericCDIView {

	private static final long serialVersionUID = 4166316634472472472L;

	@EJB
	private VotingBeanLocal votbean;

	@EJB
	private transient PermissionBeanLocal permbean;

	private boolean manage;

	private transient ListDataModel<Compo> compolist;

	@Produces
	private CompoEntry entry;

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

	private transient UploadedFile uploadedFile;

	private Compo compo;

	private Integer entryId;
	private Integer compoId;

	private transient ListDataModel<EntryWrapper> voteEntries;

	public ListDataModel<Compo> getCompos() {
		return compolist;
	}

	public void initEntryView()
	{

		if (super.requirePermissions(CompoPermission.SUBMIT_ENTRY) && entry == null)
		{
			if (entryId == null)
			{
				entry = new CompoEntry();
				if (compo == null && compoId != null) {
					compo = votbean.getCompoById(compoId);
					entry.setCompo(compo);
				}

				super.beginConversation();
			} else {
				entry = votbean.findEntry(entryId);
				if (entry == null ||
						!super.requirePermissions(
								super.hasPermission(CompoPermission.MANAGE) ||
										permbean.isCurrentUser(entry.getCreator()))) {
					entry = null;
					compo = null;
				} else {
					compo = entry.getCompo();
					super.beginConversation();
				}
			}

		}
		logger.info("Initializing entry view {} {}", entry, compo);
	}

	public String startVote()
	{
		compo = compolist.getRowData();
		setVoteEntries(EntryWrapper.init(compo.getCompoEntries(), votbean, false));
		logger.info("Initializing voting with entries {}, {}", compo.getCompoEntries().size(), voteEntries.getRowCount());
		super.beginConversation();
		return "/voting/vote";
	}

	public void handleVoteRate(RateEvent rateEvent)
	{
		EntryWrapper row = voteEntries.getRowData();
		Integer vote = (Integer) rateEvent.getRating() - 3;
		if (vote < -2 || vote > 2)
		{
			vote = 0;
		}
		votbean.saveVote(row.getEntry(), vote);

	}

	public String saveVotes() {
		for (EntryWrapper vw : voteEntries)
		{
			votbean.saveVote(vw.getEntry(), vw.getVote());
		}
		super.addFaceMessage("compo.votesSaved");
		return null;
	}

	public String submitEntry()
	{
		setCompo(compolist.getRowData());
		setEntry(new CompoEntry());
		getEntry().setCompo(getCompo());

		return "/voting/submitEntry";
	}

	public String createEntry()
	{

		compo = votbean.addEntry(getEntry());
		return null;
	}

	public String saveEntry()
	{
		setEntry(votbean.saveEntry(getEntry()));

		return null;
	}

	public String submitEntryfile()
	{

		UploadedFile file = getUploadedFile();

		if (file == null)
		{
			super.addFaceMessage("compo.fileuploadFailed");
			return null;
		}

		byte[] contents = null;
		if (file.getContents() != null) {
			contents = file.getContents();
			logger.info("Got file contents from .confents()");
		} else {
			contents = new byte[(int) file.getSize()];
			logger.info("Read {} bytes from stream in file {}", file.getSize(), file.getFileName());
			try {
				file.getInputstream().read(contents);
			} catch (IOException e) {
				logger.warn("Error reading file from stream", e);
				contents = null;
			}
		}

		if (contents == null)
		{
			super.addFaceMessage("compo.fileuploadFailed");
			return null;
		}

		CompoEntryFile cef = new CompoEntryFile(getEntry());
		cef.setFileData(contents);
		logger.info("Got file name {} length {}", getUploadedFile().getFileName(), cef.getFileData().length);
		cef.setFileName(getUploadedFile().getFileName());
		cef.setMimeType(getUploadedFile().getContentType());

		//	getEntry().setCurrentFile(cef);
		votbean.create(cef);

		return null;
	}

	public void initAdminListView() {

		if (requirePermissions(CompoPermission.MANAGE) && compolist == null) {
			compolist = new ListDataModel<Compo>(votbean.getCompoList(true));
			setManage(hasPermission(CompoPermission.MANAGE));
			logger.info("Permission to view full compo listing.");
			super.beginConversation();
		}
		else {

			logger.info("Not enough rights to view full compo listing.");
		}
	}

	public void initListView() {

		if (requirePermissions(CompoPermission.VIEW_COMPOS) && compolist == null) {
			compolist = new ListDataModel<Compo>(votbean.getCompoList(false));
			setManage(hasPermission(CompoPermission.MANAGE));
			logger.info("Permission to view full compo listing.");
			super.beginConversation();
		}
		else {

			logger.info("Not enough rights to view full compo listing.");
		}
	}

	public boolean isManage() {
		return manage;
	}

	public void setManage(boolean manage) {
		this.manage = manage;
	}

	public CompoEntry getEntry() {
		return entry;
	}

	public void setEntry(CompoEntry entry) {
		this.entry = entry;
	}

	public Compo getCompo() {
		return compo;
	}

	public void setCompo(Compo compo) {
		this.compo = compo;
	}

	public UploadedFile getUploadedFile() {
		return uploadedFile;
	}

	public void setUploadedFile(UploadedFile uploadedFile) {
		this.uploadedFile = uploadedFile;
	}

	public Integer getEntryId() {
		return entryId;
	}

	public void setEntryId(Integer entryId) {
		this.entryId = entryId;
	}

	public ListDataModel<EntryWrapper> getVoteEntries() {
		logger.info("Getting {} entries ", voteEntries.getRowCount());
		return voteEntries;
	}

	public void setVoteEntries(ListDataModel<EntryWrapper> voteEntries) {
		this.voteEntries = voteEntries;
	}

	public Integer getCompoId() {
		return compoId;
	}

	public void setCompoId(Integer compoId) {
		this.compoId = compoId;
	}

}