import mir.producer.*;
public class CompositeProducerFactory implements ProducerFactory {
- Map factories; // verb -> Vector ( ProducerFactory )
+ private Map factories; // verb -> Vector ( ProducerFactory )
+ private List verbs;
+ private String name;
- public CompositeProducerFactory() {
+ public CompositeProducerFactory(String aName) {
factories = new HashMap();
+ verbs = new Vector();
+ name = aName;
}
- public CompositeProducerFactory(ProducerFactory[] aSubProducerFactories) {
- this();
+ public CompositeProducerFactory(String aName, ProducerFactory[] aSubProducerFactories) {
+ this(aName);
int i;
}
}
- private List factoriesForVerb(String aVerb) {
+ private List findFactoriesForVerb(String aVerb) {
+ List result = (List) factories.get(aVerb);
+
+ if (result==null)
+ result = new Vector();
+
+ return result;
+ }
+
+ private List factoriesForVerb(ProducerVerb aVerb) {
List result;
- result=(List) factories.get(aVerb);
+ result=(List) factories.get(aVerb.getName());
if (result==null) {
result=new Vector();
- factories.put(aVerb, result);
+ verbs.add(aVerb);
+ factories.put(aVerb.getName(), result);
}
return result;
i=aFactory.verbs();
while (i.hasNext()) {
- factoriesForVerb((String) i.next()).add(aFactory);
+ factoriesForVerb((ProducerVerb) i.next()).add(aFactory);
}
}
public mir.producer.Producer makeProducer(String aVerb, Map aBasicValueSet) throws ProducerExc, ProducerFailure {
CompositeProducer result = new CompositeProducer();
- Iterator i=factoriesForVerb(aVerb).iterator();
+ Iterator i=findFactoriesForVerb(aVerb).iterator();
while (i.hasNext())
result.addProducer(((ProducerFactory) i.next()).makeProducer(aVerb, aBasicValueSet));
}
public Iterator verbs() {
- return factories.keySet().iterator();
+ return verbs.iterator();
+ }
+
+ public String getName() {
+ return name;
}
}