1 package mir.producer.reader;
8 public class ScriptedProducerNode implements ProducerNode {
9 private ScriptedProducerNodeDefinition definition;
10 private Map parameterValues;
11 private Map nodeParameterValues;
13 public ScriptedProducerNode(ScriptedProducerNodeDefinition aDefinition, Map aParameterValues, Map aNodeParameterValues) {
14 definition = aDefinition;
15 parameterValues = new HashMap();
16 parameterValues.putAll(aParameterValues);
17 nodeParameterValues = new HashMap();
18 nodeParameterValues.putAll(aNodeParameterValues);
21 public Set buildVerbSet() {
25 public void produce(Map aValues, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
27 Map oldValues = ScriptedProducerNodeTool.saveMapValues(aValues, definition.getParameters().keySet());
29 Iterator i = parameterValues.entrySet().iterator();
32 Map.Entry entry = (Map.Entry) i.next();
34 if (entry.getValue() instanceof String) {
35 aValues.put(entry.getKey(), ParameterExpander.expandExpression(aValues, (String) entry.getValue()));
39 ScriptedProducerNodeTool.pushNodeParameterValues(aValues, definition.getName(), nodeParameterValues);
41 definition.getBody().produce(aValues, aVerb, aLogger);
44 ScriptedProducerNodeTool.popNodeParameterValues(aValues, definition.getName());
48 ScriptedProducerNodeTool.restoreMapValues(aValues, definition.getParameters().keySet(), oldValues);
52 throw new ProducerFailure(e);