ReaderView.java 7.41 KB
package fi.codecrew.moya.web.cdiview.reader;

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

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

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

import fi.codecrew.moya.beans.BarcodeBeanLocal;
import fi.codecrew.moya.beans.ProductBeanLocal;
import fi.codecrew.moya.beans.ReaderBeanLocal;
import fi.codecrew.moya.beans.UserBeanLocal;
import fi.codecrew.moya.enums.apps.ShopPermission;
import fi.codecrew.moya.enums.apps.UserPermission;
import fi.codecrew.moya.model.EventUser;
import fi.codecrew.moya.model.PrintedCard;
import fi.codecrew.moya.model.Product;
import fi.codecrew.moya.model.Reader;
import fi.codecrew.moya.model.ReaderEvent;
import fi.codecrew.moya.model.ReaderType;
import fi.codecrew.moya.model.Role;
import fi.codecrew.moya.model.User;
import fi.codecrew.moya.utilities.SearchQuery;
import fi.codecrew.moya.utilities.SearchQuery.QuerySortOrder;
import fi.codecrew.moya.web.cdiview.GenericCDIView;
import fi.codecrew.moya.web.cdiview.shop.UserCardWrapper;
import fi.codecrew.moya.web.cdiview.user.UserView;

@Named	
@SessionScoped
public class ReaderView extends GenericCDIView {

	private static final long serialVersionUID = 802344850073689859L;

	private ReaderEvent lastReadEvent = null;

	private transient ListDataModel<UserCardWrapper> userlist;
	private ListDataModel<ReaderEvent> readerEventList;
	
	private Reader editReader = null;

	@Inject
	private ReaderNameContainer namecontainer;

	@EJB
	private transient ReaderBeanLocal readerbean;

	@EJB
	private transient UserBeanLocal userbean;

	@EJB
	private transient BarcodeBeanLocal barcodebean;

//	private UserCardWrapper neighborUser;

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

	private Integer readerid;
	@EJB
	private ProductBeanLocal shopBean;

	@Inject
	private UserView userview;

	
	public void initEditReader() {
		if (super.requirePermissions(ShopPermission.SHOP_TO_OTHERS) && editReader == null) {
			editReader = readerbean.getReader(readerid);
			super.beginConversation();
		}
	}


	public List<Role> getUserRoles(EventUser user) {
		return userbean.findUsersRoles(user);
	}

	public boolean isShopToOthers()
	{
		return super.hasPermission(ShopPermission.SHOP_TO_OTHERS);
	}

	public void initCreateReader()
	{
		if (super.requirePermissions(ShopPermission.SHOP_TO_OTHERS) && editReader == null)
		{
			editReader = new Reader();
			super.beginConversation();
		}
	}

	public String createReader()
	{
		readerbean.createReader(editReader);
		namecontainer.setReaderId(editReader.getId());
		return "/shop/showReaderEvents";
	}
/*
	public void initUserassocView() {
		if (super.requirePermissions(UserPermission.CREATE_NEW) && event == null) {
			event = readerbean.getEvent(eventid);
			if (event.getPrintedCard() == null) {
				User neigUser = readerbean.findTagFromAnyEvent(event.getValue());
				setNeighborUser(new UserCardWrapper(neigUser, userbean));
			}
			super.beginConversation();
		}
	}*/

	public boolean isReaderSelected() {
		return this.readerid != null;
	}
/*
	public String assocToCard()
	{

		UserCardWrapper user = userlist.getRowData();
		PrintedCard card = user.getPrintedCards().getRowData();
		ReaderEvent re = readerbean.assocTagToCard(event, card);
		super.addFaceMessage("usercard.associated");
		logger.info("re {}", re.getPrintedCard());
		userview.setUser(re.getPrintedCard().getUser());
		return "/useradmin/edit";

	}
	
	
	
		public String searchforuser()
	{
		if (usersearch == null || usersearch.length() < 2) {
			super.addFaceMessage("user.tooShortSearch");
		} else {
			userlist = UserCardWrapper.initWrapper(userbean.getUsers(new SearchQuery(0, 20, null, usersearch, QuerySortOrder.DESCENDING)).getResults(), userbean);
		}

		return null;
	}
	
	*/


	
	public List<Product> getAutoProducts() {

		List<Product> ret = new ArrayList<Product>();
		ret.add(Product.EMPTY_PRODUCT);
		ret.addAll(shopBean.getProducts());
		return ret;

	}

