in src/main/java/org/apache/sling/scripting/core/impl/DefaultSlingScript.java [576:635]
private Reader getWrapperReader(final Reader scriptReader, final String method, final Object... args) {
final StringBuilder buffer = new StringBuilder(method);
buffer.append('(');
for(Object o : args) {
buffer.append('"');
buffer.append(o);
buffer.append('"');
}
buffer.append(')');
final String msg = buffer.toString();
return new Reader() {
protected boolean doAppend = false;
protected StringReader methodReader = new StringReader(msg);
/**
* @see java.io.Reader#close()
*/
@Override
public void close() throws IOException {
scriptReader.close();
}
@Override
public int read(char[] cbuf, int start, int len) throws IOException {
if ( doAppend ) {
return methodReader.read(cbuf, start, len);
}
int readLen = scriptReader.read(cbuf, start, len);
if ( readLen == -1 ) {
doAppend = true;
return this.read(cbuf, start, len);
}
return readLen;
}
@Override
public int read() throws IOException {
if ( doAppend ) {
return methodReader.read();
}
int value = scriptReader.read();
if ( value == -1 ) {
doAppend = true;
return methodReader.read();
}
return value;
}
@Override
public int read(char[] cbuf) throws IOException {
return this.read(cbuf, 0, cbuf.length);
}
@Override
public boolean ready() throws IOException {
return scriptReader.ready();
}
};
}