terminals are 80x24.
[mir.git] / source / mir / misc / HTMLTemplateProcessor.java
index 06597da..d2e224c 100755 (executable)
@@ -20,53 +20,60 @@ import javax.servlet.http.*;
  */
 public final class HTMLTemplateProcessor {
 
-    public static String                templateDir;
-    private static FileTemplateCache    templateCache;
-    private static Logfile              theLog;
-    private static String               docRoot;
-    private static String               actionRoot;
-    private static String               productionHost;
-    private static String               audioHost;
-    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");
-
-
-    //
-    // Initialisierung
-
-    static {
-      templateDir = MirConfig.getProp("Home") + MirConfig.getProp("HTMLTemplateProcessor.Dir");
-      templateCache = new FileTemplateCache(templateDir);
-      templateCache.setLoadingPolicy(templateCache.LOAD_ON_DEMAND);
-      templateCache.startAutoUpdate();
-      theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("HTMLTemplateProcessor.Logfile"));
-      docRoot = MirConfig.getProp("RootUri");
-      //quickhack: action-root is only for Mir!!!!, idfx
-      //actionRoot = docRoot + "/servlet/" + MirConfig.getProp("ServletName");
-      actionRoot = docRoot + "/servlet/Mir";
-      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");
-      producerDocRoot = MirConfig.getProp("Producer.DocRoot");
-      producerStorageRoot = MirConfig.getProp("Producer.StorageRoot");
-
-
-    }
+  public static String                templateDir;
+  private static FileTemplateCache    templateCache;
+  private static Logfile              theLog;
+  private static String               docRoot;
+  private static String               actionRoot;
+  private static String               productionHost;
+  private static String               audioHost;
+  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");
+
+
+  //
+  // init
+
+  static {
+
+    templateDir = MirConfig.getPropWithHome("HTMLTemplateProcessor.Dir");
+    templateCache = new FileTemplateCache(templateDir);
+    templateCache.setLoadingPolicy(templateCache.LOAD_ON_DEMAND);
+    // 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
+    // -mh
+    // 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.
+    // yeah, from my point too - tob.
+       //actionRoot = docRoot + "/servlet/" + MirConfig.getProp("ServletName");
+    //actionRoot = docRoot + "/servlet/NadirAktuell";
+
+    actionRoot = docRoot + "/servlet/Mir";
+
+    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");
+    producerDocRoot = MirConfig.getProp("Producer.DocRoot");
+    producerStorageRoot = MirConfig.getProp("Producer.StorageRoot");
+  }
 
   /**
-   * Privater Konstruktor, um versehentliche Instantiierung zu verhindern
+   * empty private constructor, to avoid instantiation
    */
-  private HTMLTemplateProcessor () {
-  }
+  private HTMLTemplateProcessor () { }
 
 
-    //
-    //  process-Methoden zum Mischen verschiedener Datenstrukturen mit HTML-Templates
+  // process-methods to merge different datastructures
+  // with freemarker templates
 
 
   /**
@@ -82,12 +89,12 @@ public final class HTMLTemplateProcessor {
 
     public static void process(String templateFilename, Entity anEntity, PrintWriter out)
       throws HTMLParseException {
-        if (anEntity == null)  throw new HTMLParseException("Entity leer!");
+        if (anEntity == null)  throw new HTMLParseException("entity is empty!");
         else process(templateFilename, anEntity, out);
     }
 
 
-      /**
+  /**
    * Wandelt Liste mit Entities <code>entList</code> in freemarker-Struktur um, mischt die Daten mit
    * Template <code>templateFilename</code> und gibt das Ergebnis an den PrintWriter
    * <code>out</code>
@@ -97,10 +104,10 @@ public final class HTMLTemplateProcessor {
    * @param out
    * @exception HTMLParseException
    */