	public ReaderType[] getReadertypes()
	{
		return ReaderType.values();
	}

	public ListDataModel<ReaderEvent> getReaderEvents()
	{
		readerEventList = new ListDataModel<ReaderEvent>(readerbean.getReaderEvents(namecontainer.getReaderId()));

		return readerEventList;
	}

	public String saveReader()
	{
		editReader = readerbean.saveReader(editReader);
		return null;
	}

	public ReaderNameContainer getNamecontainer() {
		return namecontainer;
	}

	public void setNamecontainer(ReaderNameContainer namecontainer) {
		this.namecontainer = namecontainer;
	}



	public ListDataModel<UserCardWrapper> getUserlist() {
		return userlist;
	}

	public void setUserlist(ListDataModel<UserCardWrapper> userlist) {
		this.userlist = userlist;
	}
/*
	public UserCardWrapper getNeighborUser() {
		return neighborUser;
	}

	public void setNeighborUser(UserCardWrapper neighborUser) {
		this.neighborUser = neighborUser;
	}*/

	public Integer getReaderid() {
		return readerid;
	}

	public void setReaderid(Integer readerid) {
		this.readerid = readerid;
	}

	public String setReaderToId(Integer readerid) {
		this.readerid = readerid;
		this.namecontainer.setReaderId(readerid);
		editReader = readerbean.getReader(readerid);
		return "/admin/info/index";
	}

	public UserView getUserview() {
		return userview;
	}

	public void setUserview(UserView userview) {
		this.userview = userview;
	}

	public ReaderType[] getReaderTypes()
	{
		return ReaderType.values();
	}



	public ReaderEvent getReaderEvent() {
		
		if(namecontainer.isAutopoll()) {
			if(isNewCodes()) {
				pollingCodeHandled();
				return readerbean.getLastReaderEvent(namecontainer.getReaderId());
			} else {
				return null;
			}
		}
		
		
		
		if (readerEventList == null)
			return null;

		if (readerEventList.isRowAvailable()) {
			return readerEventList.getRowData();
		}

		return null;
	}


	public void initializeForPolling() {
		// on polling mode, we do not use list, we use database and remember last readerEvent
		namecontainer.setAutopoll(true);

		lastReadEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId());
	}

	public void pollingCodeHandled() {
		lastReadEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId());
	}

	public String saveUser() {
		userview.saveUser();

		return null;
	}

	public boolean isNewCodes() {
		if (!namecontainer.isAutopoll())
			return false;
		
		ReaderEvent newEvent = readerbean.getLastReaderEvent(namecontainer.getReaderId()); 
		
		if(newEvent == null || newEvent.getId() == null) 
			return false;
		
		if(lastReadEvent == null || lastReadEvent.getId() == null)
			return true;

		return (newEvent.getId() != lastReadEvent.getId());
	}

	
	public String getUserInsertCode() {
		return "";
	}

	public void setUserInsertCode(String userInsertCode) {
		readerbean.checkCode(readerbean.getReader(readerid), userInsertCode);
	}


	public boolean isPollingMode() {
		return namecontainer.isAutopoll();
	}


	public void setPollingMode(boolean pollingMode) {
		
		if(!namecontainer.isAutopoll() && pollingMode) {
			this.initializeForPolling();
		}
		
		namecontainer.setAutopoll(pollingMode);
	}
	
	
	
	public void changeReader() {
		namecontainer.setReaderId(null);
	}
	
	
	public Reader getCurrentReader() {
		return readerbean.getReader(namecontainer.getReaderId());
	}


	public Reader getEditReader() {
		return editReader;
	}


	public void setEditReader(Reader editReader) {
		this.editReader = editReader;
	}
	
}