001    package railo.runtime.writer;
002    
003    import java.io.IOException;
004    import java.io.Reader;
005    import java.io.StringReader;
006    import java.io.Writer;
007    
008    import javax.servlet.jsp.JspWriter;
009    import javax.servlet.jsp.tagext.BodyContent;
010    
011    import railo.commons.lang.CharBuffer;
012    
013    
014    /**
015     * implementation of the BodyContent
016     */
017    public class BodyContentImpl extends BodyContent {
018            
019            CharBuffer charBuffer=new CharBuffer(128);
020            JspWriter enclosingWriter;
021    
022            /**
023             * default constructor
024             * @param jspWriter
025             */
026            public BodyContentImpl(JspWriter jspWriter) {
027                    super(jspWriter);
028                    enclosingWriter=jspWriter;
029                    
030            }
031    
032            /**
033             * initialize the BodyContent with the enclosing jsp writer
034             * @param jspWriter
035             */
036            public void init(JspWriter jspWriter) {
037                    enclosingWriter=jspWriter;
038                    clearBuffer();
039                    
040            }
041    
042            /**
043             * @see javax.servlet.jsp.tagext.BodyContent#getReader()
044             */
045            public Reader getReader() {
046                    return new StringReader(charBuffer.toString());
047            }
048    
049            /**
050             * @see javax.servlet.jsp.tagext.BodyContent#getString()
051             */
052            public String getString() {
053                    return charBuffer.toString();
054            }
055    
056            /**
057             * @see javax.servlet.jsp.tagext.BodyContent#writeOut(java.io.Writer)
058             */
059            public void writeOut(Writer writer) throws IOException {
060                    charBuffer.writeOut(writer);
061            }
062    
063            /**
064             * @see javax.servlet.jsp.JspWriter#newLine()
065             */
066            public void newLine() {
067                    println();
068            }
069    
070            /**
071             * @see javax.servlet.jsp.JspWriter#print(boolean)
072             */
073            public void print(boolean arg) {
074                    print(arg?"true":"false");
075            }
076    
077            /**
078             * @see javax.servlet.jsp.JspWriter#print(char)
079             */
080            public void print(char arg) {
081                    charBuffer.append(String.valueOf(arg));
082            }
083    
084            /**
085             * @see javax.servlet.jsp.JspWriter#print(int)
086             */
087            public void print(int arg) {
088                    charBuffer.append(String.valueOf(arg));
089            }
090    
091            /**
092             * @see javax.servlet.jsp.JspWriter#print(long)
093             */
094            public void print(long arg) {
095                    charBuffer.append(String.valueOf(arg));
096            }
097    
098            /**
099             * @see javax.servlet.jsp.JspWriter#print(float)
100             */
101            public void print(float arg) {
102                    charBuffer.append(String.valueOf(arg));
103            }
104    
105            /**
106             * @see javax.servlet.jsp.JspWriter#print(double)
107             */
108            public void print(double arg) {
109                    charBuffer.append(String.valueOf(arg));
110            }
111    
112            /**
113             * @see javax.servlet.jsp.JspWriter#print(char[])
114             */
115            public void print(char[] arg) {
116                    charBuffer.append(arg);
117            }
118    
119            /**
120             * @see javax.servlet.jsp.JspWriter#print(java.lang.String)
121             */
122            public void print(String arg) {
123                    charBuffer.append(arg);
124            }
125    
126            /**
127             * @see javax.servlet.jsp.JspWriter#print(java.lang.Object)
128             */
129            public void print(Object arg) {         
130                    charBuffer.append(String.valueOf(arg));
131            }
132    
133            /**
134             * @see javax.servlet.jsp.JspWriter#println()
135             */
136            public void println() {
137                    charBuffer.append("\n");
138            }
139    
140            /**
141             * @see javax.servlet.jsp.JspWriter#println(boolean)
142             */
143            public void println(boolean arg) {
144                    print(arg);
145                    println();
146            }
147    
148            /**
149             * @see javax.servlet.jsp.JspWriter#println(char)
150             */
151            public void println(char arg) {
152                    print(arg);
153                    println();
154            }
155    
156            /**
157             * @see javax.servlet.jsp.JspWriter#println(int)
158             */
159            public void println(int arg) {
160                    print(arg);
161                    println();
162            }
163    
164            /**
165             * @see javax.servlet.jsp.JspWriter#println(long)
166             */
167            public void println(long arg) {
168                    print(arg);
169                    println();
170            }
171    
172            /**
173             * @see javax.servlet.jsp.JspWriter#println(float)
174             */
175            public void println(float arg) {
176                    print(arg);
177                    println();
178            }
179    
180            /**
181             * @see javax.servlet.jsp.JspWriter#println(double)
182             */
183            public void println(double arg) {
184                    print(arg);
185                    println();
186            }
187    
188            /**
189             * @see javax.servlet.jsp.JspWriter#println(char[])
190             */
191            public void println(char[] arg) {
192                    print(arg);
193                    println();
194            }
195    
196            /**
197             * @see javax.servlet.jsp.JspWriter#println(java.lang.String)
198             */
199            public void println(String arg) {
200                    print(arg);
201                    println();
202            }
203    
204            /**
205             * @see javax.servlet.jsp.JspWriter#println(java.lang.Object)
206             */
207            public void println(Object arg) {
208                    print(arg);
209                    println();
210            }
211    
212            /**
213             * @throws IOException 
214             * @see javax.servlet.jsp.JspWriter#clear()
215             */
216            public void clear() throws IOException {
217                    charBuffer.clear();
218            enclosingWriter.clear();
219            }
220    
221            /**
222             * @see javax.servlet.jsp.JspWriter#clearBuffer()
223             */
224            public void clearBuffer() {
225                    charBuffer.clear();
226            }
227            
228            /**
229             * @see java.io.Writer#flush()
230             */
231            public void flush() throws IOException {
232                    enclosingWriter.write(charBuffer.toCharArray());
233                    charBuffer.clear();
234            }
235    
236            /**
237             * @see java.io.Writer#close()
238             */
239            public void close() throws IOException {
240                    flush();
241                    enclosingWriter.close();
242            }
243    
244            /**
245             * @see javax.servlet.jsp.JspWriter#getRemaining()
246             */
247            public int getRemaining() {
248                    return bufferSize-charBuffer.size();
249            }
250    
251            /**
252             * @see java.io.Writer#write(char[], int, int)
253             */
254            public void write(char[] cbuf, int off, int len) {
255                    charBuffer.append(cbuf,off,len);
256            }
257    
258            /**
259             * @see java.io.Writer#write(char[])
260             */
261            public void write(char[] cbuf) {
262                    charBuffer.append(cbuf);
263            }
264    
265            /**
266             * @see java.io.Writer#write(int)
267             */
268            public void write(int c) {
269                    print(c);
270            }
271    
272            /**
273             * @see java.io.Writer#write(java.lang.String, int, int)
274             */
275            public void write(String str, int off, int len) {
276                    charBuffer.append(str,off,len);
277            }
278    
279            /**
280             * @see java.io.Writer#write(java.lang.String)
281             */
282            public void write(String str) {
283                    charBuffer.append(str);
284            }
285    
286            /**
287             * @see java.lang.Object#toString()
288             */
289            public String toString() {
290                    return charBuffer.toString();
291            }
292    
293            /**
294             * @see javax.servlet.jsp.tagext.BodyContent#clearBody()
295             */
296            public void clearBody() {
297                    charBuffer.clear();
298            }
299    
300            /**
301             * @see javax.servlet.jsp.tagext.BodyContent#getEnclosingWriter()
302             */
303            public JspWriter getEnclosingWriter() {
304                    return enclosingWriter;
305            }
306    
307            /**
308             * returns the inner char buffer
309             * @return intern CharBuffer
310             */
311            public CharBuffer getCharBuffer() {
312                    return charBuffer;
313            }
314    
315            /**
316             * sets the inner Charbuffer
317             * @param charBuffer
318             */
319            public void setCharBuffer(CharBuffer charBuffer) {
320                    this.charBuffer=charBuffer;
321            }
322    
323            /**
324             * @see javax.servlet.jsp.JspWriter#getBufferSize()
325             */
326            public int getBufferSize() {
327                    return charBuffer.size();
328            }
329    
330            /**
331             * @see javax.servlet.jsp.JspWriter#isAutoFlush()
332             */
333            public boolean isAutoFlush() {
334                    return super.isAutoFlush();
335            }
336    
337            /**
338             * @see java.io.Writer#append(java.lang.CharSequence)
339             */
340            public Writer append(CharSequence csq) throws IOException {
341                    write(csq.toString());
342                    return this;
343            }
344    
345            /**
346             * @see java.io.Writer#append(java.lang.CharSequence, int, int)
347             */
348            public Writer append(CharSequence csq, int start, int end) throws IOException {
349                    write(csq.subSequence(start, end).toString());
350                    return this;
351            }
352    
353            /**
354             * @see java.io.Writer#append(char)
355             */
356            public Writer append(char c) throws IOException {
357                    write(c);
358                    return this;
359            }
360            
361    
362    
363            
364    }