Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.impl / src / test / java / org / gvsig / fmap / dal / feature / BaseTestEditableFeatureStore.java @ 42488

History | View | Annotate | Download (34.9 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program 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 this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.fmap.dal.feature;
25

    
26
import java.util.Iterator;
27

    
28
import org.gvsig.fmap.dal.DataServerExplorer;
29
import org.gvsig.fmap.dal.DataStore;
30
import org.gvsig.fmap.dal.DataStoreParameters;
31
import org.gvsig.fmap.dal.DataTypes;
32
import org.gvsig.fmap.dal.exception.DataException;
33
import org.gvsig.fmap.dal.exception.RemoveException;
34
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
35
import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
36
import org.gvsig.fmap.dal.feature.testmulithread.DeleteFirstAndLastFeature;
37
import org.gvsig.fmap.dal.feature.testmulithread.DeleteLastFeature;
38
import org.gvsig.fmap.dal.feature.testmulithread.InsertFeature;
39
import org.gvsig.fmap.dal.feature.testmulithread.StoreTask;
40
import org.gvsig.fmap.dal.feature.testmulithread.UpdateFeature;
41
import org.gvsig.tools.dispose.DisposableIterator;
42
import org.gvsig.tools.evaluator.AbstractEvaluator;
43
import org.gvsig.tools.evaluator.Evaluator;
44
import org.gvsig.tools.evaluator.EvaluatorData;
45
import org.gvsig.tools.evaluator.EvaluatorException;
46
import org.gvsig.tools.evaluator.EvaluatorFieldValue;
47
import org.gvsig.tools.observer.Observable;
48
import org.gvsig.tools.observer.Observer;
49

    
50
/**
51
 * @author jmvivo
52
 *
53
 */
54
public abstract class BaseTestEditableFeatureStore extends BaseTestFeatureStore {
55

    
56
        public abstract NewFeatureStoreParameters getDefaultNewDataStoreParameters()
57
                        throws Exception;
58

    
59
        public abstract boolean resourcesNotifyChanges();
60

    
61
        //=================================================
62
        //=================================================
63

    
64

    
65
        public void fillPrimaryKeyInserFeature(EditableFeature feature) {
66
                return;
67
        }
68

    
69
        protected Evaluator getEvaluatorToLower(String attibuteName) {
70
                return new ToLower(attibuteName);
71

    
72
        }
73

    
74
        protected Evaluator getEvaluatorToUpper(String attibuteName) {
75
                return new ToUpper(attibuteName);
76
        }
77

    
78
        public class ToLower extends AbstractEvaluator {
79
                private String attributeName;
80

    
81
                public ToLower(String attrName) {
82
                        this.attributeName = attrName;
83
                        this.getFieldsInfo().addFieldValue(this.attributeName);
84
                }
85

    
86
                public Object evaluate(EvaluatorData data) throws EvaluatorException {
87
                        String value = (String) data.getDataValue(this.attributeName);
88
                        if (value == null) {
89
                                return null;
90
                        }
91
                        return value.toLowerCase();
92
                }
93

    
94
                public String getSQL() {
95
                        return null;
96
                }
97

    
98
                public String getDescription() {
99
                        return null;
100
                }
101

    
102
                public String getName() {
103
                        return null;
104
                }
105

    
106
        }
107

    
108
        public class ToUpper extends AbstractEvaluator {
109
                private String attributeName;
110

    
111
                public ToUpper(String attrName) {
112
                        this.attributeName = attrName;
113
                        this.getFieldsInfo().addFieldValue(this.attributeName);
114
                }
115

    
116
                public Object evaluate(EvaluatorData data) throws EvaluatorException {
117
                        String value = (String) data.getDataValue(this.attributeName);
118
                        if (value == null) {
119
                                return null;
120
                        }
121
                        return value.toUpperCase();
122
                }
123

    
124
                public String getSQL() {
125
                        return null;
126
                }
127

    
128
                public String getDescription() {
129
                        return null;
130
                }
131

    
132
                public EvaluatorFieldValue[] getFieldValues(String name) {
133
                        return null;
134
                }
135

    
136
                public String getName() {
137
                        return null;
138
                }
139

    
140
        }
141

    
142
        protected FeatureStore getStoreCopy(FeatureStore source,
143
                        NewFeatureStoreParameters targetParams) throws DataException,
144
                        ValidateDataParametersException {
145
                DataServerExplorer explorer = source.getExplorer();
146
                source.export(explorer, source.getProviderName(), targetParams);
147
                FeatureStore result = (FeatureStore) dataManager.openStore(source.getProviderName(), targetParams);
148

    
149
                return result;
150
        }
151

    
152
        protected void clearCopy(FeatureStore source,
153
                        NewFeatureStoreParameters targetParams) throws Exception {
154
                DataServerExplorer explorer = source.getExplorer();
155
                explorer.remove(targetParams);
156

    
157
        }
158

    
159
        protected boolean compareFeatures(Feature f1, Feature f2,
160
                        String[] attrsNames, UpdateFeature updated, long index,
161
                        long lastIndex) throws DataException, EvaluatorException {
162
                FeatureAttributeDescriptor attr1;
163
                FeatureAttributeDescriptor attr2;
164
                EditableFeature f2e = f2.getEditable();
165
                updated.applyUpdateList(f2e, index, lastIndex);
166

    
167
                Object v1, v2;
168
                for (int i = 0; i < attrsNames.length; i++) {
169
                        attr1 = f1.getType().getAttributeDescriptor(attrsNames[i]);
170
                        attr2 = f2e.getType().getAttributeDescriptor(attrsNames[i]);
171
                        if (attr1 != attr2) {
172
                                if (!compareAttributes(attr1, attr1)) {
173
                                        return false;
174
                                }
175
                        }
176
                        v1 = f1.get(attr1.getName());
177
                        v2 = f2.get(attr2.getName());
178
                        if (!compareFeatureValue(v1, v2, attr1)) {
179
                                return false;
180
                        }
181
                }
182

    
183
                return true;
184
        }
185

    
186
        protected boolean compareFeatures(Feature f1, Feature f2,
187
                        UpdateFeature updated, long index, long lastIndex)
188
                        throws DataException, EvaluatorException {
189
                if (!compareTypes(f1.getType(), f2.getType())) {
190
                        System.out.println("compareFeatures() type !=");
191
                        return false;
192
                }
193
                Iterator iter = f1.getType().iterator();
194
                FeatureAttributeDescriptor attr;
195
                EditableFeature f1e = f1.getEditable();
196
                updated.applyUpdateList(f1e, index, lastIndex);
197
                Object v1, v2;
198
                while (iter.hasNext()) {
199
                        attr = (FeatureAttributeDescriptor) iter.next();
200
                        v1 = f1e.get(attr.getName());
201
                        v2 = f2.get(attr.getName());
202
                        if (!compareFeatureValue(v1, v2, attr)) {
203
                                return false;
204
                        }
205
                }
206

    
207

    
208
                return true;
209

    
210
        }
211

    
212

    
213
        //---------------
214

    
215

    
216

    
217

    
218
        //=================================================
219
        //=================================================
220

    
221

    
222

    
223

    
224
        public void testExport() throws Exception {
225
                DataStoreParameters parameters = null;
226

    
227
                parameters = getDefaultDataStoreParameters();
228

    
229
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
230

    
231
                NewFeatureStoreParameters newParams = this
232
                                .getDefaultNewDataStoreParameters();
233
                try {
234
                        this.clearCopy(store, newParams);
235
                } catch (RemoveException e) {
236
                        // Dp nothing
237
                }
238

    
239
                FeatureStore result = this.getStoreCopy(store, newParams);
240

    
241
                fullStoreIteratorTest(result);
242

    
243
                FeatureSet set;
244
                FeatureSet originalSet;
245
                if (result.getDefaultFeatureType().getPrimaryKey() != null
246
                                && result.getDefaultFeatureType().getPrimaryKey().length > 0) {
247
                        FeatureQuery queryR = result.createFeatureQuery();
248
                        FeatureQuery queryO = store.createFeatureQuery();
249
                        FeatureAttributeDescriptor[] pk = result.getDefaultFeatureType()
250
                                        .getPrimaryKey();
251
                        for (int i = 0; i < pk.length; i++) {
252
                                queryO.getOrder().add(pk[i].getName(), true);
253
                                queryR.getOrder().add(pk[i].getName(), true);
254
                        }
255

    
256

    
257
                        set = result.getFeatureSet(queryR);
258
                        originalSet = store.getFeatureSet(queryO);
259

    
260

    
261
                } else {
262
                        set = result.getFeatureSet();
263
                        originalSet = store.getFeatureSet();
264
                }
265
                assertEquals(set.getSize(), originalSet.getSize());
266

    
267
                DisposableIterator originalIter = (DisposableIterator) originalSet.fastIterator();
268
                DisposableIterator iter = (DisposableIterator) set.fastIterator();
269
                assertTrue(compareFeatureIterators(originalIter, iter));
270
                originalIter.dispose();
271
                iter.dispose();
272

    
273
                if (store.getEnvelope() != result.getEnvelope()) {
274
                        if (store.getEnvelope() != null) {
275
                                assertTrue(store.getEnvelope().equals(result.getEnvelope()));
276
                        } else {
277
                                fail("Envelope: src=" + store.getEnvelope() + " traget="
278
                                                + store.getEnvelope());
279
                        }
280
                }
281

    
282
                set.dispose();
283
                originalSet.dispose();
284

    
285
                result.dispose();
286
                this.clearCopy(store, newParams);
287
                store.dispose();
288

    
289
        }
290

    
291
        public void testRemove() throws Exception {
292
                DataStoreParameters parameters = null;
293

    
294
                parameters = getDefaultDataStoreParameters();
295

    
296
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
297

    
298
                NewFeatureStoreParameters newParams = this
299
                                .getDefaultNewDataStoreParameters();
300
                try {
301
                        this.clearCopy(store, newParams);
302
                } catch (RemoveException e) {
303
                        // Dp nothing
304
                }
305

    
306
                FeatureStore result = this.getStoreCopy(store, newParams);
307

    
308
                result.edit(FeatureStore.MODE_FULLEDIT);
309

    
310
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
311
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
312
                assertEquals(set.getSize(), originalSet.getSize());
313

    
314
                DisposableIterator originalIter = originalSet.fastIterator();
315
                DisposableIterator iter = set.fastIterator();
316
                int i = 0;
317
                while (iter.hasNext()) {
318
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
319
                                        (Feature) iter.next()));
320
                        i++;
321
                }
322

    
323
                iter.remove();
324

    
325

    
326
                assertEquals(originalSet.getSize() - 1, set.getSize());
327

    
328
                iter.dispose();
329
                originalIter.dispose();
330

    
331

    
332
                originalIter = (DisposableIterator) originalSet.fastIterator();
333
                iter = (DisposableIterator) set.fastIterator();
334
                i = 0;
335
                while (iter.hasNext()) {
336
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
337
                                        (Feature) iter.next()));
