package com.cyster.taglib.template;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.http.HttpServletResponseWrapper;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServletResponse;
import java.util.Locale;
import java.io.OutputStream;

/**
  Wraps responses to allow us to retrieve results as Strings while
  ignroing the character encoding
*/

class TemplateResponse extends HttpServletResponseWrapper {
  private final ServletOutputStream servletOutputStream;
  private final PrintWriter printWriter;
  private int status = 200;

  public TemplateResponse(HttpServletResponse response, OutputStream stream) {
    super(response);
    servletOutputStream = new ServletOutputStreamAdapter(stream);
    printWriter = new PrintWriter(stream);
  }

  public PrintWriter getWriter() {
    return printWriter;
  }

  public ServletOutputStream getOutputStream() {
    return servletOutputStream;
  }

  public void setContentType(String contentType) {
    // ignore
  }

  public void setLocale(Locale locale) {
    // ignore
  }

  public void flushBuffer() throws IOException {
    printWriter.flush();
    super.flushBuffer();
  }

  public void setStatus(int status) {
    this.status = status;
    super.setStatus(status);
  }

  public int getStatus() {
    return status;
  }

  static class ServletOutputStreamAdapter extends ServletOutputStream {
    private final OutputStream stream;

    public ServletOutputStreamAdapter(OutputStream stream) {
      this.stream = stream;
    }

    public void  write(int value) throws IOException {
      stream.write(value);
    }
  }

}

