From 8ce2916cdb3aee99920da6dc3500ea4efffbf221 Mon Sep 17 00:00:00 2001 From: zapata Date: Mon, 22 Apr 2002 19:29:19 +0000 Subject: [PATCH] some new producer related files added --- source/mir/generator/FreemarkerGenerator.java | 135 ++++++++++++++++++++++++++ source/mir/generator/Generator.java | 8 ++ source/mir/generator/GeneratorException.java | 4 + source/mir/producer/Producer.java | 8 ++ source/mir/producer/ProducerException.java | 8 ++ source/mir/producer/ProducerFactory.java | 9 ++ source/mir/producer/ProducerQueue.java | 0 7 files changed, 172 insertions(+) create mode 100755 source/mir/generator/FreemarkerGenerator.java create mode 100755 source/mir/generator/Generator.java create mode 100755 source/mir/generator/GeneratorException.java create mode 100755 source/mir/producer/Producer.java create mode 100755 source/mir/producer/ProducerException.java create mode 100755 source/mir/producer/ProducerFactory.java create mode 100755 source/mir/producer/ProducerQueue.java diff --git a/source/mir/generator/FreemarkerGenerator.java b/source/mir/generator/FreemarkerGenerator.java new file mode 100755 index 00000000..aeab5244 --- /dev/null +++ b/source/mir/generator/FreemarkerGenerator.java @@ -0,0 +1,135 @@ +package mir.generator; + +import freemarker.template.*; +import mir.entity.*; +import java.util.*; +import java.io.*; + +public class FreemarkerGenerator implements Generator { + private Template template; + + public FreemarkerGenerator(Template aTemplate) { + template = aTemplate; + } + + public void generate(PrintWriter anOutputWriter, Map aValues, PrintWriter aLogger) throws GeneratorException { + aLogger.println("processing...
"); + template.process((TemplateModelRoot) makeMapAdapter(aValues), anOutputWriter); + aLogger.println("processed...
"); + } + + private static TemplateScalarModel makeStringAdapter(String aString) { + return new SimpleScalar(aString); + } + + private static TemplateHashModel makeMapAdapter(Map aMap) { + return new MapAdapter(aMap); + } + + private static TemplateListModel makeListAdapter(List aList) { + return new ListAdapter(aList); + } + + private static TemplateModel makeAdapter(Object anObject) { + if (anObject == null) + return null; + if (anObject instanceof TemplateModel) + return (TemplateModel) anObject; + if (anObject instanceof String) + return makeStringAdapter((String) anObject); + else if (anObject instanceof Map) + return makeMapAdapter((Map) anObject); + else if (anObject instanceof List) + return makeListAdapter((List) anObject); + else + return null; + } + + private static class MapAdapter implements TemplateModelRoot { + Map map; + Map valuesCache; + + private MapAdapter(Map aMap) { + map = aMap; + valuesCache = new HashMap(); + } + + public void put(String aKey, TemplateModel aModel) { + valuesCache.put(aKey, aModel); + } + + public void remove(String aKey) { + // ML: kinda tricky... + } + + public boolean isEmpty() { + return map.isEmpty(); + } + + 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); + } + } + + private static class ListAdapter implements TemplateListModel { + List list; + List valuesCache; + int position; + + private ListAdapter(List aList) { + list = aList; + valuesCache = new Vector(); + position=0; + } + + public boolean isEmpty() { + return list.isEmpty(); + } + + public TemplateModel get(int i) { + + if (i>=valuesCache.size() && i