rebuilding head
[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       theStorage;
60   private int                 count, offset, limit;
61   private int                 offsetnext = -1, offsetprev = -1;
62
63   public EntityList(){
64     logger = new LoggerWrapper("Entity.List");
65   }
66
67 /* get/set EntityClass of Objects stored in EntityList */
68   public void setStorage(StorageObject storage) { this.theStorage=storage; }
69   public StorageObject getStorage() { return theStorage; }
70
71   public void setLimit(int limit) { this.limit = limit; }
72
73   /**
74    * Sets the WHERE clause that fetched the Entities of this EntityList from the database.
75    * @param wc The string that contains the WHERE clause
76    */
77   public void setWhere(String wc) {
78     this.whereClause = wc;
79   }
80
81   /**
82    * Returns the WHERE clause that returned this EntityList from the database
83    * @return whereClause The WHERE clause
84    */
85   public String getWhere() {
86     return whereClause;
87   }
88
89   /**
90    * Sets the sorting criterium of this EntityList
91    * @param oc
92    */
93   public void setOrder(String oc) {
94     this.orderClause = oc;
95   }
96
97   /**
98    * Returns the sorting criterium.
99    * @return orderClause The sort order
100    */
101   public String getOrder() {
102     return orderClause;
103   }
104
105   /**
106    * Sets the number of rows that match the WHERE clause
107    * @param i The number of rows that match the WHERE clause
108    */
109   public void setCount(int i) {
110     this.count = i;
111   }
112
113   /**
114    * Returns the number of rows that match the WHERE clause
115    * @return The number of rows ...
116    */
117   public int getCount() {
118     return count;
119   }
120
121   /**
122    * Sets the offset
123    * @param i The offset
124    */
125   public void setOffset(int i) {
126     offset = i;
127   }
128
129   /**
130    * Returns the offset
131    * @return offset
132    */
133   public int getOffset() {
134     return offset;
135   }
136
137   /**
138    * Sets the offset of the next batch of Entities.
139    * @param i The next offset
140    */
141   public void setNextBatch(int i) {
142     offsetnext = i;
143   }
144
145   /**
146    * Returns the offset of the next batch of Entities.
147    * @return offset of the next batch
148    */
149   public int getNextBatch() {
150     return offsetnext;
151   }
152
153   /**
154    * Returns whether there is a next batch within the WHERE clause
155    * @return true if yes, false if no.
156    */
157   public boolean hasNextBatch() {
158     return (offsetnext >= 0);
159   }
160
161   /**
162    * Sets the offset of the previous batch.
163    * @param i the previous offset
164    */
165   public void setPrevBatch(int i) {
166     offsetprev = i;
167   }
168
169   /**
170    * Returns the offset of the previous batch.
171    * @return offset of the previous batch
172    */
173   public int getPrevBatch() {
174     return offsetprev;
175   }
176
177   /**
178    * Returns whether there is a previous batch.
179    * @return true if yes, false if no
180    */
181   public boolean hasPrevBatch() {
182     return (offsetprev >= 0);
183   }
184
185   /**
186    * Returns the start index of the batch.
187    * @return
188    */
189   public int getFrom() {
190     return offset+1;
191   }
192
193   /**
194    * Returns the end index of the batch.
195    * @return
196    */
197   public int getTo() {
198     if (hasNextBatch())
199       return offsetnext;
200     else
201       return count;
202   }
203
204   /**
205    * Inserts an Entity into the EntityList.
206    * @param anEntity The entity to be inserted.
207    */
208
209   public void add (Entity anEntity) {
210     if (anEntity!=null)
211       theEntityArrayList.add(anEntity);
212     else
213       logger.warn("EntityList: add called with empty Entity");
214   }
215
216
217   /**
218    * @return The number of Entities in the EntityList.
219    */
220
221   public int size() {
222     return theEntityArrayList.size();
223   }
224
225
226   /**
227    * Returns the element at position i in the EntityList as Entity
228    * @param i the position of the element in question
229    * @return The element at position i.
230    */
231
232   public Entity elementAt(int i) {
233     /** todo check if i is in list.size() */
234     return (Entity) theEntityArrayList.get(i);
235   }
236
237
238
239 // Methods to implement StorableObject
240
241   public Set getNotifyOnReleaseSet() { return null; }
242
243   public StoreIdentifier getStoreIdentifier() {
244     if ( theStorage!=null ) {
245       return
246       new StoreIdentifier( this, StoreContainerType.STOC_TYPE_ENTITYLIST,
247       StoreUtil.getEntityListUniqueIdentifierFor( theStorage.getTableName(),
248       whereClause, orderClause, offset, limit ));
249     }
250     logger.warn("EntityList could not return StoreIdentifier");
251     return null;
252   }
253
254 }