aae8f66234825e3addf63e8e9acf49d54a48b7ae
[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.log.LoggerWrapper;
37 import mir.storage.Database;
38 import mir.storage.store.StorableObject;
39 import mir.storage.store.StoreContainerType;
40 import mir.storage.store.StoreIdentifier;
41 import mir.storage.store.StoreUtil;
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 static MirPropertiesConfiguration configuration  = MirPropertiesConfiguration.instance();
55   protected LoggerWrapper logger;
56   private ArrayList           theEntityArrayList = new ArrayList();
57   private String              whereClause, orderClause;
58   private Database            storage;
59   private int                 offset, limit;
60   private int                 nextOffset = -1;
61
62   public EntityList(){
63     logger = new LoggerWrapper("Entity.List");
64   }
65
66 /* get/set EntityClass of Objects stored in EntityList */
67   public void setStorage(Database aStorage) {
68     storage=aStorage;
69   }
70
71   public Database getStorage() {
72     return storage;
73   }
74
75   public void setLimit(int aLimit) {
76     limit = aLimit;
77   }
78
79   /**
80    * Sets the WHERE clause that fetched the Entities of this EntityList from the database.
81    *
82    * @param wc The string that contains the WHERE clause
83    */
84   public void setWhere(String wc) {
85     this.whereClause = wc;
86   }
87
88   /**
89    * Returns the WHERE clause that returned this EntityList from the database
90    *
91    * @return whereClause The WHERE clause
92    */
93   public String getWhere() {
94     return whereClause;
95   }
96
97   /**
98    * Sets the sorting criterium of this EntityList
99    *
100    * @param oc
101    */
102   public void setOrder(String oc) {
103     this.orderClause = oc;
104   }
105
106   /**
107    * Returns the sorting criterium.
108    *
109    * @return orderClause The sort order
110    */
111   public String getOrder() {
112     return orderClause;
113   }
114
115   /**
116    * Sets the offset
117    *
118    * @param i The offset
119    */
120   public void setOffset(int i) {
121     offset = i;
122   }
123
124   /**
125    * Returns the offset
126    *
127    * @return offset
128    */
129   public int getOffset() {
130     return offset;
131   }
132
133   /**
134    * Sets the offset of the next batch of Entities.
135    *
136    * @param i The next offset
137    */
138   public void setNextBatch(int i) {
139     nextOffset = i;
140   }
141
142   /**
143    * Returns the offset of the next batch of Entities.
144    *
145    * @return offset of the next batch
146    */
147   public int getNextBatch() {
148     return nextOffset;
149   }
150
151   /**
152    * Returns whether there is a next batch within the WHERE clause
153    *
154    * @return true if yes, false if no.
155    */
156   public boolean hasNextBatch() {
157     return (nextOffset >= 0);
158   }
159
160   /**
161    * Inserts an Entity into the EntityList.
162    *
163    * @param anEntity The entity to be inserted.
164    */
165
166   public void add (Entity anEntity) {
167     if (anEntity!=null)
168       theEntityArrayList.add(anEntity);
169     else
170       logger.warn("EntityList: add called with empty Entity");
171   }
172
173
174   /**
175    * @return The number of Entities in the EntityList.
176    */
177
178   public int size() {
179     return theEntityArrayList.size();
180   }
181
182
183   /**
184    * Returns the element at position i in the EntityList as Entity
185    * @param i the position of the element in question
186    * @return The element at position i.
187    */
188
189   public Entity elementAt(int i) {
190     /** todo check if i is in list.size() */
191     return (Entity) theEntityArrayList.get(i);
192   }
193
194
195
196 // Methods to implement StorableObject
197
198   public Set getNotifyOnReleaseSet() { return null; }
199
200   public StoreIdentifier getStoreIdentifier() {
201     if ( storage!=null ) {
202       return
203         new StoreIdentifier(
204                 this, StoreContainerType.STOC_TYPE_ENTITYLIST,
205                 StoreUtil.getEntityListUniqueIdentifierFor( storage.getTableName(),
206                 whereClause, orderClause, offset, limit ));
207     }
208                 logger.warn("EntityList could not return StoreIdentifier");
209                 
210                 return null;
211   }
212
213 }