338
                        i++;
339
                }
340

    
341
                iter.remove();
342

    
343
                assertEquals(originalSet.getSize() - 2, set.getSize());
344

    
345
                iter.dispose();
346
                originalIter.dispose();
347

    
348
                set.dispose();
349

    
350
                result.finishEditing();
351

    
352
                set = result.getFeatureSet();
353
                assertEquals(originalSet.getSize() - 2, set.getSize());
354

    
355
                originalIter = originalSet.fastIterator();
356
                iter = set.fastIterator();
357
                i = 0;
358
                while (iter.hasNext()) {
359
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
360
                                        (Feature) iter.next()));
361
                        i++;
362
                }
363

    
364
                iter.dispose();
365
                originalIter.dispose();
366

    
367

    
368
                set.dispose();
369
                originalSet.dispose();
370

    
371
                result.dispose();
372
                this.clearCopy(store, newParams);
373
                store.dispose();
374

    
375

    
376
        }
377

    
378
        public void testInsert() throws Exception {
379
                DataStoreParameters parameters = null;
380

    
381
                parameters = getDefaultDataStoreParameters();
382

    
383

    
384
                FeatureStore store = (FeatureStore) dataManager
385
                .createStore(parameters);
386

    
387
                NewFeatureStoreParameters newParams = this
388
                .getDefaultNewDataStoreParameters();
389
                try {
390
                        this.clearCopy(store, newParams);
391
                } catch (RemoveException e) {
392
                        //Do nothing
393
                }
394

    
395
                FeatureStore result = this.getStoreCopy(store, newParams);
396

    
397
                result.edit(FeatureStore.MODE_FULLEDIT);
398

    
399
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
400
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
401
                assertEquals(set.getSize(), originalSet.getSize());
402

    
403
                EditableFeature newFeature = result.createNewFeature(true);
404
                fillPrimaryKeyInserFeature(newFeature);
405
                set.insert(newFeature);
406
                DisposableIterator originalIter = originalSet.fastIterator();
407
                DisposableIterator iter = set.fastIterator();
408
                int i = 0;
409
                while (originalIter.hasNext()) {
410
                        assertTrue("" + i, compareFeatures((Feature) originalIter
411
                                        .next(), (Feature) iter.next()));
412
                        i++;
413
                }
414
                assertTrue(iter.hasNext());
415
                assertNotNull(iter.next());
416
                assertFalse(iter.hasNext());
417

    
418
                assertEquals(originalSet.getSize() + 1, set.getSize());
419

    
420
                iter.dispose();
421
                originalIter.dispose();
422

    
423
                originalIter = originalSet.fastIterator();
424
                iter = set.fastIterator();
425
                i = 0;
426
                while (originalIter.hasNext()) {
427
                        assertTrue("" + i, compareFeatures((Feature) originalIter
428
                                        .next(), (Feature) iter.next()));
429
                        i++;
430
                }
431
                assertTrue(iter.hasNext());
432
                assertNotNull(iter.next());
433

    
434
                newFeature = result.createNewFeature(true);
435
                fillPrimaryKeyInserFeature(newFeature);
436
                set.insert(newFeature);
437

    
438
                assertEquals(originalSet.getSize() + 2, set.getSize());
439

    
440
                iter.dispose();
441
                originalIter.dispose();
442

    
443
                set.dispose();
444

    
445
                result.finishEditing();
446

    
447
                set = result.getFeatureSet();
448
                assertEquals(originalSet.getSize() + 2, set.getSize());
449

    
450
                originalIter = originalSet.fastIterator();
451
                iter = set.fastIterator();
452
                i = 0;
453
                while (originalIter.hasNext()) {
454
                        assertTrue("" + i, compareFeatures((Feature) originalIter
455
                                        .next(), (Feature) iter.next()));
456
                        i++;
457
                }
458

    
459
                assertNotNull(iter.next());
460
                assertNotNull(iter.next());
461
                assertFalse(iter.hasNext());
462

    
463
                iter.dispose();
464
                originalIter.dispose();
465

    
466
                set.dispose();
467
                originalSet.dispose();
468

    
469
                result.dispose();
470
                this.clearCopy(store, newParams);
471
                store.dispose();
472

    
473

    
474
        }
