Revision 43646 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/feature/impl/DefaultFeatureReferenceSelection.java

View differences:

DefaultFeatureReferenceSelection.java
28 28
import java.util.HashSet;
29 29
import java.util.Iterator;
30 30
import java.util.Set;
31
import java.util.logging.Level;
32
import java.util.logging.Logger;
31 33

  
32 34
import org.gvsig.fmap.dal.DataStore;
33 35
import org.gvsig.fmap.dal.DataStoreNotification;
......
63 65
	public static final String DYNCLASS_PERSISTENT_NAME =
64 66
			"DefaultFeatureReferenceSelection";
65 67

  
66
    protected SelectionData selectionData = new SelectionData();
68
    protected SelectionData selectionData = null;
67 69

  
68 70
    private FeatureStore featureStore;
69 71

  
......
87 89
        super();
88 90
        this.featureStore = featureStore;
89 91
        this.helper = new DefaultFeatureSelectionHelper(featureStore);
90
        selectionData.setTotalSize(featureStore.getFeatureCount());
91 92
    }
92 93

  
93 94
    /**
......
108 109
        super();
109 110
        this.featureStore = featureStore;
110 111
        this.helper = helper;
111
        selectionData.setTotalSize(featureStore.getFeatureCount());
112 112
    }
113 113

  
114 114
	/**
......
144 144
            getCommands().select(this, reference);
145 145
        }
146 146
        boolean change = false;
147
        if (selectionData.isReversed()) {
148
            change = selectionData.remove(reference);
147
        if ( this.getData().isReversed()) {
148
            change = this.getData().remove(reference);
149 149
        } else {
150
            change = selectionData.add(reference);
150
            change = this.getData().add(reference);
151 151
        }
152 152

  
153 153
        if (change) {
......
175 175
            getCommands().deselect(this, reference);
176 176
        }
177 177
        boolean change = false;
178
        if (selectionData.isReversed()) {
179
            change = selectionData.add(reference);
178
        if (this.getData().isReversed()) {
179
            change = this.getData().add(reference);
180 180
        } else {
181
            change = selectionData.remove(reference);
181
            change = this.getData().remove(reference);
182 182
        }
183 183

  
184 184
        if (change) {
......
202 202
            getCommands().startComplex("_selectionSelectAll");
203 203
            getCommands().selectAll(this);
204 204
        }
205
        if (!selectionData.isReversed()) {
206
            selectionData.setReversed(true);
205
        if (!this.getData().isReversed()) {
206
            this.getData().setReversed(true);
207 207
        }
208 208
        clearFeatureReferences();
209 209
        if (undoable && getFeatureStore().isEditing()) {
......
222 222
     *            if the action must be undoable
223 223
     */
