use of com.webpieces.http2parser.api.dto.StatusCode in project webpieces by deanhiller.
the class ProxyResponse method sendRenderHtml.
@Override
public CompletableFuture<Void> sendRenderHtml(RenderResponse resp) {
log.info(() -> "Sending render html response. req=" + request);
View view = resp.view;
String packageStr = view.getPackageName();
//For this type of View, the template is the name of the method..
String templateClassName = view.getRelativeOrAbsolutePath();
int lastIndexOf = templateClassName.lastIndexOf(".");
String extension = null;
if (lastIndexOf > 0) {
extension = templateClassName.substring(lastIndexOf + 1);
}
String templatePath = templateClassName;
if (!templatePath.startsWith("/")) {
//relative path so need to form absolute path...
if (lastIndexOf > 0) {
templateClassName = templateClassName.substring(0, lastIndexOf);
}
templatePath = getTemplatePath(packageStr, templateClassName, extension);
}
//TODO: stream this out with chunked response instead??....
StringWriter out = new StringWriter();
try {
templatingService.loadAndRunTemplate(templatePath, out, resp.pageArgs);
} catch (MissingPropertyException e) {
Set<String> keys = resp.pageArgs.keySet();
throw new ControllerPageArgsException("Controller.method=" + view.getControllerName() + "." + view.getMethodName() + " did\nnot" + " return enough arguments for the template =" + templatePath + ". specifically, the method\nreturned these" + " arguments=" + keys + " There is a chance in your html you forgot the '' around a variable name\n" + "such as #{set 'key'}# but you put #{set key}# which is 'usually' not the correct way\n" + "The missing properties are as follows....\n" + e.getMessage(), e);
}
String content = out.toString();
StatusCode statusCode = StatusCode.HTTP_200_OK;
switch(resp.routeType) {
case HTML:
statusCode = StatusCode.HTTP_200_OK;
break;
case NOT_FOUND:
statusCode = StatusCode.HTTP_404_NOTFOUND;
break;
case INTERNAL_SERVER_ERROR:
statusCode = StatusCode.HTTP_500_INTERNAL_SVR_ERROR;
break;
default:
throw new IllegalStateException("did add case for state=" + resp.routeType);
}
//NOTE: These are ALL String templates, so default the mimeType to text/plain
if (extension == null) {
extension = "txt";
}
return createResponseAndSend(statusCode, content, extension, "text/plain");
}
Aggregations