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 @ 43020

History | View | Annotate | Download (36 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.openStore(
230
                        parameters.getDataStoreName(),
231
                        parameters
232
                );
233

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

    
242
                FeatureStore result = this.getStoreCopy(store, newParams);
243

    
244
                fullStoreIteratorTest(result);
245

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

    
259

    
260
                        set = result.getFeatureSet(queryR);
261
                        originalSet = store.getFeatureSet(queryO);
262

    
263

    
264
                } else {
265
                        set = result.getFeatureSet();
266
                        originalSet = store.getFeatureSet();
267
                }
268
                assertEquals(set.getSize(), originalSet.getSize());
269

    
270
                DisposableIterator originalIter = (DisposableIterator) originalSet.fastIterator();
271
                DisposableIterator iter = (DisposableIterator) set.fastIterator();
272
                assertTrue(compareFeatureIterators(originalIter, iter));
273
                originalIter.dispose();
274
                iter.dispose();
275

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

    
285
                set.dispose();
286
                originalSet.dispose();
287

    
288
                result.dispose();
289
                this.clearCopy(store, newParams);
290
                store.dispose();
291

    
292
        }
293

    
294
        public void testRemove() throws Exception {
295
                DataStoreParameters parameters = null;
296

    
297
                parameters = getDefaultDataStoreParameters();
298

    
299
                FeatureStore store = (FeatureStore) dataManager.openStore(
300
                        parameters.getDataStoreName(),
301
                        parameters
302
                );
303
                NewFeatureStoreParameters newParams = this
304
                                .getDefaultNewDataStoreParameters();
305
                try {
306
                        this.clearCopy(store, newParams);
307
                } catch (RemoveException e) {
308
                        // Dp nothing
309
                }
310

    
311
                FeatureStore result = this.getStoreCopy(store, newParams);
312

    
313
                result.edit(FeatureStore.MODE_FULLEDIT);
314

    
315
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
316
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
317
                assertEquals(set.getSize(), originalSet.getSize());
318

    
319
                DisposableIterator originalIter = originalSet.fastIterator();
320
                DisposableIterator iter = set.fastIterator();
321
                int i = 0;
322
                while (iter.hasNext()) {
323
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
324
                                        (Feature) iter.next()));
325
                        i++;
326
                }
327

    
328
                iter.remove();
329

    
330

    
331
                assertEquals(originalSet.getSize() - 1, set.getSize());
332

    
333
                iter.dispose();
334
                originalIter.dispose();
335

    
336

    
337
                originalIter = (DisposableIterator) originalSet.fastIterator();
338
                iter = (DisposableIterator) set.fastIterator();
339
                i = 0;
340
                while (iter.hasNext()) {
341
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
342
                                        (Feature) iter.next()));
343
                        i++;
344
                }
345

    
346
                iter.remove();
347

    
348
                assertEquals(originalSet.getSize() - 2, set.getSize());
349

    
350
                iter.dispose();
351
                originalIter.dispose();
352

    
353
                set.dispose();
354

    
355
                result.finishEditing();
356

    
357
                set = result.getFeatureSet();
358
                assertEquals(originalSet.getSize() - 2, set.getSize());
359

    
360
                originalIter = originalSet.fastIterator();
361
                iter = set.fastIterator();
362
                i = 0;
363
                while (iter.hasNext()) {
364
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
365
                                        (Feature) iter.next()));
366
                        i++;
367
                }
368

    
369
                iter.dispose();
370
                originalIter.dispose();
371

    
372

    
373
                set.dispose();
374
                originalSet.dispose();
375

    
376
                result.dispose();
377
                this.clearCopy(store, newParams);
378
                store.dispose();
379

    
380

    
381
        }