224 224
    public void deselectAll(boolean undoable) throws DataException {
225
        if( this.selectionData==null ) {
226
            return;
227
        }
225 228
        if (undoable && getFeatureStore().isEditing()) {
226 229
            getCommands().startComplex("_selectionDeselectAll");
227 230
            getCommands().deselectAll(this);
228 231
        }
229
        if (selectionData.isReversed()) {
230
            selectionData.setReversed(false);
232
        if (this.getData().isReversed()) {
233
            this.getData().setReversed(false);
231 234
        }
232 235
        clearFeatureReferences();
233 236
        if (undoable && getFeatureStore().isEditing()) {
......
238 241
    }
239 242

  
240 243
    public boolean isSelected(FeatureReference reference) {
241
        if (selectionData.isReversed()) {
242
            return !selectionData.contains(reference);
244
        if( this.selectionData==null ) {
245
            return false;
246
        }
247
        if (this.getData().isReversed()) {
248
            return !this.getData().contains(reference);
243 249
        } else {
244
            return selectionData.contains(reference);
250
            return this.getData().contains(reference);
245 251
        }
246 252
    }
247 253

  
......
258 264
        if (undoable && getFeatureStore().isEditing()) {
259 265
            getCommands().selectionReverse(this);
260 266
        }
261
        selectionData.setReversed(!selectionData.isReversed());
267
        this.getData().setReversed(!this.getData().isReversed());
262 268
        notifyObservers(DataStoreNotification.SELECTION_CHANGE);
263 269
    }
270
    
271
    public boolean isEmpty() {
272
        if( this.selectionData == null ) {
273
            return true;
274
        }
275
        return this.getSelectedCount()==0;
276
    }
264 277

  
265 278
    public long getSelectedCount() {
266
        if (selectionData.isReversed()) {
267
                return selectionData.getTotalSize() - selectionData.getSize()
279
        if( this.selectionData == null ) {
280
            return 0;
281
        }
282
        if (this.getData().isReversed()) {
283
                return this.getData().getTotalSize() - this.getData().getSize()
268 284
                        + helper.getFeatureStoreDeltaSize();
269 285
        } else {
270
            return selectionData.getSize();
286
            return this.getData().getSize();
271 287
        }
272 288
    }
273 289

  
274 290
    public Iterator referenceIterator() {
275
        return Collections.unmodifiableSet(selectionData.getSelected())
291
        return Collections.unmodifiableSet(this.getData().getSelected())
276 292
                .iterator();
277 293
    }
278 294

  
......
286 302
    }
287 303

  
288 304
    public void accept(Visitor visitor) throws BaseException {
289
        for (Iterator iter = selectionData.getSelected().iterator(); iter
305
        if( this.selectionData==null ) {
306
            return;
307
        }        
308
        for (Iterator iter = this.getData().getSelected().iterator(); iter
290 309
                .hasNext();) {
291 310
            visitor.visit(iter.next());
292 311
        }
......
299 318
            FeatureStoreNotification storeNotif = (FeatureStoreNotification) notification;
300 319
            if (FeatureStoreNotification.AFTER_DELETE
301 320
                    .equalsIgnoreCase(storeNotif.getType())) {
302
                selectionData.remove(storeNotif.getFeature().getReference());
321
                this.getData().remove(storeNotif.getFeature().getReference());
303 322
            }
304 323
        }
305 324
    }
306 325

  
307 326
    public SelectionData getData() {
327
        if( selectionData==null ) {
328
            selectionData = new SelectionData();
329
            try {
330
                selectionData.setTotalSize(featureStore.getFeatureCount());
331
            } catch (DataException ex) {
332
                throw new RuntimeException("Can't initialize SelectionData, don't get the feature count.",ex);
333
            }
334
        }
308 335
        return selectionData;
309 336
    }
310 337

  
......
316 343
    public String toString() {
317 344
        return getClass().getName() + ": " + getSelectedCount()
318 345
                + " features selected, reversed = "
319
                + selectionData.isReversed() + ", featureIds contained: "
320
                + selectionData.getSelected();
346
                + this.getData().isReversed() + ", featureIds contained: "
347
                + this.getData().getSelected();
321 348
    }
322 349

  
323 350
    protected boolean isReversed() {
324
        return selectionData.isReversed();
351
        if( this.selectionData==null ) {
352
            return false;
353
        }
354
        return this.getData().isReversed();
325 355
    }
326 356

  
327 357
    /**
328 358
     * Removes all the stored FeatureRefence objects.
329 359
     */
330 360
    protected void clearFeatureReferences() {
331
        selectionData.clear();
361
        if( this.selectionData==null ) {
362
            return;
363
        }
364
        this.getData().clear();
332 365
    }
333 366

  
334 367
	/**
......
445 478

  
446 479
	public void saveToState(PersistentState state) throws PersistenceException {
447 480
		state.set("store", featureStore);
448
		state.set("reversed", selectionData.isReversed());
449
		state.set("totalSize", selectionData.getTotalSize());
450
		state.set("selected", selectionData.getSelected().iterator());
481
		state.set("reversed", this.getData().isReversed());
482
		state.set("totalSize", this.getData().getTotalSize());
483
		state.set("selected", this.getData().getSelected().iterator());
451 484
	}
452 485

  
453 486
	public void loadFromState(PersistentState state)
454 487
			throws PersistenceException {
455 488
		featureStore = (FeatureStore)state.get("store");
456 489
		helper = new DefaultFeatureSelectionHelper((DefaultFeatureStore)featureStore);
457
		selectionData.setReversed(state.getBoolean("reversed"));
458
		selectionData.setTotalSize(state.getLong("totalSize"));
490
		this.getData().setReversed(state.getBoolean("reversed"));
491
		this.getData().setTotalSize(state.getLong("totalSize"));
459 492
		Iterator it = state.getIterator("selected");
460 493
		while (it.hasNext()) {
461 494
			DefaultFeatureReference ref = (DefaultFeatureReference) it.next();
462
			selectionData.add(ref);
495
			this.getData().add(ref);
463 496
		}
464 497
		
465 498
		/*
......
565 598
		}
566 599
	}
567 600

  
601
    @Override
568 602
	public Object clone() throws CloneNotSupportedException {
569 603
		DefaultFeatureReferenceSelection clone = (DefaultFeatureReferenceSelection) super
570 604
				.clone();
571 605
		// Original observers aren't cloned
572 606
		clone.delegateObservable = new DelegateWeakReferencingObservable(clone);
573 607
		// Clone internal data
574
		clone.selectionData = (SelectionData) selectionData.clone();
608
		clone.selectionData = (SelectionData) this.getData().clone();
575 609
		// featureStore and helper are already swallow cloned by our parent
576 610
		return clone;
577 611
	}

Also available in: Unified diff