package org.nutz.lang;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.LinkedList;
import java.util.List;
@SuppressWarnings("serial")
public class ComboException extends RuntimeException {
public ComboException() {
list = new LinkedList<Throwable>();
}
private List<Throwable> list;
public ComboException add(Throwable e) {
list.add(e);
return this;
}
@Override
public Throwable getCause() {
return list.isEmpty() ? null : list.get(0);
}
@Override
public String getLocalizedMessage() {
StringBuilder sb = new StringBuilder();
for (Throwable e : list)
sb.append(e.getLocalizedMessage()).append('\n');
return sb.toString();
}
@Override
public String getMessage() {
StringBuilder sb = new StringBuilder();
for (Throwable e : list)
sb.append(e.getMessage()).append('\n');
return sb.toString();
}
@Override
public StackTraceElement[] getStackTrace() {
List<StackTraceElement> eles = new LinkedList<StackTraceElement>();
for (Throwable e : list)
for (StackTraceElement ste : e.getStackTrace())
eles.add(ste);
return eles.toArray(new StackTraceElement[eles.size()]);
}
@Override
public void printStackTrace() {
for (Throwable e : list) {
e.printStackTrace();
}
}
@Override
public void printStackTrace(PrintStream s) {
for (Throwable e : list) {
e.printStackTrace(s);
}
}
@Override
public void printStackTrace(PrintWriter s) {
for (Throwable e : list) {
e.printStackTrace(s);
}
}
@Override
public String toString() {
StringBuilder sb = new StringBuilder();
for (Throwable e : list)
sb.append(e.toString()).append('\n');
return sb.toString();
}
}