reintroduced StringUtil.regexpReplace
[mir.git] / source / mir / servlet / AbstractServlet.java
index 93c7b41..59e1493 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002 The Mir-coders group
+ * Copyright (C) 2001-2006 The Mir-coders group
  *
  * This file is part of Mir.
  *
@@ -19,8 +19,6 @@
  *
  * In addition, as a special exception, The Mir-coders gives permission to link
  * the code of this program with  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
  */
 package mir.servlet;
 
-import java.io.IOException;
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.Locale;
-import java.sql.*;
+import mir.config.MirPropertiesConfiguration;
+import mir.log.LoggerWrapper;
+import mircoders.global.MirGlobal;
 
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
@@ -41,16 +37,11 @@ import javax.servlet.http.HttpServlet;
 import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
-
-
-import com.codestudio.util.*;
-import com.codestudio.util.JDBCPoolMetaData;
-import com.codestudio.util.SQLManager;
-
-import mir.config.MirPropertiesConfiguration;
-import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
-import mir.log.LoggerWrapper;
-import mircoders.global.*;
+import java.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.Connection;
+import java.util.Locale;
 
 /**
  * Title:        Mir
@@ -58,27 +49,18 @@ import mircoders.global.*;
  * Copyright:    Copyright (c) 2001, 2002
  * Company:      Mir-coders group
  * @author       idfx, the Mir-coders group
- * @version      $Id: AbstractServlet.java,v 1.30.2.2 2003/06/27 02:43:42 zapata Exp $
+ * @version      $Id: AbstractServlet.java,v 1.30.2.11 2006/08/10 19:29:35 zapata Exp $
  */
 
 public abstract class AbstractServlet extends HttpServlet {
-  protected static String lang;
   protected LoggerWrapper logger;
   protected MirPropertiesConfiguration configuration;
 
-  /**
-   * Constructor for AbstractServlet.
-   */
   public AbstractServlet() {
     super();
-    logger = new LoggerWrapper("Servlet");
   }
 
   protected void setNoCaching(HttpServletResponse aResponse) {
-    //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
     aResponse.setHeader("Pragma", "no-cache");
     aResponse.setDateHeader("Expires", 0);
     aResponse.setHeader("Cache-Control", "no-cache");
@@ -87,24 +69,9 @@ public abstract class AbstractServlet extends HttpServlet {
   /**
    * Bind the language to the session
    */
-  protected void setLanguage(HttpSession session, String language) {
-    logger.debug("setting language to " + language);
-
-    session.setAttribute("language", language);
-    session.setAttribute("locale", new Locale(language, ""));
-  }
-
-  /**
-   * Get the session-bound language
-   */
-  protected String getLanguage(HttpServletRequest aRequest, HttpSession session) {
-    String lang = (String) session.getAttribute("language");
-
-    if (lang == null || lang.length()==0) {
-      lang = getAcceptLanguage(aRequest);
-    }
-
-    return lang;
+  protected void setLanguage(HttpSession aRequest, String aLanguage) {
+    aRequest.setAttribute("language", aLanguage);
+    aRequest.setAttribute("locale", new Locale(aLanguage, ""));
   }
 
   /**
@@ -112,20 +79,20 @@ public abstract class AbstractServlet extends HttpServlet {
    * this supersedes getLanguage for the new i18n
    */
   public Locale getLocale(HttpServletRequest aRequest) {
-    Locale loc = null;
+    Locale locale = null;
     HttpSession session = aRequest.getSession(false);
     if (session != null) {
       // session can be null in case of logout
-      loc = (Locale) session.getAttribute("locale");
+      locale = (Locale) session.getAttribute("locale");
     }
     // if there is nothing in the session get it fron the accept-language
-    if (loc == null) {
-      loc = aRequest.getLocale();
+    if (locale == null) {
+      locale = aRequest.getLocale();
     }
 
-    logger.debug("getting locale: " + loc.getLanguage());
+    logger.debug("getting locale: " + locale.getLanguage());
 
-    return loc;
+    return locale;
   }
 
   /**
@@ -134,26 +101,27 @@ public abstract class AbstractServlet extends HttpServlet {
    * else it returns the standard-language
    */
   protected String getAcceptLanguage(HttpServletRequest aRequest) {
-    Locale loc = aRequest.getLocale();
-    lang = loc.getLanguage();
-    return lang;
+    Locale locale = aRequest.getLocale();
+
+    return locale.getLanguage();
   }
 
   /**
    * @see javax.servlet.Servlet#init(javax.servlet.ServletConfig)
    */
-  public void init(ServletConfig config) throws ServletException {
-    super.init(config);
+  public void init(ServletConfig aConfiguration) throws ServletException {
+    super.init(aConfiguration);
 
-    MirPropertiesConfiguration.setContext(config.getServletContext());
+    MirPropertiesConfiguration.setContext(aConfiguration.getServletContext());
     try {
       configuration = MirPropertiesConfiguration.instance();
     }
     catch (Throwable t) {
-      logger.fatal("can't read configuration: " + t.toString());
       throw new ServletException("can't read configuration: " + t.toString());
     }
 
+    logger = new LoggerWrapper("Servlet");
+
     try {
       MirGlobal.localizer();
     }
@@ -162,42 +130,9 @@ public abstract class AbstractServlet extends HttpServlet {
       throw new ServletException("can't get localizer: " + t.toString());
     }
 
-    String dbUser = configuration.getString("Database.Username");
-    String dbPassword = configuration.getString("Database.Password");
-    String dbHost = configuration.getString("Database.Host");
-    String dbPort = configuration.getString("Database.Port");
-    String dbAdapName = configuration.getString("Database.Adaptor");
-    String dbName = configuration.getString("Database.Name");
-    String dbDriver = configuration.getString("Database.Driver");
-    String dbUrl = "jdbc:postgresql://"+dbHost+":"+dbPort+"/"+dbName;
-    int dbMin = configuration.getInteger("Database.poolMin", 1);
-    int dbMax = configuration.getInteger("Database.poolMax", 10);
-
-    JDBCPoolMetaData meta = new JDBCPoolMetaData();
-    meta.setDbname(dbName);
-    meta.setDriver(dbDriver);
-    meta.setURL(dbUrl);
-    meta.setUserName(dbUser);
-    meta.setPassword(dbPassword);
-    meta.setJNDIName("mir");
-    meta.setMaximumSize(dbMax);
-    meta.setMinimumSize(dbMin);
-    meta.setPoolPreparedStatements(false);
-    meta.setCacheEnabled(false);
-    meta.setCacheSize(15);
-    meta.setDebugging(false);
-
-    SQLManager manager = SQLManager.getInstance();
-
-    JDBCPool pool = null;
-    if (manager != null) {
-      pool = manager.createPool(meta);
-    }
-
-    Connection connection;
     try {
-      connection = pool.requestConnection();
-      pool.closeConnection(connection);
+      Connection connection = MirGlobal.getDatabaseEngine().obtainConnection();
+      MirGlobal.getDatabaseEngine().releaseConnection(connection);
     }
     catch (Throwable t) {
       logger.fatal("Can't connect to database: " + t.toString());
@@ -205,50 +140,51 @@ public abstract class AbstractServlet extends HttpServlet {
     }
   }
 
-  private void setEncoding(HttpServletRequest request){
+  private void setEncoding(HttpServletRequest aRequest) {
     try {
-      Class reqClass = request.getClass();
-      Method method = reqClass.getMethod("setCharacterEncoding", new Class[]{String.class});
+      logger.info("Request has encoding: " + aRequest.getCharacterEncoding());
+      logger.info("Config stipulates encoding: " + configuration.getString("Mir.DefaultHTMLCharset"));
+
+      Class requestClass = aRequest.getClass();
+      Method method = requestClass.getMethod("setCharacterEncoding", new Class[]{String.class});
       String encoding = configuration.getString("Mir.DefaultHTMLCharset");
-      method.invoke(request, new Object[]{encoding});
-    } catch (NoSuchMethodException e) {
-      // TODO set the encoding in a zapata-way
-//      logger.warn("set encoding not yet implemented: " + e.getMessage());
-    } catch (SecurityException e) {
-      logger.error(e.getMessage());
-      e.printStackTrace();
-    } catch (IllegalArgumentException e) {
-      logger.error(e.getMessage());
-      e.printStackTrace();
-    } catch (IllegalAccessException e) {
-      logger.error(e.getMessage());
-      e.printStackTrace();
-    } catch (InvocationTargetException e) {
-      logger.error(e.getMessage());
-      e.printStackTrace();
+      method.invoke(aRequest, new Object[]{encoding});
+      logger.info("Request now has encoding: " + aRequest.getCharacterEncoding());
+    }
+    catch (NoSuchMethodException e) {
+    }
+    catch (SecurityException e) {
+      logger.error(e.getMessage(), e);
+    }
+    catch (IllegalArgumentException e) {
+      logger.error(e.getMessage(), e);
+    }
+    catch (IllegalAccessException e) {
+      logger.error(e.getMessage(), e);
+    }
+    catch (InvocationTargetException e) {
+      logger.error(e.getMessage(), e);
     }
   }
 
-  protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-    doPost(request, response);
+  protected final void doGet(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException {
+    doPost(aRequest, aResponse);
   }
 
-  protected final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-    if ( (configuration.getString("RootUri") == null) ||
-        configuration.getString("RootUri").equals("")) {
-      configuration.setProperty("RootUri", request.getContextPath());
+  protected final void doPost(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException {
+    if ((configuration.getString("RootUri") == null) ||
+         configuration.getString("RootUri").equals("")) {
+      configuration.setProperty("RootUri", aRequest.getContextPath());
     }
-    setEncoding(request);
-    process(request, response);
+
+    setEncoding(aRequest);
+    process(aRequest, aResponse);
   }
 
-  abstract public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
+  public abstract void process(HttpServletRequest aRequest, HttpServletResponse aResponse) throws ServletException, IOException;
 
   /**
    * Selects the language for the response.
-   *
-   * @param session
-   * @param aRequest
    */
   protected void checkLanguage(HttpSession aSession, HttpServletRequest aRequest) {
     String requestLanguage = aRequest.getParameter("language");