producer XML configuration support: Producers can be set up using an XML input
[mir.git] / source / mir / producer / EntityListProducerNode.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 EntityListProducerNode extends ProducerNodeDecorator {
11   private String key;
12   private String whereClause;
13   private String orderByClause;
14   private int batchSize;
15   private EntityAdapterModel model;
16   private String definition;
17   private int limit;
18   private int skip;
19
20   public EntityListProducerNode(String aKey,
21       EntityAdapterModel aModel, String aDefinition,
22       String aWhereClause, String anOrderByClause,
23       int aLimit, int aSkip, ProducerNode aSubNode) {
24     super(aSubNode);
25
26     model = aModel;
27     definition = aDefinition;
28     key = aKey;
29     whereClause = aWhereClause;
30     orderByClause = anOrderByClause;
31     limit = aLimit;
32     skip = aSkip;
33   }
34
35   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
36     try {
37       ParameterExpander.setValueForKey(
38         aValueMap,
39         key,
40         new CachingRewindableIterator(
41           new EntityIteratorAdapter(
42             ParameterExpander.expandExpression( aValueMap, whereClause ),
43             ParameterExpander.expandExpression( aValueMap, orderByClause ),
44             20,
45             model,
46             definition,
47             limit,
48             skip )
49         )
50       );
51       super.produce(aValueMap, aVerb, aLogger);
52     }
53     catch (Throwable t) {
54       throw new ProducerFailure(t.getMessage(), t);
55     }
56   };
57
58 }