ReaderBean.java 2.59 KB
package fi.insomnia.bortal.beans;

import java.util.Calendar;

import javax.ejb.EJB;
import javax.ejb.Stateless;

import fi.insomnia.bortal.exceptions.BortalCatchableException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.facade.ReaderEventFacade;
import fi.insomnia.bortal.facade.ReaderFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Reader;
import fi.insomnia.bortal.model.ReaderEvent;

/**
 * Session Bean implementation class ReaderBean
 */
@Stateless
public class ReaderBean implements ReaderBeanLocal {

    @EJB
    private ReaderFacade readerfacade;
    @EJB
    private EventBeanLocal eventbean;
    @EJB
    private PrintedCardFacade cardfacade;
    @EJB
    private ReaderEventFacade readerEventFacade;
    @EJB
    private GroupMembershipFacade gmfacade;
    @EJB
    private CardTemplateBeanLocal cardtemplatebean;

    @Override
    public ReaderEvent checkTag(String ident, String tag, String hash) {
        LanEvent ev = eventbean.getCurrentEvent();
        PrintedCard card = cardfacade.findByRfid(ev, tag);
        ReaderEvent ret = null;
        if (card != null) {
            ret = createReaderEvent(ident, card);

        }

        return ret;
    }

    @Override
    public ReaderEvent assocTagToPlacecode(String tag, String readerIdent, String placecode) throws BortalCatchableException {

        GroupMembership gm = gmfacade.findByToken(placecode);
        if (gm == null) {
            throw new BortalCatchableException("Token" + placecode + " not found!", "readerbean.tokenNotFound");
        }
        if (gm.getUser() == null) {
            throw new BortalCatchableException("Token " + placecode + "found but not assoc to user!", "readerbean.userNotAssociateToMembership");
        }

        PrintedCard card = cardtemplatebean.setRfidUid(tag, gm.getUser());

        return createReaderEvent(readerIdent, card);

    }

    private ReaderEvent createReaderEvent(String readerIdent, PrintedCard card) {
        LanEvent ev = eventbean.getCurrentEvent();

        Reader reader = readerfacade.findOrCreateByIdent(ev, readerIdent);
        ReaderEvent ret = new ReaderEvent(ev, Calendar.getInstance(), card, reader);
        readerEventFacade.create(ret);
        return ret;
    }

    @Override
    public ReaderEvent assocTagToCard(String tag, String readerIdent, PrintedCard card) {
        card = cardtemplatebean.setRfidUid(tag, card);

        return createReaderEvent(readerIdent, card);
    }
}