whoops
[mir.git] / source / mircoders / producer / ChangeReportingProducerNode.java
1 package mircoders.producer;\r
2 \r
3 import mir.changetracker.ChangeTracker;\r
4 import mir.log.LoggerWrapper;\r
5 import mir.producer.AbstractProducerNode;\r
6 import mir.util.ParameterExpander;\r
7 import mircoders.global.MirGlobal;\r
8 \r
9 import java.io.File;\r
10 import java.io.FileNotFoundException;\r
11 import java.io.FileOutputStream;\r
12 import java.io.IOException;\r
13 import java.io.OutputStream;\r
14 import java.io.OutputStreamWriter;\r
15 import java.io.Writer;\r
16 import java.util.Collection;\r
17 import java.util.Iterator;\r
18 import java.util.Map;\r
19 \r
20 public class ChangeReportingProducerNode extends AbstractProducerNode {\r
21   private String format;\r
22   private String outputFile;\r
23   private String basePath;\r
24   private String baseUrl;\r
25   private String exclusionList;\r
26 \r
27   public ChangeReportingProducerNode(String anOutputFile, String aFormat, String aBasePath, String aBaseUrl, String anExclusionList) {\r
28     format = aFormat;\r
29     outputFile = anOutputFile;\r
30     basePath = aBasePath;\r
31     baseUrl = aBaseUrl;\r
32     exclusionList = anExclusionList;\r
33   }\r
34 \r
35   public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) {\r
36     try {\r
37       File file = new File(ParameterExpander.expandExpression(aValueMap, outputFile));\r
38       OutputStream stream = null;\r
39       try {\r
40         stream = new FileOutputStream(file);\r
41       }\r
42       catch (FileNotFoundException e) {\r
43         aLogger.error("Can't write open report file", e);\r
44 \r
45         return;\r
46       }\r
47 \r
48       try {\r
49         Writer writer = new OutputStreamWriter(stream);\r
50         try {\r
51           String expandedBasePath = ParameterExpander.expandExpression(aValueMap, basePath);\r
52           Collection changes = MirGlobal.getChangeEngine().getTracker().flushChanges(expandedBasePath);\r
53 \r
54           Iterator i = changes.iterator();\r
55           while (i.hasNext()) {\r
56             ChangeTracker.Change change = (ChangeTracker.Change) i.next();\r
57 \r
58             aValueMap.put("change", change);\r
59             String line = ParameterExpander.expandExpression(aValueMap, format);\r
60             try {\r
61               writer.write(line);\r
62             }\r
63             catch (IOException e) {\r
64               aLogger.error("Can't write to report file", e);\r
65 \r
66               return;\r
67             }\r
68           }\r
69         }\r
70         finally {\r
71           try {\r
72             writer.close();\r
73           }\r
74           catch (Throwable t) {\r
75             aLogger.info("Can't close report file");\r
76           }\r
77         }\r
78       }\r
79       finally {\r
80         try {\r
81           stream.close();\r
82         }\r
83         catch (Throwable t) {\r
84           aLogger.info("Can't close report file");\r
85         }\r
86       }\r
87     }\r
88     catch (Throwable t) {\r
89       aLogger.error("Error while writing change report file", t);\r
90     }\r
91   }\r
92 }\r