use req.getContextPath to find the RootUri.. much more robust. 4.0 and 4.1 compatible...
[mir.git] / source / mir / misc / HTMLTemplateProcessor.java
index 1abaae5..f517a3c 100755 (executable)
@@ -1,8 +1,34 @@
 /*
- * put your module comment here
+ * 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.misc;
 
 import  java.lang.*;
@@ -13,6 +39,7 @@ import  freemarker.template.*;
 import  mir.entity.*;
 import  mir.storage.*;
 import javax.servlet.http.*;
+import org.apache.struts.util.MessageResources;
 
 
 /**
@@ -29,10 +56,15 @@ public final class HTMLTemplateProcessor {
   private static String               audioHost;
   private static String               videoHost;
   private static String               imageHost;
+  private static String               imagePath;
   private static String               openAction;
-  protected static String producerDocRoot = MirConfig.getProp("Producer.DocRoot");
-  protected static String producerStorageRoot = MirConfig.getProp("Producer.StorageRoot");
-
+  private static String               defEncoding;
+  private static String               generateFO;
+  private static String               generatePDF;
+  protected static String producerDocRoot =
+               MirConfig.getProp("Producer.DocRoot");
+  protected static String producerStorageRoot =
+               MirConfig.getProp("Producer.StorageRoot");
 
   //
   // init
@@ -55,15 +87,19 @@ public final class HTMLTemplateProcessor {
          //actionRoot = docRoot + "/servlet/" + MirConfig.getProp("ServletName");
     //actionRoot = docRoot + "/servlet/NadirAktuell";
 
-    actionRoot = docRoot + "/servlet/Mir";
+    actionRoot = docRoot + "/Mir";
 
+    defEncoding = MirConfig.getProp("Mir.DefaultEncoding");
     openAction = MirConfig.getProp("Producer.OpenAction");
     productionHost = MirConfig.getProp("Producer.ProductionHost");
     videoHost = MirConfig.getProp("Producer.VideoHost");
     audioHost = MirConfig.getProp("Producer.AudioHost");
     imageHost = MirConfig.getProp("Producer.Image.Host");
+    imagePath = MirConfig.getProp("Producer.Image.Path");
     producerDocRoot = MirConfig.getProp("Producer.DocRoot");
     producerStorageRoot = MirConfig.getProp("Producer.StorageRoot");
+    generateFO = MirConfig.getProp("GenerateFO");
+    generatePDF = MirConfig.getProp("GeneratePDF");
   }
 
   /**
@@ -104,9 +140,10 @@ public final class HTMLTemplateProcessor {
    * @param out
    * @exception HTMLParseException
    */
