package bvira.web;
import bvira.framework.ResponseContext;
import bvira.framework.TemplateWriter;
import javax.servlet.http.HttpServletResponse;
import java.io.IOException;
import java.io.PrintWriter;
class WebResponseContext implements ResponseContext {
private final HttpServletResponse response;
private final ResourceContentType contentType;
private boolean validResponse;
protected WebResponseContext(HttpServletResponse response, ResourceContentType contentType) {
this.response = response;
this.contentType = contentType;
this.validResponse = false;
}
private PrintWriter getWriter() {
try {
response.setContentType(contentType.toString());
return response.getWriter();
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void writeTemplate(TemplateWriter template) {
template.write(getWriter());
validResponse = true;
}
public void redirectTo(String path) {
try {
response.sendRedirect(path);
validResponse = true;
} catch (IOException e) {
throw new RuntimeException(e);
}
}
public void validateResponse() {
if (!validResponse) {
throw new RuntimeException("Invalid response to request. Presenters must return a redirect or generate content. Commands must return a redirect URL");
}
}
}