/** * Analytica - beta version - Systems Monitoring Tool * * Copyright (C) 2013, KleeGroup, direction.technique@kleegroup.com (http://www.kleegroup.com) * KleeGroup, Centre d'affaire la Boursidi�re - BP 159 - 92357 Le Plessis Robinson Cedex - France * * This program is free software; you can redistribute it and/or modify it under the terms * of the GNU General Public License as published by the Free Software Foundation; * either version 3 of the License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. * See the GNU General Public License for more details. * * You should have received a copy of the GNU General Public License along with this program; * if not, see <http://www.gnu.org/licenses> */ package io.analytica.spies.impl.httprequest; import java.io.IOException; import java.io.OutputStreamWriter; import java.io.PrintWriter; import javax.servlet.ServletOutputStream; import javax.servlet.http.HttpServletResponse; /** * Impl�mentation de HttpServletResponseWrapper pour �viter warnings � la compilation. * @author Emeric Vernat * @version $Id: AbstractHttpServletResponseWrapper.java,v 1.1 2012/10/23 15:30:29 pchretien Exp $ */ public abstract class AbstractHttpServletResponseWrapper extends javax.servlet.http.HttpServletResponseWrapper { private ServletOutputStream stream; private PrintWriter writer; private final HttpServletResponse response; private int status; /** * Constructeur. * @param response javax.servlet.HttpServletResponse */ protected AbstractHttpServletResponseWrapper(final HttpServletResponse response) { super(response); this.response = response; } /** * @return Flux de sortie */ protected final ServletOutputStream getStream() { return stream; } /** * @throws IOException Erreur de fermeture */ protected final void close() throws IOException { if (writer != null) { writer.close(); } else if (stream != null) { stream.close(); } } /** * Surcharge de addHeader pour fixer le header m�me si la r�ponse est incluse (contrairement � tomcat). * @param name String * @param value String */ @Override public final void addHeader(final String name, final String value) { // n�cessaire pour header gzip du filtre de compression response.addHeader(name, value); } /** * Surcharge de setHeader pour fixer le header m�me si la r�ponse est incluse (contrairement � tomcat). * @param name String * @param value String */ @Override public final void setHeader(final String name, final String value) { response.setHeader(name, value); } /** * Retourne le status d�finit par setStatus ou sendError. * @return int */ public final int getStatus() { return status; } /** * D�finit le status de la r�ponse http (SC_OK, SC_NOT_FOUND, SC_INTERNAL_SERVER_ERROR ...). * @param status int */ @Override public final void setStatus(final int status) { super.setStatus(status); this.status = status; } /** * Envoie une erreur comme r�ponse http (SC_OK, SC_NOT_FOUND, SC_INTERNAL_SERVER_ERROR ...). * @param error int * @throws IOException Exception d'entr�e/sortie */ @Override public final void sendError(final int error) throws IOException { super.sendError(error); status = error; } /** * Cr�e et retourne un ServletOutputStream pour �crire le contenu dans la response associ�e. * @return javax.servlet.ServletOutputStream * @throws java.io.IOException Erreur d'entr�e/sortie */ public abstract ServletOutputStream createOutputStream() throws IOException; /** * Retourne le servlet output stream associ� avec cette response. * @return javax.servlet.ServletOutputStream * @throws java.io.IOException Erreur d'entr�e/sortie */ @Override public final ServletOutputStream getOutputStream() throws IOException { if (writer != null) { throw new IllegalStateException("getWriter() has already been called for this response"); } if (stream == null) { stream = createOutputStream(); } return stream; } /** * Retourne le writer associ� avec cette response. * @return java.io.PrintWriter * @throws java.io.IOException Erreur d'entr�e/sortie */ @Override public final PrintWriter getWriter() throws IOException { if (stream != null) { throw new IllegalStateException("getOutputStream() has already been called for this response"); } if (writer == null) { final ServletOutputStream outputStream = createOutputStream(); final String charEnc = getResponse().getCharacterEncoding(); // HttpServletResponse.getCharacterEncoding() shouldn't return null // according the spec, so feel free to remove that "if" final PrintWriter result; if (charEnc != null) { result = new PrintWriter(new OutputStreamWriter(outputStream, charEnc)); } else { result = new PrintWriter(outputStream); } writer = result; } return writer; } /** * Flushe le buffer et commite la response. * @throws java.io.IOException Erreur d'entr�e/sortie */ @Override public final void flushBuffer() throws IOException { if (writer != null) { //NOPMD writer.flush(); } else if (stream != null) { stream.flush(); } } /** * D�finit la longueur du corps du contenu dans la r�ponse. * Dans les servlets http, cette m�thode d�finit le Content-Length dans les headers HTTP. * @param length int */ @Override public void setContentLength(final int length) { getResponse().setContentLength(length); } /** * D�finit le type du contenu dans la r�ponse. * Dans les servlets http, cette m�thode d�finit le Content-Type dans les headers HTTP. * @param type String */ @Override public final void setContentType(final String type) { getResponse().setContentType(type); } }