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;
21 import club.wpia.gigi.util.ServerConstants;
24 * This class encapsulates a sub page of Gigi. A template residing nearby this
25 * class with name <className>.templ will be loaded automatically.
27 public abstract class Page implements PermissionCheckable {
31 private Template defaultTemplate;
33 public Page(String title) {
35 URL resource = getClass().getResource(getClass().getSimpleName() + ".templ");
36 if (resource != null) {
37 defaultTemplate = new Template(resource);
42 * Retrieves the default template (<className>.templ) which has
43 * already been loaded.
45 * @return the default template.
47 public Template getDefaultTemplate() {
48 return defaultTemplate;
52 * This method can be overridden to execute code and do stuff before the
53 * default template is applied.
56 * the request to handle.
58 * the response to write to
59 * @return true, if the request is consumed and the default template should
62 * if output goes wrong.
64 public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
65 if (req.getMethod().equals("POST")) {
66 return beforePost(req, resp);
72 * This method can be overridden to execute code and do stuff before the
73 * default template is applied when the request is a post request and the
74 * default implementation of
75 * {@link #beforeTemplate(HttpServletRequest, HttpServletResponse)} is
79 * the request to handle.
81 * the response to write to
82 * @return true, if the request is consumed and the default template should
85 * if output goes wrong.
87 public boolean beforePost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
92 * This method is called to generate the content inside the default
96 * the request to handle.
98 * the response to write to
100 * if output goes wrong.
102 public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException;
105 * Same as {@link #doGet(HttpServletRequest, HttpServletResponse)} but for
106 * POST requests. By default they are redirected to
107 * {@link #doGet(HttpServletRequest, HttpServletResponse)};
110 * the request to handle.
112 * the response to write to
113 * @throws IOException
114 * if output goes wrong.
116 public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
121 * Returns true, if this page requires login. Default is <code>true</code>
123 * @return if the page needs login.
125 public boolean needsLogin() {
129 public String getTitle() {
133 public static Language getLanguage(ServletRequest req) {
134 HttpSession session = ((HttpServletRequest) req).getSession();
135 synchronized (session) {
137 Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
138 if (sessval != null) {
139 Language l = Language.getInstance(sessval);
144 Enumeration<Locale> langs = req.getLocales();
145 while (langs.hasMoreElements()) {
146 Locale c = langs.nextElement();
147 Language l = Language.getInstance(c);
149 session.setAttribute(Language.SESSION_ATTRIB_NAME, l.getLocale());
153 session.setAttribute(Language.SESSION_ATTRIB_NAME, Locale.ENGLISH);
154 return Language.getInstance(Locale.ENGLISH);
158 public static String translate(ServletRequest req, String string) {
159 Language l = getLanguage(req);
160 return l.getTranslation(string);
163 public static User getUser(HttpServletRequest req) {
164 return LoginPage.getUser(req);
168 public boolean isPermitted(AuthorizationContext ac) {
169 return !needsLogin() || ac != null;
173 * Derive a default variable map for template processing.
176 * the HTTP-request to derive the map from
179 protected Map<String, Object> getDefaultVars(HttpServletRequest req) {
180 HashMap<String, Object> vars = new HashMap<String, Object>();
181 vars.put(Gigi.LINK_HOST, req.getAttribute(Gigi.LINK_HOST));
182 vars.put("appName", ServerConstants.getAppName());