    001    // Copyright 2007, 2008, 2010 The Apache Software Foundation
    002    //
    003    // Licensed under the Apache License, Version 2.0 (the "License");
    004    // you may not use this file except in compliance with the License.
    005    // You may obtain a copy of the License at
    006    //
    007    // http://www.apache.org/licenses/LICENSE-2.0
    008    //
    009    // Unless required by applicable law or agreed to in writing, software
    010    // distributed under the License is distributed on an "AS IS" BASIS,
    011    // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    012    // See the License for the specific language governing permissions and
    013    // limitations under the License.
    014
    015    package org.apache.tapestry5.util;
    016
    017    import java.io.ByteArrayInputStream;
    018    import java.io.IOException;
    019    import java.io.InputStream;
    020
    021    import org.apache.tapestry5.ContentType;
    022    import org.apache.tapestry5.StreamResponse;
    023    import org.apache.tapestry5.services.Response;
    024
    025    public class TextStreamResponse implements StreamResponse
    026    {
    027        private final ContentType contentType;
    028
    029        private final String text;
    030
    031        /**
    032         * Constructor that defaults the character set to "utf-8".
    033         */
    034        public TextStreamResponse(String contentType, String text)
    035        {
    036            this(contentType, "UTF-8", text);
    037        }
    038
    039        /**
    040         * Constructor allowing the content type and character set to the specified.
    041         *
    042         * @param contentType
    043         *            type of content, often "text/xml"
    044         * @param charset
    045         *            character set of output, usually "UTF-8"
    046         * @param text
    047         *            text to be streamed in the response
    048         * @see org.apache.tapestry5.SymbolConstants#CHARSET
    049         */
    050        public TextStreamResponse(String contentType, String charset, String text)
    051        {
    052            this(new ContentType(contentType, charset), text);
    053        }
    054
    055        public TextStreamResponse(ContentType contentType, String text)
    056        {
    057            assert contentType != null;
    058            assert text != null;
    059
    060            this.contentType = contentType;
    061            this.text = text;
    062        }
    063
    064        public String getContentType()
    065        {
    066            return contentType.toString();
    067        }
    068
    069        /**
    070         * Converts the text to a byte array (as per the character set, which is usually "UTF-8"), and returns a stream for
    071         * that byte array.
    072         *
    073         * @return the text as a byte array stram
    074         * @throws IOException
    075         */
    076        public InputStream getStream() throws IOException
    077        {
    078            byte[] textBytes = text.getBytes(contentType.getCharset());
    079
    080            return new ByteArrayInputStream(textBytes);
    081        }
    082
    083        /**
    084         * Does nothing; subclasses may override.
    085         */
    086        public void prepareResponse(Response response)
    087        {
    088
    089        }
    090    }