382

    
383
        public void testInsert() throws Exception {
384
                DataStoreParameters parameters = null;
385

    
386
                parameters = getDefaultDataStoreParameters();
387

    
388
                FeatureStore store = (FeatureStore) dataManager.openStore(
389
                        parameters.getDataStoreName(),
390
                        parameters
391
                );
392

    
393
                NewFeatureStoreParameters newParams = this
394
                .getDefaultNewDataStoreParameters();
395
                try {
396
                        this.clearCopy(store, newParams);
397
                } catch (RemoveException e) {
398
                        //Do nothing
399
                }
400

    
401
                FeatureStore result = this.getStoreCopy(store, newParams);
402

    
403
                result.edit(FeatureStore.MODE_FULLEDIT);
404

    
405
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
406
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
407
                assertEquals(set.getSize(), originalSet.getSize());
408

    
409
                EditableFeature newFeature = result.createNewFeature(true);
410
                fillPrimaryKeyInserFeature(newFeature);
411
                set.insert(newFeature);
412
                DisposableIterator originalIter = originalSet.fastIterator();
413
                DisposableIterator iter = set.fastIterator();
414
                int i = 0;
415
                while (originalIter.hasNext()) {
416
                        assertTrue("" + i, compareFeatures((Feature) originalIter
417
                                        .next(), (Feature) iter.next()));
418
                        i++;
419
                }
420
                assertTrue(iter.hasNext());
421
                assertNotNull(iter.next());
422
                assertFalse(iter.hasNext());
423

    
424
                assertEquals(originalSet.getSize() + 1, set.getSize());
425

    
426
                iter.dispose();
427
                originalIter.dispose();
428

    
429
                originalIter = originalSet.fastIterator();
430
                iter = set.fastIterator();
431
                i = 0;
432
                while (originalIter.hasNext()) {
433
                        assertTrue("" + i, compareFeatures((Feature) originalIter
434
                                        .next(), (Feature) iter.next()));
435
                        i++;
436
                }
437
                assertTrue(iter.hasNext());
438
                assertNotNull(iter.next());
439

    
440
                newFeature = result.createNewFeature(true);
441
                fillPrimaryKeyInserFeature(newFeature);
442
                set.insert(newFeature);
443

    
444
                assertEquals(originalSet.getSize() + 2, set.getSize());
445

    
446
                iter.dispose();
447
                originalIter.dispose();
448

    
449
                set.dispose();
450

    
451
                result.finishEditing();
452

    
453
                set = result.getFeatureSet();
454
                assertEquals(originalSet.getSize() + 2, set.getSize());
455

    
456
                originalIter = originalSet.fastIterator();
457
                iter = set.fastIterator();
458
                i = 0;
459
                while (originalIter.hasNext()) {
460
                        assertTrue("" + i, compareFeatures((Feature) originalIter
461
                                        .next(), (Feature) iter.next()));
462
                        i++;
463
                }
464

    
465
                assertNotNull(iter.next());
466
                assertNotNull(iter.next());
467
                assertFalse(iter.hasNext());
468

    
469
                iter.dispose();
470
                originalIter.dispose();
471

    
472
                set.dispose();
473
                originalSet.dispose();
474

    
475
                result.dispose();
476
                this.clearCopy(store, newParams);
477
                store.dispose();
478

    
479

    
480
        }
481

    
482

    
483

    
484
        public void testConcurrentRemove() throws Exception {
485
                DataStoreParameters parameters = null;
486

    
487
                parameters = getDefaultDataStoreParameters();
488

    
489
                FeatureStore store = (FeatureStore) dataManager.openStore(
490
                        parameters.getDataStoreName(),
491
                        parameters
492
                );
493

    
494
                NewFeatureStoreParameters newParams = this
495
                .getDefaultNewDataStoreParameters();
496
                try {
497
                        this.clearCopy(store, newParams);
498
                } catch (RemoveException e) {
499
                        // Dp nothing
500
                }
501

    
502
                FeatureStore result = this.getStoreCopy(store, newParams);
503

    
504
                result.edit(FeatureStore.MODE_FULLEDIT);
505

    
506
                DeleteFirstAndLastFeature deleteFeature = new DeleteFirstAndLastFeature(
507
                                "1", result, StoreTask.TIME_TO_WAIT_NO_WAIT);
508

    
509
                FeatureSet set = result.getFeatureSet();
510

    
511
                DisposableIterator iter = set.fastIterator();
512
                assertTrue(iter.hasNext());
513
                assertNotNull(iter.next());
514

    
515
                deleteFeature.start();
516

    
517
                while (deleteFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
518
                        Thread.yield();
519
                        Thread.sleep(100);
520
                        if (deleteFeature.isOutOfDate()) {
521
                                break;
522
                        }
523
                }
524

    
525
                assertEquals(deleteFeature.getCurrentStatus(),
526
                                StoreTask.STATUS_FINISHED_OK);
527

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

    
537
                ex = null;
538
                try {
539
                        set.getSize();
540
                } catch (Exception e) {
541
                        ex = e;
542
                }
543
                assertNotNull(ex);
544
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
545

    
546
                iter.dispose();
547
                result.dispose();
548
                this.clearCopy(store, newParams);
549
                store.dispose();
550

    
551
        }
