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    }