From: zapata Date: Sat, 11 Nov 2006 16:16:14 +0000 (+0000) Subject: addition of the Change Reporting producer node X-Git-Tag: LATEST_MERGED_1_1~32 X-Git-Url: http://erislabs.net/gitweb/?p=mir.git;a=commitdiff_plain;h=476798657423f3e1d4e41d434f4f401dd6735c74 addition of the Change Reporting producer node --- diff --git a/source/mir/changetracker/ChangeTracker.java b/source/mir/changetracker/ChangeTracker.java index 41dca6f3..16ff7b42 100644 --- a/source/mir/changetracker/ChangeTracker.java +++ b/source/mir/changetracker/ChangeTracker.java @@ -96,7 +96,7 @@ public class ChangeTracker { * Returns a Collection 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 index 00000000..3ebb3a5f --- /dev/null +++ b/source/mircoders/producer/ChangeReportingProducerNode.java @@ -0,0 +1,101 @@ +package mircoders.producer; + +import mir.producer.AbstractProducerNode; +import mir.producer.ProducerFailure; +import mir.log.LoggerWrapper; +import mir.util.ParameterExpander; +import mir.util.ExceptionRoutines; +import mir.changetracker.ChangeTracker; + +import java.util.Map; +import java.util.Vector; +import java.util.Hashtable; +import java.util.ArrayList; +import java.util.Enumeration; +import java.util.Collections; +import java.util.Iterator; +import java.util.Collection; +import java.io.File; +import java.io.OutputStream; +import java.io.FileOutputStream; +import java.io.Writer; +import java.io.OutputStreamWriter; +import java.io.FileNotFoundException; +import java.io.IOException; + +import org.apache.xmlrpc.XmlRpcClient; +import mircoders.global.MirGlobal; + +public class ChangeReportingProducerNode extends AbstractProducerNode { + private String format; + private String outputFile; + private String basePath; + private String baseUrl; + private String exclusionList; + + public ChangeReportingProducerNode(String aFormat, String anOutputFile, String aBasePath, String aBaseUrl, String anExclusionList) { + format = aFormat; + outputFile = anOutputFile; + basePath = aBasePath; + baseUrl = aBaseUrl; + exclusionList = anExclusionList; + } + + public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) { + try { + File file = new File(ParameterExpander.expandExpression(aValueMap, outputFile)); + OutputStream stream = null; + try { + stream = new FileOutputStream(file); + } + catch (FileNotFoundException e) { + aLogger.error("Can't write open report file", e); + + return; + } + + try { + Writer writer = new OutputStreamWriter(stream); + try { + String expandedBasePath = ParameterExpander.expandExpression(aValueMap, outputFile); + Collection changes = MirGlobal.getChangeEngine().getTracker().flushChanges(expandedBasePath); + + Iterator i = changes.iterator(); + while (i.hasNext()) { + ChangeTracker.Change change = (ChangeTracker.Change) i.next(); + + aValueMap.put("change", change); + String line = ParameterExpander.expandExpression(aValueMap, format); + try { + writer.write(line); + } + catch (IOException e) { + aLogger.error("Can't write to report file", e); + + return; + } + } + } + finally { + try { + writer.close(); + } + catch (Throwable t) { + aLogger.info("Can't close report file"); + } + } + } + finally { + try { + stream.close(); + } + catch (Throwable t) { + aLogger.info("Can't close report file"); + } + } + } + catch (Throwable t) { + aLogger.error("Error while writing change report file", t); + } + } +} diff --git a/source/mircoders/producer/reader/SupplementalProducerNodeBuilders.java b/source/mircoders/producer/reader/SupplementalProducerNodeBuilders.java index cd0604d1..ffe5f753 100755 --- a/source/mircoders/producer/reader/SupplementalProducerNodeBuilders.java +++ b/source/mircoders/producer/reader/SupplementalProducerNodeBuilders.java @@ -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); + } + } }