X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=source%2Fmircoders%2Fglobal%2FProducerEngine.java;h=694fed9dadd7eb184073ca1fc220b11bd89f5994;hb=8b91e8d8bf4a31a88440a404e83238dcf32f8f4a;hp=6c6f2826e6fdf739e2ddc2dfd1bb2a80852d0883;hpb=3beba5fd39a5d60ba5b87064ddf11dea30b78413;p=mir.git diff --git a/source/mircoders/global/ProducerEngine.java b/source/mircoders/global/ProducerEngine.java index 6c6f2826..694fed9d 100755 --- a/source/mircoders/global/ProducerEngine.java +++ b/source/mircoders/global/ProducerEngine.java @@ -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); } }