bugfixes regarding automatically producing all media after a posting
[mir.git] / source / mircoders / producer / CompositeProducerFactory.java
1 package mircoders.producer;
2
3 import java.util.*;
4 import mir.entity.*;
5 import mir.producer.*;
6
7 public class CompositeProducerFactory implements ProducerFactory {
8   Map factories;          // verb -> Vector ( ProducerFactory )
9
10   public CompositeProducerFactory() {
11     factories = new HashMap();
12   }
13
14   public CompositeProducerFactory(ProducerFactory[] aSubProducerFactories) {
15     this();
16
17     int i;
18
19     for (i=0; i<aSubProducerFactories.length; i++) {
20       addFactory(aSubProducerFactories[i]);
21     }
22   }
23
24   private List factoriesForVerb(String aVerb) {
25     List result;
26
27     result=(List) factories.get(aVerb);
28
29     if (result==null) {
30       result=new Vector();
31
32       factories.put(aVerb, result);
33     }
34
35     return result;
36   }
37
38   public void addFactory(ProducerFactory aFactory) {
39     Iterator i;
40
41     i=aFactory.verbs();
42
43     while (i.hasNext()) {
44       factoriesForVerb((String) i.next()).add(aFactory);
45     }
46   }
47
48   public mir.producer.Producer makeProducer(String aVerb) throws ProducerFailure {
49     CompositeProducer result = new CompositeProducer();
50
51     Iterator i=factoriesForVerb(aVerb).iterator();
52
53     while (i.hasNext())
54       result.addProducer(((ProducerFactory) i.next()).makeProducer(aVerb));
55
56     return result;
57   }
58
59   public Iterator verbs() {
60     return factories.keySet().iterator();
61   }
62 }