rebuilding head
[mir.git] / source / mir / producer / EntityBatchingProducerNode.java
index 1aa17cd..aa0bf41 100755 (executable)
@@ -33,12 +33,13 @@ import java.util.HashMap;
 import java.util.Iterator;
 import java.util.List;
 import java.util.Map;
-import java.util.Vector;
+import java.util.ArrayList;
 
 import mir.entity.adapter.EntityAdapterModel;
 import mir.entity.adapter.EntityIteratorAdapter;
 import mir.log.LoggerWrapper;
 import mir.util.ParameterExpander;
+import mir.util.StringRoutines;
 
 /**
  * <p>Title: EntityBatchingProducerNode</p>
@@ -59,6 +60,8 @@ public class EntityBatchingProducerNode implements ProducerNode {
   private String batchInfoKey;
   private String batchDataKey;
   private EntityAdapterModel model;
+  private String mainTablePrefix;
+  private String extraTables;
   private String definition;
   private String whereClause;
   private String orderByClause;
@@ -73,6 +76,8 @@ public class EntityBatchingProducerNode implements ProducerNode {
         String aBatchDataKey,
         String aBatchInfoKey,
         EntityAdapterModel aModel,
+        String aMainTablePrefix,
+        String someExtraTables,
         String aDefinition,
         String aWhereClause,
         String anOrderByClause,
@@ -89,6 +94,8 @@ public class EntityBatchingProducerNode implements ProducerNode {
     batchDataKey = aBatchDataKey;
     batchInfoKey = aBatchInfoKey;
     model = aModel;
+    mainTablePrefix = aMainTablePrefix;
+    extraTables = someExtraTables;
     definition = aDefinition;
     whereClause = aWhereClause;
     orderByClause = anOrderByClause;
@@ -106,14 +113,12 @@ public class EntityBatchingProducerNode implements ProducerNode {
   }
 
   public void produce(Map aValueMap, String aVerb, LoggerWrapper aLogger) throws ProducerFailure {
-    Iterator browser;
     int nrEntities;
     int nrBatchesAfterFirst;
     int nrEntitiesInFirstBatch;
     int nrBatchesToProcess;
     List batchesData;
     int i;
-    int position;
     Map batchData;
     String expandedWhereClause;
     String expandedOrderByClause;
@@ -134,11 +139,13 @@ public class EntityBatchingProducerNode implements ProducerNode {
       nrEntitiesToSkip = ParameterExpander.evaluateIntegerExpression( aValueMap, nrEntitiesToSkipExpression);
       nrEntitiesPerBatch = ParameterExpander.evaluateIntegerExpression( aValueMap, nrEntitiesPerBatchExpression);
       minNrEntitiesInFirstBatch = ParameterExpander.evaluateIntegerExpression( aValueMap, minNrEntitiesInFirstBatchExpression);
+      List extraTableList = StringRoutines.splitString(ParameterExpander.expandExpression( aValueMap, extraTables).trim(), ",");
 
-      batchesData = new Vector();
-      batchLocations = new Vector();
+      batchesData = new ArrayList();
+      batchLocations = new ArrayList();
 
-      nrEntities = model.getMappingForName(definition).getStorage().getSize(expandedWhereClause)-nrEntitiesToSkip;
+      nrEntities = model.getMappingForName(definition).getStorage().getSize(
+          mainTablePrefix, extraTableList, expandedWhereClause)-nrEntitiesToSkip;
       nrEntitiesInFirstBatch = nrEntities % nrEntitiesPerBatch;
       while (nrEntitiesInFirstBatch<minNrEntitiesInFirstBatch && nrEntities-nrEntitiesInFirstBatch>=nrEntitiesPerBatch)
         nrEntitiesInFirstBatch = nrEntitiesInFirstBatch + nrEntitiesPerBatch;
@@ -190,9 +197,9 @@ public class EntityBatchingProducerNode implements ProducerNode {
           else
             batchData.put("next", null);
 
-          Iterator j = new EntityIteratorAdapter(expandedWhereClause, expandedOrderByClause,
+          Iterator j = new EntityIteratorAdapter(mainTablePrefix, extraTableList, expandedWhereClause, expandedOrderByClause,
                     location.nrEntities, model, definition, location.nrEntities, location.firstEntity);
-          List entities = new Vector();
+          List entities = new ArrayList();
 
           while (j.hasNext())
             entities.add(0, j.next());