change report is now appended instead of overwritten and new lines are added after...
[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.io.PrintWriter;\r
17 import java.util.Collection;\r
18 import java.util.Iterator;\r
19 import java.util.Map;\r
20 \r
21 public class ChangeReportingProducerNode extends AbstractProducerNode {\r
22   private String format;\r
23   private String outputFile;\r
24   private String basePath;\r
25   private String baseUrl;\r
26   private String exclusionList;\r
27 \r
28   public ChangeReportingProducerNode(String anOutputFile, String aFormat, String aBasePath, String aBaseUrl, String anExclusionList) {\r
29     format = aFormat;\r
30     outputFile = anOutputFile;\r
31     basePath = aBasePath;\r
32     baseUrl = aBaseUrl;\r
33     exclusionList = anExclusionList;\r
34   }\r
35 \r
36   public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) {\r
37     try {\r
38       File file = new File(ParameterExpander.expandExpression(aValueMap, outputFile));\r
39       OutputStream stream = null;\r
40       try {\r
41         stream = new FileOutputStream(file, true);\r
42       }\r
43       catch (FileNotFoundException e) {\r
44         aLogger.error("Can't write open report file", e);\r
45 \r
46         return;\r
47       }\r
48 \r
49       try {\r
50         PrintWriter writer = new PrintWriter(new OutputStreamWriter(stream));\r
51         try {\r
52           String expandedBasePath = ParameterExpander.expandExpression(aValueMap, basePath);\r
53           Collection changes = MirGlobal.getChangeEngine().getTracker().flushChanges(expandedBasePath);\r
54 \r
55           Iterator i = changes.iterator();\r
56           while (i.hasNext()) {\r
57             ChangeTracker.Change change = (ChangeTracker.Change) i.next();\r
58 \r
59             aValueMap.put("change", change);\r
60             String line = ParameterExpander.expandExpression(aValueMap, format);\r
61             writer.println(line);\r
62           }\r
63         }\r
64         finally {\r
65           try {\r
66             writer.close();\r
67           }\r
68           catch (Throwable t) {\r
69             aLogger.info("Can't close report file");\r
70           }\r
71         }\r
72       }\r
73       finally {\r
74         try {\r
75           stream.close();\r
76         }\r
77         catch (Throwable t) {\r
78           aLogger.info("Can't close report file");\r
79         }\r
80       }\r
81     }\r
82     catch (Throwable t) {\r
83       aLogger.error("Error while writing change report file", t);\r
84     }\r
85   }\r
86 }\r