552

    
553
        public void testConcurrentInsert() throws Exception{
554
                DataStoreParameters parameters = null;
555

    
556
                parameters = getDefaultDataStoreParameters();
557

    
558
                FeatureStore store = (FeatureStore) dataManager.openStore(
559
                        parameters.getDataStoreName(),
560
                        parameters
561
                );
562

    
563
                NewFeatureStoreParameters newParams = this
564
                .getDefaultNewDataStoreParameters();
565
                try {
566
                        this.clearCopy(store, newParams);
567
                } catch (RemoveException e) {
568
                        // Dp nothing
569
                }
570

    
571
                FeatureStore result = this.getStoreCopy(store, newParams);
572

    
573
                result.edit(FeatureStore.MODE_FULLEDIT);
574

    
575
                InsertFeature insertFeature = new InsertFeature("1", result,
576
                                StoreTask.TIME_TO_WAIT_NO_WAIT, this);
577

    
578
                FeatureSet set = result.getFeatureSet();
579

    
580
                DisposableIterator iter = set.fastIterator();
581
                assertTrue(iter.hasNext());
582
                assertNotNull(iter.next());
583

    
584
                insertFeature.start();
585

    
586
                while (insertFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
587
                        Thread.yield();
588
                        Thread.sleep(100);
589
                        if (insertFeature.isOutOfDate()) {
590
                                break;
591
                        }
592
                }
593

    
594
                assertEquals(StoreTask.STATUS_FINISHED_OK, insertFeature
595
                                .getCurrentStatus());
596

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

    
606
                ex = null;
607
                try {
608
                        set.getSize();
609
                } catch (Exception e) {
610
                        ex = e;
611
                }
612
                assertNotNull(ex);
613
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
614

    
615
                iter.dispose();
616
                result.dispose();
617
                this.clearCopy(store, newParams);
618
                store.dispose();
619
        }
620

    
621
        public void testConcurrentUpdate() throws Exception {
622
                DataStoreParameters parameters = null;
623

    
624
                parameters = getDefaultDataStoreParameters();
625

    
626
                FeatureStore store = (FeatureStore) dataManager.openStore(
627
                        parameters.getDataStoreName(),
628
                        parameters
629
                );
630

    
631
                NewFeatureStoreParameters newParams = this
632
                .getDefaultNewDataStoreParameters();
633
                try {
634
                        this.clearCopy(store, newParams);
635
                } catch (RemoveException e) {
636
                        // Dp nothing
637
                }
638

    
639
                FeatureStore result = this.getStoreCopy(store, newParams);
640

    
641

    
642
                result.edit(FeatureStore.MODE_FULLEDIT);
643

    
644
                UpdateFeature updateFeature = new UpdateFeature("1", result,
645
                                StoreTask.TIME_TO_WAIT_NO_WAIT);
646

    
647
                FeatureType fType = result.getDefaultFeatureType();
648
                FeatureAttributeDescriptor attr;
649
                Iterator fTypeIter = fType.iterator();
650
                String attrName = null;
651
                while (fTypeIter.hasNext()){
652
                        attr = (FeatureAttributeDescriptor) fTypeIter.next();
653
                        if (attr.getType() == DataTypes.STRING && !attr.isReadOnly() && !attr.isPrimaryKey() && !attr.isAutomatic()){
654
                                attrName= attr.getName();
655
                        }
656
                }
657
                if (attrName == null) {
658
                        fail("This test needs an normal attribute String (no Pk, no ReadOnly & no Auto)");
659
                        return;
660
                }
661

    
662

    
663
                updateFeature.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attrName,
664
                                "XXX");
665

    
666
                FeatureSet set = result.getFeatureSet();
667

    
668
                DisposableIterator iter = set.fastIterator();
669
                assertTrue(iter.hasNext());
670
                assertNotNull(iter.next());
671

    
672
                updateFeature.start();
673

    
674
                while (updateFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
675
                        Thread.yield();
676
                        Thread.sleep(100);
677
                        if (updateFeature.isOutOfDate()) {
678
                                break;
679
                        }
680
                }
681

    
682
                assertEquals(StoreTask.STATUS_FINISHED_OK, updateFeature
683
                                .getCurrentStatus());
684

    
685
                Exception ex = null;
686
                try {
687
                        iter.next();
688
                } catch (Exception e) {
689
                        ex = e;
690
                }
691
                assertNotNull(ex);
692
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
693

    
694
                ex = null;
695
                try {
696
                        set.getSize();
697
                } catch (Exception e) {
698
                        ex = e;
699
                }
700
                assertNotNull(ex);
701
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
702

    
703
                iter.dispose();
704
                result.dispose();
705
                this.clearCopy(store, newParams);
706
                store.dispose();
707

    
708

    
709

    
710
        }
