merge of localization branch into HEAD. mh and zap
[mir.git] / source / mir / producer / reader / ScriptedProducerNode.java
1 package mir.producer.reader;
2
3 import java.util.*;
4 import java.io.*;
5 import mir.producer.*;
6 import mir.util.*;
7
8 public class ScriptedProducerNode implements ProducerNode {
9   private ScriptedProducerNodeDefinition definition;
10   private Map parameterValues;
11   private Map nodeParameterValues;
12
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);
19   }
20
21   public Set buildVerbSet() {
22     return new HashSet();
23   }
24
25   public void produce(Map aValues, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
26     try {
27       Map oldValues = ScriptedProducerNodeTool.saveMapValues(aValues, definition.getParameters().keySet());
28       try {
29         Iterator i = parameterValues.entrySet().iterator();
30
31         while (i.hasNext()) {
32           Map.Entry entry = (Map.Entry) i.next();
33
34           if (entry.getValue() instanceof String) {
35             aValues.put(entry.getKey(), ParameterExpander.expandExpression(aValues, (String) entry.getValue()));
36           }
37         }
38
39         ScriptedProducerNodeTool.pushNodeParameterValues(aValues, definition.getName(), nodeParameterValues);
40         try {
41           definition.getBody().produce(aValues, aVerb, aLogger);
42         }
43         finally {
44           ScriptedProducerNodeTool.popNodeParameterValues(aValues, definition.getName());
45         }
46       }
47       finally {
48         ScriptedProducerNodeTool.restoreMapValues(aValues, definition.getParameters().keySet(), oldValues);
49       }
50     }
51     catch (Exception e) {
52       throw new ProducerFailure(e);
53     }
54   }
55
56 }