1.1 restoration
[mir.git] / source / mir / servlet / AbstractServlet.java
index c5ffcd9..55648f3 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002  The Mir-coders group
+ * Copyright (C) 2001, 2002 The Mir-coders group
  *
  * This file is part of Mir.
  *
  * 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.
+ * 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
+ * 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.io.IOException;
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.sql.Connection;
 import java.util.Locale;
+
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletException;
 import javax.servlet.http.HttpServlet;
@@ -40,13 +42,9 @@ import javax.servlet.http.HttpServletRequest;
 import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
-import com.codestudio.util.JDBCPool;
-import com.codestudio.util.JDBCPoolMetaData;
-import com.codestudio.util.SQLManager;
 import mir.config.MirPropertiesConfiguration;
-import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
 import mir.log.LoggerWrapper;
-import mir.storage.DatabaseAdaptor;
+import mircoders.global.MirGlobal;
 
 /**
  * Title:        Mir
@@ -54,20 +52,15 @@ import mir.storage.DatabaseAdaptor;
  * Copyright:    Copyright (c) 2001, 2002
  * Company:      Mir-coders group
  * @author       idfx, the Mir-coders group
- * @version      $Id: AbstractServlet.java,v 1.26 2003/03/19 15:34:52 rk Exp $
+ * @version      $Id: AbstractServlet.java,v 1.30.2.7 2004/11/21 22:07:13 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) {
@@ -75,6 +68,7 @@ public abstract class AbstractServlet extends HttpServlet {
     //
     //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");
@@ -94,13 +88,13 @@ public abstract class AbstractServlet extends HttpServlet {
    * Get the session-bound language
    */
   protected String getLanguage(HttpServletRequest aRequest, HttpSession session) {
-    String lang = (String) session.getAttribute("language");
+    String language = (String) session.getAttribute("language");
 
-    if (lang == null || lang.length()==0) {
-      lang = getAcceptLanguage(aRequest);
+    if (language == null || language.length()==0) {
+      language = getAcceptLanguage(aRequest);
     }
 
-    return lang;
+    return language;
   }
 
   /**
@@ -108,20 +102,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;
   }
 
   /**
@@ -131,7 +125,7 @@ public abstract class AbstractServlet extends HttpServlet {
    */
   protected String getAcceptLanguage(HttpServletRequest aRequest) {
     Locale loc = aRequest.getLocale();
-    lang = loc.getLanguage();
+    String lang = loc.getLanguage();
     return lang;
   }
 
@@ -145,70 +139,96 @@ public abstract class AbstractServlet extends HttpServlet {
     try {
       configuration = MirPropertiesConfiguration.instance();
     }
-    catch (PropertiesConfigExc e) {
-      throw new ServletException(e);
+    catch (Throwable t) {
+      throw new ServletException("can't read configuration: " + t.toString());
     }
 
-    String dbUser = configuration.getString("Database.Username");
-    String dbPassword = configuration.getString("Database.Password");
-    String dbHost = configuration.getString("Database.Host");
-    String dbAdapName = configuration.getString("Database.Adaptor");
-    String dbName = configuration.getString("Database.Name");
+    logger = new LoggerWrapper("Servlet");
 
-    DatabaseAdaptor adaptor;
     try {
-      adaptor = (DatabaseAdaptor) Class.forName(dbAdapName).newInstance();
+      MirGlobal.localizer();
     }
-    catch (Exception e) {
-      throw new ServletException("Could not load DB adapator: " +
-                                 e.toString());
+    catch (Throwable t) {
+      logger.fatal("can't get localizer: " + t.toString());
+      throw new ServletException("can't get localizer: " + t.toString());
     }
 
-    String dbDriver;
-    String dbUrl;
+    Connection connection;
     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);
+      connection = MirGlobal.getDatabaseEngine().obtainConnection();
+      MirGlobal.getDatabaseEngine().releaseConnection(connection);
+    }
+    catch (Throwable t) {
+      logger.fatal("Can't connect to database: " + t.toString());
+      throw new ServletException("Can't connect to database: " + t.toString());
     }
   }
 
+  private void setEncoding(HttpServletRequest request){
+    try {
+      logger.info("Request has encoding: " + request.getCharacterEncoding());
+      logger.info("Config stipulates encoding: " + configuration.getString("Mir.DefaultHTMLCharset"));
+      Class reqClass = request.getClass();
+      Method method = reqClass.getMethod("setCharacterEncoding", new Class[]{String.class});
+      String encoding = configuration.getString("Mir.DefaultHTMLCharset");
+      method.invoke(request, new Object[]{encoding});
+      logger.info("Request now has encoding: " + request.getCharacterEncoding());
+    }
+    catch (NoSuchMethodException e) {
+      // TODO set the encoding in a zapata-way
+    }
+    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();
+    }
+  }
 
   protected final void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
     doPost(request, response);
   }
 
   protected final void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
-    if ( (configuration.getString("RootUri") == null) ||
-        configuration.getString("RootUri").equals("")) {
+    if ((configuration.getString("RootUri") == null) || configuration.getString("RootUri").equals("")) {
       configuration.setProperty("RootUri", request.getContextPath());
     }
+    setEncoding(request);
     process(request, response);
   }
 
   abstract public void process(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException;
 
+  /**
+   * Selects the language for the response.
+   */
+  protected void checkLanguage(HttpSession aSession, HttpServletRequest aRequest) {
+    String requestLanguage = aRequest.getParameter("language");
+    String sessionLanguage = (String) aSession.getAttribute("language");
+    String acceptLanguage = aRequest.getLocale().getLanguage();
+    String defaultLanguage = configuration.getString("Mir.Login.DefaultLanguage", "en");
+
+    String language = requestLanguage;
+
+    if (language==null)
+      language = sessionLanguage;
+
+    if (language==null)
+      language = acceptLanguage;
+
+    if (language==null)
+      language = defaultLanguage;
+
+    setLanguage(aSession, language);
+  }
 }