a better solution for the popUpData: there is a new method process in HTMLTemplatePro...
[mir.git] / source / mir / misc / HTMLTemplateProcessor.java
index 07815d4..af419ea 100755 (executable)
@@ -13,6 +13,7 @@ import  freemarker.template.*;
 import  mir.entity.*;
 import  mir.storage.*;
 import javax.servlet.http.*;
+import org.apache.struts.util.MessageResources;
 
 
 /**
@@ -30,19 +31,21 @@ public final class HTMLTemplateProcessor {
   private static String               videoHost;
   private static String               imageHost;
   private static String               openAction;
-  protected static String producerDocRoot = MirConfig.getProp("Producer.DocRoot");
-  protected static String producerStorageRoot = MirConfig.getProp("Producer.StorageRoot");
-
+  protected static String producerDocRoot =
+               MirConfig.getProp("Producer.DocRoot");
+  protected static String producerStorageRoot =
+               MirConfig.getProp("Producer.StorageRoot");
 
   //
   // init
 
   static {
-
+    /** @todo either in the above block or here :) //rk */
     templateDir = MirConfig.getPropWithHome("HTMLTemplateProcessor.Dir");
     templateCache = new FileTemplateCache(templateDir);
     templateCache.setLoadingPolicy(templateCache.LOAD_ON_DEMAND);
-    templateCache.startAutoUpdate();
+    // gone in freemarker 1.7.1
+    // templateCache.startAutoUpdate();
     theLog = Logfile.getInstance(MirConfig.getPropWithHome("HTMLTemplateProcessor.Logfile"));
     docRoot = MirConfig.getProp("RootUri");
     //the quick hack is back in effect as it was more broken than ever before
