whoops
[mir.git] / source / mircoders / global / ProducerEngine.java
index 6c6f282..694fed9 100755 (executable)
@@ -36,18 +36,18 @@ import java.util.List;
 import java.util.Map;
 import java.util.Vector;
 
+import mir.config.MirPropertiesConfiguration;
 import mir.log.LoggerToWriterAdapter;
 import mir.log.LoggerWrapper;
 import mir.producer.Producer;
 import mir.producer.ProducerFactory;
-import mir.util.*;
-import mir.config.*;
+import mir.util.GeneratorFormatAdapters;
 import mir.util.StringRoutines;
 import multex.Exc;
 import multex.Failure;
+import mircoders.localizer.MirLocalizerExc;
 
 public class ProducerEngine {
-//  private Map producers;
   private JobQueue producerJobQueue;
   private LoggerWrapper logger;
 
@@ -57,24 +57,36 @@ public class ProducerEngine {
     producerJobQueue = new JobQueue(new LoggerWrapper("Producer.Queue"));
   }
 
-  public void addJob(String aProducerFactory, String aVerb) {
-    producerJobQueue.appendJob(new ProducerJob(aProducerFactory, aVerb), aProducerFactory+"."+aVerb);
+  public void addJob(String aProducerFactory, String aVerb) throws ProducerEngineExc, ProducerEngineFailure {
+    ProducerFactory factory;
+
+    try {
+      factory = MirGlobal.localizer().producers().getFactoryForName( aProducerFactory );
+    }
+    catch (MirLocalizerExc e) {
+      throw new ProducerEngineFailure(e);
+    }
+
+    if (factory==null)
+      throw new ProducerEngineExc("Unknown producer: " + aProducerFactory);
+
+    if (!factory.allowVerb(aVerb))
+      throw new ProducerEngineExc("illegal producer/verb combination: " + aProducerFactory+"::"+aVerb);
+
+    producerJobQueue.appendJob(
+        new ProducerJob(aProducerFactory, aVerb), aProducerFactory+"."+aVerb);
   }
 
   public void cancelJobs(List aJobs) {
     producerJobQueue.cancelJobs(aJobs);
   };
 
-  public void addTask(ProducerTask aTask) {
-    addJob(aTask.getProducer(), aTask.getVerb());
-  }
-
-  public void addTasks(List aTasks) {
-    Iterator i = aTasks.iterator();
+  public void cancelAllJobs() {
+    producerJobQueue.cancelAllJobs();
+  };
 
-    while (i.hasNext()) {
-      addTask((ProducerTask) i.next());
-    }
+  public void addTask(ProducerTask aTask) throws ProducerEngineExc, ProducerEngineFailure {
+    addJob(aTask.getProducer(), aTask.getVerb());
   }
 
   private String convertStatus(JobQueue.JobInfo aJob) {
@@ -162,6 +174,11 @@ public class ProducerEngine {
       long endTime;
       boolean result = false;
       Map startingMap = new HashMap();
+      Map mirMap = new HashMap();
+      mirMap.put("producer", factoryName);
+      mirMap.put("verb", verb);
+
+      startingMap.put("Mir", mirMap);
 
       startTime = System.currentTimeMillis();
       logger.info("Producing job: "+factoryName+"."+verb);
@@ -201,8 +218,12 @@ public class ProducerEngine {
     }
   }
 
-  public static class ProducerEngineRuntimeExc extends Failure {
-    public ProducerEngineRuntimeExc(String msg, Exception cause){
+  public static class ProducerEngineFailure extends Failure {
+    public ProducerEngineFailure(Throwable aCause){
+      super(aCause.getMessage(), aCause);
+    }
+
+    public ProducerEngineFailure(String msg, Exception cause){
       super(msg,cause);
     }
   }