/*
- * 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