next steps in itegrating struts and hibernate.\rlogin and logout ist now possible...
[mir.git] / source / mir / core / ui / servlet / TemplateServlet.java
index 06711cc..2c70b2c 100755 (executable)
@@ -33,10 +33,13 @@ package mir.core.ui.servlet;
 
 import java.io.IOException;
 import java.io.PrintWriter;
+import java.util.Date;
 import java.util.Enumeration;
 import java.util.HashMap;
+import java.util.List;
 import java.util.Locale;
 import java.util.Map;
+import java.util.Vector;
 
 import javax.servlet.ServletConfig;
 import javax.servlet.ServletContext;
@@ -47,9 +50,16 @@ import javax.servlet.http.HttpServletResponse;
 import javax.servlet.http.HttpSession;
 
 import mir.config.MirPropertiesConfiguration;
-import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
 import mir.servlet.ServletModuleExc;
+import mir.util.GeneratorDateTimeFunctions;
+import mir.util.GeneratorExpressionFunctions;
+import mir.util.GeneratorHTMLFunctions;
+import mir.util.GeneratorIntegerFunctions;
+import mir.util.GeneratorListFunctions;
+import mir.util.GeneratorRegularExpressionFunctions;
+import mir.util.GeneratorStringFunctions;
 import mir.util.ResourceBundleGeneratorFunction;
+import mir.util.StringRoutines;
 import mircoders.servlet.ServletHelper;
 
 import org.apache.struts.util.MessageResources;
