use req.getContextPath to find the RootUri.. much more robust. 4.0 and 4.1 compatible...
[mir.git] / source / mir / servlet / AbstractServlet.java
1 /*
2  * Copyright (C) 2001, 2002  The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with the com.oreilly.servlet library, any library
22  * licensed under the Apache Software License, The Sun (tm) Java Advanced
23  * Imaging library (JAI), The Sun JIMI library (or with modified versions of
24  * the above that use the same license as the above), and distribute linked
25  * combinations including the two.  You must obey the GNU General Public
26  * License in all respects for all of the code used other than the above
27  * mentioned libraries.  If you modify this file, you may extend this exception
28  * to your version of the file, but you are not obligated to do so.  If you do
29  * not wish to do so, delete this exception statement from your version.
30  */
31
32 package mir.servlet;
33
34 import mir.misc.Logfile;
35 import mir.misc.MirConfig;
36 import mir.misc.StringUtil;
37 import mir.storage.StorageObjectException;
38
39 import javax.servlet.UnavailableException;
40 import javax.servlet.http.HttpServlet;
41 import javax.servlet.http.HttpServletRequest;
42 import javax.servlet.http.HttpSession;
43 import java.util.Locale;
44 import java.util.Random;
45
46 /**
47  * Title:        Mir
48  * Description:  Abstract servlet-class
49  * Copyright:    Copyright (c) 2001, 2002
50  * Company:      Mir-coders group
51  * @author       idfx, the Mir-coders group
52  * @version      $Id: AbstractServlet.java,v 1.15.4.4 2002/11/25 21:59:46 mh Exp $
53  */
54
55 public abstract class AbstractServlet extends HttpServlet {
56     protected static String lang;
57     protected static Logfile theLog;
58
59     /**
60      * the configration
61      */
62     protected boolean getConfig(HttpServletRequest req)
63             throws UnavailableException {
64
65         //String RealPath = super.getServletContext().getRealPath("/");
66         String name = super.getServletName();
67
68         // init config
69         //MirConfig.initConfig(RealPath, RootUri, Name, getInitParameter("Config"));
70         MirConfig.initConfig(super.getServletContext(), req.getContextPath(),
71                               name, getInitParameter("Config"));
72
73         theLog = Logfile.getInstance(MirConfig.getPropWithHome(name + ".Logfile"));
74         theLog.printInfo(name + " started.");
75         theLog.printInfo("Path is: " + MirConfig.getProp("Home"));
76         theLog.printInfo("Root URI is: " + MirConfig.getProp("RootUri"));
77         theLog.printInfo("StandardLanguage is: " + MirConfig.getProp("StandardLanguage"));
78         try {
79             MirConfig.initDbPool();
80         }
81         catch (StorageObjectException e) {
82             throw new UnavailableException(
83                     "Could not initialize database pool. -- "
84                     + e.toString(), 0);
85         }
86         super.getServletContext().setAttribute("mir.confed", new Boolean(true));
87         return true;
88     }
89
90     /**
91      * Bind the language to the session
92      */
93     protected void setLanguage(HttpSession session, String language) {
94         session.setAttribute("Language", language);
95     }
96
97     protected void setLocale(HttpSession session, Locale loc) {
98         session.setAttribute("Locale", loc);
99     }
100
101     /**
102      * Get the session-bound language
103      */
104     protected String getLanguage(HttpServletRequest req, HttpSession session) {
105         String lang = (String) session.getAttribute("Language");
106         if (lang == null || lang.equals("")) {
107             return getAcceptLanguage(req);
108         }
109         else {
110             return lang;
111         }
112     }
113
114     /**
115      * get the locale either from the session or the accept-language header ot the request
116      * this supersedes getLanguage for the new i18n
117      */
118     public Locale getLocale(HttpServletRequest req) {
119         Locale loc=null;
120         HttpSession session = req.getSession(false);
121         if (session!=null) {
122             // session can be null in case of logout
123             loc = (Locale) session.getAttribute("Locale");
124         }
125         // if there is nothing in the session get it fron the accept-language
126         if (loc == null) {
127             loc = req.getLocale();
128         }
129         return loc;
130     }
131
132     /**
133      * Checks the Accept-Language of the client browser.
134      * If this language is available it returns its country-code,
135      * else it returns the standard-language
136      */
137     protected String getAcceptLanguage(HttpServletRequest req) {
138         Locale loc = req.getLocale();
139         lang = loc.getLanguage();
140         /* not needed anymore due to new i18n
141           File f = new File(HTMLTemplateProcessor.templateDir+"/"+lang);
142         //is there an existing template-path?
143         if(!f.isDirectory()){
144           //no there isn't. we use standard-language
145           lang = MirConfig.getProp("StandardLanguage");
146           theLog.printDebugInfo("language not existing");
147         }
148         theLog.printDebugInfo("Language: " + lang);
149         */
150         return lang;
151     }
152 }