package com.FitBank.web.filtro;

import java.io.*;

import javax.servlet.*;
import javax.servlet.http.*;


/**
 * Clase que implementa un filtro que comprime el ResponseStream de los Servlets
 * @author Fit-Bank
 */
public class FiltroGZIP implements Filter {
  /**
   * Metodo sobreescrito de la clase Filter que filtra un pedido
   * @param ped Pedido de servlet
   * @param res Respuesta de servlet
   * @param chain Cadena de filtros
   * @throws java.io.IOException Si no se puede escribir en el stream
   * @throws javax.servlet.ServletException Si hay un error en el servlet
   */
  public void doFilter(ServletRequest ped, ServletResponse res, FilterChain chain)
    throws IOException, ServletException {
    if(ped instanceof HttpServletRequest) {
      HttpServletRequest pedido     = (HttpServletRequest)ped;
      HttpServletResponse respuesta = (HttpServletResponse)res;
      String ae                     = pedido.getHeader("accept-encoding");

      if((ae != null) && (ae.indexOf("gzip") != -1)) {
        EnvolturaRespuestaGZIP wrappedResponse = new EnvolturaRespuestaGZIP(respuesta);
        chain.doFilter(ped, wrappedResponse);
        wrappedResponse.finishResponse();

        return;
      }

      chain.doFilter(ped, res);
    }
  }

  /**
   * Sobreescribe el metodo definido en la clase Filter
   * @param filterConfig No es usado ya que no hay configuración
   */
  public void init(FilterConfig filterConfig) {
    // no hacer nada
  }

  /**
   * Sobreescribe el metodo definido en la clase Filter. Este filtro no se destruye.
   */
  public void destroy() {
    // no hacer nada
  }
}
