Revision 27525 branches/v2_0_0_prep/libraries/libFMap_dal/src/org/gvsig/fmap/dal/feature/impl/DefaultFeatureSelection.java
DefaultFeatureSelection.java | ||
---|---|---|
28 | 28 |
|
29 | 29 |
import java.util.ArrayList; |
30 | 30 |
import java.util.HashMap; |
31 |
import java.util.Iterator; |
|
32 | 31 |
import java.util.List; |
33 | 32 |
import java.util.Map; |
34 | 33 |
import java.util.Map.Entry; |
... | ... | |
41 | 40 |
import org.gvsig.fmap.dal.feature.FeatureSelection; |
42 | 41 |
import org.gvsig.fmap.dal.feature.FeatureSet; |
43 | 42 |
import org.gvsig.fmap.dal.feature.FeatureType; |
43 |
import org.gvsig.fmap.dal.feature.DisposableIterator; |
|
44 | 44 |
import org.gvsig.fmap.dal.feature.exception.ReversedSelectionIteratorException; |
45 | 45 |
import org.gvsig.tools.persistence.PersistenceException; |
46 | 46 |
import org.gvsig.tools.persistence.PersistentState; |
... | ... | |
124 | 124 |
} |
125 | 125 |
|
126 | 126 |
disableNotifications(); |
127 |
for (Iterator iter = features.fastIterator(); iter.hasNext();) { |
|
127 |
for (DisposableIterator iter = features.fastIterator(); iter.hasNext();) {
|
|
128 | 128 |
change |= select((Feature) iter.next(), undoable); |
129 | 129 |
} |
130 | 130 |
enableNotifications(); |
... | ... | |
177 | 177 |
getCommands().startComplex("_selectionDeselectFeatureSet"); |
178 | 178 |
} |
179 | 179 |
disableNotifications(); |
180 |
for (Iterator iter = features.fastIterator(); iter.hasNext();) { |
|
180 |
for (DisposableIterator iter = features.fastIterator(); iter.hasNext();) {
|
|
181 | 181 |
change |= deselect((Feature) iter.next(), undoable); |
182 | 182 |
} |
183 | 183 |
enableNotifications(); |
... | ... | |
211 | 211 |
// Go through the map of FeatureTypes, and return only the ones that |
212 | 212 |
// have at least a Feature. |
213 | 213 |
List types = new ArrayList(); |
214 |
for (Iterator iterator = featureTypeCounts.entrySet().iterator(); iterator |
|
214 |
for (java.util.Iterator iterator = featureTypeCounts.entrySet() |
|
215 |
.iterator(); iterator |
|
215 | 216 |
.hasNext();) { |
216 | 217 |
Map.Entry entry = (Entry) iterator.next(); |
217 | 218 |
FeatureType type = (FeatureType) entry.getKey(); |
... | ... | |
237 | 238 |
* Returns the list of selected values, or the deselected ones if the |
238 | 239 |
* selection has been reversed. |
239 | 240 |
*/ |
240 |
public Iterator iterator() { |
|
241 |
public DisposableIterator iterator() {
|
|
241 | 242 |
return iterator(0); |
242 | 243 |
} |
243 | 244 |
|
... | ... | |
247 | 248 |
* |
248 | 249 |
* WARN: not very good performance implementation. |
249 | 250 |
*/ |
250 |
public Iterator iterator(long index) { |
|
251 |
public DisposableIterator iterator(long index) {
|
|
251 | 252 |
return iterator(index, false); |
252 | 253 |
} |
253 | 254 |
|
... | ... | |
257 | 258 |
* |
258 | 259 |
* WARN: not really a fast implementation. |
259 | 260 |
*/ |
260 |
public Iterator fastIterator() { |
|
261 |
public DisposableIterator fastIterator() {
|
|
261 | 262 |
return fastIterator(0); |
262 | 263 |
} |
263 | 264 |
|
... | ... | |
267 | 268 |
* |
268 | 269 |
* WARN: not really a fast implementation. |
269 | 270 |
*/ |
270 |
public Iterator fastIterator(long index) { |
|
271 |
public DisposableIterator fastIterator(long index) {
|
|
271 | 272 |
return iterator(index, true); |
272 | 273 |
} |
273 | 274 |
|
274 | 275 |
public void loadState(PersistentState state) throws PersistenceException { |
275 | 276 |
super.loadState(state); |
276 |
for (Iterator iterator = fastIterator(); iterator.hasNext();) { |
|
277 |
for (DisposableIterator iterator = fastIterator(); iterator.hasNext();) {
|
|
277 | 278 |
Feature feature = (Feature) iterator.next(); |
278 | 279 |
getFeatureTypeCount(feature.getType()).add(); |
279 | 280 |
} |
... | ... | |
287 | 288 |
/** |
288 | 289 |
* Creates an iterator for the Selection. |
289 | 290 |
*/ |
290 |
private Iterator iterator(long index, boolean fastIterator) { |
|
291 |
private DisposableIterator iterator(long index, boolean fastIterator) {
|
|
291 | 292 |
if (isReversed()) { |
292 |
Iterator iter = new ReversedFeatureIteratorFacade(getData(), |
|
293 |
DisposableIterator iter = new ReversedFeatureIteratorFacade(getData(),
|
|
293 | 294 |
getFeatureStore(), fastIterator); |
294 | 295 |
for (long l = 0; l < index && iter.hasNext(); l++) { |
295 | 296 |
iter.next(); |
... | ... | |
300 | 301 |
// TODO: maybe we could add a new referenceIterator(int index) |
301 | 302 |
// method that could be implemented in a more performant way |
302 | 303 |
|
303 |
Iterator iter = referenceIterator(); |
|
304 |
java.util.Iterator iter = referenceIterator();
|
|
304 | 305 |
for (long l = 0; l < index && iter.hasNext(); l++) { |
305 | 306 |
iter.next(); |
306 | 307 |
} |
... | ... | |
323 | 324 |
* |
324 | 325 |
* @author <a href="mailto:cordin@disid.com">C?sar Ordi?ana</a> |
325 | 326 |
*/ |
326 |
private class FeatureIteratorFacade implements Iterator { |
|
327 |
private class FeatureIteratorFacade implements DisposableIterator {
|
|
327 | 328 |
|
328 | 329 |
final Logger logger = LoggerFactory |
329 | 330 |
.getLogger(FeatureIteratorFacade.class); |
330 | 331 |
|
331 |
private Iterator refIterator; |
|
332 |
private java.util.Iterator refIterator;
|
|
332 | 333 |
|
333 | 334 |
private DefaultFeatureStore featureStore; |
334 | 335 |
|
335 |
public FeatureIteratorFacade(Iterator refIterator,
|
|
336 |
public FeatureIteratorFacade(java.util.Iterator iter,
|
|
336 | 337 |
DefaultFeatureStore featureStore) { |
337 |
this.refIterator = refIterator;
|
|
338 |
this.refIterator = iter;
|
|
338 | 339 |
this.featureStore = featureStore; |
339 | 340 |
} |
340 | 341 |
|
... | ... | |
373 | 374 |
protected Feature getFeature(FeatureReference ref) throws DataException { |
374 | 375 |
return ref.getFeature(); |
375 | 376 |
} |
377 |
|
|
378 |
public void dispose() { |
|
379 |
refIterator = null; |
|
380 |
featureStore = null; |
|
381 |
} |
|
376 | 382 |
} |
377 | 383 |
|
378 | 384 |
/** |
... | ... | |
381 | 387 |
* |
382 | 388 |
* @author <a href="mailto:cordin@disid.com">C?sar Ordi?ana</a> |
383 | 389 |
*/ |
384 |
private class ReversedFeatureIteratorFacade implements Iterator { |
|
390 |
private class ReversedFeatureIteratorFacade implements DisposableIterator {
|
|
385 | 391 |
|
386 | 392 |
final Logger logger = LoggerFactory |
387 | 393 |
.getLogger(ReversedFeatureIteratorFacade.class); |
388 | 394 |
|
389 |
private Iterator refIterator; |
|
390 | 395 |
|
391 | 396 |
private SelectionData selectionData; |
392 | 397 |
|
393 |
private Iterator iterator; |
|
398 |
private DisposableIterator iterator;
|
|
394 | 399 |
|
395 | 400 |
private Feature nextFeature = null; |
396 | 401 |
|
... | ... | |
425 | 430 |
return tmp; |
426 | 431 |
} |
427 | 432 |
|
428 |
/** |
|
429 |
* Returns the next FeatureReference. |
|
430 |
* |
|
431 |
* @return the next FeatureReference |
|
432 |
*/ |
|
433 |
public FeatureReference nextFeatureReference() { |
|
434 |
return (FeatureReference) refIterator.next(); |
|
435 |
} |
|
436 |
|
|
437 | 433 |
public void remove() { |
438 | 434 |
iterator.remove(); |
439 | 435 |
} |
... | ... | |
449 | 445 |
} |
450 | 446 |
} |
451 | 447 |
} |
448 |
|
|
449 |
public void dispose() { |
|
450 |
this.iterator.dispose(); |
|
451 |
this.selectionData = null; |
|
452 |
this.nextFeature = null; |
|
453 |
} |
|
452 | 454 |
} |
453 | 455 |
|
454 | 456 |
private class FeatureTypeCount { |
Also available in: Unified diff