whoops
[mir.git] / source / mircoders / global / ProducerEngine.java
index 60a399e..694fed9 100755 (executable)
@@ -45,6 +45,7 @@ import mir.util.GeneratorFormatAdapters;
 import mir.util.StringRoutines;
 import multex.Exc;
 import multex.Failure;
+import mircoders.localizer.MirLocalizerExc;
 
 public class ProducerEngine {
   private JobQueue producerJobQueue;
@@ -56,8 +57,24 @@ 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) {
@@ -68,18 +85,10 @@ public class ProducerEngine {
     producerJobQueue.cancelAllJobs();
   };
 
-  public void addTask(ProducerTask aTask) {
+  public void addTask(ProducerTask aTask) throws ProducerEngineExc, ProducerEngineFailure {
     addJob(aTask.getProducer(), aTask.getVerb());
   }
 
-  public void addTasks(List aTasks) {
-    Iterator i = aTasks.iterator();
-
-    while (i.hasNext()) {
-      addTask((ProducerTask) i.next());
-    }
-  }
-
   private String convertStatus(JobQueue.JobInfo aJob) {
     switch (aJob.getStatus()) {
       case JobQueue.STATUS_ABORTED:
@@ -209,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);
     }
   }