711

    
712
        public void testSequencedRemove() throws Exception {
713
                DataStoreParameters parameters = null;
714

    
715
                int ntimes = 3;
716

    
717
                parameters = getDefaultDataStoreParameters();
718

    
719
                FeatureStore store = (FeatureStore) dataManager.openStore(
720
                        parameters.getDataStoreName(),
721
                        parameters
722
                );
723

    
724
                NewFeatureStoreParameters newParams = this
725
                .getDefaultNewDataStoreParameters();
726
                try {
727
                        this.clearCopy(store, newParams);
728
                } catch (RemoveException e) {
729
                        // Dp nothing
730
                }
731

    
732
                FeatureStore result = this.getStoreCopy(store, newParams);
733

    
734
                result.edit(FeatureStore.MODE_FULLEDIT);
735

    
736
                DeleteLastFeature[] deletesFeature = new DeleteLastFeature[ntimes];
737
                int i;
738
                for (i = 0; i < deletesFeature.length; i++) {
739
                        deletesFeature[i] = new DeleteLastFeature("DeleteLastFeature:" + i,
740
                                        result, 300 * i);
741
                }
742

    
743
                for (i = 0; i < deletesFeature.length; i++) {
744
                        deletesFeature[i].start();
745
                }
746

    
747
                try {
748
                        for (int x = 0; x < (deletesFeature.length + 2); x++) {
749
                                Thread.yield();
750
                                Thread.sleep(500);
751
                        }
752

    
753
                } catch (InterruptedException e) {
754
                        e.printStackTrace();
755
                        result.dispose();
756
                        fail();
757
                        return;
758
                }
759

    
760
                boolean testAll = false;
761
                boolean restart;
762
                DeleteLastFeature item;
763
                while (!testAll) {
764
                        restart = false;
765
                        for (i = 0; i < deletesFeature.length; i++) {
766
                                item = deletesFeature[i];
767
                                if (item.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
768
                                        if (item.isOutOfDate()) {
769
                                                result.dispose();
770
                                                fail("OutOfDate: " + i);
771
                                                return;
772
                                        }
773
                                        try {
774
                                                Thread.yield();
775
                                                Thread.sleep(400);
776
                                        } catch (InterruptedException e) {
777
                                                e.printStackTrace();
778
                                                result.dispose();
779
                                                fail();
780
                                                return;
781
                                        }
782
                                        restart = true;
783
                                        break;
784
                                } else if (item.getCurrentStatus() == StoreTask.STATUS_ERROR) {
785
                                        item.getException().printStackTrace();
786
                                        result.dispose();
787
                                        fail("ERROR: " + i);
788
                                        return;
789
                                } else if (item.getCurrentStatus() != StoreTask.STATUS_FINISHED_OK) {
790
                                        item.getException().printStackTrace();
791
                                        result.dispose();
792
                                        fail("Data ERROR: " + i);
793
                                        return;
794
                                }
795
                        }
796
                        if (restart) {
797
                                continue;
798
                        }
799
                        testAll = true;
800
                }
801

    
802
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
803
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
804
                assertEquals(originalSet.getSize() - deletesFeature.length, set
805
                                .getSize());
806

    
807
                DisposableIterator originalIter = originalSet.fastIterator();
808
                DisposableIterator iter = set.fastIterator();
809

    
810
                i = 0;
811
                while (iter.hasNext()) {
812
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
813
                                        (Feature) iter.next()));
814
                        i++;
815
                }
816

    
817
                originalIter.dispose();
818
                iter.dispose();
819

    
820
                set.dispose();
821

    
822
                result.finishEditing();
823

    
824
                set = result.getFeatureSet(getDefaultQuery(result));
825
                assertEquals(originalSet.getSize() - deletesFeature.length, set
826
                                .getSize());
827

    
828
                originalIter = originalSet.fastIterator();
829
                iter = set.fastIterator();
830
                i = 0;
831
                while (iter.hasNext()) {
832
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
833
                                        (Feature) iter.next()));
834
                        i++;
835
                }
836

    
837

    
838
                originalIter.dispose();
839
                iter.dispose();
840

    
841
                set.dispose();
842
                originalSet.dispose();
843

    
844
                result.dispose();
845
                this.clearCopy(store, newParams);
846
                store.dispose();
847
        }