-  public static void process(HttpServletResponse res,String templateFilename, EntityList entList, PrintWriter out)
-      throws HTMLParseException {
-    process(res, templateFilename,  entList,  (String)null, (TemplateModelRoot)null,  out);
+  public static void process(HttpServletResponse res,String templateFilename,
+                                                                                                                EntityList entList, PrintWriter out, Locale locale)
+    throws HTMLParseException {
+    process(res, templateFilename, entList, (String)null, (TemplateModelRoot)null, out, locale);
   }
 
   /**
@@ -122,14 +159,16 @@ public final class HTMLTemplateProcessor {
    * @param out
    * @exception HTMLParseException
    */
-    public static void process(HttpServletResponse res,String templateFilename, EntityList entList, String additionalModelName,
-             TemplateModelRoot additionalModel, PrintWriter out)
+    public static void process(HttpServletResponse res,String templateFilename,
+                                                                                                                        EntityList entList, String additionalModelName,
+                               TemplateModelRoot additionalModel, PrintWriter out,
+                                                                                                                        Locale locale)
       throws HTMLParseException {
 
       SimpleHash modelRoot = new SimpleHash();
 
       if (entList == null) {
-         process(null,templateFilename, modelRoot, out);
+         process(null,templateFilename, modelRoot, out, locale);
       } else {
         try {
           modelRoot = makeSimpleHashWithEntitylistInfos(entList);
@@ -138,7 +177,7 @@ public final class HTMLTemplateProcessor {
           if (additionalModelName != null && additionalModel != null)
               modelRoot.put(additionalModelName, additionalModel);
 
-          process(res,templateFilename, modelRoot, out);
+          process(res,templateFilename, modelRoot, out, locale);
         } catch (StorageObjectException e) {
           throw new HTMLParseException(e.toString());
         }
@@ -155,9 +194,10 @@ public final class HTMLTemplateProcessor {
    * @param out
    * @exception HTMLParseException
    */
-    public static void process(HttpServletResponse res,String templateFilename, HashMap mergeData, PrintWriter out)
+    public static void process(HttpServletResponse res,String templateFilename,
+                                                                                                                        HashMap mergeData, PrintWriter out, Locale locale)
       throws HTMLParseException {
-      process(res,templateFilename, makeSimpleHash(mergeData), out);
+      process(res,templateFilename, makeSimpleHash(mergeData), out, locale);
     }
 
   /**
@@ -169,13 +209,14 @@ public final class HTMLTemplateProcessor {
    * @param out
    * @exception HTMLParseException
    */
-    public static void process(String templateFilename, PrintWriter out)
+    public static void process(String templateFilename, PrintWriter out,
+                                                                                                                        Locale locale)
       throws HTMLParseException {
-      process(null,templateFilename, (TemplateModelRoot)null, out);
+      process(null,templateFilename, (TemplateModelRoot)null, out, locale);
     }
 
 
-  /**
+       /**
    * Mischt die freemarker-Struktur <code>tmr</code> mit
    * Template <code>templateFilename</code> und gibt das Ergebnis an den PrintWriter
    * <code>out</code>
@@ -185,47 +226,80 @@ public final class HTMLTemplateProcessor {
    * @param out
    * @exception HTMLParseException
    */
-    public static void process(HttpServletResponse res,String templateFilename, TemplateModelRoot tmr, PrintWriter out)
-      throws HTMLParseException {
-      if (out==null) throw new HTMLParseException("no outputstream");
-      Template tmpl = getTemplateFor(templateFilename);
-      if (tmpl == null) throw new HTMLParseException("no template: " + templateFilename);
-      if (tmr==null) tmr = new SimpleHash();
-
-      /** @todo  what is this for? (rk) */
-      String session="";
-      if (res!=null) {
-        session=res.encodeURL("");
-      }
+       public static void process(HttpServletResponse res,String templateFilename,
+                                                                                                                TemplateModelRoot tmr, PrintWriter out, Locale locale)
+       throws HTMLParseException {
+               process(res,templateFilename,tmr,null,out,locale);
 
-      /** @todo why do we double those? should be cleaned up and
-       *  statically initialized, we do not need to assemble a config
-       *  hash everytime we give out a page, only exception is
-       *  date "now" // rk */
-      // put standard configuration into tempalteRootmodel
-      SimpleHash configHash = new SimpleHash();
-      configHash.put("docroot", new SimpleScalar(producerDocRoot));
-      configHash.put("storageroot", new SimpleScalar(producerStorageRoot));
-      configHash.put("productionhost", new SimpleScalar(productionHost));
-      configHash.put("openaction", new SimpleScalar(openAction));
-      configHash.put("actionRootLogin",new SimpleScalar(actionRoot));
-
-
-      tmr.put("docRoot", new SimpleScalar(docRoot));
-      tmr.put("now", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar())));
-      tmr.put("actionRoot", new SimpleScalar(actionRoot+session));
-      tmr.put("openAction", new SimpleScalar(openAction));
-      tmr.put("productionHost", new SimpleScalar(productionHost));
-      tmr.put("videoHost", new SimpleScalar(videoHost));
-      tmr.put("audioHost", new SimpleScalar(audioHost));
-      tmr.put("imageHost", new SimpleScalar(imageHost));
-      // this conform to updated freemarker syntax
-      tmr.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
-
-      tmr.put("config", configHash);
-      tmpl.process(tmr, out);
+       }
 
-    }
+  /**
+   * Mischt die freemarker-Struktur <code>tmr</code> mit
+   * Template <code>templateFilename</code> und gibt das Ergebnis an den PrintWriter
+   * <code>out</code>
+   *
+   * @param templateFilename
+   * @param mergeData
+   * @param out
+   * @exception HTMLParseException
+   */
+       public static void process(HttpServletResponse res,String templateFilename,
+                                                                                                                TemplateModelRoot tmr, TemplateModelRoot extra,
+                                                                                                                PrintWriter out, Locale locale)
+               throws HTMLParseException {
+               if (out==null) throw new HTMLParseException("no outputstream");
+               Template tmpl = getTemplateFor(templateFilename);
+               if (tmpl == null) throw new HTMLParseException("no template: " + templateFilename);
+               if (tmr==null) tmr = new SimpleHash();
+
+               /** @todo  what is this for? (rk) */
+               String session="";
+               if (res!=null) {
+                       session=res.encodeURL("");
+               }
+
+    // @todo wouldn't it be so much easier to just pass the whole damn config
+    // Hash here from Mirconfig... ??????? than we could access arbitrary config
+    // values in the templates. -mh
+               // put standard configuration into tempalteRootmodel
+               SimpleHash configHash = new SimpleHash();
+               configHash.put("defEncoding", new SimpleScalar(defEncoding));
+               configHash.put("producerDocRoot", new SimpleScalar(producerDocRoot));
+               configHash.put("storageRoot", new SimpleScalar(producerStorageRoot));
+    configHash.put("productionHost", new SimpleScalar(productionHost));
+               configHash.put("openAction", new SimpleScalar(openAction));
+               configHash.put("actionRootLogin",new SimpleScalar(actionRoot));
+               configHash.put("docRoot", new SimpleScalar(docRoot));
+               configHash.put("now", new SimpleScalar(StringUtil.date2readableDateTime(new GregorianCalendar())));
+               configHash.put("actionRoot", new SimpleScalar(actionRoot+session));
+               configHash.put("videoHost", new SimpleScalar(videoHost));
+               configHash.put("audioHost", new SimpleScalar(audioHost));
+               configHash.put("imageHost", new SimpleScalar(imageHost));
+               configHash.put("imagePath", new SimpleScalar(imagePath));
+               configHash.put("mirVersion", new SimpleScalar(MirConfig.getProp("Mir.Version")));
+               // this conform to updated freemarker syntax
+               configHash.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
+               configHash.put("generateFO", new SimpleScalar(generateFO));
+               configHash.put("generatePDF", new SimpleScalar(generatePDF));
+
+               SimpleHash outPutHash = new SimpleHash();
+
+               if(extra!=null){
+                       outPutHash.put("extra",extra);
+                       try{
+                       while(((SimpleList)extra).hasNext()){
+                               theLog.printDebugInfo(((SimpleList)extra).next().toString());
+                       }
+                       }catch(Exception e){}
+               }
+               outPutHash.put("data",tmr);
+               outPutHash.put("config", configHash);
+
+               MessageResources messages = MessageResources.getMessageResources("bundles.admin");
+               outPutHash.put("lang", new MessageMethodModel(locale, messages) );
+
+               tmpl.process(outPutHash,out);
+       }
 
 
   /**