bugfixes mainly...
[mir.git] / source / mircoders / global / ProducerEngine.java
index 55c4944..1fb9e60 100755 (executable)
@@ -8,16 +8,18 @@ import multex.Exc;
 import multex.Failure;
 
 public class ProducerEngine {
-  private Map producers;
+//  private Map producers;
   private JobQueue producerJobQueue;
   private Thread queueThread;
   private PrintWriter log;
 
   protected ProducerEngine() {
-    producers = MirGlobal.localizer().producers().factories();
+//    producers = MirGlobal.localizer().producers().factories();
     producerJobQueue = new JobQueue();
     try {
-               log = new PrintWriter(new FileWriter( (new RandomAccessFile(MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Producer.Logfile"), "rw")).getFD()));
+      RandomAccessFile raFile = (new RandomAccessFile(MirGlobal.getConfigProperty("Home") + "/" + MirGlobal.getConfigProperty("Producer.Logfile"), "rw"));
+                        raFile.seek(raFile.length());
+                log = new PrintWriter(new FileWriter( raFile.getFD()));
     }
     catch (Exception e) {
 //      throw new ProducerEngineRuntimeExc("Creating PrintWriter log failed",e);
@@ -35,33 +37,51 @@ public class ProducerEngine {
   }
 
   public void printQueueStatus(PrintWriter aWriter) {
-
+    Iterator iterator = producerJobQueue.makeJobListSnapshot().iterator();
+    producerJobQueue.cleanupJobs();
+    JobQueue.Job job;
+
+    while (iterator.hasNext()) {
+      job = (JobQueue.Job) iterator.next();
+      ProducerJob producerJob = (ProducerJob) job.getData();
+
+      aWriter.print(producerJob.factoryName + "." + producerJob.verb);
+      if (job.hasBeenProcessed())
+        aWriter.print(" processed");
+      else if (job.isProcessing())
+        aWriter.print(" processing");
+      else if (job.isPending())
+        aWriter.print(" pending");
+      else
+        aWriter.print(" unknown status");
+
+      aWriter.println("<br/>");
+    }
   }
 
   private void produceNow(String aProducerFactory, String aVerb, PrintWriter aLogger) {
     try {
-                 long startTime;
-                 long endTime;
+      long startTime;
+      long endTime;
+      Map startingMap = new HashMap();
 
-                 startTime = System.currentTimeMillis();
+      startTime = System.currentTimeMillis();
 
-      aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")<br>");
+      aLogger.println("Producing (" + aProducerFactory + "," + aVerb + ")");
 
-      if (producers == null)
-        aLogger.println("??<br>");
-
-      ProducerFactory factory = (ProducerFactory) producers.get(aProducerFactory);
+      ProducerFactory factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get(aProducerFactory);
 
       if (factory == null )
         throw new Exception("No producer factory '"+aProducerFactory+"' present.");
 
-      Producer producer = factory.makeProducer(aVerb);
+      MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(startingMap);
+      Producer producer = factory.makeProducer(aVerb, startingMap);
 
       producer.produce(aLogger);
 
-                 endTime = System.currentTimeMillis();
+      endTime = System.currentTimeMillis();
 
-                 aLogger.println("Time: " + (endTime-startTime) + " ms<br>");
+      aLogger.println("Time: " + (endTime-startTime) + " ms<br>");
     }
     catch (Throwable e) {
       try {
@@ -86,18 +106,21 @@ public class ProducerEngine {
     public void execute() {
       ProducerFactory factory;
       Producer producer;
-                 long startTime;
-                 long endTime;
+      long startTime;
+      long endTime;
+      Map startingMap = new HashMap();
 
-                 startTime = System.currentTimeMillis();
+      startTime = System.currentTimeMillis();
       log.println("Producing job: "+factoryName+"."+verb);
 
       try {
-        factory = (ProducerFactory) producers.get(factoryName);
+        factory = (ProducerFactory) MirGlobal.localizer().producers().factories().get( factoryName );
 
         if (factory!=null) {
+          MirGlobal.localizer().producerAssistant().initializeGenerationValueSet(startingMap);
+
           synchronized(factory) {
-            producer = factory.makeProducer(verb);
+            producer = factory.makeProducer(verb, startingMap);
           }
           if (producer!=null) {
             producer.produce(log);
@@ -109,10 +132,10 @@ public class ProducerEngine {
         t.printStackTrace(log);
       }
       log.println("Done producing job: "+factoryName+"."+verb);
-                 endTime = System.currentTimeMillis();
+                  endTime = System.currentTimeMillis();
 
-                 log.println("Time: " + (endTime-startTime) + " ms");
-                 log.flush();
+                  log.println("Time: " + (endTime-startTime) + " ms");
+                  log.flush();
     }
   }