475

    
476

    
477

    
478
        public void testConcurrentRemove() throws Exception {
479
                DataStoreParameters parameters = null;
480

    
481
                parameters = getDefaultDataStoreParameters();
482

    
483

    
484
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
485

    
486
                NewFeatureStoreParameters newParams = this
487
                .getDefaultNewDataStoreParameters();
488
                try {
489
                        this.clearCopy(store, newParams);
490
                } catch (RemoveException e) {
491
                        // Dp nothing
492
                }
493

    
494
                FeatureStore result = this.getStoreCopy(store, newParams);
495

    
496
                result.edit(FeatureStore.MODE_FULLEDIT);
497

    
498
                DeleteFirstAndLastFeature deleteFeature = new DeleteFirstAndLastFeature(
499
                                "1", result, StoreTask.TIME_TO_WAIT_NO_WAIT);
500

    
501
                FeatureSet set = result.getFeatureSet();
502

    
503
                DisposableIterator iter = set.fastIterator();
504
                assertTrue(iter.hasNext());
505
                assertNotNull(iter.next());
506

    
507
                deleteFeature.start();
508

    
509
                while (deleteFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
510
                        Thread.yield();
511
                        Thread.sleep(100);
512
                        if (deleteFeature.isOutOfDate()) {
513
                                break;
514
                        }
515
                }
516

    
517
                assertEquals(deleteFeature.getCurrentStatus(),
518
                                StoreTask.STATUS_FINISHED_OK);
519

    
520
                Exception ex = null;
521
                try {
522
                        iter.next();
523
                } catch (Exception e) {
524
                        ex = e;
525
                }
526
                assertNotNull(ex);
527
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
528

    
529
                ex = null;
530
                try {
531
                        set.getSize();
532
                } catch (Exception e) {
533
                        ex = e;
534
                }
535
                assertNotNull(ex);
536
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
537

    
538
                iter.dispose();
539
                result.dispose();
540
                this.clearCopy(store, newParams);
541
                store.dispose();
542

    
543
        }
