ReaderView.java 5.99 KB
package fi.insomnia.bortal.view;

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

import javax.ejb.EJB;
import javax.faces.bean.ManagedBean;
import javax.faces.bean.ManagedProperty;
import javax.faces.bean.SessionScoped;
import javax.faces.model.ListDataModel;

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

import fi.insomnia.bortal.beans.EventBeanLocal;
import fi.insomnia.bortal.beans.ReaderBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.ReaderEvent;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.view.RfidContainer.RfidEvent;

@ManagedBean(name = "readerView")
@SessionScoped
public class ReaderView extends GenericView {

    @ManagedProperty(value = "#{rfidContainer}")
    private RfidContainer container;
    @ManagedProperty(value = "#{productShopView}")
    private ProductShopView shopview;
    private ListDataModel<String> readerlist;
    private String readername;
    private ListDataModel<RfidEvent> readerevents;
    private RfidEvent rfidevent;
    private String placecode;
    private String usersearch;
    
    @EJB
    private ReaderBeanLocal readerBean;

    @EJB
    private UserBeanLocal userbean;
    @EJB
    private EventBeanLocal eventbean;
    private ListDataModel<UserCardWrapper> userlist;
    
    private static final Logger logger = LoggerFactory.getLogger(ReaderView.class);

    public String searchforuser() {
        setUserlist(initUserCardWrapper(userbean.searchName(usersearch + "%")));
        return null;
    }

    public ListDataModel<String> getReaders() {
        Set<String> keyset = getContainer().getReaders().keySet();
        readerlist = new ListDataModel<String>(new ArrayList<String>(keyset));
        return readerlist;
    }

    public String selectEvent() {
        rfidevent = readerevents.getRowData();

        String ret = null;
        if (rfidevent.getEvent() == null) {
            usersearch = "";
            setUserlist(null);
            placecode = "";
            ret = "assocToUser";
        } else {

            getShopview().setShoppingUser(rfidevent.getEvent().getPrintedCard().getUser());
            ret = "shopToUser";
        }
        return ret;

    }

    public String assocToCard() {
        UserCardWrapper usr = userlist.getRowData();
        PrintedCard card = usr.getCards().getRowData();
        logger.debug("Associng card {} to card tag {}", card.getId(), rfidevent.getTag());
        rfidevent.setEvent(readerBean.assocTagToCard(rfidevent.getTag(), readername, card));
        rfidevent.addMessage("Associated to user " + usr.getUser().getNick());
        getShopview().setShoppingUser(usr.getUser());
        return "shopToUser";
    }

    public String selectReader() {
        setReadername(readerlist.getRowData());
        return "showReaderEvents";
    }

    public String assocToPlacecode() {
        try {
            ReaderEvent event = readerBean.assocTagToPlacecode(rfidevent.getTag(), readername, placecode);
            rfidevent.setEvent(event);
            rfidevent.addMessage("Associated to user " + event.getPrintedCard().getUser().getWholeName());
        } catch (BortalCatchableException e) {
            this.addFaceMessage(e.getI18nMessage());
        }
        return "";
    }

    public ListDataModel<RfidEvent> getReaderEvents() {
        readerevents = new ListDataModel<RfidEvent>(getContainer().getReaderEvents(getReadername()));
        return readerevents;
    }

    public void setContainer(RfidContainer container) {
        this.container = container;
    }

    public RfidContainer getContainer() {
        return container;
    }

    public void setReadername(String readername) {
        this.readername = readername;
    }

    public String getReadername() {
        return readername;
    }

    public String getPlacecode() {
        return placecode;
    }

    public void setPlacecode(String placecode) {
        this.placecode = placecode;
    }

    public String getUsersearch() {
        return usersearch;
    }

    public void setUsersearch(String usersearch) {
        this.usersearch = usersearch;
    }

    public void setRfidevent(RfidEvent rfidevent) {
        this.rfidevent = rfidevent;
    }

    public RfidEvent getRfidevent() {
        return rfidevent;
    }

    private ListDataModel<UserCardWrapper> initUserCardWrapper(List<User> users) {
        ArrayList<UserCardWrapper> ret = new ArrayList<UserCardWrapper>();
        for (User usr : users) {
            ret.add(new UserCardWrapper(usr));
        }
        return new ListDataModel<UserCardWrapper>(ret);
    }

    public void setUserlist(ListDataModel<UserCardWrapper> userlist) {
        this.userlist = userlist;
    }

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

    public void setShopview(ProductShopView shopview) {
        this.shopview = shopview;
    }

    public ProductShopView getShopview() {
        return shopview;
    }

    public class UserCardWrapper {

        private User user;
        private ListDataModel<PrintedCard> cards;

        public UserCardWrapper(User usr) {
            LanEvent event = eventbean.getCurrentEvent();
            setUser(usr);
            ArrayList<PrintedCard> cardlist = new ArrayList<PrintedCard>();
            for (PrintedCard pc : usr.getPrintedCards()) {
                if (pc.getEnabled() && event.getId().equals(pc.getId().getEventId())) {
                    cardlist.add(pc);
                }
            }
            setCards(new ListDataModel<PrintedCard>(cardlist));
        }

        public void setCards(ListDataModel<PrintedCard> cards) {
            this.cards = cards;
        }

        public ListDataModel<PrintedCard> getCards() {
            return cards;
        }

        public void setUser(User user) {
            this.user = user;
        }

        public User getUser() {
            return user;
        }
    }
}