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