/*******************************************************************************
* Copyright (c) 2001, 2010 Mathew A. Nelson and Robocode contributors
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Public License v1.0
* which accompanies this distribution, and is available at
* http://robocode.sourceforge.net/license/epl-v10.html
*
* Contributors:
* Mathew A. Nelson
* - Initial API and implementation
* Flemming N. Larsen
* - Code cleanup
*******************************************************************************/
package net.sf.robocode.host.security;
import net.sf.robocode.core.Container;
import net.sf.robocode.host.IHostManager;
import java.io.OutputStream;
import java.io.PrintStream;
/**
* @author Mathew A. Nelson (original)
* @author Flemming N. Larsen (contributor)
*/
public class SecurePrintStream extends PrintStream {
public SecurePrintStream(OutputStream out, boolean autoFlush) {
super(out, autoFlush);
}
@Override
public final boolean checkError() {
PrintStream out = checkAccess();
return (out == this) ? super.checkError() : out.checkError();
}
@Override
public final void close() {
PrintStream out = checkAccess();
if (out == this) {
super.close();
} else {
out.close();
}
}
@Override
public final void flush() {
PrintStream out = checkAccess();
if (out == this) {
super.flush();
} else {
out.flush();
}
}
@Override
public final void print(char[] s) {
PrintStream out = checkAccess();
if (out == this) {
super.print(s);
} else {
out.print(s);
}
}
@Override
public final void print(char c) {
PrintStream out = checkAccess();
if (out == this) {
super.print(c);
} else {
out.print(c);
}
}
@Override
public final void print(double d) {
PrintStream out = checkAccess();
if (out == this) {
super.print(d);
} else {
out.print(d);
}
}
@Override
public final void print(float f) {
PrintStream out = checkAccess();
if (out == this) {
super.print(f);
} else {
out.print(f);
}
}
@Override
public final void print(int i) {
PrintStream out = checkAccess();
if (out == this) {
super.print(i);
} else {
out.print(i);
}
}
@Override
public final void print(long l) {
PrintStream out = checkAccess();
if (out == this) {
super.print(l);
} else {
out.print(l);
}
}
@Override
public final void print(Object obj) {
PrintStream out = checkAccess();
if (out == this) {
super.print(obj);
} else {
out.print(obj);
}
}
@Override
public final void print(String s) {
PrintStream out = checkAccess();
if (out == this) {
super.print(s);
} else {
out.print(s);
}
}
@Override
public final void print(boolean b) {
PrintStream out = checkAccess();
if (out == this) {
super.print(b);
} else {
out.print(b);
}
}
@Override
public final void println() {
PrintStream out = checkAccess();
if (out == this) {
super.println();
} else {
out.println();
}
}
@Override
public final void println(char[] x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(char x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(double x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(float x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(int x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(long x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(Object x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(String x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void println(boolean x) {
PrintStream out = checkAccess();
if (out == this) {
super.println(x);
} else {
out.println(x);
}
}
@Override
public final void write(byte[] buf, int off, int len) {
PrintStream out = checkAccess();
if (out == this) {
super.write(buf, off, len);
} else {
out.write(buf, off, len);
}
}
@Override
public final void write(int b) {
PrintStream out = checkAccess();
if (out == this) {
super.write(b);
} else {
out.write(b);
}
}
private PrintStream checkAccess() {
PrintStream out = Container.getComponent(IHostManager.class).getRobotOutputStream();
return (out == null) ? this : out;
}
}