-/*
- * Copyright (C) 2001, 2002 The Mir-coders group
- *
- * This file is part of Mir.
- *
- * Mir is free software; you can redistribute it and/or modify
- * it under the terms of the GNU General Public License as published by
- * the Free Software Foundation; either version 2 of the License, or
- * (at your option) any later version.
- *
- * Mir is distributed in the hope that it will be useful,
- * but WITHOUT ANY WARRANTY; without even the implied warranty of
- * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
- * GNU General Public License for more details.
- *
- * You should have received a copy of the GNU General Public License
- * along with Mir; if not, write to the Free Software
- * 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.
- */
-
-package mir.entity;
-
-import java.lang.*;
-import java.util.*;
-
-import freemarker.template.*;
-
-import mir.misc.*;
-import mir.storage.*;
-import mir.storage.store.*;
-
-/**
- *
- * Container class for lists of Entities.
- * Now implements freemarker.template.TemplateListModel
- * and @see mir.storage.store.StorableObject.
- *
- * @author <RK>
- * first version 27.6.1999
- *
- * @version 1.0 (freemarker compliant & and storable in ObjectStore)
- */
-public class EntityList implements TemplateListModel, StorableObject {
-
- private static Logfile theLog;
- private ArrayList theEntityArrayList = new ArrayList();
- private String whereClause, orderClause;
- private StorageObject theStorage;
- private int count, offset, limit;
- private int offsetnext = -1, offsetprev = -1;
- private int freemarkerListPointer=-1;
-
-
- static {
- theLog = Logfile.getInstance(MirConfig.getProp("Home") + MirConfig.getProp("Entity.Logfile"));
- }
-
- /**
- * Constructor.
- */
- public EntityList(){ }
-
-/* get/set EntityClass of Objects stored in EntityList */
- public void setStorage(StorageObject storage) { this.theStorage=storage; }
- public StorageObject getStorage() { return theStorage; }
-
- public void setLimit(int limit) { this.limit = limit; }
-
- /**
- * Sets the WHERE clause that fetched the Entities of this EntityList from the database.
- * @param wc The string that contains the WHERE clause
- */
- public void setWhere(String wc) {
- this.whereClause = wc;
- }
-
- /**
- * Returns the WHERE clause that returned this EntityList from the database
- * @return whereClause The WHERE clause
- */
- public String getWhere() {
- return whereClause;
- }
-
-
- /**
- * Sets the sorting criterium of this EntityList
- * @param oc
- */
- public void setOrder(String oc) {
- this.orderClause = oc;
- }
-
- /**
- * Returns the sorting criterium.
- * @return orderClause The sort order
- */
- public String getOrder() {
- return orderClause;
- }
-
- /**
- * Sets the number of rows that match the WHERE clause
- * @param i The number of rows that match the WHERE clause
- */
- public void setCount(int i) {
- this.count = i;
- }
-
- /**
- * Returns the number of rows that match the WHERE clause
- * @return The number of rows ...
- */
- public int getCount() {
- return count;
- }
-
- /**
- * Sets the offset
- * @param i The offset
- */
- public void setOffset(int i) {
- offset = i;
- }
-
- /**
- * Returns the offset
- * @return offset
- */
- public int getOffset() {
- return offset;
- }
-
- /**
- * Sets the offset of the next batch of Entities.
- * @param i The next offset
- */
- public void setNextBatch(int i) {
- offsetnext = i;
- }
-
- /**
- * Returns the offset of the next batch of Entities.
- * @return offset of the next batch
- */
- public int getNextBatch() {
- return offsetnext;
- }
-
- /**
- * Returns whether there is a next batch within the WHERE clause
- * @return true if yes, false if no.
- */
- public boolean hasNextBatch() {
- return (offsetnext >= 0);
- }
-
- /**
- * Sets the offset of the previous batch.
- * @param i the previous offset
- */
- public void setPrevBatch(int i) {
- offsetprev = i;
- }
-
- /**
- * Returns the offset of the previous batch.
- * @return offset of the previous batch
- */
- public int getPrevBatch() {
- return offsetprev;
- }
-
- /**
- * Returns whether there is a previous batch.
- * @return true if yes, false if no
- */
- public boolean hasPrevBatch() {
- return (offsetprev >= 0);
- }
-
- /**
- * Returns the start index of the batch.
- * @return
- */
- public int getFrom() {
- return offset+1;
- }
-
- /**
- * Returns the end index of the batch.
- * @return
- */
- public int getTo() {
- if (hasNextBatch())
- return offsetnext;
- else
- return count;
- }
-
- /**
- * Inserts an Entity into the EntityList.
- * @param anEntity The entity to be inserted.
- */
-
- public void add (Entity anEntity) {
- if (anEntity!=null)
- theEntityArrayList.add(anEntity);
- else
- theLog.printWarning("EntityList: add called with empty Entity");
- }
-
-
- /**
- * @return The number of Entities in the EntityList.
- */
-
- public int size() {
- return theEntityArrayList.size();
- }
-
-
- /**
- * Returns the element at position i in the EntityList as Entity
- * @param i the position of the element in question
- * @return The element at position i.
- */
-
- public Entity elementAt(int i) {
- /** @todo check if i is in list.size() */
- return (Entity)theEntityArrayList.get(i);
- }
-
-
-// The following methods have to be implemented
-// for this class to be an implementation of the
-// TemplateListModel of the Freemarker packages
-
- public TemplateModel get(int i) { return elementAt(i); }
- public boolean isRewound() { return (freemarkerListPointer==-1) ? true : false; }
- public void rewind() { freemarkerListPointer=-1; }
-
- public TemplateModel next() {
- if (hasNext()) {
- freemarkerListPointer++;return get(freemarkerListPointer); }
- else return null;
- }
-
-
- /**
- * Returns whether there is a next element
- * @return true if there is a next element, else false
- */
-
- public boolean hasNext() {
- return theEntityArrayList.size()>0 && freemarkerListPointer+2<=theEntityArrayList.size();
- }
-
-
- /**
- * Returns whether EntityList is empty or not
- * @return true in case of empty list, false otherwise
- */
-
- public boolean isEmpty() {
- if (theEntityArrayList!=null)
- return theEntityArrayList.size()<1 ;
- else return false;
- }
-
-
-// Methods to implement StorableObject
-
- public Set getNotifyOnReleaseSet() { return null; }
-
- public StoreIdentifier getStoreIdentifier() {
- if ( theStorage!=null ) {
- return
- new StoreIdentifier( this, StoreContainerType.STOC_TYPE_ENTITYLIST,
- StoreUtil.getEntityListUniqueIdentifierFor( theStorage.getTableName(),
- whereClause, orderClause, offset, limit ));
- }
- theLog.printWarning("EntityList could not return StoreIdentifier");
- return null;
- }
-
-}
+/*\r
+ * Copyright (C) 2001, 2002 The Mir-coders group\r
+ *\r
+ * This file is part of Mir.\r
+ *\r
+ * Mir is free software; you can redistribute it and/or modify\r
+ * it under the terms of the GNU General Public License as published by\r
+ * the Free Software Foundation; either version 2 of the License, or\r
+ * (at your option) any later version.\r
+ *\r
+ * Mir is distributed in the hope that it will be useful,\r
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of\r
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the\r
+ * GNU General Public License for more details.\r
+ *\r
+ * You should have received a copy of the GNU General Public License\r
+ * along with Mir; if not, write to the Free Software\r
+ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA\r
+ *\r
+ * In addition, as a special exception, The Mir-coders gives permission to link\r
+ * the code of this program with any library licensed under the Apache Software License,\r
+ * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library\r
+ * (or with modified versions of the above that use the same license as the above),\r
+ * and distribute linked combinations including the two. You must obey the\r
+ * GNU General Public License in all respects for all of the code used other than\r
+ * the above mentioned libraries. If you modify this file, you may extend this\r
+ * exception to your version of the file, but you are not obligated to do so.\r
+ * If you do not wish to do so, delete this exception statement from your version.\r
+ */\r
+package mir.entity;\r
+\r
+import java.util.ArrayList;\r
+import java.util.Set;\r
+\r
+import mir.config.MirPropertiesConfiguration;\r
+import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;\r
+import mir.log.LoggerWrapper;\r
+import mir.storage.StorageObject;\r
+import mir.storage.store.StorableObject;\r
+import mir.storage.store.StoreContainerType;\r
+import mir.storage.store.StoreIdentifier;\r
+import mir.storage.store.StoreUtil;\r
+\r
+/**\r
+ *\r
+ * Container class for lists of Entities.\r
+ * Now implements @see mir.storage.store.StorableObject.\r
+ *\r
+ * @author <RK>\r
+ * first version 27.6.1999\r
+ *\r
+ * @version 1.1 (cleaned up)\r
+ */\r
+public class EntityList implements StorableObject {\r
+ protected static MirPropertiesConfiguration configuration;\r
+ protected LoggerWrapper logger;\r
+ private ArrayList theEntityArrayList = new ArrayList();\r
+ private String whereClause, orderClause;\r
+ private StorageObject theStorage;\r
+ private int count, offset, limit;\r
+ private int offsetnext = -1, offsetprev = -1;\r
+\r
+ static {\r
+ try {\r
+ configuration = MirPropertiesConfiguration.instance();\r
+ }\r
+ catch (PropertiesConfigExc e) {\r
+ throw new RuntimeException("Unable to get configuration: " + e.getMessage());\r
+ }\r
+ }\r
+\r
+ /**\r
+ * Constructor.\r
+ */\r
+ public EntityList(){\r
+ logger = new LoggerWrapper("Entity.List");\r
+ }\r
+\r
+/* get/set EntityClass of Objects stored in EntityList */\r
+ public void setStorage(StorageObject storage) { this.theStorage=storage; }\r
+ public StorageObject getStorage() { return theStorage; }\r
+\r
+ public void setLimit(int limit) { this.limit = limit; }\r
+\r
+ /**\r
+ * Sets the WHERE clause that fetched the Entities of this EntityList from the database.\r
+ * @param wc The string that contains the WHERE clause\r
+ */\r
+ public void setWhere(String wc) {\r
+ this.whereClause = wc;\r
+ }\r
+\r
+ /**\r
+ * Returns the WHERE clause that returned this EntityList from the database\r
+ * @return whereClause The WHERE clause\r
+ */\r
+ public String getWhere() {\r
+ return whereClause;\r
+ }\r
+\r
+\r
+ /**\r
+ * Sets the sorting criterium of this EntityList\r
+ * @param oc\r
+ */\r
+ public void setOrder(String oc) {\r
+ this.orderClause = oc;\r
+ }\r
+\r
+ /**\r
+ * Returns the sorting criterium.\r
+ * @return orderClause The sort order\r
+ */\r
+ public String getOrder() {\r
+ return orderClause;\r
+ }\r
+\r
+ /**\r
+ * Sets the number of rows that match the WHERE clause\r
+ * @param i The number of rows that match the WHERE clause\r
+ */\r
+ public void setCount(int i) {\r
+ this.count = i;\r
+ }\r
+\r
+ /**\r
+ * Returns the number of rows that match the WHERE clause\r
+ * @return The number of rows ...\r
+ */\r
+ public int getCount() {\r
+ return count;\r
+ }\r
+\r
+ /**\r
+ * Sets the offset\r
+ * @param i The offset\r
+ */\r
+ public void setOffset(int i) {\r
+ offset = i;\r
+ }\r
+\r
+ /**\r
+ * Returns the offset\r
+ * @return offset\r
+ */\r
+ public int getOffset() {\r
+ return offset;\r
+ }\r
+\r
+ /**\r
+ * Sets the offset of the next batch of Entities.\r
+ * @param i The next offset\r
+ */\r
+ public void setNextBatch(int i) {\r
+ offsetnext = i;\r
+ }\r
+\r
+ /**\r
+ * Returns the offset of the next batch of Entities.\r
+ * @return offset of the next batch\r
+ */\r
+ public int getNextBatch() {\r
+ return offsetnext;\r
+ }\r
+\r
+ /**\r
+ * Returns whether there is a next batch within the WHERE clause\r
+ * @return true if yes, false if no.\r
+ */\r
+ public boolean hasNextBatch() {\r
+ return (offsetnext >= 0);\r
+ }\r
+\r
+ /**\r
+ * Sets the offset of the previous batch.\r
+ * @param i the previous offset\r
+ */\r
+ public void setPrevBatch(int i) {\r
+ offsetprev = i;\r
+ }\r
+\r
+ /**\r
+ * Returns the offset of the previous batch.\r
+ * @return offset of the previous batch\r
+ */\r
+ public int getPrevBatch() {\r
+ return offsetprev;\r
+ }\r
+\r
+ /**\r
+ * Returns whether there is a previous batch.\r
+ * @return true if yes, false if no\r
+ */\r
+ public boolean hasPrevBatch() {\r
+ return (offsetprev >= 0);\r
+ }\r
+\r
+ /**\r
+ * Returns the start index of the batch.\r
+ * @return\r
+ */\r
+ public int getFrom() {\r
+ return offset+1;\r
+ }\r
+\r
+ /**\r
+ * Returns the end index of the batch.\r
+ * @return\r
+ */\r
+ public int getTo() {\r
+ if (hasNextBatch())\r
+ return offsetnext;\r
+ else\r
+ return count;\r
+ }\r
+\r
+ /**\r
+ * Inserts an Entity into the EntityList.\r
+ * @param anEntity The entity to be inserted.\r
+ */\r
+\r
+ public void add (Entity anEntity) {\r
+ if (anEntity!=null)\r
+ theEntityArrayList.add(anEntity);\r
+ else\r
+ logger.warn("EntityList: add called with empty Entity");\r
+ }\r
+\r
+\r
+ /**\r
+ * @return The number of Entities in the EntityList.\r
+ */\r
+\r
+ public int size() {\r
+ return theEntityArrayList.size();\r
+ }\r
+\r
+\r
+ /**\r
+ * Returns the element at position i in the EntityList as Entity\r
+ * @param i the position of the element in question\r
+ * @return The element at position i.\r
+ */\r
+\r
+ public Entity elementAt(int i) {\r
+ /** @todo check if i is in list.size() */\r
+ return (Entity)theEntityArrayList.get(i);\r
+ }\r
+\r
+\r
+\r
+// Methods to implement StorableObject\r
+\r
+ public Set getNotifyOnReleaseSet() { return null; }\r
+\r
+ public StoreIdentifier getStoreIdentifier() {\r
+ if ( theStorage!=null ) {\r
+ return\r
+ new StoreIdentifier( this, StoreContainerType.STOC_TYPE_ENTITYLIST,\r
+ StoreUtil.getEntityListUniqueIdentifierFor( theStorage.getTableName(),\r
+ whereClause, orderClause, offset, limit ));\r
+ }\r
+ logger.warn("EntityList could not return StoreIdentifier");\r
+ return null;\r
+ }\r
+\r
+}\r