@@ -50,9 +53,12 @@ public final class HTMLTemplateProcessor {
     // sorry: nadir back in town, i have to debug the mirbase.jar in the
     // nadir evironment. from my point of coding, this needs an urgent
     // fixxx.
-    //actionRoot = docRoot + "/servlet/" + MirConfig.getProp("ServletName");
+    // yeah, from my point too - tob.
+         //actionRoot = docRoot + "/servlet/" + MirConfig.getProp("ServletName");
     //actionRoot = docRoot + "/servlet/NadirAktuell";
-    actionRoot = docRoot + "/servlet/Metropolis";
+
+    actionRoot = docRoot + "/servlet/Mir";
+
     openAction = MirConfig.getProp("Producer.OpenAction");
     productionHost = MirConfig.getProp("Producer.ProductionHost");
     videoHost = MirConfig.getProp("Producer.VideoHost");
@@ -100,9 +106,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);
   }
 
   /**
@@ -118,14 +125,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);
@@ -134,7 +143,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());
         }
@@ -151,9 +160,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);
     }
 
   /**
@@ -165,11 +175,29 @@ 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>
+   *
+   * @param templateFilename
+   * @param mergeData
+   * @param out
+   * @exception HTMLParseException
+   */
+       public static void process(HttpServletResponse res,String templateFilename,
+                                                                                                                TemplateModelRoot tmr, PrintWriter out, Locale locale)
+       throws HTMLParseException {
+               process(res,templateFilename,tmr,null,out,locale);
+                                                                                                                        
+       }
 
   /**
    * Mischt die freemarker-Struktur <code>tmr</code> mit
@@ -181,54 +209,73 @@ 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("");
-      }
-
-      // 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));
-
-      tmr.put("config", configHash);
-      tmpl.process(tmr, out);
-
-    }
+       public static void process(HttpServletResponse res,String templateFilename,
+                                                                                                                TemplateModelRoot tmr, TemplateModelRoot popups,
+                                                                                                                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("");
+               }
+
+               // put standard configuration into tempalteRootmodel
+               SimpleHash configHash = new SimpleHash();
+               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("productionHost", new SimpleScalar(productionHost));
+               configHash.put("videoHost", new SimpleScalar(videoHost));
+               configHash.put("audioHost", new SimpleScalar(audioHost));
+               configHash.put("imageHost", new SimpleScalar(imageHost));
+               configHash.put("mirVersion", new SimpleScalar(MirConfig.getProp("Mir.Version")));
+               // this conform to updated freemarker syntax
+               configHash.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
+               
+               SimpleHash outPutHash = new SimpleHash();
+                       
+               if(popups!=null){
+                       outPutHash.put("popups",popups);
+                       try{
+                       while(((SimpleList)popups).hasNext()){
+                               theLog.printDebugInfo(((SimpleList)popups).next().toString());
+                       }
+                       }catch(Exception e){}
+               }
+               outPutHash.put("data",tmr);
+               outPutHash.put("config", configHash);
+                       
+               MessageResources messages = MessageResources.getMessageResources("admin");
+               outPutHash.put("lang", new MessageMethodModel(locale, messages) );
+                       
+               tmpl.process(outPutHash,out);
+       }
 
 
   /**
    *   Converts Entity-List to SimpleList of SimpleHashes.
    *   @param aList ist eine Liste von Entity
    *   @return eine freemarker.template.SimpleList von SimpleHashes.
+   *
+   *    @deprecated EntityLists comply with TemplateListModel now.
    */
   public static SimpleList makeSimpleList(EntityList aList) throws StorageObjectException
   {
+    theLog.printWarning("## using deprecated makeSimpleList(entityList) - a waste of resources");
     SimpleList  simpleList = new SimpleList();
     if (aList != null) {
       for(int i=0;i<aList.size();i++) {
-        simpleList.add(makeSimpleHash(aList.elementAt(i)));
+        simpleList.add(aList.elementAt(i));
       }
     }
     return simpleList;
@@ -249,7 +296,7 @@ public final class HTMLTemplateProcessor {
     if (aList != null) {
       for (int i=0;i<aList.size();i++) {
          currentEntity = (Entity)aList.elementAt(i);
-         simpleHash.put(currentEntity.getId(), makeSimpleHash(currentEntity));
+         simpleHash.put(currentEntity.getId(), currentEntity);
       }
     }
     return simpleHash;
@@ -260,10 +307,16 @@ public final class HTMLTemplateProcessor {
    *  @param entity ist die Entity
    *  @return SimpleHash mit den entsprechenden freemarker Daten
    *
+   *  @deprecated This method is deprecated and will be deleted in the next
+   *  release. Entity interfaces freemarker.template.TemplateHashModel now
+   *  and can be used in the same way as SimpleHash. It is not necessary any
+   *  more to make a SimpleHash from an Entity
    */
   public static SimpleHash makeSimpleHash(Entity entity) {
-    if (entity != null)
+    if (entity != null) {
+      theLog.printWarning("## using deprecated makeSimpleHash(entity) - a waste of resources");
       return makeSimpleHash(entity.getValues());
+    }
     else
       return null;
   }
@@ -304,7 +357,7 @@ public final class HTMLTemplateProcessor {
   public static SimpleHash makeSimpleHashWithEntitylistInfos(EntityList entList) throws StorageObjectException {
     SimpleHash modelRoot = new SimpleHash();
     if (entList!=null) {
-      modelRoot.put("contentlist", makeSimpleList(entList));
+      modelRoot.put("contentlist", entList);
       modelRoot.put("count", new SimpleScalar((new Integer(entList.getCount())).toString()));
       if (entList.getWhere()!=null) {
         modelRoot.put("where", new SimpleScalar(entList.getWhere()));
@@ -333,11 +386,17 @@ public final class HTMLTemplateProcessor {
    */
   private static Template getTemplateFor(String templateFilename) throws HTMLParseException
   {
-    if (templateFilename!=null) return templateCache.getTemplate(templateFilename);
-    else {
+    Template returnTemplate = null;
+    if (templateFilename!=null)
+      returnTemplate = (Template)templateCache.getItem(templateFilename,"template");
+
+
+    if (returnTemplate==null) {
       theLog.printError("CACHE (ERR): Unknown template: " + templateFilename);
       throw new HTMLParseException("Templatefile: "+ templateFilename + " not found.");
     }
+
+    return returnTemplate;
   }
 
   public static void stopAutoUpdate(){