544

    
545
        public void testConcurrentInsert() throws Exception{
546
                DataStoreParameters parameters = null;
547

    
548
                parameters = getDefaultDataStoreParameters();
549

    
550

    
551
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
552

    
553
                NewFeatureStoreParameters newParams = this
554
                .getDefaultNewDataStoreParameters();
555
                try {
556
                        this.clearCopy(store, newParams);
557
                } catch (RemoveException e) {
558
                        // Dp nothing
559
                }
560

    
561
                FeatureStore result = this.getStoreCopy(store, newParams);
562

    
563
                result.edit(FeatureStore.MODE_FULLEDIT);
564

    
565
                InsertFeature insertFeature = new InsertFeature("1", result,
566
                                StoreTask.TIME_TO_WAIT_NO_WAIT, this);
567

    
568
                FeatureSet set = result.getFeatureSet();
569

    
570
                DisposableIterator iter = set.fastIterator();
571
                assertTrue(iter.hasNext());
572
                assertNotNull(iter.next());
573

    
574
                insertFeature.start();
575

    
576
                while (insertFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
577
                        Thread.yield();
578
                        Thread.sleep(100);
579
                        if (insertFeature.isOutOfDate()) {
580
                                break;
581
                        }
582
                }
583

    
584
                assertEquals(StoreTask.STATUS_FINISHED_OK, insertFeature
585
                                .getCurrentStatus());
586

    
587
                Exception ex = null;
588
                try {
589
                        iter.next();
590
                } catch (Exception e) {
591
                        ex = e;
592
                }
593
                assertNotNull(ex);
594
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
595

    
596
                ex = null;
597
                try {
598
                        set.getSize();
599
                } catch (Exception e) {
600
                        ex = e;
601
                }
602
                assertNotNull(ex);
603
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
604

    
605
                iter.dispose();
606
                result.dispose();
607
                this.clearCopy(store, newParams);
608
                store.dispose();
609
        }
610

    
611
        public void testConcurrentUpdate() throws Exception {
612
                DataStoreParameters parameters = null;
613

    
614
                parameters = getDefaultDataStoreParameters();
615

    
616

    
617
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
618

    
619
                NewFeatureStoreParameters newParams = this
620
                .getDefaultNewDataStoreParameters();
621
                try {
622
                        this.clearCopy(store, newParams);
623
                } catch (RemoveException e) {
624
                        // Dp nothing
625
                }
626

    
627
                FeatureStore result = this.getStoreCopy(store, newParams);
628

    
629

    
630
                result.edit(FeatureStore.MODE_FULLEDIT);
631

    
632
                UpdateFeature updateFeature = new UpdateFeature("1", result,
633
                                StoreTask.TIME_TO_WAIT_NO_WAIT);
634

    
635
                FeatureType fType = result.getDefaultFeatureType();
636
                FeatureAttributeDescriptor attr;
637
                Iterator fTypeIter = fType.iterator();
638
                String attrName = null;
639
                while (fTypeIter.hasNext()){
640
                        attr = (FeatureAttributeDescriptor) fTypeIter.next();
641
                        if (attr.getType() == DataTypes.STRING && !attr.isReadOnly() && !attr.isPrimaryKey() && !attr.isAutomatic()){
642
                                attrName= attr.getName();
643
                        }
644
                }
645
                if (attrName == null) {
646
                        fail("This test needs an normal attribute String (no Pk, no ReadOnly & no Auto)");
647
                        return;
648
                }
649

    
650

    
651
                updateFeature.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attrName,
652
                                "XXX");
653

    
654
                FeatureSet set = result.getFeatureSet();
655

    
656
                DisposableIterator iter = set.fastIterator();
657
                assertTrue(iter.hasNext());
658
                assertNotNull(iter.next());
659

    
660
                updateFeature.start();
661

    
662
                while (updateFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
663
                        Thread.yield();
664
                        Thread.sleep(100);
665
                        if (updateFeature.isOutOfDate()) {
666
                                break;
667
                        }
668
                }
669

    
670
                assertEquals(StoreTask.STATUS_FINISHED_OK, updateFeature
671
                                .getCurrentStatus());
672

    
673
                Exception ex = null;
674
                try {
675
                        iter.next();
676
                } catch (Exception e) {
677
                        ex = e;
678
                }
679
                assertNotNull(ex);
680
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
681

    
682
                ex = null;
683
                try {
684
                        set.getSize();
685
                } catch (Exception e) {
686
                        ex = e;
687
                }
688
                assertNotNull(ex);
689
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
690

    
691
                iter.dispose();
692
                result.dispose();
693
                this.clearCopy(store, newParams);
694
                store.dispose();
695

    
696

    
697

    
698
        }