-    public static void process(HttpServletResponse res,String templateFilename, EntityList entList, PrintWriter out)
+  public static void process(HttpServletResponse res,String templateFilename, EntityList entList, PrintWriter out)
       throws HTMLParseException {
-      process(res, templateFilename,  entList,  (String)null, (TemplateModelRoot)null,  out);
-    }
+    process(res, templateFilename,  entList,  (String)null, (TemplateModelRoot)null,  out);
+  }
 
   /**
    * Wandelt Entitylist in freemarker-Struktur um, fügt <code>additionalModel</code>
@@ -122,13 +129,12 @@ public final class HTMLTemplateProcessor {
       SimpleHash modelRoot = new SimpleHash();
 
       if (entList == null) {
-         //theLog.printInfo("Keine Daten! Suche erfolglos.");
          process(null,templateFilename, modelRoot, out);
       } else {
         try {
           modelRoot = makeSimpleHashWithEntitylistInfos(entList);
-          //
-          // Hilfskruecke um mal ein Popup mit reinzunhemen ..
+
+          // Quickhack um mal ein Popup mit reinzunhemen ..
           if (additionalModelName != null && additionalModel != null)
               modelRoot.put(additionalModelName, additionalModel);
 
@@ -145,7 +151,7 @@ public final class HTMLTemplateProcessor {
    * <code>out</code>
    *
    * @param templateFilename
-   * @param mergeData
+   * @param mergeData - a HashMap with mergeData to be converted in SimpleHash
    * @param out
    * @exception HTMLParseException
    */
