-package mir.servlet;
-
-import javax.servlet.http.HttpServlet;
-import javax.servlet.http.HttpServletRequest;
-import javax.servlet.http.HttpSession;
-import java.io.File;
-import java.util.Locale;
-import java.util.HashMap;
-
-import mir.misc.HTMLTemplateProcessor;
-import mir.misc.StringUtil;
-import mir.misc.MirConfig;
-import mir.misc.Logfile;
-
-/**
- * Title: Mir
- * Description: Abstract servlet-class
- * Copyright: Copyright (c) 2001
- * Company: Indymedia
- * @author idfx
- * @version 1.0
- */
-
-public abstract class AbstractServlet extends HttpServlet {
- protected static String lang;
- protected static Logfile theLog;
-
- /**
- * the configration
- */
- protected boolean getConfig(HttpServletRequest req) {
-
- String RealPath = super.getServletContext().getRealPath("/");
- String Uri = req.getRequestURI();
- String Name = super.getServletName();
- String RootUri = StringUtil.replace(Uri, "/servlet/" + Name, "");
-
- // init config
- MirConfig.initConfig(RealPath, RootUri, Name, getInitParameter("Config"));
-
- theLog = Logfile.getInstance(MirConfig.getPropWithHome(Name+".Logfile"));
- theLog.printInfo(Name + " started.");
- theLog.printInfo("Path is: " + MirConfig.getProp("Home"));
- theLog.printInfo("Root URI is: " + MirConfig.getProp("RootUri"));
- theLog.printInfo("Lang is: " + MirConfig.getProp("StandardLanguage"));
- return true;
- }
-
- /**
- * Bind the language to the session
- */
- protected void setLanguage(HttpSession session, String language){
- session.setAttribute("Language",language);
- }
-
- /**
- * Get the session-binded language
- */
- protected String getLanguage(HttpServletRequest req, HttpSession session){
- String lang = (String)session.getAttribute("Language");
- if(lang==null || lang==""){
- return getAcceptLanguage(req);
- } else {
- return lang;
- }
- }
-
- /**
- * Checks the Accept-Language of the clients browser.
- * if this language is available it returns its country-code,
- * else it returns the standard-language
- */
- protected String getAcceptLanguage(HttpServletRequest req){
- Locale loc = req.getLocale();
- lang = loc.getLanguage();
- File f = new File(HTMLTemplateProcessor.templateDir+"/"+lang);
- //is there an existing template-path?
- if(!f.isDirectory()){
- //no there isn't. we use standard-language
- lang = MirConfig.getProp("StandardLanguage");
- theLog.printDebugInfo("language not existing");
- }
- theLog.printDebugInfo("Language: " + lang);
- return lang;
- }
-}
+/*\r
+ * Copyright (C) 2001, 2002 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with any library licensed under the Apache Software License,\r
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library\r
+ * (or with modified versions of the above that use the same license as the above),\r
+ * and distribute linked combinations including the two. You must obey the\r
+ * GNU General Public License in all respects for all of the code used other than\r
+ * the above mentioned libraries. If you modify this file, you may extend this\r
+ * exception to your version of the file, but you are not obligated to do so.\r
+ * If you do not wish to do so, delete this exception statement from your version.\r
+ */\r
+package mir.servlet;\r
+\r
+import java.io.IOException;\r
+import java.lang.reflect.InvocationTargetException;\r
+import java.lang.reflect.Method;\r
+import java.sql.Connection;\r
+import java.util.Locale;\r
+\r
+import javax.servlet.ServletConfig;\r
+import javax.servlet.ServletException;\r
+import javax.servlet.http.HttpServlet;\r
+import javax.servlet.http.HttpServletRequest;\r
+import javax.servlet.http.HttpServletResponse;\r
+import javax.servlet.http.HttpSession;\r
+\r
+import com.codestudio.util.JDBCPool;\r
+import com.codestudio.util.JDBCPoolMetaData;\r
+import com.codestudio.util.SQLManager;\r
+\r
+import mir.config.MirPropertiesConfiguration;\r
+import mir.log.LoggerWrapper;\r
+\r
+import mircoders.global.MirGlobal;\r
+\r
+/**\r
+ * Title: Mir\r
+ * Description: Abstract servlet-class\r
+ * Copyright: Copyright (c) 2001, 2002\r
+ * Company: Mir-coders group\r
+ * @author idfx, the Mir-coders group\r
+ * @version $Id: AbstractServlet.java,v 1.31 2003/09/03 18:29:03 zapata Exp $\r
+ */\r
+\r
+public abstract class AbstractServlet extends HttpServlet {\r
+ protected static String lang;\r
+ protected LoggerWrapper logger;\r
+ protected MirPropertiesConfiguration configuration;\r
+\r
+ /**\r
+ * Constructor for AbstractServlet.\r
+ */\r
+ public AbstractServlet() {\r
+ super();\r
+ }\r
+\r
+ protected void setNoCaching(HttpServletResponse aResponse) {\r
+ //nothing in Mir can or should be cached as it's all dynamic...\r
+ //\r
+ //this needs to be done here and not per page (via meta tags) as some\r
+ //browsers have problems w/ it per-page -mh\r
+ aResponse.setHeader("Pragma", "no-cache");\r
+ aResponse.setDateHeader("Expires", 0);\r
+ aResponse.setHeader("Cache-Control", "no-cache");\r
+ }\r
+\r
+ /**\r
+ * Bind the language to the session\r
+ */\r
+ protected void setLanguage(HttpSession session, String language) {\r
+ logger.debug("setting language to " + language);\r
+\r
+ session.setAttribute("language", language);\r
+ session.setAttribute("locale", new Locale(language, ""));\r
+ }\r
+\r
+ /**\r
+ * Get the session-bound language\r
+ */\r
+ protected String getLanguage(HttpServletRequest aRequest, HttpSession session) {\r
+ String lang = (String) session.getAttribute("language");\r
+\r
+ if (lang == null || lang.length()==0) {\r
+ lang = getAcceptLanguage(aRequest);\r
+ }\r
+\r
+ return lang;\r
+ }\r
+\r
+ /**\r
+ * get the locale either from the session or the accept-language header ot the request\r
+ * this supersedes getLanguage for the new i18n\r
+ */\r
+ public Locale getLocale(HttpServletRequest aRequest) {\r
+ Locale loc = null;\r
+ HttpSession session = aRequest.getSession(false);\r
+ if (session != null) {\r
+ // session can be null in case of logout\r
+ loc = (Locale) session.getAttribute("locale");\r
+ }\r
+ // if there is nothing in the session get it fron the accept-language\r
+ if (loc == null) {\r
+ loc = aRequest.getLocale();\r
+ }\r
+\r
+ logger.debug("getting locale: " + loc.getLanguage());\r
+\r
+ return loc;\r
+ }\r
+\r
+ /**\r
+ * Checks the Accept-Language of the client browser.\r
+ * If this language is available it returns its country-code,\r
+ * else it returns the standard-language\r
+ */\r
+ protected String getAcceptLanguage(HttpServletRequest aRequest) {\r
+ Locale loc = aRequest.getLocale();\r
+ lang = loc.getLanguage();\r
+ return lang;\r
+ }\r
+\r
+ /**\r
+ * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)\r
+ */\r
+ public void init(ServletConfig config) throws ServletException {\r
+ super.init(config);\r
+\r
+ MirPropertiesConfiguration.setContext(config.getServletContext());\r
+ try {\r
+ configuration = MirPropertiesConfiguration.instance();\r
+ }\r
+ catch (Throwable t) {\r
+ throw new ServletException("can't read configuration: " + t.toString());\r
+ }\r
+\r
+ logger = new LoggerWrapper("Servlet");\r
+\r
+ try {\r
+ MirGlobal.localizer();\r
+ }\r
+ catch (Throwable t) {\r
+ logger.fatal("can't get localizer: " + t.toString());\r
+ throw new ServletException("can't get localizer: " + t.toString());\r
+ }\r
+\r
+ String dbUser = configuration.getString("Database.Username");\r
+ String dbPassword = configuration.getString("Database.Password");\r
+ String dbHost = configuration.getString("Database.Host");\r
+ String dbPort = configuration.getString("Database.Port");\r
+ String dbAdapName = configuration.getString("Database.Adaptor");\r
+ String dbName = configuration.getString("Database.Name");\r
+ String dbDriver = configuration.getString("Database.Driver");\r
+ String dbUrl = "jdbc:postgresql://"+dbHost+":"+dbPort+"/"+dbName;\r
+ int dbMin = configuration.getInteger("Database.poolMin", 1);\r
+ int dbMax = configuration.getInteger("Database.poolMax", 10);\r
+\r
+ JDBCPoolMetaData meta = new JDBCPoolMetaData();\r
+ meta.setDbname(dbName);\r
+ meta.setDriver(dbDriver);\r
+ meta.setURL(dbUrl);\r
+ meta.setUserName(dbUser);\r
+ meta.setPassword(dbPassword);\r
+ meta.setJNDIName("mir");\r
+ meta.setMaximumSize(dbMax);\r
+ meta.setMinimumSize(dbMin);\r
+ meta.setPoolPreparedStatements(false);\r
+ meta.setCacheEnabled(false);\r
+ meta.setCacheSize(15);\r
+ meta.setDebugging(false);\r
+\r
+ SQLManager manager = SQLManager.getInstance();\r
+\r
+ JDBCPool pool = null;\r
+ if (manager != null) {\r
+ pool = manager.createPool(meta);\r
+ }\r
+\r
+ Connection connection;\r
+ try {\r
+ connection = pool.requestConnection();\r
+ pool.closeConnection(connection);\r
+ }\r
+ catch (Throwable t) {\r
+ logger.fatal("Can't connect to database: " + t.toString());\r
+ throw new ServletException("Can't connect to database: " + t.toString());\r
+ }\r
+ }\r
+\r
+ private void setEncoding(HttpServletRequest request){\r
+ try {\r
+ logger.info("Request has encoding: " + request.getCharacterEncoding());\r
+ logger.info("Config stipulates encoding: " + configuration.getString("Mir.DefaultHTMLCharset"));\r
+ Class reqClass = request.getClass();\r
+ Method method = reqClass.getMethod("setCharacterEncoding", new Class[]{String.class});\r
+ String encoding = configuration.getString("Mir.DefaultHTMLCharset");\r
+ method.invoke(request, new Object[]{encoding});\r
+ logger.info("Request now has encoding: " + request.getCharacterEncoding());\r
+ }\r
+ catch (NoSuchMethodException e) {\r
+ // TODO set the encoding in a zapata-way\r
+// logger.warn("set encoding not yet implemented: " + e.getMessage());\r
+ }\r
+ catch (SecurityException e) {\r
+ logger.error(e.getMessage());\r
+ e.printStackTrace();\r
+ }\r
+ catch (IllegalArgumentException e) {\r
+ logger.error(e.getMessage());\r
+ e.printStackTrace();\r
+ }\r
+ catch (IllegalAccessException e) {\r
+ logger.error(e.getMessage());\r
+ e.printStackTrace();\r
+ }\r
+ catch (InvocationTargetException e) {\r
+ logger.error(e.getMessage());\r
+ e.printStackTrace();\r
+ }\r
+ }\r
+\r
+ protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r
+ doPost(request, response);\r
+ }\r
+\r
+ protected final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {\r
+ if ((configuration.getString("RootUri") == null) || configuration.getString("RootUri").equals("")) {\r
+ configuration.setProperty("RootUri", request.getContextPath());\r
+ }\r
+ setEncoding(request);\r
+ process(request, response);\r
+ }\r
+\r
+ abstract public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;\r
+\r
+ /**\r
+ * Selects the language for the response.\r
+ *\r
+ * @param session\r
+ * @param aRequest\r
+ */\r
+ protected void checkLanguage(HttpSession aSession, HttpServletRequest aRequest) {\r
+ String requestLanguage = aRequest.getParameter("language");\r
+ String sessionLanguage = (String) aSession.getAttribute("language");\r
+ String acceptLanguage = aRequest.getLocale().getLanguage();\r
+ String defaultLanguage = configuration.getString("Mir.Login.DefaultLanguage", "en");\r
+\r
+ String language = requestLanguage;\r
+\r
+ if (language==null)\r
+ language = sessionLanguage;\r
+\r
+ if (language==null)\r
+ language = acceptLanguage;\r
+\r
+ if (language==null)\r
+ language = defaultLanguage;\r
+\r
+ setLanguage(aSession, language);\r
+ }\r
+}\r