package com.voxeo.tropo.util;
import java.io.IOException;
import java.io.Reader;
import org.apache.log4j.Logger;
public class ChainedReader extends Reader {
private static final Logger LOG = Logger.getLogger(ChainedReader.class);
// private CharArrayWriter _cache;
protected final Reader _header;
protected final Reader _next;
protected boolean _completed = false;
public ChainedReader(Reader reader, Reader chain) {
_header = reader;
_next = chain;
// _cache = new CharArrayWriter();
}
public void close() throws IOException {
// if (LOG.isDebugEnabled()) {
// LOG.debug(_cache.toString());
// }
_header.close();
_next.close();
}
public int read(char[] cbuf, int off, int len) throws IOException {
int r = 0;
if (!_completed) {
int i = _header.read(cbuf, off, len);
if (i < 0) {
_completed = true;
int x = _next.read(cbuf, off, len);
r = x;
}
else {
r = i;
}
}
else {
int i = _next.read(cbuf, off, len);
r = i;
}
// if (r > 0 && LOG.isDebugEnabled()) {
// _cache.write(cbuf, off, r);
// }
return r;
}
public int read() throws IOException {
int r = -1;
if (!_completed) {
r = _header.read();
if (r == -1) {
_completed = true;
r = _next.read();
}
}
else {
r = _next.read();
}
// if (r > 0 && LOG.isDebugEnabled()) {
// _cache.write(r);
// }
return r;
}
public int read(char[] cbuf) throws IOException {
int r = 0;
if (!_completed) {
int i = _header.read(cbuf);
if (i < 0) {
_completed = true;
int x = _next.read(cbuf);
r = x;
}
else {
r = i;
}
}
else {
r = _next.read(cbuf);
}
// if (r > 0 && LOG.isDebugEnabled()) {
// _cache.write(cbuf, 0, r);
// }
return r;
}
public String toString() {
// if (_cache != null) {
// return _cache.toString();
// }
return super.toString();
}
}