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

import java.io.OutputStream;
import java.util.List;

import javax.annotation.security.DeclareRoles;
import javax.annotation.security.RolesAllowed;
import javax.ejb.EJB;
import javax.ejb.Stateless;

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

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

import fi.insomnia.bortal.enums.apps.MapPermission;
import fi.insomnia.bortal.facade.GroupMembershipFacade;
import fi.insomnia.bortal.model.GroupMembership;
import fi.insomnia.bortal.model.User;

/**
 * Session Bean implementation class PlaceGroupBean
 */
@Stateless
@DeclareRoles("USER")
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 GroupMembershipFacade gmemfacade;
	@EJB
	private LoggingBeanLocal loggingbean;

	@EJB
	private PermissionBeanLocal permbean;

	/**
	 * 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
	@RolesAllowed("USER")
	public List<GroupMembership> getMembershipsAndCreations(User user) {
		List<GroupMembership> ret = gmemfacade.findMemberOrCreator(eventbean.getCurrentEvent(), user);
		return ret;
	}

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

	@Override
	@RolesAllowed(MapPermission.S_BUY_PLACES)
	public boolean associateToToken(User user, String token) throws PermissionDeniedException {

		if (!permbean.isCurrentUser(user)) {
			permbean.fatalPermission(MapPermission.MANAGE_OTHERS);

		}
		token = token.trim();
		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) throws PermissionDeniedException {
		gmem = gmemfacade.find(gmem.getId());
		if (!permbean.getCurrentUser().getId().equals(gmem.getPlaceGroup().getCreator().getId()) ||
				!permbean.hasPermission(MapPermission.MANAGE_OTHERS)) {
			throw new PermissionDeniedException(loggingbean, permbean.getCurrentUser(), "User tried to release and generate group membership: " + gmem);
		}
		gmem.setUser(null);
		gmem.setInviteToken(gmemfacade.createInviteToken(eventbean.getCurrentEvent()));
	}
}