package clojure.lang;

import java.io.PrintStream;
import java.io.PrintWriter;

public class Condition extends Throwable implements IObj{

final IPersistentMap _meta;
final Throwable _delegate;

public Condition(){
    this(null, null);
}

public Condition(IPersistentMap meta, Throwable delegate){
    super();
    _meta = meta;
    _delegate = delegate;
}

public IObj withMeta(IPersistentMap meta){
    return new Condition(meta, _delegate != null ? _delegate : this);
}

public IPersistentMap meta(){
    return _meta;
}

public Throwable getCause(){
    return _delegate != null ?
        _delegate.getCause() :
        super.getCause();
}

public String getLocalizedMessage(){
    return _delegate != null ?
        _delegate.getLocalizedMessage() :
        super.getLocalizedMessage();
}

public String getMessage(){
    return _delegate != null ?
        _delegate.getMessage() :
        super.getMessage();
}
    
public StackTraceElement[] getStackTrace(){
    return _delegate != null ?
        _delegate.getStackTrace() :
        super.getStackTrace();
}
    
public void printStackTrace(){
    if (_delegate != null)
        _delegate.printStackTrace();
    else
        super.printStackTrace();
}
    
public void printStackTrace(PrintStream s){
    if (_delegate != null)
        _delegate.printStackTrace(s);
    else
        super.printStackTrace(s);
}
    
public void printStackTrace(PrintWriter s){
    if (_delegate != null)
        _delegate.printStackTrace(s);
    else
        super.printStackTrace(s);
}
    
}
