001
014
015 package com.liferay.taglib.servlet;
016
017 import com.liferay.portal.kernel.io.WriterOutputStream;
018 import com.liferay.portal.kernel.log.Log;
019 import com.liferay.portal.kernel.log.LogFactoryUtil;
020 import com.liferay.portal.kernel.servlet.ServletOutputStreamAdapter;
021 import com.liferay.portal.kernel.util.UnsyncPrintWriterPool;
022
023 import java.io.OutputStream;
024 import java.io.PrintWriter;
025 import java.io.Writer;
026
027 import javax.servlet.ServletOutputStream;
028 import javax.servlet.http.HttpServletResponse;
029 import javax.servlet.http.HttpServletResponseWrapper;
030 import javax.servlet.jsp.PageContext;
031
032
035 public class PipingServletResponse extends HttpServletResponseWrapper {
036
037 public PipingServletResponse(
038 HttpServletResponse response, OutputStream outputStream) {
039
040 super(response);
041
042 if (outputStream == null) {
043 throw new NullPointerException("Output stream is null");
044 }
045
046 _servletOutputStream = new ServletOutputStreamAdapter(outputStream);
047 }
048
049 public PipingServletResponse(
050 HttpServletResponse response, PrintWriter printWriter) {
051
052 super(response);
053
054 if (printWriter == null) {
055 throw new NullPointerException("Print writer is null");
056 }
057
058 _printWriter = printWriter;
059 }
060
061 public PipingServletResponse(
062 HttpServletResponse response, ServletOutputStream servletOutputStream) {
063
064 super(response);
065
066 if (servletOutputStream == null) {
067 throw new NullPointerException("Servlet output stream is null");
068 }
069
070 _servletOutputStream = servletOutputStream;
071 }
072
073 public PipingServletResponse(HttpServletResponse response, Writer writer) {
074 super(response);
075
076 if (writer == null) {
077 throw new NullPointerException("Writer is null");
078 }
079
080 _printWriter = UnsyncPrintWriterPool.borrow(writer);
081 }
082
083 public PipingServletResponse(PageContext pageContext) {
084 this(
085 (HttpServletResponse)pageContext.getResponse(),
086 pageContext.getOut());
087 }
088
089 @Override
090 public ServletOutputStream getOutputStream() {
091 if (_servletOutputStream == null) {
092 if (_log.isDebugEnabled()) {
093 _log.debug(
094 "Getting an output stream when a writer is available is " +
095 "not recommended because it is slow");
096 }
097
098 _servletOutputStream = new ServletOutputStreamAdapter(
099 new WriterOutputStream(
100 _printWriter, getCharacterEncoding(), getBufferSize(),
101 true));
102 }
103
104 return _servletOutputStream;
105 }
106
107 @Override
108 public PrintWriter getWriter() {
109 if (_printWriter == null) {
110 if (_log.isDebugEnabled()) {
111 _log.debug(
112 "Getting a writer when an output stream is available is " +
113 "not recommended because it is slow");
114 }
115
116 _printWriter = UnsyncPrintWriterPool.borrow(
117 _servletOutputStream, getCharacterEncoding());
118 }
119
120 return _printWriter;
121 }
122
123 private static final Log _log = LogFactoryUtil.getLog(
124 PipingServletResponse.class);
125
126 private PrintWriter _printWriter;
127 private ServletOutputStream _servletOutputStream;
128
129 }