1 package mircoders.producer;
9 import mir.generator.*;
11 import mircoders.localizer.*;
12 import mircoders.global.*;
13 import mircoders.entity.*;
15 import org.apache.struts.util.MessageResources;
17 // @todo ML: the file that gets generated should be better configurable
19 public class ContentProducer implements mir.producer.Producer {
21 private String generatorIdentifier;
22 private String resourceBundle;
24 private String outputFilePrefix;
25 private String outputFilePostfix;
27 EntityBrowser browser;
29 public ContentProducer(
30 EntityBrowser aBrowser,
31 String aGeneratorIdentifier,
32 String aResourceBundle,
33 String anOutputFilePrefix,
34 String anOutputFilePostfix) {
37 generatorIdentifier=aGeneratorIdentifier;
38 resourceBundle=aResourceBundle;
39 outputFilePrefix=anOutputFilePrefix;
40 outputFilePostfix=anOutputFilePostfix;
43 public void produce( PrintWriter aLogger ) throws ProducerException {
44 EntityContent content;
46 Map configMap = new HashMap();
47 Map generationValues = new HashMap();
48 Map dataMap = new HashMap();
53 configMap.put("producerDocRoot", MirGlobal.getConfigProperty("Producer.DocRoot"));
54 configMap.put("storageRoot", MirGlobal.getConfigProperty("Producer.StorageRoot"));
55 configMap.put("productionHost", MirGlobal.getConfigProperty("Producer.ProductionHost"));
56 configMap.put("openAction", MirGlobal.getConfigProperty("Producer.OpenAction"));
57 configMap.put("docRoot", MirGlobal.getConfigProperty("RootUri"));
58 configMap.put("now", StringUtil.date2readableDateTime(new GregorianCalendar()));
59 configMap.put("videoHost", MirGlobal.getConfigProperty("Producer.Video.Host"));
60 configMap.put("audioHost", MirGlobal.getConfigProperty("Producer.Audio.Host"));
61 configMap.put("imageHost", MirGlobal.getConfigProperty("Producer.Image.Host"));
62 configMap.put("imagePath", MirGlobal.getConfigProperty("Producer.Image.Path"));
63 configMap.put("mirVersion", MirGlobal.getConfigProperty("Mir.Version"));
64 configMap.put("compressWhitespace", new freemarker.template.utility.CompressWhitespace() );
65 generationValues.put("config", configMap);
67 MessageResources messages = MessageResources.getMessageResources(resourceBundle);
68 generationValues.put("lang", new MessageMethodModel(null, messages) );
69 generationValues.put("data", dataMap);
74 Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);
76 aLogger.println("ContentProducer.produce:<br>");
77 aLogger.println("generatorIdentifier = " + generatorIdentifier + "<br>");
79 while (browser.hasNext()) {
80 content = (EntityContent) browser.next();
81 dataMap.put("content", content);
83 String date = content.getValue("date");
86 fileName = outputFilePrefix + "/" +
87 date.substring(0,4) + "/" + date.substring(4,6) + "/" +
88 content.getValue("id") + outputFilePostfix;
90 aLogger.println("fileName = " + fileName + "<br>");
91 aLogger.println("Yo1<br>");
94 File file = new File(fileName);
95 FileWriter fileWriter = new FileWriter(file);
96 PrintWriter printWriter = new PrintWriter(fileWriter);
98 aLogger.println("generating: " + fileName + "<br/>");
100 aLogger.println("Yo2<br>");
101 generator.generate(printWriter, generationValues, aLogger);
103 aLogger.println("Yo3<br>");
106 aLogger.println("Yo4<br>");
108 aLogger.println("Yo5<br>");
110 content.setProduced(true);
111 aLogger.println("Yo6<br>");
113 aLogger.println("done generating: " + fileName + "<br/>");
115 catch (Exception e) {
116 aLogger.println("exception while generating " + fileName + ":<br/>");
117 aLogger.println(e.getMessage() + "<br/>");
118 e.printStackTrace(aLogger);
123 catch (Exception e) {
124 aLogger.println("exception while generating:<br/>");
125 aLogger.println(e.getMessage() + "<br/>");
126 e.printStackTrace(aLogger);
130 aLogger.println("ContentProducer.produce: done<br>");