1 package org.apache.ojb.soda; 2 3 17 18 import java.util.Collection ; 19 import java.util.Iterator ; 20 import java.util.Vector ; 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 30 public class ObjectSetImpl implements ObjectSet 31 { 32 protected Iterator ojbIterator; 33 protected int length; 34 protected Vector elements; 35 protected int position; 36 protected int scrolled; 37 protected boolean resultSetClosed; 38 39 42 public ObjectSetImpl(PersistenceBroker broker, Query query, int limit) 43 { 44 super(); 45 position = 0; 46 scrolled = 0; 47 48 56 Collection 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 (length); 69 70 setResultSetClosed(false); 71 } 72 73 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 113 public synchronized Object next() 114 { 115 if (position < scrolled) 116 { 117 position++; 118 return elements.get(position - 1); 119 } 120 else 121 { 122 Object next = ojbIterator.next(); 123 elements.add(next); 124 position++; 125 scrolled++; 126 return next; 127 } 128 } 129 130 133 public synchronized void reset() 134 { 135 position = 0; 136 } 137 138 141 public int size() 142 { 143 return length; 144 } 145 146 150 public boolean isResultSetClosed() 151 { 152 return resultSetClosed; 153 } 154 155 159 public void setResultSetClosed(boolean resultSetClosed) 160 { 161 this.resultSetClosed = resultSetClosed; 162 } 163 } 164 | Popular Tags |