package org.reldb.dbrowser.ui.log;
import java.io.OutputStream;
import java.io.PrintStream;
// Based on http://stackoverflow.com/questions/3228427/redirect-system-out-println
public class Interceptor extends PrintStream {
private Logger log;
private PrintStream orig;
/**
* Initializes a new instance of the class Interceptor.
*
* @param out
* the output stream to be assigned
* @param log
* the logger
*/
public Interceptor(OutputStream out, Logger log) {
super(out, true);
this.log = log;
}
/**
* {@inheritDoc}
*/
@Override
protected void finalize() throws Throwable {
detachOut();
super.finalize();
}
/**
* {@inheritDoc}
*/
@Override
public void print(String s) {
orig.print(s);
log.log(s);
}
/**
* {@inheritDoc}
*/
@Override
public void print(char s) {
orig.print(s);
log.log(Character.toString(s));
}
/**
* {@inheritDoc}
*/
@Override
public void print(int s) {
orig.print(s);
log.log(Integer.toString(s));
}
/**
* {@inheritDoc}
*/
@Override
public void print(long s) {
orig.print(s);
log.log(Long.toString(s));
}
/**
* {@inheritDoc}
*/
@Override
public void print(double s) {
orig.print(s);
log.log(Double.toString(s));
}
/**
* {@inheritDoc}
*/
@Override
public void print(float s) {
orig.print(s);
log.log(Float.toString(s));
}
/**
* {@inheritDoc}
*/
@Override
public void print(boolean s) {
orig.print(s);
log.log(Boolean.toString(s));
}
/**
* {@inheritDoc}
*/
@Override
public void print(char []s) {
orig.print(s);
log.log(new String(s));
}
/**
* {@inheritDoc}
*/
@Override
public void print(Object s) {
orig.print(s);
log.log(s.toString());
}
/**
* {@inheritDoc}
*/
@Override
public void println(String s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(char s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(int s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(float s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(double s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(boolean s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(long s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(Object s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println(char []s) {
print(s);
print(System.lineSeparator());
}
/**
* {@inheritDoc}
*/
@Override
public void println() {
print(System.lineSeparator());
}
/**
* Attaches System.out to interceptor.
*/
public void attachOut() {
orig = System.out;
System.setOut(this);
}
/**
* Attaches System.err to interceptor.
*/
public void attachErr() {
orig = System.err;
System.setErr(this);
}
/**
* Detaches System.out.
*/
public void detachOut() {
if (null != orig) {
System.setOut(orig);
}
}
/**
* Detaches System.err.
*/
public void detachErr() {
if (null != orig) {
System.setErr(orig);
}
}
}