merge of localization branch into HEAD. mh and zap
[mir.git] / source / mir / producer / CompositeProducerNode.java
diff --git a/source/mir/producer/CompositeProducerNode.java b/source/mir/producer/CompositeProducerNode.java
new file mode 100755 (executable)
index 0000000..503a87d
--- /dev/null
@@ -0,0 +1,58 @@
+package mir.producer;
+
+import java.util.*;
+import java.io.*;
+
+public class CompositeProducerNode implements ProducerNode {
+  private List subNodes;
+
+  public CompositeProducerNode() {
+    subNodes = new Vector();
+  }
+
+  public CompositeProducerNode(ProducerNode[] aSubNodes) {
+    this();
+
+    int i;
+
+    for (i=0; i<aSubNodes.length; i++) {
+      addSubNode(aSubNodes[i]);
+    }
+  }
+
+  public int getNrSubNodes() {
+    return subNodes.size();
+  }
+
+  public ProducerNode getSubNode(int anIndex) {
+    return (ProducerNode) subNodes.get(anIndex);
+  }
+
+  public void addSubNode(ProducerNode aSubNode) {
+    if (aSubNode!=null)
+      subNodes.add(aSubNode);
+  }
+
+  public void clear() {
+    subNodes.clear();
+  }
+
+  public void produce(Map aValueSet, String aVerb, PrintWriter aLogger) throws ProducerFailure, ProducerExc {
+    Iterator i = subNodes.iterator();
+
+    while (i.hasNext()) {
+      ProducerNode node = (ProducerNode) i.next();
+      node.produce(aValueSet, aVerb, aLogger);
+    }
+  }
+
+  public Set buildVerbSet() {
+    Iterator i = subNodes.iterator();
+    Set result = new HashSet();
+
+    while (i.hasNext())
+      result.addAll(((ProducerNode) i.next()).buildVerbSet());
+
+    return result;
+  }
+}
\ No newline at end of file