848

    
849
        public void testSequencedInsert() throws Exception {
850
                DataStoreParameters parameters = null;
851

    
852
                int ntimes = 3;
853

    
854
                parameters = getDefaultDataStoreParameters();
855

    
856
                FeatureStore store = (FeatureStore) dataManager.openStore(
857
                        parameters.getDataStoreName(),
858
                        parameters
859
                );
860

    
861
                NewFeatureStoreParameters newParams = this
862
                .getDefaultNewDataStoreParameters();
863
                try {
864
                        this.clearCopy(store, newParams);
865
                } catch (RemoveException e) {
866
                        // Dp nothing
867
                }
868

    
869
                FeatureStore result = this.getStoreCopy(store, newParams);
870

    
871
                result.edit(FeatureStore.MODE_FULLEDIT);
872

    
873
                InsertFeature[] insertsFeature = new InsertFeature[ntimes];
874
                int i;
875
                for (i = 0; i < insertsFeature.length; i++) {
876
                        insertsFeature[i] = new InsertFeature("InsertFeature:" + i, result,
877
                                        300 * i, this);
878
                }
879

    
880
                for (i = 0; i < insertsFeature.length; i++) {
881
                        insertsFeature[i].start();
882
                }
883

    
884
                try {
885

    
886
                        for (int x = 0; x < (insertsFeature.length + 2); x++) {
887
                                Thread.yield();
888
                                Thread.sleep(500);
889
                        }
890

    
891
                } catch (InterruptedException e) {
892
                        e.printStackTrace();
893
                        result.dispose();
894
                        fail();
895
                        return;
896
                }
897

    
898
                boolean testAll = false;
899
                boolean restart;
900
                InsertFeature item;
901
                while (!testAll) {
902
                        restart = false;
903
                        for (i = 0; i < insertsFeature.length; i++) {
904
                                item = insertsFeature[i];
905
                                if (item.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
906
                                        if (item.isOutOfDate()) {
907
                                                result.dispose();
908
                                                fail("OutOfDate: " + i);
909
                                                return;
910
                                        }
911
                                        try {
912
                                                Thread.yield();
913
                                                Thread.sleep(400);
914
                                        } catch (InterruptedException e) {
915
                                                e.printStackTrace();
916
                                                result.dispose();
917
                                                fail();
918
                                                return;
919
                                        }
920
                                        restart = true;
921
                                        break;
922
                                } else if (item.getCurrentStatus() == StoreTask.STATUS_ERROR) {
923
                                        item.getException().printStackTrace();
924
                                        result.dispose();
925
                                        fail("ERROR: " + i);
926
                                        return;
927
                                } else if (item.getCurrentStatus() == StoreTask.STATUS_FINISHED_NO_OK) {
928
                                        result.dispose();
929
                                        fail("No OK: " + i);
930
                                        return;
931
                                } else if (item.getCurrentStatus() != StoreTask.STATUS_FINISHED_OK) {
932
                                        item.getException().printStackTrace();
933
                                        result.dispose();
934
                                        fail("Data ERROR: " + i);
935
                                        return;
936

    
937
                                }
938
                        }
939
                        if (restart) {
940
                                continue;
941
                        }
942
                        testAll = true;
943
                }
944

    
945
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
946
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
947
                assertEquals(originalSet.getSize() + insertsFeature.length, set
948
                                .getSize());
949

    
950
                DisposableIterator originalIter = originalSet.fastIterator();
951
                DisposableIterator iter = set.fastIterator();
952

    
953
                i = 0;
954
                while (originalIter.hasNext()) {
955
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
956
                                        (Feature) iter.next()));
957
                        i++;
958
                }
959
                for (; i < insertsFeature.length; i++) {
960
                        iter.next();
961
                }
962

    
963

    
964
                originalIter.dispose();
965
                iter.dispose();
966

    
967
                set.dispose();
968

    
969
                result.finishEditing();
970

    
971
                set = result.getFeatureSet();
972
                assertEquals(originalSet.getSize() + insertsFeature.length, set
973
                                .getSize());
974

    
975
                originalIter = originalSet.fastIterator();
976
                iter = set.fastIterator();
977
                i = 0;
978
                while (originalIter.hasNext()) {
979
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
980
                                        (Feature) iter.next()));
981
                        i++;
982
                }
983
                for (; i < insertsFeature.length; i++) {
984
                        iter.next();
985
                }
986

    
987
                set.dispose();
988
                originalSet.dispose();
989

    
990
                result.dispose();
991
                this.clearCopy(store, newParams);
992
                store.dispose();
993

    
994
        }
995

    
996

    
997
        public void testUpdate() throws Exception {
998
                DataStoreParameters parameters = null;
999

    
1000
                parameters = getDefaultDataStoreParameters();
1001

    
1002
                FeatureStore store = (FeatureStore) dataManager.openStore(
1003
                        parameters.getDataStoreName(),
1004
                        parameters
1005
                );
1006

    
1007
                NewFeatureStoreParameters newParams = this
1008
                .getDefaultNewDataStoreParameters();
1009
                try {
1010
                        this.clearCopy(store, newParams);
1011
                } catch (RemoveException e) {
1012
                        // Dp nothing
1013
                }
1014

    
1015
                FeatureStore result = this.getStoreCopy(store, newParams);
1016

    
1017
                result.edit(FeatureStore.MODE_FULLEDIT);
1018

    
1019
                FeatureSet set = result.getFeatureSet();
1020
                long size = set.getSize();
1021

    
1022
                set.dispose();
1023

    
1024
                UpdateFeature updater = new UpdateFeature("1", result,
1025
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1026
                FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
1027
                                .getDefaultFeatureType(), DataTypes.STRING);
1028
                assertNotNull("No String attributes found", attr);
1029

    
1030
                updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
1031
                                getEvaluatorToLower(attr.getName()));
