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