IncomingView.java 6.46 KB
package fi.codecrew.moya.web.flow;

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

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

import org.primefaces.event.SelectEvent;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import fi.codecrew.moya.beans.BarcodeBeanLocal;
import fi.codecrew.moya.beans.CardTemplateBeanLocal;
import fi.codecrew.moya.beans.PermissionBeanLocal;
import fi.codecrew.moya.beans.PlaceBeanLocal;
import fi.codecrew.moya.beans.PlaceGroupBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.CardState;
import fi.codecrew.moya.enums.apps.MapPermission;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.GroupMembership;
import fi.codecrew.moya.model.PlaceGroup;
import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.util.UserSearchQuery;
import fi.codecrew.moya.utilities.SearchResult;
import fi.codecrew.moya.web.annotations.SelectedUser;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.reader.ReaderNameContainer;
import fi.codecrew.moya.web.cdiview.reader.ReaderView;
import fi.codecrew.moya.web.cdiview.user.UserView;

@Named
@ConversationScoped
public class IncomingView extends GenericCDIView {

	private static final long serialVersionUID = 802344850073689859L;

	private static final Logger logger = LoggerFactory.getLogger(IncomingView.class);
	@Inject
	@SelectedUser
	private transient EventUser user;

	@Inject
	private UserView userview;

	@Inject
	private ReaderView readerView;

	@Inject
	private ReaderNameContainer namecontainer;

	@EJB
	private BarcodeBeanLocal barcodeBean;

	@EJB
	private CardTemplateBeanLocal cardBean;

	@EJB
	private PermissionBeanLocal permBean;

	@EJB
	private PlaceBeanLocal placeBean;

	@EJB
	private UserBeanLocal userbean;
	
	@EJB
	private transient PlaceGroupBeanLocal placegroupBean;

	private String searchBarcode = "";

	private EventUser searchMulti = null;

	
	ListDataModel<GroupMembership> memberlist = null;
	
	public void initView() {
		super.beginConversation();
	}

	public String getSearchBarcode() {
		return searchBarcode;
	}

	public void setSearchBarcode(String searchBarcode) {
		this.searchBarcode = searchBarcode;
	}

	public List<String> matchBarcode(String matchWhat) {
		List<GroupMembership> gms = placeBean.matchGroupMembershipsByInviteToken(matchWhat);
		ArrayList<String> arl = new ArrayList<>();
		for (GroupMembership gm : gms) {
			arl.add(gm.getInviteToken());
		}

		return arl;
	}

	public List<EventUser> matchMulti(String what) {
		UserSearchQuery usq = new UserSearchQuery();
		usq.setSearch(what);

		SearchResult<EventUser> sr = userbean.getThisEventsUsers(usq);

		return sr.getResults();
	}

	public void changeUser(SelectEvent event) {
		if (!searchBarcode.equals("")) {
			// TODO: if user barcode is place code thingy, do this, otherwise do other..
			GroupMembership gm = placeBean.findGroupMembershipsByToken(this.searchBarcode);
			if (gm != null) {
				super.navihandler.redirectNavigation("printCard.jsf?userid=" + gm.getUser().getUser().getId());
			}
		} else if (searchMulti != null) {
			super.navihandler.redirectNavigation("printCard.jsf?userid=" + searchMulti.getUser().getId());
			searchMulti = null;
		}
	}

	private boolean initialized = false;

	public void initPrintCardView() {
		memberlist = null;
		if (!permbean.hasPermission(UserPermission.MODIFY) || namecontainer.getReaderId() == null || namecontainer.getReaderId() <= 0) {
			super.navihandler.redirectNavigation("index.jsf");
		}

		if (!initialized) {
			logger.debug("INITIALIZING!!!!");
			initializePoller();
			initialized = true;
			super.beginConversation();
		}
	}

	public Integer getReaderId() {
		return namecontainer.getReaderId();
	}

	public String saveUser() {
		logger.info("Saving user in incomingView");
		userview.saveUser();
		return null;
	}

	public void initializePoller() {
		readerView.initializeForPolling();
	}

	public String changeToIncomingView() {
		//super.navihandler.redirectNavigation("printCard.jsf?userid="+user.getUser().getId());
		return "printCard.jsf?userid=" + user.getUser().getId();
	}

	public void polledRead() {

		if (!readerView.isNewBarcodes()) {
			return;
		}

		logger.debug(":Barcode:");

		EventUser user = readerView.getUser();
		if (user != null) {
			if (!user.equals(userview.getUser())) {
				logger.info("found user {}, redirecting", user.getNick());
				userview.setUser(user);
				// userview.prepareCardDownload();
				// PURKKAAA, sori tästä, koitan refaktoroida kauniiksi ku kerkiän -TKwtf
				super.navihandler.redirectNavigation("printCard.jsf?userid=" + user.getUser().getId());
			}

		} else {

			// still there, it must be "clean" barcode
			if (userview.getUser() != null) {
				userview.attachBarcodeToCard();

			}
		}

		readerView.pollingBarcodeHandled();
	}

	public String selectUser() {
		EventUser user = readerView.getUser();
		memberlist = null;

		if (user == null) {
			logger.debug("got no user from barcode");
			return null;
		}

		logger.debug("got user from barcode");

		userview.setUser(user);
		//userview.prepareCardDownload();
		return "printCard";
	}

	public CardState getPrintedStatus() {
		PrintedCard card = cardBean.checkPrintedCard(user);
		CardState ret = null;
		if (card != null) {
			ret = card.getCardState();
		}
		return ret;
	}

	public String printCard() {
		PrintedCard card = cardBean.checkPrintedCard(user);
		card.setCardState(CardState.VALIDATED);
		cardBean.saveCard(card);
		return null;
	}

	public EventUser getSearchMulti() {
		return searchMulti;
	}

	public void setSearchMulti(EventUser searchMulti) {
		this.searchMulti = searchMulti;
	}
	
	

	public ListDataModel<GroupMembership> getGroupMemberships() {
		memberlist = new ListDataModel<GroupMembership>(
				placegroupBean.getMembershipsAndCreations(userview.getUser()));
		return memberlist;
	}
	
	

	public String givePlace() {
		GroupMembership row = memberlist.getRowData();
		if (row != null) {
			placegroupBean.markGrouMembershipEntered(row);
			memberlist = null;
		}
		return null;
	}
	
	public String ungivePlace() {
		GroupMembership row = memberlist.getRowData();
		if (row != null) {
			placegroupBean.markGrouMembershipNotEntered(row);
			memberlist = null;
		}
		return null;
	}

	public void changeReader() {
		namecontainer.setReaderId(null);
		super.navihandler.redirectNavigation("index.jsf");
	}
	
	
	
	

}