1032

    
1033
                updater.run();
1034
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1035
                                && !updater.isOutOfDate()) {
1036
                        Thread.yield();
1037
                        try {
1038
                                Thread.sleep(200);
1039
                        } catch (InterruptedException e) {
1040
                                e.printStackTrace();
1041
                                fail();
1042
                        }
1043
                }
1044
                set = result.getFeatureSet(getDefaultQuery(result));
1045
                DisposableIterator iter = set.fastIterator();
1046

    
1047
                printFeatureTypeColNames(set.getDefaultFeatureType(), 15);
1048
                Feature f;
1049
                while (iter.hasNext()) {
1050
                        f = (Feature) iter.next();
1051
                        this.printFeature(f, false, 15);
1052
                }
1053

    
1054
                iter.dispose();
1055

    
1056
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
1057

    
1058
                DisposableIterator originalIter = originalSet.fastIterator();
1059

    
1060
                iter = set.fastIterator();
1061

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

    
1076

    
1077
                set.dispose();
1078

    
1079
                result.finishEditing();
1080

    
1081
                set = result.getFeatureSet();
1082
                assertEquals(originalSet.getSize(), set.getSize());
1083

    
1084
                originalIter = originalSet.fastIterator();
1085
                iter = set.fastIterator();
1086
                i = 0;
1087
                while (originalIter.hasNext()) {
1088
                        try {
1089
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1090
                                                .next(), (Feature) iter.next(), updater, i, size));
1091
                        } catch (EvaluatorException e) {
1092
                                e.printStackTrace();
1093
                                fail();
1094
                        }
1095
                        i++;
1096
                }
1097

    
1098

    
1099
                iter.dispose();
1100
                originalIter.dispose();
1101
                set.dispose();
1102

    
1103

    
1104
                updater = new UpdateFeature("1", result,
1105
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1106

    
1107
                updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
1108
                                getEvaluatorToLower(attr.getName()));
1109

    
1110
                updater.run();
1111
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1112
                                && !updater.isOutOfDate()) {
1113
                        Thread.yield();
1114
                        try {
1115
                                Thread.sleep(200);
1116
                        } catch (InterruptedException e) {
1117
                                e.printStackTrace();
1118
                                fail();
1119
                        }
1120
                }
1121
                set = result.getFeatureSet();
1122

    
1123
                iter = set.fastIterator();
1124
                originalIter = originalSet.fastIterator();
1125
                i = 0;
1126
                while (originalIter.hasNext()) {
1127
                        try {
1128
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1129
                                                .next(), (Feature) iter.next(), updater, i, size));
1130
                        } catch (EvaluatorException e) {
1131
                                e.printStackTrace();
1132
                                fail();
1133
                        }
1134
                        i++;
1135
                }
1136

    
1137
                iter.dispose();
1138
                originalIter.dispose();
1139
                set.dispose();
1140

    
1141

    
1142

    
1143

    
1144

    
1145
                originalSet.dispose();
1146

    
1147
                result.dispose();
1148
                this.clearCopy(store, newParams);
1149
                store.dispose();
1150

    
1151
        }
1152

    
1153

    
1154
        public void testResourceChangeNotification() throws Exception{
1155
                if (!resourcesNotifyChanges()) {
1156
                        return;
1157
                }
1158

    
1159
                DataStoreParameters parameters = null;
1160

    
1161
                parameters = getDefaultDataStoreParameters();
1162

    
1163
                FeatureStore store = (FeatureStore) dataManager.openStore(
1164
                        parameters.getDataStoreName(),
1165
                        parameters
1166
                );
1167

    
1168
                NewFeatureStoreParameters newParams = this
1169
                .getDefaultNewDataStoreParameters();
1170
                try {
1171
                        this.clearCopy(store, newParams);
1172
                } catch (RemoveException e) {
1173
                        // Dp nothing
1174
                }
1175

    
1176
                FeatureStore result = this.getStoreCopy(store, newParams);
1177

    
1178
                FeatureStore result2 = (FeatureStore) dataManager.openStore(
1179
                        newParams.getDataStoreName(),
1180
                        newParams
1181
                );                
1182

    
1183
                FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
1184
                                .getDefaultFeatureType(), DataTypes.STRING);
