1 package mircoders.producer;
\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 mir.util.StringRoutines;
\r
8 import mircoders.global.MirGlobal;
\r
10 import java.io.File;
\r
11 import java.io.FileNotFoundException;
\r
12 import java.io.FileOutputStream;
\r
13 import java.io.OutputStream;
\r
14 import java.io.OutputStreamWriter;
\r
15 import java.io.PrintWriter;
\r
16 import java.util.Collection;
\r
17 import java.util.HashMap;
\r
18 import java.util.Iterator;
\r
19 import java.util.List;
\r
20 import java.util.Map;
\r
22 public class ChangeReportingProducerNode extends AbstractProducerNode {
\r
23 private String format;
\r
24 private String outputFile;
\r
25 private String basePath;
\r
26 private String exclusionList;
\r
28 public ChangeReportingProducerNode(String anOutputFile, String aFormat, String aBasePath, String anExclusionList) {
\r
30 outputFile = anOutputFile;
\r
31 basePath = aBasePath;
\r
32 exclusionList = anExclusionList;
\r
35 public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) {
\r
37 File file = new File(ParameterExpander.expandExpression(aValueMap, outputFile));
\r
38 OutputStream stream = null;
\r
40 stream = new FileOutputStream(file, true);
\r
42 catch (FileNotFoundException e) {
\r
43 aLogger.error("Can't write open report file", e);
\r
49 PrintWriter writer = new PrintWriter(new OutputStreamWriter(stream));
\r
51 String expandedBasePath = ParameterExpander.expandExpression(aValueMap, basePath);
\r
53 List excludedPaths = null;
\r
54 if (exclusionList != null) {
\r
55 String expandedExclusionList = ParameterExpander.expandExpression(aValueMap, exclusionList);
\r
56 excludedPaths = StringRoutines.separateString(expandedExclusionList, ",");
\r
59 Collection changes = MirGlobal.getChangeEngine().getTracker().flushChanges(expandedBasePath, excludedPaths);
\r
61 Iterator i = changes.iterator();
\r
62 while (i.hasNext()) {
\r
63 ChangeTracker.Change change = (ChangeTracker.Change) i.next();
\r
65 Map changeMap = new HashMap();
\r
67 // the absolute path of the change needs to be transformed into a path relative
\r
69 changeMap.put("path", change.getPath().substring(expandedBasePath.length()));
\r
70 changeMap.put("type", change.getType().getName());
\r
71 changeMap.put("date", change.getDate());
\r
73 aValueMap.put("change", changeMap);
\r
74 String line = ParameterExpander.expandExpression(aValueMap, format);
\r
75 writer.println(line);
\r
82 catch (Throwable t) {
\r
83 aLogger.info("Can't close report file");
\r
91 catch (Throwable t) {
\r
92 aLogger.info("Can't close report file");
\r
96 catch (Throwable t) {
\r
97 aLogger.error("Error while writing change report file", t);
\r