addition of the Change Reporting producer node
authorzapata <zapata>
Sat, 11 Nov 2006 16:16:14 +0000 (16:16 +0000)
committerzapata <zapata>
Sat, 11 Nov 2006 16:16:14 +0000 (16:16 +0000)
source/mir/changetracker/ChangeTracker.java
source/mircoders/producer/ChangeReportingProducerNode.java [new file with mode: 0644]
source/mircoders/producer/reader/SupplementalProducerNodeBuilders.java

index 41dca6f..16ff7b4 100644 (file)
@@ -96,7 +96,7 @@ public class ChangeTracker {
    * Returns a <code>Collection</code> of {@link Change}s within a base
    *     path, and removes them from the tracker.
    */
-  List flushChanges(String aBasePath) {
+  public List flushChanges(String aBasePath) {
     return flushChanges(aBasePath, new String[0]);
   }
 
@@ -105,7 +105,7 @@ public class ChangeTracker {
    *     path, exluding a list of excluded paths, and removes them from
    *     the tracker.
    */
-  List flushChanges(String aBasePath, String[] anExcludedPaths) {
+  public List flushChanges(String aBasePath, String[] anExcludedPaths) {
     synchronized (changes) {
       List result = getChanges(aBasePath, anExcludedPaths);
 
diff --git a/source/mircoders/producer/ChangeReportingProducerNode.java b/source/mircoders/producer/ChangeReportingProducerNode.java
new file mode 100644 (file)
index 0000000..3ebb3a5
--- /dev/null
@@ -0,0 +1,101 @@
+package mircoders.producer;\r
+\r
+import mir.producer.AbstractProducerNode;\r
+import mir.producer.ProducerFailure;\r
+import mir.log.LoggerWrapper;\r
+import mir.util.ParameterExpander;\r
+import mir.util.ExceptionRoutines;\r
+import mir.changetracker.ChangeTracker;\r
+\r
+import java.util.Map;\r
+import java.util.Vector;\r
+import java.util.Hashtable;\r
+import java.util.ArrayList;\r
+import java.util.Enumeration;\r
+import java.util.Collections;\r
+import java.util.Iterator;\r
+import java.util.Collection;\r
+import java.io.File;\r
+import java.io.OutputStream;\r
+import java.io.FileOutputStream;\r
+import java.io.Writer;\r
+import java.io.OutputStreamWriter;\r
+import java.io.FileNotFoundException;\r
+import java.io.IOException;\r
+\r
+import org.apache.xmlrpc.XmlRpcClient;\r
+import mircoders.global.MirGlobal;\r
+\r
+public class ChangeReportingProducerNode extends AbstractProducerNode {\r
+  private String format;\r
+  private String outputFile;\r
+  private String basePath;\r
+  private String baseUrl;\r
+  private String exclusionList;\r
+\r
+  public ChangeReportingProducerNode(String aFormat, String anOutputFile, String aBasePath, String aBaseUrl, String anExclusionList) {\r
+    format = aFormat;\r
+    outputFile = anOutputFile;\r
+    basePath = aBasePath;\r
+    baseUrl = aBaseUrl;\r
+    exclusionList = anExclusionList;\r
+  }\r
+\r
+  public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) {\r
+    try {\r
+      File file = new File(ParameterExpander.expandExpression(aValueMap, outputFile));\r
+      OutputStream stream = null;\r
+      try {\r
+        stream = new FileOutputStream(file);\r
+      }\r
+      catch (FileNotFoundException e) {\r
+        aLogger.error("Can't write open report file", e);\r
+\r
+        return;\r
+      }\r
+\r
+      try {\r
+        Writer writer = new OutputStreamWriter(stream);\r
+        try {\r
+          String expandedBasePath = ParameterExpander.expandExpression(aValueMap, outputFile);\r
+          Collection changes = MirGlobal.getChangeEngine().getTracker().flushChanges(expandedBasePath);\r
+\r
+          Iterator i = changes.iterator();\r
+          while (i.hasNext()) {\r
+            ChangeTracker.Change change = (ChangeTracker.Change) i.next();\r
+\r
+            aValueMap.put("change", change);\r
+            String line = ParameterExpander.expandExpression(aValueMap, format);\r
+            try {\r
+              writer.write(line);\r
+            }\r
+            catch (IOException e) {\r
+              aLogger.error("Can't write to report file", e);\r
+\r
+              return;\r
+            }\r
+          }\r
+        }\r
+        finally {\r
+          try {\r
+            writer.close();\r
+          }\r
+          catch (Throwable t) {\r
+            aLogger.info("Can't close report file");\r
+          }\r
+        }\r
+      }\r
+      finally {\r
+        try {\r
+          stream.close();\r
+        }\r
+        catch (Throwable t) {\r
+          aLogger.info("Can't close report file");\r
+        }\r
+      }\r
+    }\r
+    catch (Throwable t) {\r
+      aLogger.error("Error while writing change report file", t);\r
+    }\r
+  }\r
+}\r
index cd0604d..ffe5f75 100755 (executable)
@@ -45,6 +45,7 @@ import mircoders.producer.IndexingProducerNode;
 import mircoders.producer.MediaGeneratingProducerNode;
 import mircoders.producer.RadicalendarProducerNode;
 import mircoders.producer.UnIndexingProducerNode;
+import mircoders.producer.ChangeReportingProducerNode;
 
 
 public class SupplementalProducerNodeBuilders {
@@ -58,7 +59,7 @@ public class SupplementalProducerNodeBuilders {
     aBuilderLibrary.registerFactory("UnIndexContent", new ContentUnIndexingProducerNodeBuilder.factory(aBasePath));
     aBuilderLibrary.registerBuilder("Radicalendar", RadicalendarProducerNodeBuilder.class);
 
-    aBuilderLibrary.registerFactory("IndexContent", new ContentIndexingProducerNodeBuilder.factory(aBasePath));
+    aBuilderLibrary.registerFactory("ReportChanges", new ContentIndexingProducerNodeBuilder.factory(aBasePath));
   }
 
   private final static String MARKER_KEY_ATTRIBUTE = DefaultProducerNodeBuilders.KEY_ATTRIBUTE;
@@ -250,6 +251,34 @@ public class SupplementalProducerNodeBuilders {
     }
   }
 
+  public static class ChangeReportingProducerNodeBuilder extends DefaultProducerNodeBuilders.AbstractProducerNodeBuilder {
+    private final static String CHANGEREPORTING_FILE_ATTRIBUTE = "file";
+    private final static String CHANGEREPORTING_FORMAT_ATTRIBUTE = "format";
+    private final static String CHANGEREPORTING_BASEPATH_ATTRIBUTE = "basepath";
+    private final static String[] CHANGEREPORTING_REQUIRED_ATTRIBUTES = {CHANGEREPORTING_FILE_ATTRIBUTE,
+        CHANGEREPORTING_FORMAT_ATTRIBUTE, CHANGEREPORTING_BASEPATH_ATTRIBUTE};
+    private static final String[] CHANGEREPORTING_OPTIONAL_ATTRIBUTES = {};
+
+    private String file;
+    private String format;
+    private String basepath;
+
+    public ChangeReportingProducerNodeBuilder() {
+      super(new String[0]);
+    }
+
+    public void setAttributes(Map anAttributes) throws ProducerConfigExc, XMLParserExc {
+      XMLReaderTool.checkAttributes(anAttributes, CHANGEREPORTING_REQUIRED_ATTRIBUTES, CHANGEREPORTING_OPTIONAL_ATTRIBUTES);
+
+      file = (String) anAttributes.get(CHANGEREPORTING_FILE_ATTRIBUTE);
+      format = (String) anAttributes.get(CHANGEREPORTING_FORMAT_ATTRIBUTE);
+      basepath = (String) anAttributes.get(CHANGEREPORTING_BASEPATH_ATTRIBUTE);
+    }
+
+    public ProducerNode constructNode() {
+      return new ChangeReportingProducerNode(format, file, basepath, null, null);
+    }
+  }
 }