UserCardServlet.java 3.76 KB
package fi.insomnia.bortal.servlet;

import java.awt.Font;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.util.regex.Pattern;

import javax.ejb.EJB;
import javax.imageio.ImageIO;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

import fi.insomnia.bortal.beans.CardTemplateBeanLocal;
import fi.insomnia.bortal.beans.PermissionBeanLocal;
import fi.insomnia.bortal.beans.UserBeanLocal;
import fi.insomnia.bortal.enums.apps.UserPermission;
import fi.insomnia.bortal.model.EventUser;
import fi.insomnia.bortal.model.PrintedCard;

/**
 * Servlet implementation class UploadServlet
 */
public class UserCardServlet extends GenericImageServlet {

	/**
     * 
     */
	private static final long serialVersionUID = -3359999630873773508L;

	@EJB
	private transient UserBeanLocal userbean;

	@EJB
	private transient PermissionBeanLocal permbean;

	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
	 *      response)
	 */

	private final Pattern lhMatcher = Pattern.compile("^127.[0-9.]*|(0:)*1%0");

	@EJB
	private transient CardTemplateBeanLocal cardbean;

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

	@Override
	protected ImageMover getImagedata() {
		ImageMover ret = new ImageMover();
		Integer id = getIdParam("cardid");
		PrintedCard card = cardbean.getCard(id);
		logger.info("image data id {}, card {}", id, card);

		if (card != null) {
			if (!permbean.isCurrentUser(card.getUser())
					&& !permbean.hasPermission(UserPermission.MODIFY)
					&& !lhMatcher.matcher(request.getLocalAddr()).matches())
			{
				ret.setResponse(HttpServletResponse.SC_FORBIDDEN);
			}
			else
			{
				try {
					ret.setData(mkCard(card));
					ret.setImagetype("image/jpeg");
				} catch (IOException e) {
					ret.setResponse(HttpServletResponse.SC_INTERNAL_SERVER_ERROR);
				}
			}

		} else
		{
			ret.setResponse(HttpServletResponse.SC_NOT_FOUND);
		}
		return ret;

	}

	private byte[] mkCard(PrintedCard card) throws IOException {

		EventUser user = card.getUser();

		BufferedImage face = ImageIO.read(new ByteArrayInputStream(user.getUser().getCurrentImage().getImageData()));

		BufferedImage base = ImageIO.read(new ByteArrayInputStream(card.getTemplate().getImage()));

		BufferedImage outimage = new BufferedImage(base.getWidth(), base.getHeight(), BufferedImage.TYPE_INT_RGB);

		Graphics2D g = outimage.createGraphics();
		// g.drawImage(org, AffineTransform.getScaleInstance(0.31, 0.31), null);
		g.drawImage(base, 0, 0, base.getWidth(), base.getHeight(), null);
		// g.drawImage(face, AffineTransform.getScaleInstance(0.31, 0.31),
		// null);

		g.drawImage(face, 50, 320, 320, 400, null);
		g.setFont(new Font("Century gothic", Font.PLAIN, 70));

		// g.drawString(nick, 595 -
		// g.getFontMetrics().charsWidth(nick.toCharArray(), 0, nick.length()),
		// 840);

		g.drawString(user.getUser().getNick(), 50, 810);

		g.setFont(new Font("Century gothic", Font.BOLD, 35));

		StringBuilder wholeName = new StringBuilder();
		wholeName.append(user.getUser().getFirstnames()).append(" ").append(user.getUser().getLastname());

		// g.setFont(new Font("Arial", Font.BOLD, 35));
		// g.drawString(name, 595 -
		// g.getFontMetrics().charsWidth(name.toCharArray(), 0, name.length()),
		// 890);
		//
		// g.drawString(owner.getId().toString(), 60, 948);

		g.drawString(wholeName.toString(), 60, 865);
		g.drawString(card.getTemplate().getName(), 60, 915);

		g.dispose();

		ByteArrayOutputStream ostr = new ByteArrayOutputStream();

		ImageIO.write(outimage, "jpeg", ostr);
		return ostr.toByteArray();
	}
}