default batch size included into the entity enumeration producer node
[mir.git] / source / mir / producer / EntityEnumeratingProducerNode.java
1 package mir.producer;
2
3 import java.util.*;
4 import java.io.*;
5 import mir.entity.adapter.*;
6 import mir.entity.*;
7 import mir.storage.*;
8 import mir.util.*;
9
10 public class EntityEnumeratingProducerNode extends ProducerNodeDecorator {
11   private Map verbs;
12   private EntityEnumeratingProducerNodeVerb defaultVerb;
13   private String key;
14   private EntityAdapterModel model;
15   private String definition;
16
17   public EntityEnumeratingProducerNode(
18                 String aKey,
19                 EntityAdapterModel aModel, String aDefinition,
20                 ProducerNode aSubNode) {
21
22     super(aSubNode);
23
24     defaultVerb = null;
25     verbs = new HashMap();
26     model = aModel;
27     definition = aDefinition;
28     key = aKey;
29   }
30
31   public EntityEnumeratingProducerNode(
32               String aKey,
33               EntityAdapterModel aModel, String aDefinition,
34               String aDefaultWhereClause, String aDefaultOrderByClause,
35               ProducerNode aSubNode) {
36     this(aKey, aModel, aDefinition, aSubNode);
37
38     defaultVerb = new EntityEnumeratingProducerNodeVerb(aDefaultWhereClause, aDefaultOrderByClause);
39   }
40
41   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
42     EntityEnumeratingProducerNodeVerb verb = (EntityEnumeratingProducerNodeVerb) verbs.get(aVerb);
43     Iterator browser;
44
45     if (verb==null)
46       verb = defaultVerb;
47
48     if (verb==null)
49       throw new ProducerFailure("EntityEnumeratingProducerNode: unknown verb '"+aVerb+"'", null);
50
51     try {
52       browser = new EntityIteratorAdapter(
53           ParameterExpander.expandExpression( aValueMap, verb.whereClause ),
54           ParameterExpander.expandExpression( aValueMap, verb.orderByClause ),
55           100,
56           model,
57           definition );
58
59       while (browser.hasNext()) {
60         aValueMap.put(key, browser.next());
61         super.produce(aValueMap, aVerb, aLogger);
62       }
63     }
64     catch (Throwable t) {
65       throw new ProducerFailure(t.getMessage(), t);
66     }
67   };
68
69   public Set buildVerbSet() {
70     Set set;
71
72     set = super.buildVerbSet();
73     set.addAll(verbs.keySet());
74
75     return set;
76   };
77
78   public void addVerb(String aVerb, String aWhereClause, String anOrderByClause) {
79     verbs.put(aVerb, new EntityEnumeratingProducerNodeVerb(aWhereClause, anOrderByClause));
80   }
81
82   private class EntityEnumeratingProducerNodeVerb {
83     String whereClause;
84     String orderByClause;
85
86     EntityEnumeratingProducerNodeVerb(String aWhereClause, String anOrderByClause) {
87       whereClause = aWhereClause;
88       orderByClause = anOrderByClause;
89     }
90   }
91 }