package org.t246osslab.easybuggy.troubles;

import java.io.IOException;
import java.util.Locale;
import java.util.TimeZone;
import java.util.zip.Deflater;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.t246osslab.easybuggy.core.servlets.AbstractServlet;

@SuppressWarnings("serial")
@WebServlet(urlPatterns = { "/memoryleak3" })
public class MemoryLeakServlet3 extends AbstractServlet {

    @Override
    protected void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException {
        StringBuilder bodyHtml = new StringBuilder();
        Locale locale = req.getLocale();
        TimeZone tz = TimeZone.getDefault();
        bodyHtml.append("<table class=\"table table-striped table-bordered table-hover\" style=\"font-size:small;\">");
        bodyHtml.append("<tr><td>" + getMsg("label.timezone.id", req.getLocale()) + "</td>");
        bodyHtml.append("<td>" + tz.getID() + "</td></tr>");
        bodyHtml.append("<tr><td>" + getMsg("label.timezone.name", req.getLocale()) + "</td>");
        bodyHtml.append("<td>" + tz.getDisplayName() + "</td></tr>");
        bodyHtml.append("<tr><td>" + getMsg("label.timezone.offset", req.getLocale()) + "</td>");
        bodyHtml.append("<td>" + tz.getRawOffset() + "</td></tr>");
        bodyHtml.append("</table>");
        try {
            toDoRemove();
            
            bodyHtml.append(getInfoMsg("msg.note.memoryleak3", req.getLocale()));

        } catch (Exception e) {
            log.error("Exception occurs: ", e);
            bodyHtml.append(getErrMsg("msg.unknown.exception.occur", new String[] { e.getMessage() }, locale));
        } finally {
            responseToClient(req, res, getMsg("title.memoryleak3.page", locale), bodyHtml.toString());
        }
    }

    private void toDoRemove() {
        String inputString = "inputString";
        byte[] input = inputString.getBytes();
        byte[] output = new byte[100];
        for (int i = 0; i < 1000; i++) {
            Deflater compresser = new Deflater();
            compresser.setInput(input);
            compresser.deflate(output);
        }
    }
}