699

    
700
        public void testSequencedRemove() throws Exception {
701
                DataStoreParameters parameters = null;
702

    
703
                int ntimes = 3;
704

    
705
                parameters = getDefaultDataStoreParameters();
706

    
707
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
708

    
709
                NewFeatureStoreParameters newParams = this
710
                .getDefaultNewDataStoreParameters();
711
                try {
712
                        this.clearCopy(store, newParams);
713
                } catch (RemoveException e) {
714
                        // Dp nothing
715
                }
716

    
717
                FeatureStore result = this.getStoreCopy(store, newParams);
718

    
719
                result.edit(FeatureStore.MODE_FULLEDIT);
720

    
721
                DeleteLastFeature[] deletesFeature = new DeleteLastFeature[ntimes];
722
                int i;
723
                for (i = 0; i < deletesFeature.length; i++) {
724
                        deletesFeature[i] = new DeleteLastFeature("DeleteLastFeature:" + i,
725
                                        result, 300 * i);
726
                }
727

    
728
                for (i = 0; i < deletesFeature.length; i++) {
729
                        deletesFeature[i].start();
730
                }
731

    
732
                try {
733
                        for (int x = 0; x < (deletesFeature.length + 2); x++) {
734
                                Thread.yield();
735
                                Thread.sleep(500);
736
                        }
737

    
738
                } catch (InterruptedException e) {
739
                        e.printStackTrace();
740
                        result.dispose();
741
                        fail();
742
                        return;
743
                }
744

    
745
                boolean testAll = false;
746
                boolean restart;
747
                DeleteLastFeature item;
748
                while (!testAll) {
749
                        restart = false;
750
                        for (i = 0; i < deletesFeature.length; i++) {
751
                                item = deletesFeature[i];
752
                                if (item.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
753
                                        if (item.isOutOfDate()) {
754
                                                result.dispose();
755
                                                fail("OutOfDate: " + i);
756
                                                return;
757
                                        }
758
                                        try {
759
                                                Thread.yield();
760
                                                Thread.sleep(400);
761
                                        } catch (InterruptedException e) {
762
                                                e.printStackTrace();
763
                                                result.dispose();
764
                                                fail();
765
                                                return;
766
                                        }
767
                                        restart = true;
768
                                        break;
769
                                } else if (item.getCurrentStatus() == StoreTask.STATUS_ERROR) {
770
                                        item.getException().printStackTrace();
771
                                        result.dispose();
772
                                        fail("ERROR: " + i);
773
                                        return;
774
                                } else if (item.getCurrentStatus() != StoreTask.STATUS_FINISHED_OK) {
775
                                        item.getException().printStackTrace();
776
                                        result.dispose();
777
                                        fail("Data ERROR: " + i);
778
                                        return;
779
                                }
780
                        }
781
                        if (restart) {
782
                                continue;
783
                        }
784
                        testAll = true;
785
                }
786

    
787
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
788
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
789
                assertEquals(originalSet.getSize() - deletesFeature.length, set
790
                                .getSize());
791

    
792
                DisposableIterator originalIter = originalSet.fastIterator();
793
                DisposableIterator iter = set.fastIterator();
794

    
795
                i = 0;
796
                while (iter.hasNext()) {
797
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
798
                                        (Feature) iter.next()));
799
                        i++;
800
                }
801

    
802
                originalIter.dispose();
803
                iter.dispose();
804

    
805
                set.dispose();
806

    
807
                result.finishEditing();
808

    
809
                set = result.getFeatureSet(getDefaultQuery(result));
810
                assertEquals(originalSet.getSize() - deletesFeature.length, set
811
                                .getSize());
812

    
813
                originalIter = originalSet.fastIterator();
814
                iter = set.fastIterator();
815
                i = 0;
816
                while (iter.hasNext()) {
817
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
818
                                        (Feature) iter.next()));
819
                        i++;
820
                }
821

    
822

    
823
                originalIter.dispose();
824
                iter.dispose();
825

    
826
                set.dispose();
827
                originalSet.dispose();
828

    
829
                result.dispose();
830
                this.clearCopy(store, newParams);
831
                store.dispose();
832
        }
833

    
834
        public void testSequencedInsert() throws Exception {
835
                DataStoreParameters parameters = null;
836

    
837
                int ntimes = 3;
838

    
839
                parameters = getDefaultDataStoreParameters();
840

    
841

    
842
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
843

    
844
                NewFeatureStoreParameters newParams = this
845
                .getDefaultNewDataStoreParameters();
846
                try {
847
                        this.clearCopy(store, newParams);
848
                } catch (RemoveException e) {
849
                        // Dp nothing
850
                }
851

    
852
                FeatureStore result = this.getStoreCopy(store, newParams);
853

    
854
                result.edit(FeatureStore.MODE_FULLEDIT);
855

    
856
                InsertFeature[] insertsFeature = new InsertFeature[ntimes];
857
                int i;
858
                for (i = 0; i < insertsFeature.length; i++) {
859
                        insertsFeature[i] = new InsertFeature("InsertFeature:" + i, result,
860
                                        300 * i, this);
861
                }
862

    
863
                for (i = 0; i < insertsFeature.length; i++) {
864
                        insertsFeature[i].start();
865
                }
866

    
867
                try {
868

    
869
                        for (int x = 0; x < (insertsFeature.length + 2); x++) {
870
                                Thread.yield();
871
                                Thread.sleep(500);
872
                        }
873

    
874
                } catch (InterruptedException e) {
875
                        e.printStackTrace();
876
                        result.dispose();
877
                        fail();
878
                        return;
879
                }
880

    
881
                boolean testAll = false;
882
                boolean restart;
883
                InsertFeature item;
884
                while (!testAll) {
885
                        restart = false;
886
                        for (i = 0; i < insertsFeature.length; i++) {
887
                                item = insertsFeature[i];
888
                                if (item.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
889
                                        if (item.isOutOfDate()) {
890
                                                result.dispose();
891
                                                fail("OutOfDate: " + i);
892
                                                return;
893
                                        }
894
                                        try {
895
                                                Thread.yield();
896
                                                Thread.sleep(400);
897
                                        } catch (InterruptedException e) {
898
                                                e.printStackTrace();
899
                                                result.dispose();
900
                                                fail();
901
                                                return;
902
                                        }
903
                                        restart = true;
904
                                        break;
905
                                } else if (item.getCurrentStatus() == StoreTask.STATUS_ERROR) {
906
                                        item.getException().printStackTrace();
907
                                        result.dispose();
908
                                        fail("ERROR: " + i);
909
                                        return;
910
                                } else if (item.getCurrentStatus() == StoreTask.STATUS_FINISHED_NO_OK) {
911
                                        result.dispose();
912
                                        fail("No OK: " + i);
913
                                        return;
914
                                } else if (item.getCurrentStatus() != StoreTask.STATUS_FINISHED_OK) {
915
                                        item.getException().printStackTrace();
916
                                        result.dispose();
917
                                        fail("Data ERROR: " + i);
918
                                        return;
919

    
920
                                }
921
                        }
922
                        if (restart) {
923
                                continue;
924
                        }
925
                        testAll = true;
926
                }
927

    
928
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
929
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
930
                assertEquals(originalSet.getSize() + insertsFeature.length, set
931
                                .getSize());
932

    
933
                DisposableIterator originalIter = originalSet.fastIterator();
934
                DisposableIterator iter = set.fastIterator();
935

    
936
                i = 0;
937
                while (originalIter.hasNext()) {
938
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
939
                                        (Feature) iter.next()));
