package com.venky.swf.exceptions;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.ArrayList;
import java.util.List;
import com.venky.core.util.ExceptionUtil;
import com.venky.core.util.ObjectUtil;
public class MultiException extends RuntimeException{
/**
*
*/
private static final long serialVersionUID = 7536473966344832621L;
List<Throwable> throwables = new ArrayList<Throwable>();
public MultiException(){
super();
}
public Throwable getContainedException(Class<?> instanceOfThisClass){
if (instanceOfThisClass.isInstance(this)){
return this;
}
for (Throwable th: throwables){
Throwable ret = null;
if (MultiException.class.isInstance(th)){
ret = ((MultiException)th).getContainedException(instanceOfThisClass);
}else {
ret = ExceptionUtil.getEmbeddedException(th, instanceOfThisClass);
}
if (ret != null){
return ret;
}
}
return null;
}
public MultiException(String message){
super(message);
}
public void add(Throwable t){
throwables.add(ExceptionUtil.getRootCause(t));
}
public boolean isEmpty(){
return throwables.isEmpty();
}
private String newLine(){
return (System.getProperty("line.separator") + "<br/>");
}
public String getMessage() {
StringBuilder b = new StringBuilder();
if (!ObjectUtil.isVoid(super.getMessage())){
b.append(super.getMessage());
b.append(newLine());
}
for (Throwable th: throwables){
if (!ObjectUtil.isVoid(th.getMessage())){
b.append(th.getMessage());
b.append(newLine());
}
}
return b.toString();
}
public void printStackTrace(PrintStream s) {
if (throwables.isEmpty()){
super.printStackTrace(s);
}
for (Throwable th: throwables){
th.printStackTrace(s);
s.println();
s.println("------------------------");
}
}
public void printStackTrace(PrintWriter w) {
if (throwables.isEmpty()){
super.printStackTrace(w);
}
for (Throwable th: throwables){
th.printStackTrace(w);
w.println();
w.println("------------------------");
}
}
}