001
014
015 package com.liferay.portal.kernel.servlet;
016
017 import com.liferay.portal.kernel.io.OutputStreamWriter;
018 import com.liferay.portal.kernel.io.WriterOutputStream;
019 import com.liferay.portal.kernel.io.unsync.UnsyncPrintWriter;
020 import com.liferay.portal.kernel.log.Log;
021 import com.liferay.portal.kernel.log.LogFactoryUtil;
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 PipingServletOutputStream(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 = new UnsyncPrintWriter(writer, true);
081 }
082
083 public PipingServletResponse(PageContext pageContext) {
084 this(
085 (HttpServletResponse)pageContext.getResponse(),
086 pageContext.getOut());
087 }
088
089 public ServletOutputStream getOutputStream() {
090 if (_servletOutputStream == null) {
091 if (_log.isWarnEnabled()) {
092 _log.warn(
093 "Getting an output stream when a writer is available is " +
094 "not recommended because it is slow");
095 }
096
097 _servletOutputStream = new PipingServletOutputStream(
098 new WriterOutputStream(
099 _printWriter, getCharacterEncoding(), true));
100 }
101
102 return _servletOutputStream;
103 }
104
105 public PrintWriter getWriter() {
106 if (_printWriter == null) {
107 if (_log.isWarnEnabled()) {
108 _log.warn(
109 "Getting a writer when an output stream is available is " +
110 "not recommended because it is slow");
111 }
112
113 _printWriter = new UnsyncPrintWriter(
114 new OutputStreamWriter(_servletOutputStream));
115 }
116
117 return _printWriter;
118 }
119
120 private static Log _log = LogFactoryUtil.getLog(
121 PipingServletResponse.class);
122
123 private PrintWriter _printWriter;
124 private ServletOutputStream _servletOutputStream;
125
126 }