package water.api;
import java.util.Properties;
import water.NanoHTTPD;
import water.util.RString;
/**
*
* @author peta
*/
public class HTTP500 extends Request {
private transient final Str _error = new Str(ERROR,"Unknown error");
public HTTP500() {
_requestHelp = "Displays the HTTP 500 page with error specified in JSON"
+ " argument error. This page is displayed when any unexpected"
+ " exception is returned from the request processing at any level.";
_error._requestHelp = "Error description for the 500. Generally the exception message.";
}
@Override public Response serve() {
return Response.error(_error.value());
}
@Override protected String serveJava() {
return _error.value();
}
@Override public water.NanoHTTPD.Response serve(NanoHTTPD server, Properties parms, RequestType type) {
// We can be in different thread => so check if _error is specified
if (!_error.specified()) { // We are handling exception - so try to find error message in parms
for (Argument arg : _arguments) {
arg.reset();
arg.check(this, parms.getProperty(arg._name,""));
}
}
water.NanoHTTPD.Response r = super.serve(server, parms, type);
r.status = NanoHTTPD.HTTP_INTERNALERROR;
return r;
}
private static final String _html =
"<h3>HTTP 500 - Internal Server Error</h3>"
+ "<div class='alert alert-error'>%ERROR</div>"
;
@Override protected String build(Response response) {
StringBuilder sb = new StringBuilder();
sb.append("<div class='container'>");
sb.append("<div class='row-fluid'>");
sb.append("<div class='span12'>");
sb.append(buildResponseHeader(response));
RString str = new RString(_html);
str.replace("ERROR", response.error());
sb.append(str.toString());
sb.append("</div></div></div>");
return sb.toString();
}
}