+
+ 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();
+ JDBCPool.closeConnection(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
+// 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();
+ }
+ }
+
+ 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("")) {
+ 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.
+ *
+ * @param session
+ * @param aRequest
+ */
+ 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);
+ }