/**
* Copyright (c) 2000-present Liferay, Inc. All rights reserved.
*
* This library is free software; you can redistribute it and/or modify it under
* the terms of the GNU Lesser General Public License as published by the Free
* Software Foundation; either version 2.1 of the License, or (at your option)
* any later version.
*
* This library is distributed in the hope that it will be useful, but WITHOUT
* ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS
* FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public License for more
* details.
*/
package com.liferay.taglib;
import com.liferay.portal.kernel.io.unsync.UnsyncStringReader;
import com.liferay.portal.kernel.io.unsync.UnsyncStringWriter;
import com.liferay.portal.kernel.util.StringBundler;
import com.liferay.portal.kernel.util.StringPool;
import java.io.IOException;
import java.io.Reader;
import java.io.Writer;
import javax.servlet.jsp.JspWriter;
import javax.servlet.jsp.tagext.BodyContent;
/**
* @author Shuyang Zhou
*/
public class BodyContentWrapper
extends BodyContent
implements com.liferay.portal.kernel.servlet.taglib.BodyContentWrapper {
public BodyContentWrapper(
BodyContent bodyContent, UnsyncStringWriter unsyncStringWriter) {
super(bodyContent.getEnclosingWriter());
_sb = unsyncStringWriter.getStringBundler();
}
@Override
public Writer append(char c) throws IOException {
write(c);
return this;
}
@Override
public Writer append(CharSequence charSequence) throws IOException {
if (charSequence == null) {
_sb.append(StringPool.NULL);
}
else {
_sb.append(charSequence.toString());
}
return this;
}
@Override
public Writer append(CharSequence charSequence, int start, int end)
throws IOException {
if (charSequence == null) {
_sb.append(StringPool.NULL);
}
else {
charSequence = charSequence.subSequence(start, end);
_sb.append(charSequence.toString());
}
return this;
}
@Override
public void clear() throws IOException {
_sb.setIndex(0);
}
@Override
public void clearBody() {
_sb.setIndex(0);
}
@Override
public void clearBuffer() {
_sb.setIndex(0);
}
@Override
public void close() throws IOException {
_sb.setIndex(0);
}
@Override
public void flush() throws IOException {
throw new IOException("Illegal to flush within a custom tag");
}
@Override
public int getBufferSize() {
return 0;
}
@Override
public JspWriter getEnclosingWriter() {
return super.getEnclosingWriter();
}
@Override
public Reader getReader() {
return new UnsyncStringReader(_sb.toString());
}
@Override
public int getRemaining() {
return 0;
}
@Override
public String getString() {
return _sb.toString();
}
@Override
public StringBundler getStringBundler() {
return _sb;
}
@Override
public boolean isAutoFlush() {
return false;
}
@Override
public void newLine() throws IOException {
_sb.append(_LINE_SEPARATOR);
}
@Override
public void print(boolean b) throws IOException {
_sb.append(String.valueOf(b));
}
@Override
public void print(char c) throws IOException {
_sb.append(String.valueOf(c));
}
@Override
public void print(char[] chars) throws IOException {
_sb.append(new String(chars));
}
@Override
public void print(double d) throws IOException {
_sb.append(String.valueOf(d));
}
@Override
public void print(float f) throws IOException {
_sb.append(String.valueOf(f));
}
@Override
public void print(int i) throws IOException {
_sb.append(String.valueOf(i));
}
@Override
public void print(long l) throws IOException {
_sb.append(String.valueOf(l));
}
@Override
public void print(Object object) throws IOException {
_sb.append(String.valueOf(object));
}
@Override
public void print(String string) throws IOException {
if (string == null) {
string = StringPool.NULL;
}
_sb.append(string);
}
@Override
public void println() throws IOException {
newLine();
}
@Override
public void println(boolean b) throws IOException {
print(b);
newLine();
}
@Override
public void println(char c) throws IOException {
print(c);
newLine();
}
@Override
public void println(char[] chars) throws IOException {
write(chars);
newLine();
}
@Override
public void println(double d) throws IOException {
print(d);
newLine();
}
@Override
public void println(float f) throws IOException {
print(f);
newLine();
}
@Override
public void println(int i) throws IOException {
print(i);
newLine();
}
@Override
public void println(long l) throws IOException {
print(l);
newLine();
}
@Override
public void println(Object object) throws IOException {
print(object);
newLine();
}
@Override
public void println(String string) throws IOException {
print(string);
newLine();
}
@Override
public void write(char[] chars) throws IOException {
_sb.append(new String(chars));
}
@Override
public void write(char[] chars, int offset, int length) throws IOException {
_sb.append(new String(chars, offset, length));
}
@Override
public void write(int c) throws IOException {
if (c <= 127) {
_sb.append(StringPool.ASCII_TABLE[c]);
}
else {
_sb.append(String.valueOf(c));
}
}
@Override
public void write(String string) throws IOException {
_sb.append(string);
}
@Override
public void write(String string, int offset, int length)
throws IOException {
_sb.append(string.substring(offset, offset + length));
}
@Override
public void writeOut(Writer writer) throws IOException {
_sb.writeTo(writer);
}
private static final String _LINE_SEPARATOR = System.getProperty(
"line.separator");
private final StringBundler _sb;
}