PlaceGroupBean.java 5.88 KB
package fi.insomnia.bortal.beans;

import java.io.IOException;
import java.io.OutputStream;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

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

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

import com.pdfjet.A4;
import com.pdfjet.Box;
import com.pdfjet.CoreFont;
import com.pdfjet.Font;
import com.pdfjet.Image;
import com.pdfjet.ImageType;
import com.pdfjet.JPEGImage;
import com.pdfjet.PDF;
import com.pdfjet.PNGImage;
import com.pdfjet.Page;
import com.pdfjet.TextLine;

import fi.insomnia.bortal.enums.Permission;
import fi.insomnia.bortal.enums.RolePermission;
import fi.insomnia.bortal.exceptions.PermissionDeniedException;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.facade.PlaceGroupFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.Place;
import fi.insomnia.bortal.model.PlaceGroup;
import fi.insomnia.bortal.model.User;

/**
 * Session Bean implementation class PlaceGroupBean
 */
@Stateless
public class PlaceGroupBean implements PlaceGroupBeanLocal {

    private static final Logger logger = LoggerFactory.getLogger(PlaceGroupBean.class);
    private static final int YSTART = 30;
    @EJB
    private EventBeanLocal eventbean;

    @EJB
    private PlaceGroupFacade pgfacade;
    @EJB
    private GroupMembershipFacade gmemfacade;
    @EJB
    private UserBeanLocal userbean;
    @EJB
    private SecurityBeanLocal secubean;

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

    // @Override
    // public PlaceGroup createPlaceGroup(User creator) {
    // }

    // @Override
    // public GroupMembership createGroupMembership(PlaceGroup pg, Place p) {
    //
    // GroupMembership membership = new
    // GroupMembership(eventbean.getCurrentEvent(), pg, p,
    // gmemfacade.createInviteToken());
    // gmemfacade.create(membership);
    // return membership;
    // }

    @Override
    public List<GroupMembership> getMembershipsAndCreations(User user) {
        userbean.fatalNotLoggedIn();
        List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user);
        return ret;
    }

    @Override
    public List<GroupMembership> getMemberships(User user) {
        userbean.fatalNotLoggedIn();
        List<GroupMembership> ret = gmemfacade.findMemberships(eventbean.getCurrentEvent(), user);
        return ret;
    }

    @Override
    public boolean associateToToken(User user, String token) {
        token = token.trim();
        userbean.fatalNotLoggedIn();
        GroupMembership mem = gmemfacade.findByToken(token);
        boolean ret = false;

        if (mem != null && mem.getUser() == null) {
            mem.setUser(user);
            user.getGroupMemberships().add(mem);
            gmemfacade.merge(mem);
            ret = true;
        }

        return ret;

    }

    @Override
    public void getGroupMembershipPdf(List<GroupMembership> memberships, OutputStream ostream) {
        try {
            PDF pdf = new PDF(ostream);
            Font font = new Font(pdf, CoreFont.TIMES_ROMAN);
            Font bigfont = new Font(pdf, CoreFont.TIMES_ROMAN);
            bigfont.setSize(15);

            Page page = new Page(pdf, A4.PORTRAIT);
            int y = YSTART;
            for (GroupMembership membership : memberships) {

                if (y > 750) {
                    page = new Page(pdf, A4.PORTRAIT);
                    y = YSTART;
                }

                //
                // PNGImage jpeg = new
                // PNGImage(BarcodeBean.getBarcode(membership.getInviteToken()));
                // logger.debug("Jpeg: " + jpeg.getWidth() + " h. " +
                // jpeg.getHeight());
                Image image = new Image(pdf, BarcodeBean.getBarcode(membership.getInviteToken()), ImageType.PNG);
                image.scaleBy(0.8);
                image.setPosition(50, y);
                image.drawOn(page);

                TextLine name = new TextLine(bigfont, membership.getPlaceReservation().getName());
                name.setPosition(300, y + 10);
                name.drawOn(page);

                TextLine reserverLabel = new TextLine(font, "Varaaja: ");
                reserverLabel.setPosition(300, y + 30);
                reserverLabel.drawOn(page);

                TextLine reserver = new TextLine(font, new StringBuilder(membership.getPlaceGroup().getCreator().getWholeName()).append(" (").append(membership.getPlaceGroup().getCreator().getNick()).append(")").toString());
                reserver.setPosition(310, y + 45);
                reserver.drawOn(page);

                TextLine assoclabel = new TextLine(font, "Yhdistetty käyttäjään: ");
                assoclabel.setPosition(300, y + 65);
                assoclabel.drawOn(page);

                TextLine assoc = new TextLine(font, ((membership.getUser() == null) ? "-----" : new StringBuilder(membership.getUser().getWholeName()).append(" (").append(membership.getUser().getNick()).append(")").toString()));
                assoc.setPosition(310, y + 80);
                assoc.drawOn(page);

                y += 130;
            }
            pdf.flush();
        } catch (Exception e) {
            logger.info("Error getting printing group memberships", e);
        }

    }

    @Override
    public void releaseAndGenerateToken(GroupMembership gmem) {
        if (!userbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) ||
                !userbean.hasCurrentUserPermission(Permission.MAP, RolePermission.WRITE)) {
            throw new PermissionDeniedException(secubean, userbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem);
        }
        gmem.setUser(null);
        gmem.setInviteToken(gmemfacade.createInviteToken(eventbean.getCurrentEvent()));
        gmemfacade.merge(gmem);
    }
}