@@ -57,7 +67,7 @@ import org.apache.struts.util.MessageResources;
 /**
  * TemplateServlet
  * @author idefix
- * @version $Id: TemplateServlet.java,v 1.1 2003/09/05 20:23:59 idfx Exp $
+ * @version $Id: TemplateServlet.java,v 1.2 2003/09/07 16:55:00 idfx Exp $
  */
 public class TemplateServlet extends HttpServlet {
 
@@ -68,6 +78,8 @@ public class TemplateServlet extends HttpServlet {
                super();
        }
        
+       
+       
        /**
         * @see javax.servlet.http.HttpServlet#doGet(javax.servlet.http.HttpServletRequest, javax.servlet.http.HttpServletResponse)
         */
@@ -91,47 +103,106 @@ public class TemplateServlet extends HttpServlet {
         */
        protected void process(HttpServletRequest request, HttpServletResponse response) 
                throws IOException, ServletException {
-               PrintWriter printWriter = response.getWriter();
-               Map requestData = new HashMap();
-               Enumeration keys = request.getAttributeNames();
-               while(keys.hasMoreElements()){
-                       final String key = (String)keys.nextElement();
-                       requestData.put(key, request.getAttribute(key));
-               }
-               Map sessionData = new HashMap();
-               HttpSession httpSession = request.getSession();
-               keys = httpSession.getAttributeNames();
-               while(keys.hasMoreElements()){
-                       final String key = (String)keys.nextElement();
-                       sessionData.put(key, httpSession.getAttribute(key));
-               }
-               Map applicationData = new HashMap();
-               ServletContext servletContext = getServletContext();
-               keys = servletContext.getAttributeNames();
-               while(keys.hasMoreElements()){
-                       final String key = (String)keys.nextElement();
-                       applicationData.put(key, servletContext.getAttribute(key));
-               }               
-               Map templateData = new HashMap();
-               templateData.put("request", requestData);
-               templateData.put("session", sessionData);
-               templateData.put("application", applicationData);
                try {
-                       templateData.put("config", MirPropertiesConfiguration.instance().allSettings());
-               } catch (PropertiesConfigExc e) {
-                       throw new ServletException(e);
-               }
-               
-               String templateName = generateTemplateString(request);
-               
-               Locale[] locales = new Locale[2];
-               locales[0] = request.getLocale();
-               locales[1] = request.getLocale();
+                       Map requestData = new HashMap();
+                       Enumeration keys = request.getAttributeNames();
+                       while(keys.hasMoreElements()){
+                               final String key = (String)keys.nextElement();
+                               requestData.put(key, request.getAttribute(key));
+                       }
+                       requestData.putAll(request.getParameterMap());
+                       
+                       Map sessionData = new HashMap();
+                       HttpSession httpSession = request.getSession();
+                       keys = httpSession.getAttributeNames();
+                       while(keys.hasMoreElements()){
+                               final String key = (String)keys.nextElement();
+                               sessionData.put(key, httpSession.getAttribute(key));
+                       }
+                       
+                       Map applicationData = new HashMap();
+                       ServletContext servletContext = getServletContext();
+                       keys = servletContext.getAttributeNames();
+                       while(keys.hasMoreElements()){
+                               final String key = (String)keys.nextElement();
+                               applicationData.put(key, servletContext.getAttribute(key));
+                       }               
+                       
+                       Map utilityMap = new HashMap();
+                       utilityMap.put("compressWhitespace", 
+                               new freemarker.template.utility.CompressWhitespace());
+                       utilityMap.put("encodeHTML", 
+                               new GeneratorHTMLFunctions.encodeHTMLGeneratorFunction());
+                       utilityMap.put("encodeXML", 
+                               new GeneratorHTMLFunctions.encodeXMLGeneratorFunction());
+                       utilityMap.put("encodeURI", 
+                               new GeneratorHTMLFunctions.encodeURIGeneratorFunction());
+                       utilityMap.put("subString", 
+                               new GeneratorStringFunctions.subStringFunction());
+                       utilityMap.put("subList", 
+                               new GeneratorListFunctions.subListFunction());
+                       utilityMap.put("isOdd", 
+                               new GeneratorIntegerFunctions.isOddFunction());
+                       utilityMap.put("increment", 
+                               new GeneratorIntegerFunctions.incrementFunction());
+                       utilityMap.put("evaluate", 
+                               new GeneratorExpressionFunctions.evaluateExpressionFunction());
+                       utilityMap.put("constructString", 
+                               new GeneratorStringFunctions.constructStructuredStringFunction());
+                       utilityMap.put("escapeJDBCString", 
+                               new GeneratorStringFunctions.jdbcStringEscapeFunction());
+                       utilityMap.put("regexpreplace", 
+                               new GeneratorRegularExpressionFunctions.regularExpressionReplaceFunction());
+                       utilityMap.put("datetime", 
+                               new GeneratorDateTimeFunctions.DateTimeFunctions(
+                                       MirPropertiesConfiguration.instance().getString("Mir.DefaultTimezone")));
+                       utilityMap.put("encodeLink", 
+                               new GeneratorHTMLFunctions.encodeLinksGeneratorFunction(response));
+
+                       Map configData = MirPropertiesConfiguration.instance().allSettings();
+                       configData.put("docRoot", request.getContextPath());
+                       configData.put("now", new Date());
+                       
+                       //administeroperations
+                       List administerOperations = new Vector();
+                       String settings[] = MirPropertiesConfiguration.instance().getStringArray("Mir.Localizer.Admin.AdministerOperations");
+                       if (settings!=null) {
+                               for (int i = 0; i < settings.length; i++) {
+                                       String setting = settings[i].trim();
+
+                                       if (setting.length() > 0) {
+                                               List parts = StringRoutines.splitString(setting, ":");
+                                               if (parts.size() != 2) {
+//                                                     logger.error("config error: " + settings[i] + ", 2 parts expected");
+                                               }
+                                               else {
+                                                       Map entry = new HashMap();
+                                                       entry.put("name", (String) parts.get(0));
+                                                       entry.put("url", (String) parts.get(1));
+                                                       administerOperations.add(entry);
+                                               }
+                                       }
+                               }
+                       }
+                                               
+                       Map templateData = new HashMap();
+                       templateData.put("request", requestData);
+                       templateData.put("session", sessionData);
+                       templateData.put("application", applicationData);
+                       templateData.put("utility", utilityMap);
+                       templateData.put("config", configData);
+                       templateData.put("administeroperations", administerOperations);
+                       
+                       String templateName = generateTemplateString(request);
+                       
+                       Locale[] locales = new Locale[2];
+                       locales[0] = request.getLocale();
+                       locales[1] = request.getLocale();
                
-               try {
                        //write the servlet
+                       PrintWriter printWriter = response.getWriter();
                        generateResponse(printWriter, templateData, templateName, locales);
-               } catch (ServletModuleExc e) {
+               } catch (Throwable e) {
                        throw new ServletException(e);
                }
        }
@@ -139,7 +210,7 @@ public class TemplateServlet extends HttpServlet {
        private String generateTemplateString(HttpServletRequest request){
                String returnString = request.getServletPath();
                returnString = returnString.substring(0, returnString.indexOf("."));
-               return returnString + ".template";
+               return returnString + ".tmpl";
        }
        
        private void generateResponse(PrintWriter printWriter, Map map, 
@@ -148,19 +219,23 @@ public class TemplateServlet extends HttpServlet {
                if(templateString.startsWith("/admin")){
                        map.put( "lang",
                                        new ResourceBundleGeneratorFunction( locales,
-                                                new MessageResources[] { MessageResources.getMessageResources("bundles.admin"),
-                                                               MessageResources.getMessageResources("bundles.adminlocal")}));
+                                                new MessageResources[] { 
+                                                               MessageResources.getMessageResources("bundles.admin"),
+                                                               MessageResources.getMessageResources("bundles.adminlocal")
+                                                               }));
                                                                
-                       templateString = templateString.substring(6);
+                       templateString = templateString.substring(templateString.lastIndexOf('/'));
                        ServletHelper.generateResponse(printWriter, map, templateString);       
                }
                if(templateString.startsWith("/open")){
                        map.put( "lang",
-                                       new ResourceBundleGeneratorFunction( locales,
-                                                new MessageResources[] { MessageResources.getMessageResources("bundles.open"),
-                                                               MessageResources.getMessageResources("bundles.open")}));
+                               new ResourceBundleGeneratorFunction( locales,
+                                       new MessageResources[] { 
+                                               MessageResources.getMessageResources("bundles.open"),
+                                               MessageResources.getMessageResources("bundles.open")
+                                       }));
                                                                
-                       templateString = templateString.substring(5);
+                       templateString = templateString.substring(templateString.lastIndexOf('/'));
                        ServletHelper.generateOpenPostingResponse(printWriter, map, templateString);    
                }               
        }
@@ -177,5 +252,12 @@ public class TemplateServlet extends HttpServlet {
         */
        public void init(ServletConfig servletConfig) throws ServletException {
                super.init(servletConfig);
+               MirPropertiesConfiguration.setContext(servletConfig.getServletContext());
+               try {
+                       MirPropertiesConfiguration.instance();
+               }
+               catch (Throwable t) {
+                       throw new ServletException("can't read configuration: " + t.toString());
+               }
        }
 }