package javacodebook.server.graphics;

import Acme.JPM.Encoders.GifEncoder;

import java.awt.*;
import java.awt.image.*;

import javax.servlet.*;
import javax.servlet.http.*;

/**
 *  Ein Servlet, dass einen beliebigen Text als Grafik erzeugt und ausgibt. Der
 *  Text wird als Parameter übergeben.
 */
public class HeadlineServlet extends HttpServlet {

    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, java.io.IOException {
        //den korrekten Content-Type setzen, damit der Browser die Grafik auch
        //richtig anzeigt.
        response.setContentType("image/gif");

        //statt eines Writers muss ein Stream verwendet werden
        ServletOutputStream out = response.getOutputStream();
        String text = "Text fehlt";
        if(request.getParameter("text") != null)
            text = request.getParameter("text");

        //Schriftart auswählen und Größe berechnen
        int fontSize = 24;
        Font font = new Font("Verdana", Font.BOLD, fontSize);
        FontMetrics fm = new Label().getFontMetrics(font);
        //Länge des Textes in Pixel berechnen
        int width = fm.stringWidth(text);
        //Schriftgröße als Höhe
        int height = fm.getHeight();

        //Graphik erzeugen und Hintergrund weiss färben
        BufferedImage image = new BufferedImage(width, height,
                                                BufferedImage.TYPE_INT_RGB);
        Graphics2D graphics = image.createGraphics();
        graphics.setColor(Color.white);
        graphics.fillRect(0,0,image.getWidth(), image.getHeight());
        graphics.setColor(Color.black);

        //Schriftart, Antialias einstellen und String zeichnen lassen
        graphics.setFont(font);
        graphics.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
                                  RenderingHints.VALUE_ANTIALIAS_ON);
        graphics.drawString(text, 0,(height - (height-fontSize)));

        //Grafik als GIF kodieren und an den Browser schicken
        GifEncoder encoder = new GifEncoder(image, out);
        encoder.encode();
    }

}