1185
                assertNotNull("No String attributes found", attr);
1186

    
1187

    
1188
                UpdateFeature updater = new UpdateFeature("1", result,
1189
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1190

    
1191
                updater.addUpdate(UpdateFeature.UPDATE_LAST_FEATURE, attr.getName(),
1192
                                getEvaluatorToLower(attr.getName()));
1193

    
1194
                StoreObserverForNotify observer = new StoreObserverForNotify(result2,
1195
                                FeatureStoreNotification.RESOURCE_CHANGED);
1196
                result2.addObserver(observer);
1197

    
1198
                result.edit();
1199
                updater.run();
1200
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1201
                                && !updater.isOutOfDate()) {
1202
                        Thread.yield();
1203
                        try {
1204
                                Thread.sleep(200);
1205
                        } catch (InterruptedException e) {
1206
                                e.printStackTrace();
1207
                                fail();
1208
                        }
1209
                }
1210

    
1211
                result.finishEditing();
1212

    
1213
                assertTrue("The observer hasn't been notified", observer.notified());
1214

    
1215
                result2.refresh();
1216

    
1217
                FeatureSet set = result.getFeatureSet();
1218
                FeatureSet set2 = result2.getFeatureSet();
1219

    
1220
                DisposableIterator iter1 = set.fastIterator();
1221
                DisposableIterator iter2 = set2.fastIterator();
1222
                assertTrue(this.compareFeatureIterators(iter1, iter2));
1223
                iter1.dispose();
1224
                iter2.dispose();
1225

    
1226
                set2.dispose();
1227
                set.dispose();
1228

    
1229
                // TODO checks FeatureType change
1230

    
1231
                result2.dispose();
1232
                result.dispose();
1233
                this.clearCopy(store, newParams);
1234
                store.dispose();
1235
        }
1236

    
1237
        public abstract class StoreObserver implements Observer{
1238

    
1239
                public DataStore store = null;
1240

    
1241
        }
1242

    
1243
        public class StoreObserverForNotify implements Observer{
1244

    
1245
                public DataStore store = null;
1246

    
1247
                public String notifyType = null;
1248

    
1249
                private boolean notifyRecived = false;
1250

    
1251
                public StoreObserverForNotify(DataStore store,String notifyType){
1252
                        this.store = store;
1253
                        this.notifyType = notifyType;
1254
                        this.notifyRecived = false;
1255
                }
1256

    
1257
                public boolean notified(){
1258
                        return notifyRecived;
1259
                }
1260

    
1261
                public void update(Observable observable, Object notification) {
1262
                        if (!(observable == this.store)){
1263
                                return;
1264
                        }
1265
                        if (!(notification instanceof FeatureStoreNotification)){
1266
                                return;
1267
                        }
1268
                        FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
1269

    
1270
                        if (fsNotification.getType().equals(this.notifyType)){
1271
                                notifyRecived = true;
1272
                        }
1273
                }
1274

    
1275
        }
1276

    
1277
        public void testUpdateFeatureType_AddField() throws Exception {
1278
                DataStoreParameters parameters = null;
1279

    
1280
                parameters = getDefaultDataStoreParameters();
1281

    
1282
                FeatureStore store = (FeatureStore) dataManager.openStore(
1283
                        parameters.getDataStoreName(),
1284
                        parameters
1285
                );
1286

    
1287
                NewFeatureStoreParameters newParams = this
1288
                .getDefaultNewDataStoreParameters();
1289
                try {
1290
                        this.clearCopy(store, newParams);
1291
                } catch (RemoveException e) {
1292
                        // Dp nothing
1293
                }
1294

    
1295
                int pkAttributesCount = 0;
1296

    
1297
                FeatureStore result = this.getStoreCopy(store, newParams);
1298

    
1299
                result.edit();
1300

    
1301

    
1302
                String[] orgAttNames = new String[result.getDefaultFeatureType()
1303
                                                  .size()];
1304

    
1305
                Iterator iter = result.getDefaultFeatureType().iterator();
1306
                int i = 0;
1307

    
1308
                while (iter.hasNext()) {
1309
                        FeatureAttributeDescriptor attr = ((FeatureAttributeDescriptor) iter
1310
                                        .next());
1311
                        orgAttNames[i] = attr.getName();
1312
                        i++;
1313
                        if (attr.isPrimaryKey()) {
1314
                                pkAttributesCount++;
1315
                        }
1316
                }
1317

    
1318
                EditableFeatureType edFtype = result
1319
                .getDefaultFeatureType().getEditable();
1320

    
1321
                edFtype.add("__ATTR1__", DataTypes.STRING).setSize(10)
1322
                .setDefaultValue(
1323
                                "HOLA");
1324

    
1325
                result.update(edFtype);
1326

    
1327
                assertEquals(store.getDefaultFeatureType().size() + 1, result
1328
                                .getDefaultFeatureType().size());
1329

    
1330
                testIterationFastAndStandart(result);
1331

    
1332
                FeatureSet orgSet = store.getFeatureSet(getDefaultQuery(store));
1333
                FeatureSet curSet = result.getFeatureSet(getDefaultQuery(result));
1334

    
1335
                assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
1336
                                .getDefaultFeatureType().size());
