/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package sample.invoker.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Enumeration;
import java.util.Map;
import java.util.Map.Entry;
import javax.servlet.ServletException;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.catalina.ContainerServlet;
import org.apache.catalina.Wrapper;

/**
 *
 * @author ricky
 */
public class InfoServlet extends HttpServlet implements ContainerServlet {

    private Wrapper wrapper = null;
     
    public InfoServlet() {
        super();
    }
    
    /** 
     * Processes requests for both HTTP <code>GET</code> and <code>POST</code> methods.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
        try {
            out.println("<html>");
            out.println("<head>");
            out.println("<title>Servlet InfoServlet</title>");
            out.println("</head>");
            out.println("<body>");
            out.println("<h1>Servlet InfoServlet at " + request.getContextPath() + "</h1>");
            // general info
            out.println("<h2>Info</h2>");
            out.println("Remote Host: " + request.getRemoteAddr() + "<br/>");
            out.println("Remote User: " + request.getRemoteUser() + "<br/>");
            out.println("URL: " + request.getRequestURL() + "<br/>");
            // parameters
            Map<String, String[]> parameters = request.getParameterMap();
            out.println("<h2>Parameters</h2>");
            for (Entry<String,String[]> entry : parameters.entrySet()) {
                String[] values = entry.getValue();
                for (int i = 0; i < values.length; i++) {
                    out.println(entry.getKey() + ": " + values[i] + "<br/>");
                }
            }
            // headers
            out.println("<h2>Headers</h2>");
            Enumeration<String> headerEnum = request.getHeaderNames();
            while (headerEnum.hasMoreElements()) {
                String headerName = headerEnum.nextElement();
                Enumeration valueEnum = request.getHeaders(headerName);
                while (valueEnum.hasMoreElements()) {
                    out.println(headerName + ": " + valueEnum.nextElement() + "<br/>");
                }
            }
            // cookies
            out.println("<h2>Cookies</h2>");
            Cookie[] cookies = request.getCookies();
            for (int i = 0; i < cookies.length; i++) {
                out.println("Name: " + cookies[i].getName());
                out.println(" Domain: " + cookies[i].getDomain());
                out.println(" Path: " + cookies[i].getPath());
                out.println(" Comment: " + cookies[i].getComment());
                out.println(" Value: " + cookies[i].getValue() + "<br/>");
            }
            out.println("</body>");
            out.println("</html>");
        } finally {
            out.close();
        }
    }

    /** 
     * Handles the HTTP <code>GET</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Handles the HTTP <code>POST</code> method.
     * @param request servlet request
     * @param response servlet response
     * @throws ServletException if a servlet-specific error occurs
     * @throws IOException if an I/O error occurs
     */
    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        processRequest(request, response);
    }

    /** 
     * Returns a short description of the servlet.
     * @return a String containing servlet description
     */
    @Override
    public String getServletInfo() {
        return "InfoServlet description";
    }

    public Wrapper getWrapper() {
        return wrapper;
    }

    public void setWrapper(Wrapper wrapper) {
        this.wrapper = wrapper;
    }
}

