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 40559 jjdelcerro
/**
2
 * gvSIG. Desktop Geographic Information System.
3 40435 jjdelcerro
 *
4 40559 jjdelcerro
 * Copyright (C) 2007-2013 gvSIG Association.
5 40435 jjdelcerro
 *
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 40559 jjdelcerro
 * as published by the Free Software Foundation; either version 3
9 40435 jjdelcerro
 * 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 40559 jjdelcerro
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23 40435 jjdelcerro
 */
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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
230
                        parameters.getDataStoreName(),
231
                        parameters
232
                );
233 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator originalIter = (DisposableIterator) originalSet.fastIterator();
271
                DisposableIterator iter = (DisposableIterator) set.fastIterator();
272 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
300
                        parameters.getDataStoreName(),
301
                        parameters
302
                );
303 40435 jjdelcerro
                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 42488 jjdelcerro
                DisposableIterator originalIter = originalSet.fastIterator();
320
                DisposableIterator iter = set.fastIterator();
321 40435 jjdelcerro
                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 42488 jjdelcerro
                originalIter = (DisposableIterator) originalSet.fastIterator();
338
                iter = (DisposableIterator) set.fastIterator();
339 40435 jjdelcerro
                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 42488 jjdelcerro
                originalIter = originalSet.fastIterator();
361
                iter = set.fastIterator();
362 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
389
                        parameters.getDataStoreName(),
390
                        parameters
391
                );
392 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator originalIter = originalSet.fastIterator();
413
                DisposableIterator iter = set.fastIterator();
414 40435 jjdelcerro
                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 42488 jjdelcerro
                originalIter = originalSet.fastIterator();
430
                iter = set.fastIterator();
431 40435 jjdelcerro
                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 42488 jjdelcerro
                originalIter = originalSet.fastIterator();
457
                iter = set.fastIterator();
458 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
490
                        parameters.getDataStoreName(),
491
                        parameters
492
                );
493 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator iter = set.fastIterator();
512 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
559
                        parameters.getDataStoreName(),
560
                        parameters
561
                );
562 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator iter = set.fastIterator();
581 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
627
                        parameters.getDataStoreName(),
628
                        parameters
629
                );
630 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator iter = set.fastIterator();
669 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
720
                        parameters.getDataStoreName(),
721
                        parameters
722
                );
723 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator originalIter = originalSet.fastIterator();
808
                DisposableIterator iter = set.fastIterator();
809 40435 jjdelcerro
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 42488 jjdelcerro
                originalIter = originalSet.fastIterator();
829
                iter = set.fastIterator();
830 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
857
                        parameters.getDataStoreName(),
858
                        parameters
859
                );
860 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator originalIter = originalSet.fastIterator();
951
                DisposableIterator iter = set.fastIterator();
952 40435 jjdelcerro
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 42488 jjdelcerro
                originalIter = originalSet.fastIterator();
976
                iter = set.fastIterator();
977 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
1003
                        parameters.getDataStoreName(),
1004
                        parameters
1005
                );
1006 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator iter = set.fastIterator();
1046 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator originalIter = originalSet.fastIterator();
1059 40435 jjdelcerro
1060 42488 jjdelcerro
                iter = set.fastIterator();
1061 40435 jjdelcerro
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 42488 jjdelcerro
                originalIter = originalSet.fastIterator();
1085
                iter = set.fastIterator();
1086 40435 jjdelcerro
                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 42488 jjdelcerro
                iter = set.fastIterator();
1124
                originalIter = originalSet.fastIterator();
1125 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
1164
                        parameters.getDataStoreName(),
1165
                        parameters
1166
                );
1167 40435 jjdelcerro
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 43020 jjdelcerro
                FeatureStore result2 = (FeatureStore) dataManager.openStore(
1179
                        newParams.getDataStoreName(),
1180
                        newParams
1181
                );
1182 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator iter1 = set.fastIterator();
1221
                DisposableIterator iter2 = set2.fastIterator();
1222 40435 jjdelcerro
                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 43020 jjdelcerro
                FeatureStore store = (FeatureStore) dataManager.openStore(
1283
                        parameters.getDataStoreName(),
1284
                        parameters
1285
                );
1286 40435 jjdelcerro
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 42488 jjdelcerro
                DisposableIterator orgIter = orgSet.fastIterator();
1339
                DisposableIterator curIter = curSet.fastIterator();
1340 40435 jjdelcerro
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 42488 jjdelcerro
                orgIter = orgSet.fastIterator();
1354 40435 jjdelcerro
                curIter = curSet.fastIterator();
1355
1356
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1357
                orgIter.dispose();
1358
                curIter.dispose();
1359
1360
                orgIter = orgSet.fastIterator();
1361 42488 jjdelcerro
                curIter = curSet.fastIterator();
1362 40435 jjdelcerro
1363
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1364
                orgIter.dispose();
1365
                curIter.dispose();
1366
1367 42488 jjdelcerro
                curIter = curSet.fastIterator();
1368 40435 jjdelcerro
                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 42488 jjdelcerro
                curIter = curSet.fastIterator();
1385 40435 jjdelcerro
                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 42488 jjdelcerro
                orgIter = orgSet.fastIterator();
1407
                curIter = curSet.fastIterator();
1408 40435 jjdelcerro
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 42488 jjdelcerro
                orgIter = orgSet.fastIterator();
1421 40435 jjdelcerro
                curIter = curSet.fastIterator();
1422
1423
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1424
                orgIter.dispose();
1425
                curIter.dispose();
1426
1427
                orgIter = orgSet.fastIterator();
1428 42488 jjdelcerro
                curIter = curSet.fastIterator();
1429 40435 jjdelcerro
1430
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1431
                orgIter.dispose();
1432
                curIter.dispose();
1433
1434 42488 jjdelcerro
                curIter = curSet.fastIterator();
1435 40435 jjdelcerro
                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 42488 jjdelcerro
                curIter = curSet.fastIterator();
1451 40435 jjdelcerro
                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
}