- made a producer for startpages per topic
[mir.git] / source / mircoders / producer / ContentProducer.java
1 package mircoders.producer;
2
3 import java.io.*;
4 import java.util.*;
5
6 import mir.util.*;
7 import mir.misc.*;
8 import mir.entity.*;
9 import mir.producer.*;
10 import mir.generator.*;
11
12 import mircoders.localizer.*;
13 import mircoders.global.*;
14 import mircoders.entity.*;
15
16 import org.apache.struts.util.MessageResources;
17
18 // @todo ML: the file that gets generated should be better configurable
19
20 public class ContentProducer implements mir.producer.Producer {
21
22   private String generatorIdentifier;
23   private String resourceBundle;
24
25   private String outputFileExpression;
26
27
28   EntityBrowser browser;
29
30   public ContentProducer(
31     EntityBrowser aBrowser,
32     String aGeneratorIdentifier,
33     String aResourceBundle,
34     String anOutputFileExpression) {
35
36     browser = aBrowser;
37     generatorIdentifier = aGeneratorIdentifier;
38     resourceBundle = aResourceBundle;
39     outputFileExpression = anOutputFileExpression;
40   }
41
42   public void produce( PrintWriter aLogger ) throws ProducerException {
43     EntityContent content;
44
45     Map generationValues = new HashMap();
46     Map dataMap = new HashMap();
47     String fileName;
48
49     MirGlobal.localizer().producerTool().initializeGenerationValueSet(generationValues);
50
51                 MessageResources messages = MessageResources.getMessageResources(resourceBundle);
52                 generationValues.put("lang", new MessageMethodModel(null, messages) );
53                 generationValues.put("data", dataMap);
54
55     try {
56       Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);
57
58       aLogger.println("ContentProducer.produce:");
59       aLogger.println("generatorIdentifier = " + generatorIdentifier);
60
61       while (browser.hasNext()) {
62         content = (EntityContent) browser.next();
63         dataMap.put("content", content);
64
65         String date = content.getValue("date");
66
67       // ML: this will be done more elegantly soon!
68         dataMap.put("contentmonth", date.substring(4,6));
69         dataMap.put("contentyear", date.substring(0,4));
70         dataMap.put("contentid", content.getValue("id"));
71
72         aLogger.println("unparsed fileName = " + outputFileExpression);
73
74         fileName = ParameterExpander.expandExpression(dataMap, outputFileExpression);
75
76         aLogger.println("fileName = " + fileName);
77
78         try {
79           File file = new File(fileName);
80
81           File dir = new File(file.getParent());
82           if (!dir.exists()){
83             dir.mkdirs();
84           }
85
86           FileWriter fileWriter = new FileWriter(file);
87           PrintWriter printWriter = new PrintWriter(fileWriter);
88
89           aLogger.println("generating: " + fileName);
90
91           generator.generate(printWriter, generationValues, aLogger);
92           printWriter.close();
93           fileWriter.close();
94           content.setProduced(true);
95
96           aLogger.println("done generating: " + fileName);
97         }
98         catch (Exception e) {
99           aLogger.println("exception while generating " + fileName + ":");
100           aLogger.println(e.getMessage());
101           e.printStackTrace(aLogger);
102           aLogger.flush();
103         }
104       }
105     }
106     catch (Exception e) {
107       aLogger.println("exception while generating:");
108       aLogger.println(e.getMessage());
109       e.printStackTrace(aLogger);
110       aLogger.flush();
111     }
112
113     aLogger.println("ContentProducer.produce: done");
114
115   }
116
117 }