]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/Page.java
fix: correct editable/non-editable DoB display in My Details
[gigi.git] / src / org / cacert / gigi / pages / Page.java
1 package org.cacert.gigi.pages;
2
3 import java.io.IOException;
4 import java.net.URL;
5 import java.util.Enumeration;
6 import java.util.Locale;
7
8 import javax.servlet.ServletRequest;
9 import javax.servlet.http.HttpServletRequest;
10 import javax.servlet.http.HttpServletResponse;
11 import javax.servlet.http.HttpSession;
12
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;
17 import org.cacert.gigi.util.AuthorizationContext;
18
19 /**
20  * This class encapsulates a sub page of Gigi. A template residing nearby this
21  * class with name <className>.templ will be loaded automatically.
22  */
23 public abstract class Page implements PermissionCheckable {
24
25     private String title;
26
27     private Template defaultTemplate;
28
29     public Page(String title) {
30         this.title = title;
31         URL resource = getClass().getResource(getClass().getSimpleName() + ".templ");
32         if (resource != null) {
33             defaultTemplate = new Template(resource);
34         }
35     }
36
37     /**
38      * Retrieves the default template (<className>.templ) which has
39      * already been loaded.
40      * 
41      * @return the default template.
42      */
43     public Template getDefaultTemplate() {
44         return defaultTemplate;
45     }
46
47     /**
48      * This method can be overridden to execute code and do stuff before the
49      * default template is applied.
50      * 
51      * @param req
52      *            the request to handle.
53      * @param resp
54      *            the response to write to
55      * @return true, if the request is consumed and the default template should
56      *         not be applied.
57      * @throws IOException
58      *             if output goes wrong.
59      */
60     public boolean beforeTemplate(HttpServletRequest req, HttpServletResponse resp) throws IOException {
61         return false;
62     }
63
64     /**
65      * This method is called to generate the content inside the default
66      * template.
67      * 
68      * @param req
69      *            the request to handle.
70      * @param resp
71      *            the response to write to
72      * @throws IOException
73      *             if output goes wrong.
74      */
75     public abstract void doGet(HttpServletRequest req, HttpServletResponse resp) throws IOException;
76
77     /**
78      * Same as {@link #doGet(HttpServletRequest, HttpServletResponse)} but for
79      * POST requests. By default they are redirected to
80      * {@link #doGet(HttpServletRequest, HttpServletResponse)};
81      * 
82      * @param req
83      *            the request to handle.
84      * @param resp
85      *            the response to write to
86      * @throws IOException
87      *             if output goes wrong.
88      */
89     public void doPost(HttpServletRequest req, HttpServletResponse resp) throws IOException {
90         doGet(req, resp);
91     }
92
93     /**
94      * Returns true, if this page requires login. Default is <code>true</code>
95      * 
96      * @return if the page needs login.
97      */
98     public boolean needsLogin() {
99         return true;
100     }
101
102     public String getTitle() {
103         return title;
104     }
105
106     public static Language getLanguage(ServletRequest req) {
107         HttpSession session = ((HttpServletRequest) req).getSession();
108         synchronized (session) {
109
110             Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
111             if (sessval != null) {
112                 Language l = Language.getInstance(sessval);
113                 if (l != null) {
114                     return l;
115                 }
116             }
117             Enumeration<Locale> langs = req.getLocales();
118             while (langs.hasMoreElements()) {
119                 Locale c = langs.nextElement();
120                 Language l = Language.getInstance(c);
121                 if (l != null) {
122                     session.setAttribute(Language.SESSION_ATTRIB_NAME, l.getLocale());
123                     return l;
124                 }
125             }
126             session.setAttribute(Language.SESSION_ATTRIB_NAME, Locale.ENGLISH);
127             return Language.getInstance(Locale.ENGLISH);
128         }
129     }
130
131     public static String translate(ServletRequest req, String string) {
132         Language l = getLanguage(req);
133         return l.getTranslation(string);
134     }
135
136     public static User getUser(HttpServletRequest req) {
137         return LoginPage.getUser(req);
138     }
139
140     @Override
141     public boolean isPermitted(AuthorizationContext ac) {
142         return !needsLogin() || ac != null;
143     }
144
145 }