@@ -181,12 +187,13 @@ public final class HTMLTemplateProcessor {
    */
     public static void process(HttpServletResponse res,String templateFilename, TemplateModelRoot tmr, PrintWriter out)
       throws HTMLParseException {
-      if (out==null) throw new HTMLParseException("KEIN OUTPUTSTREAM");
+      if (out==null) throw new HTMLParseException("no outputstream");
       Template tmpl = getTemplateFor(templateFilename);
-      if (tmpl == null) throw new HTMLParseException("KEIN TEMPLATE: " + templateFilename);
+      if (tmpl == null) throw new HTMLParseException("no template: " + templateFilename);
       if (tmr==null) tmr = new SimpleHash();
-      
-      String session=null;
+
+      /** @todo  what is this for? (rk) */
+      String session="";
       if (res!=null) {
         session=res.encodeURL("");
       }
@@ -216,16 +223,16 @@ public final class HTMLTemplateProcessor {
 
 
   /**
-   *   Wandelt eine Entity-Liste in eine SimpleList von SimpleHashes um.
+   *   Converts Entity-List to SimpleList of SimpleHashes.
    *   @param aList ist eine Liste von Entity
    *   @return eine freemarker.template.SimpleList von SimpleHashes.
    */
   public static SimpleList makeSimpleList(EntityList aList) throws StorageObjectException
   {
-    SimpleList      simpleList = new SimpleList();
+    SimpleList  simpleList = new SimpleList();
     if (aList != null) {
-      for(int i=0;i<aList.size();i++){
-        simpleList.add(makeSimpleHash(aList.elementAt(i)));
+      for(int i=0;i<aList.size();i++) {
+        simpleList.add(aList.elementAt(i));
       }
     }
     return simpleList;
@@ -246,7 +253,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;
@@ -257,16 +264,19 @@ 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) {
-        return makeSimpleHash(entity.getValues());
-      }
-      else {
-        //theLog.printWarning("Entity ist <null>");
-        return null;
-      }
+  public static SimpleHash makeSimpleHash(Entity entity) {
+    if (entity != null) {
+      theLog.printWarning("## using deprecated makeSimpleHash(entity) - a waste of resources");
+      return makeSimpleHash(entity.getValues());
     }
+    else
+      return null;
+  }
 
   /**
    *  Konvertiert ein Hashtable mit den keys und values als String
@@ -292,56 +302,63 @@ public final class HTMLTemplateProcessor {
 
 
   /**
-   * Wandelt EntityListe in SimpleHash um, und versieht die Liste mit StandardInfos,
-   * die aus EntityList kommen.
+   * Converts EntityList in SimpleHash and adds additional information
+   * to the returned SimpleHash
    *
    * @param entList
-   * @return SimpleHash mit Entity-Daten und ZusatzInfos.
+   * @return SimpleHash returns SimpleHash with the converted EntityList plus
+   *        additional Data about the list.
    * @exception StorageObjectException
    */
-    public static SimpleHash makeSimpleHashWithEntitylistInfos(EntityList entList) throws StorageObjectException {
-      SimpleHash modelRoot = new SimpleHash();
-      if (entList!=null) {
-                modelRoot.put("contentlist", makeSimpleList(entList));
-                modelRoot.put("count", new SimpleScalar((new Integer(entList.getCount())).toString()));
-          if (entList.getWhere()!=null) {
-            modelRoot.put("where", new SimpleScalar(entList.getWhere()));
-            modelRoot.put("where_encoded", new SimpleScalar(URLEncoder.encode(entList.getWhere())));
-          }
-
-          if(entList.getOrder()!=null) {
-            modelRoot.put("order", new SimpleScalar(entList.getOrder()));
-            modelRoot.put("order_encoded", new SimpleScalar(URLEncoder.encode(entList.getOrder())));
-          }
-          modelRoot.put("from", new SimpleScalar((new Integer(entList.getFrom())).toString()));
-          modelRoot.put("to", new SimpleScalar((new Integer(entList.getTo())).toString()));
-
-          if (entList.hasNextBatch())
-            modelRoot.put("next", new SimpleScalar((new Integer(entList.getNextBatch())).toString()));
-          if (entList.hasPrevBatch())
-            modelRoot.put("prev", new SimpleScalar((new Integer(entList.getPrevBatch())).toString()));
+
+  public static SimpleHash makeSimpleHashWithEntitylistInfos(EntityList entList) throws StorageObjectException {
+    SimpleHash modelRoot = new SimpleHash();
+    if (entList!=null) {
+      modelRoot.put("contentlist", makeSimpleList(entList));
+      modelRoot.put("count", new SimpleScalar((new Integer(entList.getCount())).toString()));
+      if (entList.getWhere()!=null) {
+        modelRoot.put("where", new SimpleScalar(entList.getWhere()));
+        modelRoot.put("where_encoded", new SimpleScalar(URLEncoder.encode(entList.getWhere())));
       }
-      return modelRoot;
+      if(entList.getOrder()!=null) {
+        modelRoot.put("order", new SimpleScalar(entList.getOrder()));
+        modelRoot.put("order_encoded", new SimpleScalar(URLEncoder.encode(entList.getOrder())));
+      }
+      modelRoot.put("from", new SimpleScalar((new Integer(entList.getFrom())).toString()));
+      modelRoot.put("to", new SimpleScalar((new Integer(entList.getTo())).toString()));
+
+      if (entList.hasNextBatch())
+        modelRoot.put("next", new SimpleScalar((new Integer(entList.getNextBatch())).toString()));
+      if (entList.hasPrevBatch())
+        modelRoot.put("prev", new SimpleScalar((new Integer(entList.getPrevBatch())).toString()));
     }
+    return modelRoot;
+  }
 
   /**
-   * Private Methode, um für templateFilename das Template zu bekommen.
+   * Private methods to get template from a templateFilename
    * @param templateFilename
    * @return Template
    * @exception HTMLParseException
    */
   private static Template getTemplateFor(String templateFilename) throws HTMLParseException
-    {
-      if (templateFilename!=null) return templateCache.getTemplate(templateFilename);
-      else {
-        theLog.printError("CACHE (ERR): Unknown template: " + templateFilename);
-        throw new HTMLParseException("Templatedatei: "+ templateFilename + " nicht gefunden!");
-      }
-    }
+  {
+    Template returnTemplate = null;
+    if (templateFilename!=null)
+      returnTemplate = templateCache.getTemplate(templateFilename);
 
 
-    public static void stopAutoUpdate(){
-      templateCache.stopAutoUpdate();
-      templateCache=null;
+    if (returnTemplate==null) {
+      theLog.printError("CACHE (ERR): Unknown template: " + templateFilename);
+      throw new HTMLParseException("Templatefile: "+ templateFilename + " not found.");
     }
+
+    return returnTemplate;
+  }
+
+  public static void stopAutoUpdate(){
+    templateCache.stopAutoUpdate();
+    templateCache=null;
+  }
+
 }