940
                        i++;
941
                }
942
                for (; i < insertsFeature.length; i++) {
943
                        iter.next();
944
                }
945

    
946

    
947
                originalIter.dispose();
948
                iter.dispose();
949

    
950
                set.dispose();
951

    
952
                result.finishEditing();
953

    
954
                set = result.getFeatureSet();
955
                assertEquals(originalSet.getSize() + insertsFeature.length, set
956
                                .getSize());
957

    
958
                originalIter = originalSet.fastIterator();
959
                iter = set.fastIterator();
960
                i = 0;
961
                while (originalIter.hasNext()) {
962
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
963
                                        (Feature) iter.next()));
964
                        i++;
965
                }
966
                for (; i < insertsFeature.length; i++) {
967
                        iter.next();
968
                }
969

    
970
                set.dispose();
971
                originalSet.dispose();
972

    
973
                result.dispose();
974
                this.clearCopy(store, newParams);
975
                store.dispose();
976

    
977
        }
978

    
979

    
980
        public void testUpdate() throws Exception {
981
                DataStoreParameters parameters = null;
982

    
983
                parameters = getDefaultDataStoreParameters();
984

    
985
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
986

    
987
                NewFeatureStoreParameters newParams = this
988
                .getDefaultNewDataStoreParameters();
989
                try {
990
                        this.clearCopy(store, newParams);
991
                } catch (RemoveException e) {
992
                        // Dp nothing
993
                }
994

    
995
                FeatureStore result = this.getStoreCopy(store, newParams);
996

    
997
                result.edit(FeatureStore.MODE_FULLEDIT);
998

    
999
                FeatureSet set = result.getFeatureSet();
1000
                long size = set.getSize();
1001

    
1002
                set.dispose();
1003

    
1004
                UpdateFeature updater = new UpdateFeature("1", result,
1005
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1006
                FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
1007
                                .getDefaultFeatureType(), DataTypes.STRING);
1008
                assertNotNull("No String attributes found", attr);
1009

    
1010
                updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
1011
                                getEvaluatorToLower(attr.getName()));
1012

    
1013
                updater.run();
1014
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1015
                                && !updater.isOutOfDate()) {
1016
                        Thread.yield();
1017
                        try {
1018
                                Thread.sleep(200);
1019
                        } catch (InterruptedException e) {
1020
                                e.printStackTrace();
1021
                                fail();
1022
                        }
1023
                }
1024
                set = result.getFeatureSet(getDefaultQuery(result));
1025
                DisposableIterator iter = set.fastIterator();
1026

    
1027
                printFeatureTypeColNames(set.getDefaultFeatureType(), 15);
1028
                Feature f;
1029
                while (iter.hasNext()) {
1030
                        f = (Feature) iter.next();
1031
                        this.printFeature(f, false, 15);
1032
                }
1033

    
1034
                iter.dispose();
1035

    
1036
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
1037

    
1038
                DisposableIterator originalIter = originalSet.fastIterator();
1039

    
1040
                iter = set.fastIterator();
1041

    
1042
                long i = 0;
1043
                while (originalIter.hasNext()) {
1044
                        try {
1045
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1046
                                                .next(), (Feature) iter.next(), updater, i, size));
1047
                        } catch (EvaluatorException e) {
1048
                                e.printStackTrace();
1049
                                fail();
1050
                        }
1051
                        i++;
1052
                }
1053
                iter.dispose();
1054
                originalIter.dispose();
1055

    
1056

    
1057
                set.dispose();
1058

    
1059
                result.finishEditing();
1060

    
1061
                set = result.getFeatureSet();
1062
                assertEquals(originalSet.getSize(), set.getSize());
1063

    
1064
                originalIter = originalSet.fastIterator();
1065
                iter = set.fastIterator();
1066
                i = 0;
1067
                while (originalIter.hasNext()) {
1068
                        try {
1069
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1070
                                                .next(), (Feature) iter.next(), updater, i, size));
1071
                        } catch (EvaluatorException e) {
1072
                                e.printStackTrace();
1073
                                fail();
1074
                        }
1075
                        i++;
1076
                }
1077

    
1078

    
1079
                iter.dispose();
1080
                originalIter.dispose();
1081
                set.dispose();
1082

    
1083

    
1084
                updater = new UpdateFeature("1", result,
1085
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1086

    
1087
                updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
1088
                                getEvaluatorToLower(attr.getName()));
1089

    
1090
                updater.run();
