1 package club.wpia.gigi.pages;
3 import java.io.IOException;
5 import java.util.Enumeration;
6 import java.util.HashMap;
7 import java.util.Locale;
10 import javax.servlet.ServletRequest;
11 import javax.servlet.http.HttpServletRequest;
12 import javax.servlet.http.HttpServletResponse;
13 import javax.servlet.http.HttpSession;
15 import club.wpia.gigi.Gigi;
16 import club.wpia.gigi.PermissionCheckable;
17 import club.wpia.gigi.dbObjects.User;
18 import club.wpia.gigi.localisation.Language;
19 import club.wpia.gigi.output.template.Template;
20 import club.wpia.gigi.util.AuthorizationContext;
23 * This class encapsulates a sub page of Gigi. A template residing nearby this
24 * class with name <className>.templ will be loaded automatically.
26 public abstract class Page implements PermissionCheckable {
30 private Template defaultTemplate;
32 public Page(String title) {
34 URL resource = getClass().getResource(getClass().getSimpleName() + ".templ");
35 if (resource != null) {
36 defaultTemplate = new Template(resource);
41 * Retrieves the default template (<className>.templ) which has
42 * already been loaded.
44 * @return the default template.
46 public Template getDefaultTemplate() {
47 return defaultTemplate;
51 * This method can be overridden to execute code and do stuff before the
52 * default template is applied.
55 * the request to handle.
57 * the response to write to
58 * @return true, if the request is consumed and the default template should
61 * if output goes wrong.
63 public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
64 if (req.getMethod().equals("POST")) {
65 return beforePost(req, resp);
71 * This method can be overridden to execute code and do stuff before the
72 * default template is applied when the request is a post request and the
73 * default implementation of
74 * {@link #beforeTemplate(HttpServletRequest, HttpServletResponse)} is
78 * the request to handle.
80 * the response to write to
81 * @return true, if the request is consumed and the default template should
84 * if output goes wrong.
86 public boolean beforePost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
91 * This method is called to generate the content inside the default
95 * the request to handle.
97 * the response to write to
99 * if output goes wrong.
101 public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException;
104 * Same as {@link #doGet(HttpServletRequest, HttpServletResponse)} but for
105 * POST requests. By default they are redirected to
106 * {@link #doGet(HttpServletRequest, HttpServletResponse)};
109 * the request to handle.
111 * the response to write to
112 * @throws IOException
113 * if output goes wrong.
115 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
120 * Returns true, if this page requires login. Default is <code>true</code>
122 * @return if the page needs login.
124 public boolean needsLogin() {
128 public String getTitle() {
132 public static Language getLanguage(ServletRequest req) {
133 HttpSession session = ((HttpServletRequest) req).getSession();
134 synchronized (session) {
136 Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
137 if (sessval != null) {
138 Language l = Language.getInstance(sessval);
143 Enumeration<Locale> langs = req.getLocales();
144 while (langs.hasMoreElements()) {
145 Locale c = langs.nextElement();
146 Language l = Language.getInstance(c);
148 session.setAttribute(Language.SESSION_ATTRIB_NAME, l.getLocale());
152 session.setAttribute(Language.SESSION_ATTRIB_NAME, Locale.ENGLISH);
153 return Language.getInstance(Locale.ENGLISH);
157 public static String translate(ServletRequest req, String string) {
158 Language l = getLanguage(req);
159 return l.getTranslation(string);
162 public static User getUser(HttpServletRequest req) {
163 return LoginPage.getUser(req);
167 public boolean isPermitted(AuthorizationContext ac) {
168 return !needsLogin() || ac != null;
172 * Derive a default variable map for template processing.
175 * the HTTP-request to derive the map from
178 protected Map<String, Object> getDefaultVars(HttpServletRequest req) {
179 HashMap<String, Object> vars = new HashMap<String, Object>();
180 vars.put(Gigi.LINK_HOST, req.getAttribute(Gigi.LINK_HOST));