]> WPIA git - gigi.git/blob - src/org/cacert/gigi/pages/Page.java
Move the "dbObject"s to their own package.
[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 void setTitle(String title) {
106         this.title = title;
107     }
108
109     public static Language getLanguage(ServletRequest req) {
110         HttpSession session = ((HttpServletRequest) req).getSession();
111         Locale sessval = (Locale) session.getAttribute(Language.SESSION_ATTRIB_NAME);
112         if (sessval != null) {
113             Language l = Language.getInstance(sessval);
114             if (l != null) {
115                 return l;
116             }
117         }
118         Enumeration<Locale> langs = req.getLocales();
119         while (langs.hasMoreElements()) {
120             Locale c = langs.nextElement();
121             Language l = Language.getInstance(c);
122             if (l != null) {
123                 session.setAttribute(Language.SESSION_ATTRIB_NAME, l.getLocale());
124                 return l;
125             }
126         }
127         session.setAttribute(Language.SESSION_ATTRIB_NAME, Locale.ENGLISH);
128         return Language.getInstance(Locale.ENGLISH);
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(User u) {
142         return !needsLogin() || u != null;
143     }
144
145 }