1091
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1092
                                && !updater.isOutOfDate()) {
1093
                        Thread.yield();
1094
                        try {
1095
                                Thread.sleep(200);
1096
                        } catch (InterruptedException e) {
1097
                                e.printStackTrace();
1098
                                fail();
1099
                        }
1100
                }
1101
                set = result.getFeatureSet();
1102

    
1103
                iter = set.fastIterator();
1104
                originalIter = originalSet.fastIterator();
1105
                i = 0;
1106
                while (originalIter.hasNext()) {
1107
                        try {
1108
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1109
                                                .next(), (Feature) iter.next(), updater, i, size));
1110
                        } catch (EvaluatorException e) {
1111
                                e.printStackTrace();
1112
                                fail();
1113
                        }
1114
                        i++;
1115
                }
1116

    
1117
                iter.dispose();
1118
                originalIter.dispose();
1119
                set.dispose();
1120

    
1121

    
1122

    
1123

    
1124

    
1125
                originalSet.dispose();
1126

    
1127
                result.dispose();
1128
                this.clearCopy(store, newParams);
1129
                store.dispose();
1130

    
1131
        }
1132

    
1133

    
1134
        public void testResourceChangeNotification() throws Exception{
1135
                if (!resourcesNotifyChanges()) {
1136
                        return;
1137
                }
1138

    
1139
                DataStoreParameters parameters = null;
1140

    
1141
                parameters = getDefaultDataStoreParameters();
1142

    
1143
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
1144

    
1145
                NewFeatureStoreParameters newParams = this
1146
                .getDefaultNewDataStoreParameters();
1147
                try {
1148
                        this.clearCopy(store, newParams);
1149
                } catch (RemoveException e) {
1150
                        // Dp nothing
1151
                }
1152

    
1153
                FeatureStore result = this.getStoreCopy(store, newParams);
1154

    
1155
                FeatureStore result2 = (FeatureStore) dataManager
1156
                .createStore(newParams);
1157

    
1158
                FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
1159
                                .getDefaultFeatureType(), DataTypes.STRING);
1160
                assertNotNull("No String attributes found", attr);
1161

    
1162

    
1163
                UpdateFeature updater = new UpdateFeature("1", result,
1164
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1165

    
1166
                updater.addUpdate(UpdateFeature.UPDATE_LAST_FEATURE, attr.getName(),
1167
                                getEvaluatorToLower(attr.getName()));
1168

    
1169
                StoreObserverForNotify observer = new StoreObserverForNotify(result2,
1170
                                FeatureStoreNotification.RESOURCE_CHANGED);
1171
                result2.addObserver(observer);
1172

    
1173
                result.edit();
1174
                updater.run();
1175
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1176
                                && !updater.isOutOfDate()) {
1177
                        Thread.yield();
1178
                        try {
1179
                                Thread.sleep(200);
1180
                        } catch (InterruptedException e) {
1181
                                e.printStackTrace();
1182
                                fail();
1183
                        }
1184
                }
1185

    
1186
                result.finishEditing();
1187

    
1188
                assertTrue("The observer hasn't been notified", observer.notified());
1189

    
1190
                result2.refresh();
1191

    
1192
                FeatureSet set = result.getFeatureSet();
1193
                FeatureSet set2 = result2.getFeatureSet();
1194

    
1195
                DisposableIterator iter1 = set.fastIterator();
1196
                DisposableIterator iter2 = set2.fastIterator();
1197
                assertTrue(this.compareFeatureIterators(iter1, iter2));
1198
                iter1.dispose();
1199
                iter2.dispose();
1200

    
1201
                set2.dispose();
1202
                set.dispose();
1203

    
1204
                // TODO checks FeatureType change
1205

    
1206
                result2.dispose();
1207
                result.dispose();
1208
                this.clearCopy(store, newParams);
1209
                store.dispose();
1210
        }
1211

    
1212
        public abstract class StoreObserver implements Observer{
1213

    
1214
                public DataStore store = null;
1215

    
1216
        }
1217

    
1218
        public class StoreObserverForNotify implements Observer{
1219

    
1220
                public DataStore store = null;
1221

    
1222
                public String notifyType = null;
1223

    
1224
                private boolean notifyRecived = false;
1225

    
1226
                public StoreObserverForNotify(DataStore store,String notifyType){
1227
                        this.store = store;
1228
                        this.notifyType = notifyType;
1229
                        this.notifyRecived = false;
1230
                }
1231

    
1232
                public boolean notified(){
1233
                        return notifyRecived;
1234
                }
1235

    
1236
                public void update(Observable observable, Object notification) {
1237
                        if (!(observable == this.store)){
1238
                                return;
1239
                        }
1240
                        if (!(notification instanceof FeatureStoreNotification)){
1241
                                return;
1242
                        }
1243
                        FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
1244

    
1245
                        if (fsNotification.getType().equals(this.notifyType)){
1246
                                notifyRecived = true;
1247
                        }
1248
                }
1249

    
1250
        }
