whoops, didn't notice cvs found a version conflict...
[mir.git] / source / mircoders / producer / ContentProducer.java
1 package mircoders.producer;\r
2 \r
3 import java.io.*;\r
4 import java.util.*;\r
5 \r
6 import mir.misc.*;\r
7 import mir.entity.*;\r
8 import mir.producer.*;\r
9 import mir.generator.*;\r
10 \r
11 import mircoders.localizer.*;\r
12 import mircoders.global.*;\r
13 import mircoders.entity.*;\r
14 \r
15 import org.apache.struts.util.MessageResources;\r
16 \r
17 // @todo ML: the file that gets generated should be better configurable\r
18 \r
19 public class ContentProducer implements mir.producer.Producer {\r
20 \r
21   private String generatorIdentifier;\r
22   private String resourceBundle;\r
23 \r
24   private String outputFilePrefix;\r
25   private String outputFilePostfix;\r
26 \r
27   EntityBrowser browser;\r
28 \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
35 \r
36     browser = aBrowser;\r
37     generatorIdentifier=aGeneratorIdentifier;\r
38     resourceBundle=aResourceBundle;\r
39     outputFilePrefix=anOutputFilePrefix;\r
40     outputFilePostfix=anOutputFilePostfix;\r
41   }\r
42 \r
43   public void produce( PrintWriter aLogger ) throws ProducerException {\r
44     EntityContent content;\r
45 \r
46     Map configMap = new HashMap();\r
47     Map generationValues = new HashMap();\r
48     Map dataMap = new HashMap();\r
49     String fileName;\r
50 \r
51 \r
52 \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
66 \r
67                 MessageResources messages = MessageResources.getMessageResources(resourceBundle);\r
68                 generationValues.put("lang", new MessageMethodModel(null, messages) );\r
69                 generationValues.put("data", dataMap);\r
70 \r
71 \r
72 \r
73     try {\r
74       Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);\r
75 \r
76       aLogger.println("ContentProducer.produce:<br>");\r
77       aLogger.println("generatorIdentifier = " + generatorIdentifier + "<br>");\r
78 \r
79       while (browser.hasNext()) {\r
80         content = (EntityContent) browser.next();\r
81         dataMap.put("content", content);\r
82 \r
83         String date = content.getValue("date");\r
84 \r
85         fileName = outputFilePrefix + "/" +\r
86                 date.substring(0,4) + "/" + date.substring(4,6) + "/" +\r
87                 content.getValue("id") + outputFilePostfix;\r
88 \r
89         aLogger.println("fileName = " + fileName + "<br>");\r
90 \r
91         try {\r
92           File file = new File(fileName);\r
93 \r
94           File dir = new File(file.getParent());\r
95           if (!dir.exists()){\r
96             dir.mkdirs();\r
97           }\r
98 \r
99           FileWriter fileWriter = new FileWriter(file);\r
100           PrintWriter printWriter = new PrintWriter(fileWriter);\r
101 \r
102           aLogger.println("generating: " + fileName + "<br/>");\r
103 \r
104           generator.generate(printWriter, generationValues, aLogger);\r
105           printWriter.close();\r
106           fileWriter.close();\r
107           content.setProduced(true);\r
108 \r
109           aLogger.println("done generating: " + fileName + "<br/>");\r
110         }\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
115           aLogger.flush();\r
116         }\r
117       }\r
118     }\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
123       aLogger.flush();\r
124     }\r
125 \r
126     aLogger.println("ContentProducer.produce: done<br>");\r
127 \r
128   }\r
129 \r
130 }\r