some deep down optimization
[mir.git] / source / mir / entity / EntityList.java
1 /*
2  * Copyright (C) 2001, 2002 The Mir-coders group
3  *
4  * This file is part of Mir.
5  *
6  * Mir is free software; you can redistribute it and/or modify
7  * it under the terms of the GNU General Public License as published by
8  * the Free Software Foundation; either version 2 of the License, or
9  * (at your option) any later version.
10  *
11  * Mir is distributed in the hope that it will be useful,
12  * but WITHOUT ANY WARRANTY; without even the implied warranty of
13  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14  * GNU General Public License for more details.
15  *
16  * You should have received a copy of the GNU General Public License
17  * along with Mir; if not, write to the Free Software
18  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA  02111-1307  USA
19  *
20  * In addition, as a special exception, The Mir-coders gives permission to link
21  * the code of this program with  any library licensed under the Apache Software License,
22  * The Sun (tm) Java Advanced Imaging library (JAI), The Sun JIMI library
23  * (or with modified versions of the above that use the same license as the above),
24  * and distribute linked combinations including the two.  You must obey the
25  * GNU General Public License in all respects for all of the code used other than
26  * the above mentioned libraries.  If you modify this file, you may extend this
27  * exception to your version of the file, but you are not obligated to do so.
28  * If you do not wish to do so, delete this exception statement from your version.
29  */
30 package mir.entity;
31
32 import java.util.ArrayList;
33 import java.util.Set;
34
35 import mir.config.MirPropertiesConfiguration;
36 import mir.config.MirPropertiesConfiguration.PropertiesConfigExc;
37 import mir.log.LoggerWrapper;
38 import mir.storage.StorageObject;
39 import mir.storage.store.StorableObject;
40 import mir.storage.store.StoreContainerType;
41 import mir.storage.store.StoreIdentifier;
42 import mir.storage.store.StoreUtil;
43
44 /**
45  *
46  * Container class for lists of Entities.
47  * Now implements @see mir.storage.store.StorableObject.
48  *
49  * @author <RK>
50  * first version        27.6.1999
51  *
52  * @version 1.1 (cleaned up)
53  */
54 public class EntityList implements StorableObject {
55   protected static MirPropertiesConfiguration configuration  = MirPropertiesConfiguration.instance();
56   protected LoggerWrapper logger;
57   private ArrayList           theEntityArrayList = new ArrayList();
58   private String              whereClause, orderClause;
59   private StorageObject       storage;
60   private int                 offset, limit;
61   private int                 nextOffset = -1;
62   private int                 previousOffset = -1;
63
64   public EntityList(){
65     logger = new LoggerWrapper("Entity.List");
66   }
67
68 /* get/set EntityClass of Objects stored in EntityList */
69   public void setStorage(StorageObject aStorage) {
70     storage=aStorage;
71   }
72
73   public StorageObject getStorage() {
74     return storage;
75   }
76
77   public void setLimit(int aLimit) {
78     limit = aLimit;
79   }
80
81   /**
82    * Sets the WHERE clause that fetched the Entities of this EntityList from the database.
83    *
84    * @param wc The string that contains the WHERE clause
85    */
86   public void setWhere(String wc) {
87     this.whereClause = wc;
88   }
89
90   /**
91    * Returns the WHERE clause that returned this EntityList from the database
92    *
93    * @return whereClause The WHERE clause
94    */
95   public String getWhere() {
96     return whereClause;
97   }
98
99   /**
100    * Sets the sorting criterium of this EntityList
101    *
102    * @param oc
103    */
104   public void setOrder(String oc) {
105     this.orderClause = oc;
106   }
107
108   /**
109    * Returns the sorting criterium.
110    *
111    * @return orderClause The sort order
112    */
113   public String getOrder() {
114     return orderClause;
115   }
116
117   /**
118    * Sets the offset
119    *
120    * @param i The offset
121    */
122   public void setOffset(int i) {
123     offset = i;
124   }
125
126   /**
127    * Returns the offset
128    *
129    * @return offset
130    */
131   public int getOffset() {
132     return offset;
133   }
134
135   /**
136    * Sets the offset of the next batch of Entities.
137    *
138    * @param i The next offset
139    */
140   public void setNextBatch(int i) {
141     nextOffset = i;
142   }
143
144   /**
145    * Returns the offset of the next batch of Entities.
146    *
147    * @return offset of the next batch
148    */
149   public int getNextBatch() {
150     return nextOffset;
151   }
152
153   /**
154    * Returns whether there is a next batch within the WHERE clause
155    *
156    * @return true if yes, false if no.
157    */
158   public boolean hasNextBatch() {
159     return (nextOffset >= 0);
160   }
161
162   /**
163    * Sets the offset of the previous batch.
164    *
165    * @param i the previous offset
166    */
167   public void setPrevBatch(int i) {
168     previousOffset = i;
169   }
170
171   /**
172    * Inserts an Entity into the EntityList.
173    *
174    * @param anEntity The entity to be inserted.
175    */
176
177   public void add (Entity anEntity) {
178     if (anEntity!=null)
179       theEntityArrayList.add(anEntity);
180     else
181       logger.warn("EntityList: add called with empty Entity");
182   }
183
184
185   /**
186    * @return The number of Entities in the EntityList.
187    */
188
189   public int size() {
190     return theEntityArrayList.size();
191   }
192
193
194   /**
195    * Returns the element at position i in the EntityList as Entity
196    * @param i the position of the element in question
197    * @return The element at position i.
198    */
199
200   public Entity elementAt(int i) {
201     /** todo check if i is in list.size() */
202     return (Entity) theEntityArrayList.get(i);
203   }
204
205
206
207 // Methods to implement StorableObject
208
209   public Set getNotifyOnReleaseSet() { return null; }
210
211   public StoreIdentifier getStoreIdentifier() {
212     if ( storage!=null ) {
213       return
214         new StoreIdentifier(
215                 this, StoreContainerType.STOC_TYPE_ENTITYLIST,
216                 StoreUtil.getEntityListUniqueIdentifierFor( storage.getTableName(),
217                 whereClause, orderClause, offset, limit ));
218     }
219     else {
220       logger.warn("EntityList could not return StoreIdentifier");
221       
222       return null;
223     }
224   }
225
226 }