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