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;
}
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) {
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());
}
}
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());
+ }
}
}