apache.commons.config
[mir.git] / source / mir / servlet / AbstractServlet.java
index 850798e..13f674b 100755 (executable)
+/*
+ * Copyright (C) 2001, 2002  The Mir-coders group
+ *
+ * This file is part of Mir.
+ *
+ * Mir is free software; you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation; either version 2 of the License, or
+ * (at your option) any later version.
+ *
+ * Mir is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with Mir; if not, write to the Free Software
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
+ *
+ * In addition, as a special exception, The Mir-coders gives permission to link
+ * the code of this program with the com.oreilly.servlet library, any library
+ * licensed under the Apache Software License, The Sun (tm) Java Advanced
+ * Imaging library (JAI), The Sun JIMI library (or with modified versions of
+ * the above that use the same license as the above), and distribute linked
+ * combinations including the two.  You must obey the GNU General Public
+ * License in all respects for all of the code used other than the above
+ * mentioned libraries.  If you modify this file, you may extend this exception
+ * to your version of the file, but you are not obligated to do so.  If you do
+ * not wish to do so, delete this exception statement from your version.
+ */
+
 package mir.servlet;
 
+import java.util.Locale;
+
+import javax.servlet.ServletConfig;
+import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
+import javax.servlet.http.HttpServletResponse;
 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;
+import mir.config.MirPropertiesConfiguration;
+import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
+import mir.log.LoggerWrapper;
+import mir.storage.DatabaseAdaptor;
+
+import com.codestudio.util.JDBCPool;
+import com.codestudio.util.JDBCPoolMetaData;
+import com.codestudio.util.SQLManager;
 
 /**
  * Title:        Mir
  * Description:  Abstract servlet-class
- * Copyright:    Copyright (c) 2001
- * Company:      Indymedia
- * @author       idfx
- * @version 1.0
+ * Copyright:    Copyright (c) 2001, 2002
+ * Company:      Mir-coders group
+ * @author       idfx, the Mir-coders group
+ * @version      $Id: AbstractServlet.java,v 1.20 2003/01/25 17:45:19 idfx Exp $
  */
 
 public abstract class AbstractServlet extends HttpServlet {
-  protected static String lang;
-  protected static Logfile theLog;
-
+    protected static String lang;
+    //protected static Logfile theLog;
+       protected LoggerWrapper logger;
+               protected MirPropertiesConfiguration configuration;     
+       
   /**
-   * the configration
+   * Constructor for AbstractServlet.
    */
-  protected boolean getConfig(HttpServletRequest req) {
-
-    String RealPath = super.getServletContext().getRealPath("/"); 
-    String Uri = req.getRequestURI();
-    String Name = super.getServletName();
-    //small quickhack, actionroot has to be /servlet/Mir
-    //String RootUri = StringUtil.replace(Uri, "/servlet/" + Name, "");
-    String RootUri = StringUtil.replace(Uri, "/servlet/Mir", "");
-
-
-    MirConfig.initConfig(RealPath, RootUri, Name, getInitParameter("Config"));
-    theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Mir.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;
+  public AbstractServlet() {
+    super();
+    logger = new LoggerWrapper("Servlet");
   }
 
-  /**
-   * Bind the language to the session
-   */
-  protected void setLanguage(HttpSession session, String language){
-    session.setAttribute("Language",language);
-  }
+    protected void setNoCaching(HttpServletResponse res) {
+      //nothing in Mir can or should be cached as it's all dynamic...
+      //
+      //this needs to be done here and not per page (via meta tags) as some
+      //browsers have problems w/ it per-page -mh
+      res.setHeader("Pragma", "no-cache");
+      res.setDateHeader("Expires", 0);
+      res.setHeader("Cache-Control", "no-cache");
+    }
 
-  /**
-   * 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;
+    /**
+     * Bind the language to the session
+     */
+    protected void setLanguage(HttpSession session, String language) {
+        session.setAttribute("Language", language);
     }
-  }
 
+    protected void setLocale(HttpSession session, Locale loc) {
+        session.setAttribute("Locale", loc);
+    }
+
+    /**
+     * Get the session-bound language
+     */
+    protected String getLanguage(HttpServletRequest req, HttpSession session) {
+        String lang = (String) session.getAttribute("Language");
+        if (lang == null || lang.equals("")) {
+            return getAcceptLanguage(req);
+        }
+        else {
+            return lang;
+        }
+    }
+
+    /**
+     * get the locale either from the session or the accept-language header ot the request
+     * this supersedes getLanguage for the new i18n
+     */
+    public Locale getLocale(HttpServletRequest req) {
+        Locale loc=null;
+        HttpSession session = req.getSession(false);
+        if (session!=null) {
+            // session can be null in case of logout
+            loc = (Locale) session.getAttribute("Locale");
+        }
+        // if there is nothing in the session get it fron the accept-language
+        if (loc == null) {
+            loc = req.getLocale();
+        }
+        return loc;
+    }
+
+    /**
+     * Checks the Accept-Language of the client 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();
+        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
+   * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
    */
-  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");
+  public void init(ServletConfig arg0) throws ServletException {
+    super.init(arg0);
+    MirPropertiesConfiguration.setContext(arg0.getServletContext());
+    MirPropertiesConfiguration.setContextPath("/"+arg0.getServletName());
+    try {
+      configuration = MirPropertiesConfiguration.instance();
+    } catch (PropertiesConfigExc e) {
+      throw new ServletException(e);
+    }
+    
+    String dbUser=configuration.getString("Database.Username");
+    String dbPassword=configuration.getString("Database.Password");
+    String dbHost=configuration.getString("Database.Host");
+    String dbAdapName=configuration.getString("Database.Adaptor");
+    
+    DatabaseAdaptor adaptor;
+    try {
+      adaptor = (DatabaseAdaptor)Class.forName(dbAdapName).newInstance();
+    } catch (Exception e) {
+      throw new ServletException("Could not load DB adapator: "+
+                                        e.toString());
+    }
+    
+    String min,max,log,reset,dbname,dblogfile;
+
+    min=configuration.getString("Database.poolMin");
+    System.out.println(min);
+    max=configuration.getString("Database.poolMax");
+    System.out.println(max);
+    dbname=configuration.getString("Database.Name");
+    System.out.println(dbname);
+    log=configuration.getStringWithHome("Database.PoolLog");
+    System.out.println(log);
+    reset=configuration.getString("Database.poolResetTime");
+    System.out.println(reset);
+    dblogfile=configuration.getStringWithHome("Database.Logfile");
+    System.out.println(dblogfile);
+    
+    String dbDriver;
+    String dbUrl;
+    try{
+      dbDriver=adaptor.getDriver();
+      dbUrl=adaptor.getURL(dbUser,dbPassword, dbHost);
+    } catch (Exception e) {
+      throw new ServletException(e);
+    }
+
+    JDBCPoolMetaData meta = new JDBCPoolMetaData();
+    meta.setDbname(dbname);
+    meta.setDriver(dbDriver);
+    meta.setURL(dbUrl);
+    meta.setUserName(dbUser);
+    meta.setPassword(dbPassword);
+    meta.setJNDIName("mir");
+    meta.setMaximumSize(10);
+    meta.setMinimumSize(1);
+    meta.setPoolPreparedStatements(false);
+    meta.setCacheEnabled(false);
+    meta.setCacheSize(15);
+    meta.setDebugging(false);
+    meta.setLogFile(dblogfile+".pool");
+
+    SQLManager manager = SQLManager.getInstance();
+    JDBCPool pool = null;
+    if(manager != null){
+      pool = manager.createPool(meta);
     }
-    theLog.printDebugInfo("Language: " + lang);
-    return lang;
   }
+
 }