39e3c1a2ea71fb68e291f06a83add0fb66e892cd
[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 EntityAdapterDefinition definition;
16   private StorageObject storage;
17   private int limit;
18   private int skip;
19
20   public EntityListProducerNode(String aKey, StorageObject aStorage,
21       EntityAdapterDefinition aDefinition, String aWhereClause, String anOrderByClause,
22       int aLimit, int aSkip, ProducerNode aSubNode) {
23     super(aSubNode);
24
25     storage = aStorage;
26     definition = aDefinition;
27     key = aKey;
28     whereClause = aWhereClause;
29     orderByClause = anOrderByClause;
30     limit = aLimit;
31     skip = aSkip;
32   }
33
34   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
35     try {
36       aValueMap.put(key,
37         new CachingRewindableIterator(
38           new EntityIteratorAdapter(
39             storage,
40             ParameterExpander.expandExpression( aValueMap, whereClause ),
41             ParameterExpander.expandExpression( aValueMap, orderByClause ),
42             20,
43             definition,
44             limit,
45             skip )
46         )
47       );
48       super.produce(aValueMap, aVerb, aLogger);
49     }
50     catch (Throwable t) {
51       throw new ProducerFailure(t.getMessage(), t);
52     }
53   };
54
55 }