package com.sample.web.fwk.view;
import java.io.PrintWriter;
import java.util.HashMap;
import java.util.Map;
import javax.servlet.ServletResponse;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import javax.ws.rs.core.Response.ResponseBuilder;
/**
*
* @author Mathieu ANCELIN
*/
public class View extends Renderable {
private static final TemplateRenderer renderer = new TemplateRenderer();
private static final String TYPE = MediaType.TEXT_HTML;
private final String viewName;
private final Map<String, Object> context;
private final ClassLoader loader;
public View(String viewName, Class<?> from) {
this.contentType = TYPE;
this.viewName = viewName;
this.context = new HashMap<String, Object>();
this.loader = from.getClassLoader();
}
public View(String viewName, Map<String, Object> context, Class<?> from) {
this.contentType = TYPE;
this.viewName = viewName;
this.context = context;
this.loader = from.getClassLoader();
}
public View param(String name, Object value) {
this.context.put(name, value);
return this;
}
@Override
public Response render() {
try {
String renderText = renderer.render("views/" + viewName, context, loader);
ResponseBuilder builder = Response.ok(renderText, TYPE);
return builder.build();
} catch (Exception ex) {
throw new RuntimeException(ex);
}
}
public void render(ServletResponse resp) {
try {
resp.setContentType("text/html");
PrintWriter w = resp.getWriter();
w.println(render());
w.close();
} catch (Exception e) {
throw new IllegalStateException(e);
}
}
}