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