package play.exceptions;
import java.util.concurrent.atomic.AtomicLong;
import play.Play;
/**
* The super class for all Play! exceptions
*/
public abstract class PlayException extends RuntimeException {
static AtomicLong atomicLong = new AtomicLong(System.currentTimeMillis());
String id;
public PlayException() {
super();
setId();
}
public PlayException(String message) {
super(message);
setId();
}
public PlayException(String message, Throwable cause) {
super(message, cause);
setId();
}
void setId() {
long nid = atomicLong.incrementAndGet();
id = Long.toString(nid, 26);
}
public abstract String getErrorTitle();
public abstract String getErrorDescription();
public boolean isSourceAvailable() {
return this instanceof SourceAttachment;
}
public Integer getLineNumber() {
return -1;
}
public String getSourceFile() {
return "";
}
public String getId() {
return id;
}
public static StackTraceElement getInterestingStrackTraceElement(Throwable cause) {
for (StackTraceElement stackTraceElement : cause.getStackTrace()) {
if (stackTraceElement.getLineNumber() > 0 && Play.classes.hasClass(stackTraceElement.getClassName())) {
return stackTraceElement;
}
}
return null;
}
public String getMoreHTML() {
return null;
}
}