cleanup / abuse system fix / prepping for a release
[mir.git] / source / mir / entity / EntityBrowser.java
index 2e829c5..03855fd 100755 (executable)
@@ -1,5 +1,5 @@
 /*
- * Copyright (C) 2001, 2002  The Mir-coders group
+ * Copyright (C) 2001, 2002 The Mir-coders group
  *
  * This file is part of Mir.
  *
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
  *
  * In addition, as a special exception, The Mir-coders gives permission to link
- * the code of this program with the com.oreilly.servlet library, any library
- * licensed under the Apache Software License, The Sun (tm) Java Advanced
- * Imaging library (JAI), The Sun JIMI library (or with modified versions of
- * the above that use the same license as the above), and distribute linked
- * combinations including the two.  You must obey the GNU General Public
- * License in all respects for all of the code used other than the above
- * mentioned libraries.  If you modify this file, you may extend this exception
- * to your version of the file, but you are not obligated to do so.  If you do
- * not wish to do so, delete this exception statement from your version.
+ * the code of this program with  any library licensed under the Apache Software License,
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
+ * (or with modified versions of the above that use the same license as the above),
+ * and distribute linked combinations including the two.  You must obey the
+ * GNU General Public License in all respects for all of the code used other than
+ * the above mentioned libraries.  If you modify this file, you may extend this
+ * exception to your version of the file, but you are not obligated to do so.
+ * If you do not wish to do so, delete this exception statement from your version.
  */
 
-package mir.entity;\r
-\r
-import mir.storage.StorageObject;
-import mir.storage.StorageObjectFailure;
+package mir.entity;
+
+import java.util.List;
+
+import mir.storage.Database;
+import mir.storage.DatabaseFailure;
+import mir.storage.DatabaseExc;
 import mir.util.RewindableIterator;
-\r
-public class EntityBrowser implements RewindableIterator {\r
-\r
-  private StorageObject storage;\r
-  private String whereClause;\r
-  private String orderByClause;\r
-  private int batchSize;\r
-  private int toFetch;\r
-  private EntityList currentBatch;\r
-\r
-  private int skip;\r
-  private int limit;\r
-\r
-  private int batchPosition;\r
-  private int positionInBatch;\r
-\r
-  public EntityBrowser(StorageObject aStorage, String aWhereClause, String anOrderByClause,\r
-                       int aBatchSize, int aLimit, int aSkip) throws StorageObjectFailure {\r
-\r
-    storage=aStorage;\r
-    whereClause=aWhereClause;\r
-    orderByClause=anOrderByClause;\r
-    batchSize=aBatchSize;\r
-    skip=aSkip;\r
-    limit=aLimit;\r
-\r
-    rewind();\r
-  }\r
-\r
-  public EntityBrowser(StorageObject aStorage,\r
-          String aWhereClause, String anOrderByClause,\r
-          int aBatchSize) throws StorageObjectFailure {\r
-    this(aStorage, aWhereClause, anOrderByClause, aBatchSize, -1, 0);\r
-  }\r
-\r
-  public void readCurrentBatch(int aSkip) throws StorageObjectFailure {\r
-    currentBatch = storage.selectByWhereClause(whereClause, orderByClause, aSkip, batchSize);\r
-    batchPosition = aSkip;\r
-    positionInBatch = 0;\r
-  }\r
-\r
-  public void rewind() {\r
-    try {\r
-      readCurrentBatch(skip);\r
-    }\r
-    catch (Throwable t) {\r
-      throw new RuntimeException(t.getMessage());\r
-    }\r
-  }\r
-\r
-  public boolean hasNext() {\r
-    try {\r
-      if (limit>-1 && batchPosition+positionInBatch>=skip+limit)\r
-        return false;\r
-\r
-      if (positionInBatch>=currentBatch.size() && currentBatch.hasNextBatch()) {\r
-        readCurrentBatch(batchPosition+positionInBatch);\r
-      }\r
-\r
-      return (positionInBatch<currentBatch.size());\r
-    }\r
-    catch (Throwable t) {\r
-      throw new RuntimeException(t.getMessage());\r
-    }\r
-  }\r
-\r
-  public Object next() {\r
-    try {\r
-      if (hasNext()) {\r
-        Entity result = currentBatch.elementAt(positionInBatch);\r
-        positionInBatch=positionInBatch+1;\r
-\r
-        return result;\r
-      }\r
-      else {\r
-        return null;\r
-      }\r
-    }\r
-    catch (Throwable t) {\r
-      throw new RuntimeException(t.getMessage());\r
-    }\r
-  }\r
-\r
-  public void remove() {\r
-    throw new UnsupportedOperationException();\r
-  }\r
+import multex.Failure;
+
+public class EntityBrowser implements RewindableIterator {
+
+  private Database database;
+  private String mainTablePrefix;
+  private List extraTables;
+  private String whereClause;
+  private String orderByClause;
+  private int batchSize;
+  private EntityList currentBatch;
+
+  private int skip;
+  private int limit;
+
+  private int batchPosition;
+  private int positionInBatch;
+
+  public EntityBrowser(Database aDatabase, String aMainTablePrefix, List someExtraTables,
+     String aWhereClause, String anOrderByClause,
+     int aBatchSize, int aLimit, int aSkip) throws DatabaseFailure {
+
+    database=aDatabase;
+    mainTablePrefix=aMainTablePrefix;
+    extraTables=someExtraTables;
+    whereClause=aWhereClause;
+    orderByClause=anOrderByClause;
+    batchSize=aBatchSize;
+    skip=aSkip;
+    limit=aLimit;
+
+    rewind();
+  }
+
+  public EntityBrowser(Database aDatabase, String aWhereClause, String anOrderByClause,
+                       int aBatchSize, int aLimit, int aSkip) throws DatabaseFailure {
+    this(aDatabase, "", null, aWhereClause, anOrderByClause, aBatchSize, aLimit, aSkip);
+  }
+
+  public EntityBrowser(Database aDatabase,
+          String aWhereClause, String anOrderByClause,
+          int aBatchSize) throws DatabaseFailure {
+    this(aDatabase, aWhereClause, anOrderByClause, aBatchSize, -1, 0);
+  }
+
+  public void readCurrentBatch(int aSkip) throws DatabaseExc, DatabaseFailure {
+    currentBatch = database.selectByWhereClause(mainTablePrefix, extraTables,
+        whereClause, orderByClause, aSkip, batchSize);
+    batchPosition = aSkip;
+    positionInBatch = 0;
+  }
+
+  public void rewind() {
+    try {
+      readCurrentBatch(skip);
+    }
+    catch (Throwable t) {
+      throw new Failure("Error while rewinding", t);
+    }
+  }
+
+  public boolean hasNext() {
+    try {
+      if (limit>-1 && batchPosition+positionInBatch>=skip+limit)
+        return false;
+
+      if (positionInBatch>=currentBatch.size() && currentBatch.hasNextBatch()) {
+        readCurrentBatch(batchPosition+positionInBatch);
+      }
+
+      return (positionInBatch<currentBatch.size());
+    }
+    catch (Throwable t) {
+      throw new RuntimeException(t.getMessage());
+    }
+  }
+
+  public Object next() {
+    try {
+      if (hasNext()) {
+        Entity result = currentBatch.elementAt(positionInBatch);
+        positionInBatch=positionInBatch+1;
+
+        return result;
+      }
+                       return null;
+    }
+    catch (Throwable t) {
+      throw new RuntimeException(t.getMessage());
+    }
+  }
+
+  public void remove() {
+    throw new UnsupportedOperationException();
+  }
 }
\ No newline at end of file