yet another rewrite of the producers...
[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 import mircoders.entity.adapter.*;
16
17 import org.apache.struts.util.MessageResources;
18
19 public class ContentProducer implements mir.producer.Producer {
20
21   private String generatorIdentifier;
22   private String resourceBundle;
23
24   private String outputFileExpression;
25
26
27   EntityBrowser browser;
28
29   public ContentProducer(
30     EntityBrowser aBrowser,
31     String aGeneratorIdentifier,
32     String aResourceBundle,
33     String anOutputFileExpression) {
34
35     browser = aBrowser;
36     generatorIdentifier = aGeneratorIdentifier;
37     resourceBundle = aResourceBundle;
38     outputFileExpression = anOutputFileExpression;
39   }
40
41   public void produce( PrintWriter aLogger ) throws ProducerFailure {
42     EntityContent content;
43
44     Map generationValues = new HashMap();
45     Map dataMap = new HashMap();
46     String fileName;
47
48     MirGlobal.localizer().producerTool().initializeGenerationValueSet(generationValues);
49
50                 MessageResources messages = MessageResources.getMessageResources(resourceBundle);
51                 generationValues.put("lang", new MessageMethodModel(null, messages) );
52                 generationValues.put("data", dataMap);
53
54     try {
55       Generator generator = MirGlobal.localizer().generators().makeGenerator(generatorIdentifier);
56
57       aLogger.println("ContentProducer.produce:");
58       aLogger.println("generatorIdentifier = " + generatorIdentifier);
59
60       while (browser.hasNext()) {
61         content = (EntityContent) browser.next();
62         dataMap.put("content", ContentAdapterDefinition.getInstance().makeEntityAdapter(content));
63
64         String date = content.getValue("date");
65
66       // ML: this will be done more elegantly soon!
67         dataMap.put("contentmonth", date.substring(4,6));
68         dataMap.put("contentyear", date.substring(0,4));
69         dataMap.put("contentid", content.getValue("id"));
70
71         aLogger.println("unparsed fileName = " + outputFileExpression);
72
73         fileName = ParameterExpander.expandExpression(dataMap, outputFileExpression);
74
75         aLogger.println("fileName = " + fileName);
76
77         try {
78           aLogger.println("generating: " + fileName);
79
80           PrintWriter printWriter = MirGlobal.localizer().producerTool().openWriter(fileName);
81
82           generator.generate(printWriter, generationValues, aLogger);
83
84           MirGlobal.localizer().producerTool().closeWriter(printWriter);
85
86           content.setProduced(true);
87
88           aLogger.println("done generating: " + fileName);
89         }
90         catch (Exception e) {
91           aLogger.println("exception while generating " + fileName + ":");
92           aLogger.println(e.getMessage());
93           e.printStackTrace(aLogger);
94           aLogger.flush();
95         }
96       }
97     }
98     catch (Exception e) {
99       aLogger.println("exception while generating:");
100       aLogger.println(e.getMessage());
101       e.printStackTrace(aLogger);
102       aLogger.flush();
103     }
104
105     aLogger.println("ContentProducer.produce: done");
106
107   }
108
109 }