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