X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=source%2Fmir%2Fproducer%2FListEnumeratingProducerNode.java;h=731655e2ab0b852272c750db3d742aec31310a22;hb=b1e3d8e04d556e10831192d6dfed20e5cd871fd4;hp=0752c5751fdfa26d825b146fee8caea8e0b5700e;hpb=ea7b586e4ba74158c177c196ad27d9e8439437aa;p=mir.git diff --git a/source/mir/producer/ListEnumeratingProducerNode.java b/source/mir/producer/ListEnumeratingProducerNode.java index 0752c575..731655e2 100755 --- a/source/mir/producer/ListEnumeratingProducerNode.java +++ b/source/mir/producer/ListEnumeratingProducerNode.java @@ -29,13 +29,13 @@ */ package mir.producer; -import java.util.*; +import java.util.Collection; +import java.util.Iterator; import java.util.Map; -import mir.entity.adapter.EntityAdapterModel; -import mir.entity.adapter.EntityIteratorAdapter; import mir.log.LoggerWrapper; -import mir.util.*; +import mir.util.ParameterExpander; +import mir.util.RewindableIterator; public class ListEnumeratingProducerNode extends ProducerNodeDecorator { private String key; @@ -48,31 +48,36 @@ public class ListEnumeratingProducerNode extends ProducerNodeDecorator { listExpression = aListExpression; } - public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure, ProducerExc { + public void produce(ProductionContext aProductionContext) throws ProducerFailure, ProducerExc { Iterator browser; Object list; try { - list = ParameterExpander.evaluateExpression(aValueMap, listExpression); - if (list instanceof Collection) - browser = ((Collection) list).iterator(); - else if (list instanceof Iterator) - browser = (Iterator) list; - else - throw new ProducerExc("Can't enumarate a " + list.getClass().getName()); + list = ParameterExpander.evaluateExpression(aProductionContext.getValueSet(), listExpression); + if (list != null) { + if (list instanceof Collection) { + browser = ( (Collection) list).iterator(); + } + else if (list instanceof Iterator) { + browser = (Iterator) list; + } + else { + throw new ProducerExc("Can't enumarate a " + list.getClass().getName()); + } + if (browser instanceof RewindableIterator) { + ((RewindableIterator) browser).rewind(); + } - if (browser instanceof RewindableIterator) { - ((RewindableIterator) browser).rewind(); - } + while (browser.hasNext() && !isAborted(aProductionContext)) { + ParameterExpander.setValueForKey(aProductionContext.getValueSet(), key, browser.next()); - while (browser.hasNext() && !isAborted(aValueMap)) { - ParameterExpander.setValueForKey(aValueMap, key, browser.next()); - super.produce(aValueMap, aVerb, aLogger); + super.produce(aProductionContext); + } } } catch (Throwable t) { - aLogger.error("Exception occurred inside an ListEnumeratingProducerNode: " + t.getMessage()); + aProductionContext.getLogger().warn("Exception occurred inside an ListEnumeratingProducerNode", t); } - }; + } }