1 package org.cacert.gigi.pages;
3 import java.io.IOException;
5 import java.util.Enumeration;
6 import java.util.Locale;
8 import javax.servlet.ServletRequest;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
13 import org.cacert.gigi.PermissionCheckable;
14 import org.cacert.gigi.dbObjects.User;
15 import org.cacert.gigi.localisation.Language;
16 import org.cacert.gigi.output.template.Template;
19 * This class encapsulates a sub page of Gigi. A template residing nearby this
20 * class with name <className>.templ will be loaded automatically.
22 public abstract class Page implements PermissionCheckable {
26 private Template defaultTemplate;
28 public Page(String title) {
30 URL resource = getClass().getResource(getClass().getSimpleName() + ".templ");
31 if (resource != null) {
32 defaultTemplate = new Template(resource);
37 * Retrieves the default template (<className>.templ) which has
38 * already been loaded.
40 * @return the default template.
42 public Template getDefaultTemplate() {
43 return defaultTemplate;
47 * This method can be overridden to execute code and do stuff before the
48 * default template is applied.
51 * the request to handle.
53 * the response to write to
54 * @return true, if the request is consumed and the default template should
57 * if output goes wrong.
59 public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
64 * This method is called to generate the content inside the default
68 * the request to handle.
70 * the response to write to
72 * if output goes wrong.
74 public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException;
77 * Same as {@link #doGet(HttpServletRequest, HttpServletResponse)} but for
78 * POST requests. By default they are redirected to
79 * {@link #doGet(HttpServletRequest, HttpServletResponse)};
82 * the request to handle.
84 * the response to write to
86 * if output goes wrong.
88 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
93 * Returns true, if this page requires login. Default is <code>true</code>
95 * @return if the page needs login.
97 public boolean needsLogin() {
101 public String getTitle() {
105 public void setTitle(String title) {
109 public static Language getLanguage(ServletRequest req) {
110 HttpSession session = ((HttpServletRequest) req).getSession();
111 Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
112 if (sessval != null) {
113 Language l = Language.getInstance(sessval);
118 Enumeration<Locale> langs = req.getLocales();
119 while (langs.hasMoreElements()) {
120 Locale c = langs.nextElement();
121 Language l = Language.getInstance(c);
123 session.setAttribute(Language.SESSION_ATTRIB_NAME, l.getLocale());
127 session.setAttribute(Language.SESSION_ATTRIB_NAME, Locale.ENGLISH);
128 return Language.getInstance(Locale.ENGLISH);
131 public static String translate(ServletRequest req, String string) {
132 Language l = getLanguage(req);
133 return l.getTranslation(string);
136 public static User getUser(HttpServletRequest req) {
137 return LoginPage.getUser(req);
141 public boolean isPermitted(User u) {
142 return !needsLogin() || u != null;