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