KickJava   Java API By Example, From Geeks To Geeks.

Java > Open Source Codes > org > apache > ojb > soda > ObjectSetImpl


1 package org.apache.ojb.soda;
2
3 /* Copyright 2002-2005 The Apache Software Foundation
4  *
5  * Licensed under the Apache License, Version 2.0 (the "License");
6  * you may not use this file except in compliance with the License.
7  * You may obtain a copy of the License at
8  *
9  * http://www.apache.org/licenses/LICENSE-2.0
10  *
11  * Unless required by applicable law or agreed to in writing, software
12  * distributed under the License is distributed on an "AS IS" BASIS,
13  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14  * See the License for the specific language governing permissions and
15  * limitations under the License.
16  */

17
18 import java.util.Collection JavaDoc;
19 import java.util.Iterator JavaDoc;
20 import java.util.Vector JavaDoc;
21
22 import org.apache.ojb.broker.PersistenceBroker;
23 import org.apache.ojb.broker.accesslayer.RsIterator;
24 import org.apache.ojb.broker.query.Query;
25 import org.odbms.ObjectSet;
26
27 /**
28  * @version $Id: ObjectSetImpl.java,v 1.8.2.1 2005/12/21 22:30:46 tomdz Exp $
29  */

30 public class ObjectSetImpl implements ObjectSet
31 {
32     protected Iterator JavaDoc ojbIterator;
33     protected int length;
34     protected Vector JavaDoc elements;
35     protected int position;
36     protected int scrolled;
37     protected boolean resultSetClosed;
38
39     /**
40      * Constructor for ObjectSetImpl. Builds up an ObjectSet from an OJB Query object
41      */

42     public ObjectSetImpl(PersistenceBroker broker, Query query, int limit)
43     {
44         super();
45         position = 0;
46         scrolled = 0;
47
48         // avoid double query
49
// length = broker.getCount(query);
50
// if (limit >= 0)
51
// {
52
// length = Math.min(length,limit);
53
// }
54
// elements = new Vector(length);
55

56         // thma:
57
// unfortunately Iterators are currently not extent-ware
58
// we have to use getCollectionBy Query () thus!
59
//ojbIterator = ojbBroker.getIteratorByQuery(query);
60
Collection JavaDoc col = broker.getCollectionByQuery(query);
61         ojbIterator = col.iterator();
62
63         length = col.size();
64         if (limit >= 0)
65         {
66             length = Math.min(length,limit);
67         }
68         elements = new Vector JavaDoc(length);
69
70         setResultSetClosed(false);
71     }
72
73     /*
74      * @see ObjectSet#hasNext()
75      */

76     public synchronized boolean hasNext()
77     {
78         if (position < length)
79         {
80             if (position < scrolled)
81             {
82                 return true;
83             }
84             else
85             {
86                 boolean result = ojbIterator.hasNext();
87                 return result;
88             }
89         }
90         else
91         {
92             releaseJdbcResources();
93             return false;
94         }
95
96     }
97
98     protected void releaseJdbcResources()
99     {
100         if (!isResultSetClosed())
101         {
102             if (ojbIterator instanceof RsIterator)
103             {
104                 ((RsIterator) ojbIterator).releaseDbResources();
105             }
106             setResultSetClosed(true);
107         }
108     }
109
110     /*
111      * @see ObjectSet#next()
112      */

113     public synchronized Object JavaDoc next()
114     {
115         if (position < scrolled)
116         {
117             position++;
118             return elements.get(position - 1);
119         }
120         else
121         {
122             Object JavaDoc next = ojbIterator.next();
123             elements.add(next);
124             position++;
125             scrolled++;
126             return next;
127         }
128     }
129
130     /*
131      * @see ObjectSet#reset()
132      */

133     public synchronized void reset()
134     {
135         position = 0;
136     }
137
138     /*
139      * @see ObjectSet#size()
140      */

141     public int size()
142     {
143         return length;
144     }
145
146     /**
147      * Gets the resultSetClosed.
148      * @return Returns a boolean
149      */

150     public boolean isResultSetClosed()
151     {
152         return resultSetClosed;
153     }
154
155     /**
156      * Sets the resultSetClosed.
157      * @param resultSetClosed The resultSetClosed to set
158      */

159     public void setResultSetClosed(boolean resultSetClosed)
160     {
161         this.resultSetClosed = resultSetClosed;
162     }
163 }
164
Popular Tags