indy.nl updates
[mir.git] / source / mir / generator / FreemarkerGenerator.java
index da383aa..15147c8 100755 (executable)
@@ -5,6 +5,8 @@ import java.io.*;
 import freemarker.template.*;
 import mir.entity.*;
 import mir.util.*;
+import mir.misc.*;
+import org.apache.struts.util.MessageResources;
 
 public class FreemarkerGenerator implements Generator {
   private Template template;
@@ -14,9 +16,13 @@ public class FreemarkerGenerator implements Generator {
   }
 
   public void generate(PrintWriter anOutputWriter, Map aValues, PrintWriter aLogger) throws GeneratorException {
-    aLogger.println("processing...<br/>");
-               template.process((TemplateModelRoot) makeMapAdapter(aValues), anOutputWriter);
-    aLogger.println("processed...<br/>");
+    try {
+                 template.process((TemplateModelRoot) makeMapAdapter(aValues), anOutputWriter);
+    }
+    catch (Throwable t) {
+      aLogger.println("Exception occurred: "+t.getMessage());
+      t.printStackTrace(aLogger);
+    }
        }
 
   private static TemplateScalarModel makeStringAdapter(String aString) {
@@ -36,12 +42,16 @@ public class FreemarkerGenerator implements Generator {
            return null;
          if (anObject instanceof TemplateModel)
            return (TemplateModel) anObject;
-         if (anObject instanceof String)
+         else if (anObject instanceof MessageResources)
+           return new MessageMethodModel((MessageResources) anObject);
+         else if (anObject instanceof String)
            return makeStringAdapter((String) anObject);
          else if (anObject instanceof Map)
            return makeMapAdapter((Map) anObject);
          else if (anObject instanceof Iterator)
            return makeIteratorAdapter((Iterator) anObject);
+         else if (anObject instanceof List)
+           return makeIteratorAdapter(((List) anObject).iterator());
          else
            throw new TemplateModelException("Unadaptable class: " + anObject.getClass().getName());
        }
@@ -68,16 +78,24 @@ public class FreemarkerGenerator implements Generator {
          }
 
          public TemplateModel get(String aKey) throws TemplateModelException {
-           if (!valuesCache.containsKey(aKey)) {
-             Object value = map.get(aKey);
-
-             if (value == null)
-               throw new TemplateModelException("MapAdapter: no key "+aKey+" available");
-
-             valuesCache.put(aKey, makeAdapter(value));
-           }
-
-           return (TemplateModel) valuesCache.get(aKey);
+           try {
+           if (!valuesCache.containsKey(aKey)) {
+             Object value = map.get(aKey);
+
+        if (value == null && !map.containsKey(aKey))
+            throw new TemplateModelException("MapAdapter: no key "+aKey+" available");
+
+             valuesCache.put(aKey, makeAdapter(value));
+           }
+
+           return (TemplateModel) valuesCache.get(aKey);
+         }
+         catch (TemplateModelException e) {
+           throw e;
+         }
+         catch (Throwable t) {
+           throw new TemplateModelException(t.getMessage());
+         }
          }
        }