CardTemplateBean.java 5.54 KB
package fi.insomnia.bortal.beans;

import java.util.List;

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

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

import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.facade.CardTemplateFacade;
import fi.insomnia.bortal.facade.PrintedCardFacade;
import fi.insomnia.bortal.model.CardTemplate;
import fi.insomnia.bortal.model.LanEvent;
import fi.insomnia.bortal.model.PrintedCard;
import fi.insomnia.bortal.model.Role;
import fi.insomnia.bortal.model.User;
import fi.insomnia.bortal.util.MailMessage;

/**
 * Session Bean implementation class CardTemplateBean
 */
@Stateless
public class CardTemplateBean implements CardTemplateBeanLocal {

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

    /**
     * Default constructor.
     */
    public CardTemplateBean() {
        // TODO Auto-generated constructor stub
    }

    @EJB
    private CardTemplateFacade cdFacade;

    @EJB
    private EventBeanLocal eventBean;
    @EJB
    private UserBeanLocal userbean;
    @EJB
    private PrintedCardFacade printedcardfacade;
    @EJB
    private UtilBeanLocal mailbean;
    @EJB
    private PlaceGroupBeanLocal pgbean;

    public List<CardTemplate> findAll() {
        userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
        return cdFacade.findAll(eventBean.getCurrentEvent());
    }

    @Override
    public void create(CardTemplate card) {
        userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.WRITE);
        cdFacade.create(card);
    }

    @Override
    public CardTemplate findById(Integer id) {
        userbean.fatalPermission(Permission.USER_MANAGEMENT, RolePermission.READ);
        LanEvent ev = eventBean.getCurrentEvent();
        return cdFacade.find(ev.getId(), id);
    }

    public void checkAllUsersCardRights() {
        for (User u : userbean.getUsers()) {
            checkPrintedCard(u);
        }
    }

    /**
     * Checks users printed card roles and return the biggestCard
     */
    public PrintedCard checkPrintedCard(User user) {
        LanEvent currEvent = eventBean.getCurrentEvent();
        List<PrintedCard> myCards = printedcardfacade.findForUser(currEvent, user);

        PrintedCard biggestCard = null;
        PrintedCard smallestCard = null;
        for (PrintedCard card : myCards) {
            if (card.getEnabled()) {
                if (biggestCard == null || biggestCard.getTemplate().getPower() < card.getTemplate().getPower()) {
                    biggestCard = card;
                }
                if (smallestCard == null || smallestCard.getTemplate().getPower() > card.getTemplate().getPower()) {
                    smallestCard = card;
                }
            }
        }

        CardTemplate roleCard = getUsersCardtype(user);

        int existingPower = -999;
        int newPower = -999;
        if (roleCard != null) {
            newPower = roleCard.getPower();
        }
        if (biggestCard != null) {
            existingPower = biggestCard.getTemplate().getPower();
        }

        if (existingPower < newPower) {

            if (biggestCard != null) {
                biggestCard.setEnabled(false);
                printedcardfacade.merge(biggestCard);
            }
            PrintedCard pc = new PrintedCard(currEvent);
            pc.setTemplate(roleCard);
            pc.setUser(user);

            // user.getPrintedCards().add(pc);
            printedcardfacade.create(pc);
            biggestCard = pc;
            logger.debug("User {} has too little power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });
        } else if (existingPower > newPower) {
            MailMessage msg = new MailMessage();
            User admin = eventBean.getCurrentEvent().getOrganiser().getAdmin();
            String adminmail = admin.getEmail();

            msg.setFromAddress(adminmail);
            msg.setFromName("Lippukauppa");
            msg.setTo(admin);
            msg.setSubject("User " + user.getLogin() + " has too powerful card!");
            msg.setMessage("User ", user.getLogin(), "has too powerful card!\nCurrent power ", existingPower, ". Should be ", newPower, "\n\n-- \nLippukauppa");
            mailbean.sendMail(msg);
            logger.debug("User {} has too much power old role {} New role {}", new Object[] { user.getLogin(), existingPower, newPower });

        } else {
            logger.debug("User {} has power {} and roles has power {}", new Object[] { user.getLogin(), existingPower, newPower });
        }
        return biggestCard;

    }

    public CardTemplate getUsersCardtype(User user) {
        List<Role> roles = userbean.findUsersRoles(user);

        CardTemplate greatestTemplate = null;
        for (Role listrole : roles) {

            if (greatestTemplate == null || (listrole.getCardTemplate() != null && greatestTemplate.getPower() < listrole.getCardTemplate().getPower())) {
                greatestTemplate = listrole.getCardTemplate();
            }

        }
        return greatestTemplate;

    }

    @Override
    public PrintedCard setRfidUid(String tag, User user) {
        PrintedCard ct = checkPrintedCard(user);
        return setRfidUid(tag, ct);
    }

    @Override
    public PrintedCard setRfidUid(String tag, PrintedCard card) {
        card.setRfidUid(tag);
        return printedcardfacade.merge(card);
    }

    @Override
    public List<PrintedCard> findActiveCards() {
        return this.printedcardfacade.findAllEnabled(eventBean.getCurrentEvent());
    }

}