merge of localization branch into HEAD. mh and zap
[mir.git] / source / mir / producer / reader / ScriptedProducerFactory.java
1 package mir.producer.reader;
2
3 import java.util.*;
4 import mir.producer.*;
5
6 public class ScriptedProducerFactory implements ProducerFactory {
7   private Map verbs;
8   private ProducerNode body;
9   private String defaultVerb;
10
11   public ScriptedProducerFactory(Map aVerbs, ProducerNode aBody, String aDefaultVerb) {
12     verbs = aVerbs;
13     body = aBody;
14     defaultVerb = aDefaultVerb;
15   }
16
17   public ScriptedProducerFactory(Map aVerbs, ProducerNode aBody) {
18     this(aVerbs, aBody, null);
19   }
20
21   public Producer makeProducer(String aVerb, Map aStartingValues) throws ProducerFailure, ProducerExc {
22     CompositeProducerNode rootNode;
23     ProducerNode verbNode;
24
25     if (verbs.containsKey(aVerb)) {
26       verbNode = (ProducerNode) verbs.get(aVerb);
27     }
28     else if (defaultVerb!=null && verbs.containsKey(defaultVerb)) {
29       verbNode = (ProducerNode) verbs.get(defaultVerb);
30     }
31     else throw new ProducerExc("Undefined verb: " + aVerb);
32
33     rootNode = new CompositeProducerNode();
34     rootNode.addSubNode(verbNode);
35     rootNode.addSubNode(body);
36
37     return new NodedProducer(rootNode, aVerb, aStartingValues);
38   };
39
40   public Iterator verbs() {
41     return verbs.keySet().iterator();
42   }
43 }