first cut of merge of STABLE-pre1_0 into HEAD. I won't even guarantee that it
[mir.git] / source / mir / servlet / AbstractServlet.java
1 package mir.servlet;
2
3 import javax.servlet.http.HttpServlet;
4 import javax.servlet.http.HttpServletRequest;
5 import javax.servlet.http.HttpSession;
6 import javax.servlet.UnavailableException;
7 import java.io.File;
8 import java.util.Locale;
9 import java.util.HashMap;
10
11 import mir.misc.HTMLTemplateProcessor;
12 import mir.misc.StringUtil;
13 import mir.misc.MirConfig;
14 import mir.misc.Logfile;
15 import mir.storage.StorageObjectException;
16
17 /**
18  * Title:        Mir
19  * Description:  Abstract servlet-class
20  * Copyright:    Copyright (c) 2001
21  * Company:      Indymedia
22  * @author       idfx
23  * @version 1.0
24  */
25
26 public abstract class AbstractServlet extends HttpServlet {
27   protected static String lang;
28   protected static Logfile theLog;
29
30   /**
31    * the configration
32    */
33   protected boolean getConfig(HttpServletRequest req)
34     throws UnavailableException {
35
36     String RealPath = super.getServletContext().getRealPath("/");
37     String Uri = req.getRequestURI();
38     String Name = super.getServletName();
39     String RootUri = StringUtil.replace(Uri, "/servlet/" + Name, "");
40
41     // init config
42     MirConfig.initConfig(RealPath, RootUri, Name, getInitParameter("Config"));
43
44     theLog = Logfile.getInstance(MirConfig.getPropWithHome(Name+".Logfile"));
45     theLog.printInfo(Name + " started.");
46     theLog.printInfo("Path is: " + MirConfig.getProp("Home"));
47     theLog.printInfo("Root URI is: " + MirConfig.getProp("RootUri"));
48     theLog.printInfo("Lang is: " + MirConfig.getProp("StandardLanguage"));
49     try {
50       MirConfig.initDbPool();
51     } catch ( StorageObjectException e) {
52       throw new UnavailableException(
53                                      "Could not initialize database pool. -- "
54                                      + e.toString(), 0);
55     }
56     super.getServletContext().setAttribute("mir.confed", new Boolean(true));
57     return true;
58   }
59
60   /**
61    * Bind the language to the session
62    */
63   protected void setLanguage(HttpSession session, String language){
64     session.setAttribute("Language",language);
65   }
66
67   /**
68    * Get the session-bound language
69    */
70   protected String getLanguage(HttpServletRequest req, HttpSession session){
71     String lang = (String)session.getAttribute("Language");
72     if(lang==null || lang.equals("")){
73       return getAcceptLanguage(req);
74     } else {
75       return lang;
76     }
77   }
78
79   /**
80    * Checks the Accept-Language of the client browser.
81    * If this language is available it returns its country-code,
82    * else it returns the standard-language
83    */
84   protected String getAcceptLanguage(HttpServletRequest req){
85     Locale loc = req.getLocale();
86     lang = loc.getLanguage();
87     File f = new File(HTMLTemplateProcessor.templateDir+"/"+lang);
88     //is there an existing template-path?
89     if(!f.isDirectory()){
90       //no there isn't. we use standard-language
91       lang = MirConfig.getProp("StandardLanguage");
92       theLog.printDebugInfo("language not existing");
93     }
94     theLog.printDebugInfo("Language: " + lang);
95     return lang;
96   }
97 }