package edu.ualberta.med.biobank.common.exception;
public class ExceptionUtils {
public static Throwable findCausesInThrowable(Throwable t,
Class<?>... causeClasses) {
Throwable tmp = t;
while (tmp != null
&& !(inheritedAtLeastOne(tmp.getClass(), causeClasses)))
tmp = tmp.getCause();
return tmp;
}
private static boolean inheritedAtLeastOne(Class<?> clazz,
Class<?>... parents) {
for (Class<?> parent : parents) {
boolean res = parent.isAssignableFrom(clazz);
if (res == true)
return true;
}
return false;
}
public static Throwable findFirstCause(Throwable t) {
if (t == null)
return null;
if (t.getCause() == null)
return t;
return findFirstCause(t.getCause());
}
}