cleanup / abuse system fix / prepping for a release
[mir.git] / source / mircoders / global / ProducerEngine.java
index 3de07ea..201183a 100755 (executable)
@@ -41,6 +41,7 @@ import mir.log.LoggerToWriterAdapter;
 import mir.log.LoggerWrapper;
 import mir.producer.Producer;
 import mir.producer.ProducerFactory;
+import mir.producer.ProductionContext;
 import mir.util.GeneratorFormatAdapters;
 import mir.util.StringRoutines;
 
@@ -195,6 +196,7 @@ public class ProducerEngine {
     private String factoryName;
     private String verb;
     private Producer producer;
+    private ProductionContext productionContext;
 
     public ProducerJob(String aFactory, String aVerb) {
       factoryName = aFactory;
@@ -211,17 +213,17 @@ public class ProducerEngine {
     }
 
     public void abort() {
-      if (producer!=null) {
-        producer.abort();
+      if (producer!=null && productionContext!=null) {
+        producer.abort(productionContext);
       }
     }
 
     public boolean run() {
-      ProducerFactory factory;
+      final ProducerFactory factory;
       long startTime;
       long endTime;
       boolean result = false;
-      Map startingMap = new HashMap();
+      final Map startingMap = new HashMap();
       Map mirMap = new HashMap();
       mirMap.put("producer", factoryName);
       mirMap.put("verb", verb);
@@ -240,8 +242,43 @@ public class ProducerEngine {
           synchronized(factory) {
             producer = factory.makeProducer(verb, startingMap);
           }
+
           if (producer!=null) {
-            result = producer.produce(logger);
+            try {
+              MirGlobal.localizer().producers().beforeProducerTask(factoryName, verb);
+            }
+            catch (Throwable t) {
+              logger.warn("Misbehaving beforeProducerTask",t );
+            }
+
+            productionContext = new ProductionContext() {
+              public ProducerFactory getFactory() {
+                return factory;
+              }
+
+              public Producer getProducer() {
+                return producer;
+              }
+
+              public String getVerb() {
+                return verb;
+              }
+
+              public LoggerWrapper getLogger() {
+                return logger;
+              }
+
+              public Map getValueSet() {
+                return startingMap;
+              }
+            };
+            result = producer.execute(productionContext);
+            try {
+              MirGlobal.localizer().producers().afterProducerTask(factoryName, verb);
+            }
+            catch (Throwable t) {
+              logger.warn("Misbehaving afterProducerTask", t);
+            }
           }
         }
       }