1251

    
1252
        public void testUpdateFeatureType_AddField() throws Exception {
1253
                DataStoreParameters parameters = null;
1254

    
1255
                parameters = getDefaultDataStoreParameters();
1256

    
1257
                FeatureStore store = (FeatureStore) dataManager
1258
                .createStore(parameters);
1259

    
1260
                NewFeatureStoreParameters newParams = this
1261
                .getDefaultNewDataStoreParameters();
1262
                try {
1263
                        this.clearCopy(store, newParams);
1264
                } catch (RemoveException e) {
1265
                        // Dp nothing
1266
                }
1267

    
1268
                int pkAttributesCount = 0;
1269

    
1270
                FeatureStore result = this.getStoreCopy(store, newParams);
1271

    
1272
                result.edit();
1273

    
1274

    
1275
                String[] orgAttNames = new String[result.getDefaultFeatureType()
1276
                                                  .size()];
1277

    
1278
                Iterator iter = result.getDefaultFeatureType().iterator();
1279
                int i = 0;
1280

    
1281
                while (iter.hasNext()) {
1282
                        FeatureAttributeDescriptor attr = ((FeatureAttributeDescriptor) iter
1283
                                        .next());
1284
                        orgAttNames[i] = attr.getName();
1285
                        i++;
1286
                        if (attr.isPrimaryKey()) {
1287
                                pkAttributesCount++;
1288
                        }
1289
                }
1290

    
1291
                EditableFeatureType edFtype = result
1292
                .getDefaultFeatureType().getEditable();
1293

    
1294
                edFtype.add("__ATTR1__", DataTypes.STRING).setSize(10)
1295
                .setDefaultValue(
1296
                                "HOLA");
1297

    
1298
                result.update(edFtype);
1299

    
1300
                assertEquals(store.getDefaultFeatureType().size() + 1, result
1301
                                .getDefaultFeatureType().size());
1302

    
1303
                testIterationFastAndStandart(result);
1304

    
1305
                FeatureSet orgSet = store.getFeatureSet(getDefaultQuery(store));
1306
                FeatureSet curSet = result.getFeatureSet(getDefaultQuery(result));
1307

    
1308
                assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
1309
                                .getDefaultFeatureType().size());
1310

    
1311
                DisposableIterator orgIter = orgSet.fastIterator();
1312
                DisposableIterator curIter = curSet.fastIterator();
1313

    
1314
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1315

    
1316
                orgIter.dispose();
1317
                curIter.dispose();
1318

    
1319
                orgIter = orgSet.fastIterator();
1320
                curIter = curSet.fastIterator();
1321

    
1322
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1323
                orgIter.dispose();
1324
                curIter.dispose();
1325

    
1326
                orgIter = orgSet.fastIterator();
1327
                curIter = curSet.fastIterator();
1328

    
1329
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1330
                orgIter.dispose();
1331
                curIter.dispose();
1332

    
1333
                orgIter = orgSet.fastIterator();
1334
                curIter = curSet.fastIterator();
1335

    
1336
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1337
                orgIter.dispose();
1338
                curIter.dispose();
1339

    
1340
                curIter = curSet.fastIterator();
1341
                Feature feature;
1342
                while (curIter.hasNext()) {
1343
                        feature = (Feature) curIter.next();
1344
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1345
                }
1346
                curIter.dispose();
1347
                curSet.dispose();
1348

    
1349
                FeatureQuery query = this.getDefaultQuery(result);
1350
                query.setAttributeNames(new String[] { "__ATTR1__" });
1351
                curSet = result.getFeatureSet(query);
1352

    
1353
                assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
1354
                                .size());
1355

    
1356
                assertEquals(orgSet.getSize(), curSet.getSize());
1357
                curIter = curSet.fastIterator();
1358
                while (curIter.hasNext()) {
1359
                        feature = (Feature) curIter.next();
1360
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1361
                }
1362
                curIter.dispose();
1363
                curSet.dispose();
1364

    
1365
                result.finishEditing();
1366

    
1367
                testIterationFastAndStandart(result);
1368

    
1369
                assertEquals(store.getDefaultFeatureType().size() + 1, result
1370
                                .getDefaultFeatureType().size());
1371

    
1372

    
1373
                orgSet = store.getFeatureSet(getDefaultQuery(store));
1374
                curSet = result.getFeatureSet(getDefaultQuery(result));
1375

    
1376
                assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
1377
                                .getDefaultFeatureType().size());
1378

    
1379
                orgIter = orgSet.fastIterator();
1380
                curIter = curSet.fastIterator();
1381

    
1382
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1383
                orgIter.dispose();
1384
                curIter.dispose();
1385

    
1386
                orgIter = orgSet.fastIterator();
1387
                curIter = curSet.fastIterator();
1388

    
1389
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1390
                orgIter.dispose();
1391
                curIter.dispose();
1392

    
1393
                orgIter = orgSet.fastIterator();
1394
                curIter = curSet.fastIterator();
1395

    
1396
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1397
                orgIter.dispose();
1398
                curIter.dispose();
1399

    
1400
                orgIter = orgSet.fastIterator();
1401
                curIter = curSet.fastIterator();
1402

    
1403
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1404
                orgIter.dispose();
1405
                curIter.dispose();
1406

    
1407
                curIter = curSet.fastIterator();
1408
                while (curIter.hasNext()) {
1409
                        feature = (Feature) curIter.next();
1410
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1411
                }
1412
                curIter.dispose();
1413
                curSet.dispose();
1414

    
1415
                query = this.getDefaultQuery(result);
1416
                query.setAttributeNames(new String[] { "__ATTR1__" });
1417
                curSet = result.getFeatureSet(query);
1418

    
1419
                assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
1420
                                .size());
1421

    
1422
                assertEquals(orgSet.getSize(), curSet.getSize());
1423
                curIter = curSet.fastIterator();
1424
                while (curIter.hasNext()) {
1425
                        feature = (Feature) curIter.next();
1426
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1427
                }
1428
                curIter.dispose();
1429
                curSet.dispose();
1430

    
1431
                orgSet.dispose();
1432
                result.dispose();
1433
                this.clearCopy(store, newParams);
1434
                store.dispose();
1435

    
1436

    
1437
        }
1438

    
1439
        public void testResourcesLocks() throws Exception {
1440

    
1441

    
1442
        }
1443

    
1444
}