74da98ab34e83ef830f3531be9d0c3827bceda75
[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 mir.log.LoggerWrapper;
33 import mir.storage.Database;
34 import mir.storage.store.StorableObject;
35 import mir.storage.store.StoreContainerType;
36 import mir.storage.store.StoreIdentifier;
37 import mir.storage.store.StoreUtil;
38
39 import java.util.ArrayList;
40 import java.util.List;
41 import java.util.Set;
42
43 /**
44  *
45  * Container class for lists of Entities.
46  * Now implements @see mir.database.store.StorableObject.
47  *
48  * @author rk
49  * first version        27.6.1999
50  *
51  * @version 1.1 (cleaned up)
52  */
53 public class EntityList implements StorableObject {
54   protected LoggerWrapper logger;
55   private List                entities = new ArrayList();
56   private String              whereClause, orderClause;
57   private Database            storage;
58   private int                 offset, limit;
59   private int                 nextOffset = -1;
60
61   public EntityList(){
62     logger = new LoggerWrapper("Entity.List");
63   }
64
65   public void setStorage(Database aStorage) {
66     storage=aStorage;
67   }
68
69   public Database getStorage() {
70     return storage;
71   }
72
73   public void setLimit(int aLimit) {
74     limit = aLimit;
75   }
76
77   /**
78    * Sets the WHERE clause that fetched the Entities of this EntityList from the database.
79    *
80    * @param wc The string that contains the WHERE clause
81    */
82   public void setWhere(String wc) {
83     this.whereClause = wc;
84   }
85
86   /**
87    * Sets the sorting criterium of this EntityList
88    *
89    * @param oc
90    */
91   public void setOrder(String oc) {
92     this.orderClause = oc;
93   }
94
95   /**
96    * Sets the offset
97    *
98    * @param i The offset
99    */
100   public void setOffset(int i) {
101     offset = i;
102   }
103
104   /**
105    * Returns the offset
106    *
107    * @return offset
108    */
109   public int getOffset() {
110     return offset;
111   }
112
113   /**
114    * Sets the offset of the next batch of Entities.
115    *
116    * @param i The next offset
117    */
118   public void setNextBatch(int i) {
119     nextOffset = i;
120   }
121
122   /**
123    * Returns the offset of the next batch of Entities.
124    *
125    * @return offset of the next batch
126    */
127   public int getNextBatch() {
128     return nextOffset;
129   }
130
131   /**
132    * Returns whether there is a next batch within the WHERE clause
133    *
134    * @return true if yes, false if no.
135    */
136   public boolean hasNextBatch() {
137     return (nextOffset >= 0);
138   }
139
140   /**
141    * Inserts an Entity into the EntityList.
142    *
143    * @param anEntity The entity to be inserted.
144    */
145
146   public void add (Entity anEntity) {
147     if (anEntity!=null)
148       entities.add(anEntity);
149     else
150       logger.warn("EntityList: add called with empty Entity");
151   }
152
153
154   /**
155    * @return The number of Entities in the EntityList.
156    */
157
158   public int size() {
159     return entities.size();
160   }
161
162
163   /**
164    * Returns the element at position i in the EntityList as Entity
165    * @param i the position of the element in question
166    * @return The element at position i.
167    */
168
169   public Entity elementAt(int i) {
170     return (Entity) entities.get(i);
171   }
172
173
174
175 // Methods to implement StorableObject
176
177   public Set getNotifyOnReleaseSet() { return null; }
178
179   public StoreIdentifier getStoreIdentifier() {
180     if ( storage!=null ) {
181       return
182         new StoreIdentifier(
183                 this, StoreContainerType.STOC_TYPE_ENTITYLIST,
184                 StoreUtil.getEntityListUniqueIdentifierFor( storage.getTableName(),
185                 whereClause, orderClause, offset, limit ));
186     }
187                 logger.warn("EntityList could not return StoreIdentifier");
188                 
189                 return null;
190   }
191
192 }