merge of localization branch into HEAD. mh and zap
[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 String limitExpression;
18   private String skipExpression;
19
20   public EntityListProducerNode(String aKey,
21       EntityAdapterModel aModel, String aDefinition,
22       String aWhereClause, String anOrderByClause,
23       String aLimitExpression, String aSkipExpression, ProducerNode aSubNode) {
24     super(aSubNode);
25
26     model = aModel;
27     definition = aDefinition;
28     key = aKey;
29     whereClause = aWhereClause;
30     orderByClause = anOrderByClause;
31     limitExpression = aLimitExpression;
32     skipExpression = aSkipExpression;
33   }
34
35   public EntityListProducerNode(String aKey,
36       EntityAdapterModel aModel, String aDefinition,
37       String aWhereClause, String anOrderByClause,
38       int aLimit, int aSkip, ProducerNode aSubNode) {
39     this(aKey,  aModel, aDefinition, aWhereClause, anOrderByClause,
40          Integer.toString(aLimit), Integer.toString(aSkip), aSubNode);
41   }
42
43   public void produce(Map aValueMap, String aVerb, PrintWriter aLogger) throws ProducerFailure {
44     try {
45       int limit = ParameterExpander.evaluateIntegerExpressionWithDefault(aValueMap, limitExpression, -1);
46       int skip = ParameterExpander.evaluateIntegerExpressionWithDefault(aValueMap, skipExpression, 0);
47
48       if (skipExpression != null && !skipExpression.trim().equals(""))
49         skip = ParameterExpander.evaluateIntegerExpression(aValueMap, skipExpression);
50
51       ParameterExpander.setValueForKey(
52         aValueMap,
53         key,
54         new CachingRewindableIterator(
55           new EntityIteratorAdapter(
56             ParameterExpander.expandExpression( aValueMap, whereClause ),
57             ParameterExpander.expandExpression( aValueMap, orderByClause ),
58             20,
59             model,
60             definition,
61             limit,
62             skip )
63         )
64       );
65       super.produce(aValueMap, aVerb, aLogger);
66     }
67     catch (Throwable t) {
68       throw new ProducerFailure(t.getMessage(), t);
69     }
70   };
71
72 }