1337

    
1338
                DisposableIterator orgIter = orgSet.fastIterator();
1339
                DisposableIterator curIter = curSet.fastIterator();
1340

    
1341
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1342

    
1343
                orgIter.dispose();
1344
                curIter.dispose();
1345

    
1346
                orgIter = orgSet.fastIterator();
1347
                curIter = curSet.fastIterator();
1348

    
1349
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1350
                orgIter.dispose();
1351
                curIter.dispose();
1352

    
1353
                orgIter = orgSet.fastIterator();
1354
                curIter = curSet.fastIterator();
1355

    
1356
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1357
                orgIter.dispose();
1358
                curIter.dispose();
1359

    
1360
                orgIter = orgSet.fastIterator();
1361
                curIter = curSet.fastIterator();
1362

    
1363
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1364
                orgIter.dispose();
1365
                curIter.dispose();
1366

    
1367
                curIter = curSet.fastIterator();
1368
                Feature feature;
1369
                while (curIter.hasNext()) {
1370
                        feature = (Feature) curIter.next();
1371
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1372
                }
1373
                curIter.dispose();
1374
                curSet.dispose();
1375

    
1376
                FeatureQuery query = this.getDefaultQuery(result);
1377
                query.setAttributeNames(new String[] { "__ATTR1__" });
1378
                curSet = result.getFeatureSet(query);
1379

    
1380
                assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
1381
                                .size());
1382

    
1383
                assertEquals(orgSet.getSize(), curSet.getSize());
1384
                curIter = curSet.fastIterator();
1385
                while (curIter.hasNext()) {
1386
                        feature = (Feature) curIter.next();
1387
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1388
                }
1389
                curIter.dispose();
1390
                curSet.dispose();
1391

    
1392
                result.finishEditing();
1393

    
1394
                testIterationFastAndStandart(result);
1395

    
1396
                assertEquals(store.getDefaultFeatureType().size() + 1, result
1397
                                .getDefaultFeatureType().size());
1398

    
1399

    
1400
                orgSet = store.getFeatureSet(getDefaultQuery(store));
1401
                curSet = result.getFeatureSet(getDefaultQuery(result));
1402

    
1403
                assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
1404
                                .getDefaultFeatureType().size());
1405

    
1406
                orgIter = orgSet.fastIterator();
1407
                curIter = curSet.fastIterator();
1408

    
1409
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1410
                orgIter.dispose();
1411
                curIter.dispose();
1412

    
1413
                orgIter = orgSet.fastIterator();
1414
                curIter = curSet.fastIterator();
1415

    
1416
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1417
                orgIter.dispose();
1418
                curIter.dispose();
1419

    
1420
                orgIter = orgSet.fastIterator();
1421
                curIter = curSet.fastIterator();
1422

    
1423
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1424
                orgIter.dispose();
1425
                curIter.dispose();
1426

    
1427
                orgIter = orgSet.fastIterator();
1428
                curIter = curSet.fastIterator();
1429

    
1430
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1431
                orgIter.dispose();
1432
                curIter.dispose();
1433

    
1434
                curIter = curSet.fastIterator();
1435
                while (curIter.hasNext()) {
1436
                        feature = (Feature) curIter.next();
1437
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1438
                }
1439
                curIter.dispose();
1440
                curSet.dispose();
1441

    
1442
                query = this.getDefaultQuery(result);
1443
                query.setAttributeNames(new String[] { "__ATTR1__" });
1444
                curSet = result.getFeatureSet(query);
1445

    
1446
                assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
1447
                                .size());
1448

    
1449
                assertEquals(orgSet.getSize(), curSet.getSize());
1450
                curIter = curSet.fastIterator();
1451
                while (curIter.hasNext()) {
1452
                        feature = (Feature) curIter.next();
1453
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1454
                }
1455
                curIter.dispose();
1456
                curSet.dispose();
1457

    
1458
                orgSet.dispose();
1459
                result.dispose();
1460
                this.clearCopy(store, newParams);
1461
                store.dispose();
1462

    
1463

    
1464
        }
1465

    
1466
        public void testResourcesLocks() throws Exception {
1467

    
1468

    
1469
        }
1470

    
1471
}