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

History | View | Annotate | Download (34.7 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
 *
3
 * Copyright (C) 2007-2008 Infrastructures and Transports Department
4
 * of the Valencian Government (CIT)
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 2
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
 */
22

    
23
/*
24
* AUTHORS (In addition to CIT):
25
* 2009 IVER T.I. S.A.   {{Task}}
26
*/
27

    
28
/**
29
 *
30
 */
31
package org.gvsig.fmap.dal.feature;
32

    
33
import java.util.Iterator;
34

    
35
import org.gvsig.fmap.dal.DataServerExplorer;
36
import org.gvsig.fmap.dal.DataStore;
37
import org.gvsig.fmap.dal.DataStoreParameters;
38
import org.gvsig.fmap.dal.DataTypes;
39
import org.gvsig.fmap.dal.exception.DataException;
40
import org.gvsig.fmap.dal.exception.RemoveException;
41
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
42
import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
43
import org.gvsig.fmap.dal.feature.testmulithread.DeleteFirstAndLastFeature;
44
import org.gvsig.fmap.dal.feature.testmulithread.DeleteLastFeature;
45
import org.gvsig.fmap.dal.feature.testmulithread.InsertFeature;
46
import org.gvsig.fmap.dal.feature.testmulithread.StoreTask;
47
import org.gvsig.fmap.dal.feature.testmulithread.UpdateFeature;
48
import org.gvsig.tools.dispose.DisposableIterator;
49
import org.gvsig.tools.evaluator.AbstractEvaluator;
50
import org.gvsig.tools.evaluator.Evaluator;
51
import org.gvsig.tools.evaluator.EvaluatorData;
52
import org.gvsig.tools.evaluator.EvaluatorException;
53
import org.gvsig.tools.evaluator.EvaluatorFieldValue;
54
import org.gvsig.tools.observer.Observable;
55
import org.gvsig.tools.observer.Observer;
56

    
57
/**
58
 * @author jmvivo
59
 *
60
 */
61
public abstract class BaseTestEditableFeatureStore extends BaseTestFeatureStore {
62

    
63
        public abstract NewFeatureStoreParameters getDefaultNewDataStoreParameters()
64
                        throws Exception;
65

    
66
        public abstract boolean resourcesNotifyChanges();
67

    
68
        //=================================================
69
        //=================================================
70

    
71

    
72
        public void fillPrimaryKeyInserFeature(EditableFeature feature) {
73
                return;
74
        }
75

    
76
        protected Evaluator getEvaluatorToLower(String attibuteName) {
77
                return new ToLower(attibuteName);
78

    
79
        }
80

    
81
        protected Evaluator getEvaluatorToUpper(String attibuteName) {
82
                return new ToUpper(attibuteName);
83
        }
84

    
85
        public class ToLower extends AbstractEvaluator {
86
                private String attributeName;
87

    
88
                public ToLower(String attrName) {
89
                        this.attributeName = attrName;
90
                        this.getFieldsInfo().addFieldValue(this.attributeName);
91
                }
92

    
93
                public Object evaluate(EvaluatorData data) throws EvaluatorException {
94
                        String value = (String) data.getDataValue(this.attributeName);
95
                        if (value == null) {
96
                                return null;
97
                        }
98
                        return value.toLowerCase();
99
                }
100

    
101
                public String getSQL() {
102
                        return null;
103
                }
104

    
105
                public String getDescription() {
106
                        return null;
107
                }
108

    
109
                public String getName() {
110
                        return null;
111
                }
112

    
113
        }
114

    
115
        public class ToUpper extends AbstractEvaluator {
116
                private String attributeName;
117

    
118
                public ToUpper(String attrName) {
119
                        this.attributeName = attrName;
120
                        this.getFieldsInfo().addFieldValue(this.attributeName);
121
                }
122

    
123
                public Object evaluate(EvaluatorData data) throws EvaluatorException {
124
                        String value = (String) data.getDataValue(this.attributeName);
125
                        if (value == null) {
126
                                return null;
127
                        }
128
                        return value.toUpperCase();
129
                }
130

    
131
                public String getSQL() {
132
                        return null;
133
                }
134

    
135
                public String getDescription() {
136
                        return null;
137
                }
138

    
139
                public EvaluatorFieldValue[] getFieldValues(String name) {
140
                        return null;
141
                }
142

    
143
                public String getName() {
144
                        return null;
145
                }
146

    
147
        }
148

    
149
        protected FeatureStore getStoreCopy(FeatureStore source,
150
                        NewFeatureStoreParameters targetParams) throws DataException,
151
                        ValidateDataParametersException {
152
                DataServerExplorer explorer = source.getExplorer();
153
                source.export(explorer, source.getProviderName(), targetParams);
154
                FeatureStore result = (FeatureStore) dataManager.openStore(source.getProviderName(), targetParams);
155

    
156
                return result;
157
        }
158

    
159
        protected void clearCopy(FeatureStore source,
160
                        NewFeatureStoreParameters targetParams) throws Exception {
161
                DataServerExplorer explorer = source.getExplorer();
162
                explorer.remove(targetParams);
163

    
164
        }
165

    
166
        protected boolean compareFeatures(Feature f1, Feature f2,
167
                        String[] attrsNames, UpdateFeature updated, long index,
168
                        long lastIndex) throws DataException, EvaluatorException {
169
                FeatureAttributeDescriptor attr1;
170
                FeatureAttributeDescriptor attr2;
171
                EditableFeature f2e = f2.getEditable();
172
                updated.applyUpdateList(f2e, index, lastIndex);
173

    
174
                Object v1, v2;
175
                for (int i = 0; i < attrsNames.length; i++) {
176
                        attr1 = f1.getType().getAttributeDescriptor(attrsNames[i]);
177
                        attr2 = f2e.getType().getAttributeDescriptor(attrsNames[i]);
178
                        if (attr1 != attr2) {
179
                                if (!compareAttributes(attr1, attr1)) {
180
                                        return false;
181
                                }
182
                        }
183
                        v1 = f1.get(attr1.getName());
184
                        v2 = f2.get(attr2.getName());
185
                        if (!compareFeatureValue(v1, v2, attr1)) {
186
                                return false;
187
                        }
188
                }
189

    
190
                return true;
191
        }
192

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

    
214

    
215
                return true;
216

    
217
        }
218

    
219

    
220
        //---------------
221

    
222

    
223

    
224

    
225
        //=================================================
226
        //=================================================
227

    
228

    
229

    
230

    
231
        public void testExport() throws Exception {
232
                DataStoreParameters parameters = null;
233

    
234
                parameters = getDefaultDataStoreParameters();
235

    
236
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
237

    
238
                NewFeatureStoreParameters newParams = this
239
                                .getDefaultNewDataStoreParameters();
240
                try {
241
                        this.clearCopy(store, newParams);
242
                } catch (RemoveException e) {
243
                        // Dp nothing
244
                }
245

    
246
                FeatureStore result = this.getStoreCopy(store, newParams);
247

    
248
                fullStoreIteratorTest(result);
249

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

    
263

    
264
                        set = result.getFeatureSet(queryR);
265
                        originalSet = store.getFeatureSet(queryO);
266

    
267

    
268
                } else {
269
                        set = result.getFeatureSet();
270
                        originalSet = store.getFeatureSet();
271
                }
272
                assertEquals(set.getSize(), originalSet.getSize());
273

    
274
                DisposableIterator originalIter = originalSet.iterator();
275
                DisposableIterator iter = set.iterator();
276
                assertTrue(compareFeatureIterators(originalIter, iter));
277
                originalIter.dispose();
278
                iter.dispose();
279

    
280
                if (store.getEnvelope() != result.getEnvelope()) {
281
                        if (store.getEnvelope() != null) {
282
                                assertTrue(store.getEnvelope().equals(result.getEnvelope()));
283
                        } else {
284
                                fail("Envelope: src=" + store.getEnvelope() + " traget="
285
                                                + store.getEnvelope());
286
                        }
287
                }
288

    
289
                set.dispose();
290
                originalSet.dispose();
291

    
292
                result.dispose();
293
                this.clearCopy(store, newParams);
294
                store.dispose();
295

    
296
        }
297

    
298
        public void testRemove() throws Exception {
299
                DataStoreParameters parameters = null;
300

    
301
                parameters = getDefaultDataStoreParameters();
302

    
303
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
304

    
305
                NewFeatureStoreParameters newParams = this
306
                                .getDefaultNewDataStoreParameters();
307
                try {
308
                        this.clearCopy(store, newParams);
309
                } catch (RemoveException e) {
310
                        // Dp nothing
311
                }
312

    
313
                FeatureStore result = this.getStoreCopy(store, newParams);
314

    
315
                result.edit(FeatureStore.MODE_FULLEDIT);
316

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

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

    
330
                iter.remove();
331

    
332

    
333
                assertEquals(originalSet.getSize() - 1, set.getSize());
334

    
335
                iter.dispose();
336
                originalIter.dispose();
337

    
338

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

    
348
                iter.remove();
349

    
350
                assertEquals(originalSet.getSize() - 2, set.getSize());
351

    
352
                iter.dispose();
353
                originalIter.dispose();
354

    
355
                set.dispose();
356

    
357
                result.finishEditing();
358

    
359
                set = result.getFeatureSet();
360
                assertEquals(originalSet.getSize() - 2, set.getSize());
361

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

    
371
                iter.dispose();
372
                originalIter.dispose();
373

    
374

    
375
                set.dispose();
376
                originalSet.dispose();
377

    
378
                result.dispose();
379
                this.clearCopy(store, newParams);
380
                store.dispose();
381

    
382

    
383
        }
384

    
385
        public void testInsert() throws Exception {
386
                DataStoreParameters parameters = null;
387

    
388
                parameters = getDefaultDataStoreParameters();
389

    
390

    
391
                FeatureStore store = (FeatureStore) dataManager
392
                .createStore(parameters);
393

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

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

    
404
                result.edit(FeatureStore.MODE_FULLEDIT);
405

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

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

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

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

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

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

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

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

    
450
                set.dispose();
451

    
452
                result.finishEditing();
453

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

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

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

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

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

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

    
480

    
481
        }
482

    
483

    
484

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

    
488
                parameters = getDefaultDataStoreParameters();
489

    
490

    
491
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
492

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

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

    
503
                result.edit(FeatureStore.MODE_FULLEDIT);
504

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

    
508
                FeatureSet set = result.getFeatureSet();
509

    
510
                DisposableIterator iter = set.iterator();
511
                assertTrue(iter.hasNext());
512
                assertNotNull(iter.next());
513

    
514
                deleteFeature.start();
515

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

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

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

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

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

    
550
        }
551

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

    
555
                parameters = getDefaultDataStoreParameters();
556

    
557

    
558
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
559

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

    
568
                FeatureStore result = this.getStoreCopy(store, newParams);
569

    
570
                result.edit(FeatureStore.MODE_FULLEDIT);
571

    
572
                InsertFeature insertFeature = new InsertFeature("1", result,
573
                                StoreTask.TIME_TO_WAIT_NO_WAIT, this);
574

    
575
                FeatureSet set = result.getFeatureSet();
576

    
577
                DisposableIterator iter = set.iterator();
578
                assertTrue(iter.hasNext());
579
                assertNotNull(iter.next());
580

    
581
                insertFeature.start();
582

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

    
591
                assertEquals(StoreTask.STATUS_FINISHED_OK, insertFeature
592
                                .getCurrentStatus());
593

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

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

    
612
                iter.dispose();
613
                result.dispose();
614
                this.clearCopy(store, newParams);
615
                store.dispose();
616
        }
617

    
618
        public void testConcurrentUpdate() throws Exception {
619
                DataStoreParameters parameters = null;
620

    
621
                parameters = getDefaultDataStoreParameters();
622

    
623

    
624
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
625

    
626
                NewFeatureStoreParameters newParams = this
627
                .getDefaultNewDataStoreParameters();
628
                try {
629
                        this.clearCopy(store, newParams);
630
                } catch (RemoveException e) {
631
                        // Dp nothing
632
                }
633

    
634
                FeatureStore result = this.getStoreCopy(store, newParams);
635

    
636

    
637
                result.edit(FeatureStore.MODE_FULLEDIT);
638

    
639
                UpdateFeature updateFeature = new UpdateFeature("1", result,
640
                                StoreTask.TIME_TO_WAIT_NO_WAIT);
641

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

    
657

    
658
                updateFeature.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attrName,
659
                                "XXX");
660

    
661
                FeatureSet set = result.getFeatureSet();
662

    
663
                DisposableIterator iter = set.iterator();
664
                assertTrue(iter.hasNext());
665
                assertNotNull(iter.next());
666

    
667
                updateFeature.start();
668

    
669
                while (updateFeature.getCurrentStatus() <= StoreTask.STATUS_RUNING) {
670
                        Thread.yield();
671
                        Thread.sleep(100);
672
                        if (updateFeature.isOutOfDate()) {
673
                                break;
674
                        }
675
                }
676

    
677
                assertEquals(StoreTask.STATUS_FINISHED_OK, updateFeature
678
                                .getCurrentStatus());
679

    
680
                Exception ex = null;
681
                try {
682
                        iter.next();
683
                } catch (Exception e) {
684
                        ex = e;
685
                }
686
                assertNotNull(ex);
687
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
688

    
689
                ex = null;
690
                try {
691
                        set.getSize();
692
                } catch (Exception e) {
693
                        ex = e;
694
                }
695
                assertNotNull(ex);
696
                assertEquals(ConcurrentDataModificationException.class, ex.getClass());
697

    
698
                iter.dispose();
699
                result.dispose();
700
                this.clearCopy(store, newParams);
701
                store.dispose();
702

    
703

    
704

    
705
        }
706

    
707
        public void testSequencedRemove() throws Exception {
708
                DataStoreParameters parameters = null;
709

    
710
                int ntimes = 3;
711

    
712
                parameters = getDefaultDataStoreParameters();
713

    
714
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
715

    
716
                NewFeatureStoreParameters newParams = this
717
                .getDefaultNewDataStoreParameters();
718
                try {
719
                        this.clearCopy(store, newParams);
720
                } catch (RemoveException e) {
721
                        // Dp nothing
722
                }
723

    
724
                FeatureStore result = this.getStoreCopy(store, newParams);
725

    
726
                result.edit(FeatureStore.MODE_FULLEDIT);
727

    
728
                DeleteLastFeature[] deletesFeature = new DeleteLastFeature[ntimes];
729
                int i;
730
                for (i = 0; i < deletesFeature.length; i++) {
731
                        deletesFeature[i] = new DeleteLastFeature("DeleteLastFeature:" + i,
732
                                        result, 300 * i);
733
                }
734

    
735
                for (i = 0; i < deletesFeature.length; i++) {
736
                        deletesFeature[i].start();
737
                }
738

    
739
                try {
740
                        for (int x = 0; x < (deletesFeature.length + 2); x++) {
741
                                Thread.yield();
742
                                Thread.sleep(500);
743
                        }
744

    
745
                } catch (InterruptedException e) {
746
                        e.printStackTrace();
747
                        result.dispose();
748
                        fail();
749
                        return;
750
                }
751

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

    
794
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
795
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
796
                assertEquals(originalSet.getSize() - deletesFeature.length, set
797
                                .getSize());
798

    
799
                DisposableIterator originalIter = originalSet.iterator();
800
                DisposableIterator iter = set.iterator();
801

    
802
                i = 0;
803
                while (iter.hasNext()) {
804
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
805
                                        (Feature) iter.next()));
806
                        i++;
807
                }
808

    
809
                originalIter.dispose();
810
                iter.dispose();
811

    
812
                set.dispose();
813

    
814
                result.finishEditing();
815

    
816
                set = result.getFeatureSet(getDefaultQuery(result));
817
                assertEquals(originalSet.getSize() - deletesFeature.length, set
818
                                .getSize());
819

    
820
                originalIter = originalSet.iterator();
821
                iter = set.iterator();
822
                i = 0;
823
                while (iter.hasNext()) {
824
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
825
                                        (Feature) iter.next()));
826
                        i++;
827
                }
828

    
829

    
830
                originalIter.dispose();
831
                iter.dispose();
832

    
833
                set.dispose();
834
                originalSet.dispose();
835

    
836
                result.dispose();
837
                this.clearCopy(store, newParams);
838
                store.dispose();
839
        }
840

    
841
        public void testSequencedInsert() throws Exception {
842
                DataStoreParameters parameters = null;
843

    
844
                int ntimes = 3;
845

    
846
                parameters = getDefaultDataStoreParameters();
847

    
848

    
849
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
850

    
851
                NewFeatureStoreParameters newParams = this
852
                .getDefaultNewDataStoreParameters();
853
                try {
854
                        this.clearCopy(store, newParams);
855
                } catch (RemoveException e) {
856
                        // Dp nothing
857
                }
858

    
859
                FeatureStore result = this.getStoreCopy(store, newParams);
860

    
861
                result.edit(FeatureStore.MODE_FULLEDIT);
862

    
863
                InsertFeature[] insertsFeature = new InsertFeature[ntimes];
864
                int i;
865
                for (i = 0; i < insertsFeature.length; i++) {
866
                        insertsFeature[i] = new InsertFeature("InsertFeature:" + i, result,
867
                                        300 * i, this);
868
                }
869

    
870
                for (i = 0; i < insertsFeature.length; i++) {
871
                        insertsFeature[i].start();
872
                }
873

    
874
                try {
875

    
876
                        for (int x = 0; x < (insertsFeature.length + 2); x++) {
877
                                Thread.yield();
878
                                Thread.sleep(500);
879
                        }
880

    
881
                } catch (InterruptedException e) {
882
                        e.printStackTrace();
883
                        result.dispose();
884
                        fail();
885
                        return;
886
                }
887

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

    
927
                                }
928
                        }
929
                        if (restart) {
930
                                continue;
931
                        }
932
                        testAll = true;
933
                }
934

    
935
                FeatureSet set = result.getFeatureSet(getDefaultQuery(result));
936
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
937
                assertEquals(originalSet.getSize() + insertsFeature.length, set
938
                                .getSize());
939

    
940
                DisposableIterator originalIter = originalSet.iterator();
941
                DisposableIterator iter = set.iterator();
942

    
943
                i = 0;
944
                while (originalIter.hasNext()) {
945
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
946
                                        (Feature) iter.next()));
947
                        i++;
948
                }
949
                for (; i < insertsFeature.length; i++) {
950
                        iter.next();
951
                }
952

    
953

    
954
                originalIter.dispose();
955
                iter.dispose();
956

    
957
                set.dispose();
958

    
959
                result.finishEditing();
960

    
961
                set = result.getFeatureSet();
962
                assertEquals(originalSet.getSize() + insertsFeature.length, set
963
                                .getSize());
964

    
965
                originalIter = originalSet.iterator();
966
                iter = set.iterator();
967
                i = 0;
968
                while (originalIter.hasNext()) {
969
                        assertTrue("" + i, compareFeatures((Feature) originalIter.next(),
970
                                        (Feature) iter.next()));
971
                        i++;
972
                }
973
                for (; i < insertsFeature.length; i++) {
974
                        iter.next();
975
                }
976

    
977
                set.dispose();
978
                originalSet.dispose();
979

    
980
                result.dispose();
981
                this.clearCopy(store, newParams);
982
                store.dispose();
983

    
984
        }
985

    
986

    
987
        public void testUpdate() throws Exception {
988
                DataStoreParameters parameters = null;
989

    
990
                parameters = getDefaultDataStoreParameters();
991

    
992
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
993

    
994
                NewFeatureStoreParameters newParams = this
995
                .getDefaultNewDataStoreParameters();
996
                try {
997
                        this.clearCopy(store, newParams);
998
                } catch (RemoveException e) {
999
                        // Dp nothing
1000
                }
1001

    
1002
                FeatureStore result = this.getStoreCopy(store, newParams);
1003

    
1004
                result.edit(FeatureStore.MODE_FULLEDIT);
1005

    
1006
                FeatureSet set = result.getFeatureSet();
1007
                long size = set.getSize();
1008

    
1009
                set.dispose();
1010

    
1011
                UpdateFeature updater = new UpdateFeature("1", result,
1012
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1013
                FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
1014
                                .getDefaultFeatureType(), DataTypes.STRING);
1015
                assertNotNull("No String attributes found", attr);
1016

    
1017
                updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
1018
                                getEvaluatorToLower(attr.getName()));
1019

    
1020
                updater.run();
1021
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1022
                                && !updater.isOutOfDate()) {
1023
                        Thread.yield();
1024
                        try {
1025
                                Thread.sleep(200);
1026
                        } catch (InterruptedException e) {
1027
                                e.printStackTrace();
1028
                                fail();
1029
                        }
1030
                }
1031
                set = result.getFeatureSet(getDefaultQuery(result));
1032
                DisposableIterator iter = set.iterator();
1033

    
1034
                printFeatureTypeColNames(set.getDefaultFeatureType(), 15);
1035
                Feature f;
1036
                while (iter.hasNext()) {
1037
                        f = (Feature) iter.next();
1038
                        this.printFeature(f, false, 15);
1039
                }
1040

    
1041
                iter.dispose();
1042

    
1043
                FeatureSet originalSet = store.getFeatureSet(getDefaultQuery(store));
1044

    
1045
                DisposableIterator originalIter = originalSet.iterator();
1046

    
1047
                iter = set.iterator();
1048

    
1049
                long i = 0;
1050
                while (originalIter.hasNext()) {
1051
                        try {
1052
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1053
                                                .next(), (Feature) iter.next(), updater, i, size));
1054
                        } catch (EvaluatorException e) {
1055
                                e.printStackTrace();
1056
                                fail();
1057
                        }
1058
                        i++;
1059
                }
1060
                iter.dispose();
1061
                originalIter.dispose();
1062

    
1063

    
1064
                set.dispose();
1065

    
1066
                result.finishEditing();
1067

    
1068
                set = result.getFeatureSet();
1069
                assertEquals(originalSet.getSize(), set.getSize());
1070

    
1071
                originalIter = originalSet.iterator();
1072
                iter = set.iterator();
1073
                i = 0;
1074
                while (originalIter.hasNext()) {
1075
                        try {
1076
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1077
                                                .next(), (Feature) iter.next(), updater, i, size));
1078
                        } catch (EvaluatorException e) {
1079
                                e.printStackTrace();
1080
                                fail();
1081
                        }
1082
                        i++;
1083
                }
1084

    
1085

    
1086
                iter.dispose();
1087
                originalIter.dispose();
1088
                set.dispose();
1089

    
1090

    
1091
                updater = new UpdateFeature("1", result,
1092
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1093

    
1094
                updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES, attr.getName(),
1095
                                getEvaluatorToLower(attr.getName()));
1096

    
1097
                updater.run();
1098
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1099
                                && !updater.isOutOfDate()) {
1100
                        Thread.yield();
1101
                        try {
1102
                                Thread.sleep(200);
1103
                        } catch (InterruptedException e) {
1104
                                e.printStackTrace();
1105
                                fail();
1106
                        }
1107
                }
1108
                set = result.getFeatureSet();
1109

    
1110
                iter = set.iterator();
1111
                originalIter = originalSet.iterator();
1112
                i = 0;
1113
                while (originalIter.hasNext()) {
1114
                        try {
1115
                                assertTrue("" + i, compareFeatures((Feature) originalIter
1116
                                                .next(), (Feature) iter.next(), updater, i, size));
1117
                        } catch (EvaluatorException e) {
1118
                                e.printStackTrace();
1119
                                fail();
1120
                        }
1121
                        i++;
1122
                }
1123

    
1124
                iter.dispose();
1125
                originalIter.dispose();
1126
                set.dispose();
1127

    
1128

    
1129

    
1130

    
1131

    
1132
                originalSet.dispose();
1133

    
1134
                result.dispose();
1135
                this.clearCopy(store, newParams);
1136
                store.dispose();
1137

    
1138
        }
1139

    
1140

    
1141
        public void testResourceChangeNotification() throws Exception{
1142
                if (!resourcesNotifyChanges()) {
1143
                        return;
1144
                }
1145

    
1146
                DataStoreParameters parameters = null;
1147

    
1148
                parameters = getDefaultDataStoreParameters();
1149

    
1150
                FeatureStore store = (FeatureStore) dataManager.createStore(parameters);
1151

    
1152
                NewFeatureStoreParameters newParams = this
1153
                .getDefaultNewDataStoreParameters();
1154
                try {
1155
                        this.clearCopy(store, newParams);
1156
                } catch (RemoveException e) {
1157
                        // Dp nothing
1158
                }
1159

    
1160
                FeatureStore result = this.getStoreCopy(store, newParams);
1161

    
1162
                FeatureStore result2 = (FeatureStore) dataManager
1163
                .createStore(newParams);
1164

    
1165
                FeatureAttributeDescriptor attr = getFirstAttributeOfType(result
1166
                                .getDefaultFeatureType(), DataTypes.STRING);
1167
                assertNotNull("No String attributes found", attr);
1168

    
1169

    
1170
                UpdateFeature updater = new UpdateFeature("1", result,
1171
                                UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1172

    
1173
                updater.addUpdate(UpdateFeature.UPDATE_LAST_FEATURE, attr.getName(),
1174
                                getEvaluatorToLower(attr.getName()));
1175

    
1176
                StoreObserverForNotify observer = new StoreObserverForNotify(result2,
1177
                                FeatureStoreNotification.RESOURCE_CHANGED);
1178
                result2.addObserver(observer);
1179

    
1180
                result.edit();
1181
                updater.run();
1182
                while (updater.getCurrentStatus() < StoreTask.STATUS_FINISHED_OK
1183
                                && !updater.isOutOfDate()) {
1184
                        Thread.yield();
1185
                        try {
1186
                                Thread.sleep(200);
1187
                        } catch (InterruptedException e) {
1188
                                e.printStackTrace();
1189
                                fail();
1190
                        }
1191
                }
1192

    
1193
                result.finishEditing();
1194

    
1195
                assertTrue("The observer hasn't been notified", observer.notified());
1196

    
1197
                result2.refresh();
1198

    
1199
                FeatureSet set = result.getFeatureSet();
1200
                FeatureSet set2 = result2.getFeatureSet();
1201

    
1202
                DisposableIterator iter1 = set.iterator();
1203
                DisposableIterator iter2 = set2.iterator();
1204
                assertTrue(this.compareFeatureIterators(iter1, iter2));
1205
                iter1.dispose();
1206
                iter2.dispose();
1207

    
1208
                set2.dispose();
1209
                set.dispose();
1210

    
1211
                // TODO checks FeatureType change
1212

    
1213
                result2.dispose();
1214
                result.dispose();
1215
                this.clearCopy(store, newParams);
1216
                store.dispose();
1217
        }
1218

    
1219
        public abstract class StoreObserver implements Observer{
1220

    
1221
                public DataStore store = null;
1222

    
1223
        }
1224

    
1225
        public class StoreObserverForNotify implements Observer{
1226

    
1227
                public DataStore store = null;
1228

    
1229
                public String notifyType = null;
1230

    
1231
                private boolean notifyRecived = false;
1232

    
1233
                public StoreObserverForNotify(DataStore store,String notifyType){
1234
                        this.store = store;
1235
                        this.notifyType = notifyType;
1236
                        this.notifyRecived = false;
1237
                }
1238

    
1239
                public boolean notified(){
1240
                        return notifyRecived;
1241
                }
1242

    
1243
                public void update(Observable observable, Object notification) {
1244
                        if (!(observable == this.store)){
1245
                                return;
1246
                        }
1247
                        if (!(notification instanceof FeatureStoreNotification)){
1248
                                return;
1249
                        }
1250
                        FeatureStoreNotification fsNotification = (FeatureStoreNotification) notification;
1251

    
1252
                        if (fsNotification.getType().equals(this.notifyType)){
1253
                                notifyRecived = true;
1254
                        }
1255
                }
1256

    
1257
        }
1258

    
1259
        public void testUpdateFeatureType_AddField() throws Exception {
1260
                DataStoreParameters parameters = null;
1261

    
1262
                parameters = getDefaultDataStoreParameters();
1263

    
1264
                FeatureStore store = (FeatureStore) dataManager
1265
                .createStore(parameters);
1266

    
1267
                NewFeatureStoreParameters newParams = this
1268
                .getDefaultNewDataStoreParameters();
1269
                try {
1270
                        this.clearCopy(store, newParams);
1271
                } catch (RemoveException e) {
1272
                        // Dp nothing
1273
                }
1274

    
1275
                int pkAttributesCount = 0;
1276

    
1277
                FeatureStore result = this.getStoreCopy(store, newParams);
1278

    
1279
                result.edit();
1280

    
1281

    
1282
                String[] orgAttNames = new String[result.getDefaultFeatureType()
1283
                                                  .size()];
1284

    
1285
                Iterator iter = result.getDefaultFeatureType().iterator();
1286
                int i = 0;
1287

    
1288
                while (iter.hasNext()) {
1289
                        FeatureAttributeDescriptor attr = ((FeatureAttributeDescriptor) iter
1290
                                        .next());
1291
                        orgAttNames[i] = attr.getName();
1292
                        i++;
1293
                        if (attr.isPrimaryKey()) {
1294
                                pkAttributesCount++;
1295
                        }
1296
                }
1297

    
1298
                EditableFeatureType edFtype = result
1299
                .getDefaultFeatureType().getEditable();
1300

    
1301
                edFtype.add("__ATTR1__", DataTypes.STRING).setSize(10)
1302
                .setDefaultValue(
1303
                                "HOLA");
1304

    
1305
                result.update(edFtype);
1306

    
1307
                assertEquals(store.getDefaultFeatureType().size() + 1, result
1308
                                .getDefaultFeatureType().size());
1309

    
1310
                testIterationFastAndStandart(result);
1311

    
1312
                FeatureSet orgSet = store.getFeatureSet(getDefaultQuery(store));
1313
                FeatureSet curSet = result.getFeatureSet(getDefaultQuery(result));
1314

    
1315
                assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
1316
                                .getDefaultFeatureType().size());
1317

    
1318
                DisposableIterator orgIter = orgSet.iterator();
1319
                DisposableIterator curIter = curSet.iterator();
1320

    
1321
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1322

    
1323
                orgIter.dispose();
1324
                curIter.dispose();
1325

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

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

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

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

    
1340
                orgIter = orgSet.fastIterator();
1341
                curIter = curSet.iterator();
1342

    
1343
                assertTrue(compareFeatureIterators(orgIter, curIter, orgAttNames));
1344
                orgIter.dispose();
1345
                curIter.dispose();
1346

    
1347
                curIter = curSet.iterator();
1348
                Feature feature;
1349
                while (curIter.hasNext()) {
1350
                        feature = (Feature) curIter.next();
1351
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1352
                }
1353
                curIter.dispose();
1354
                curSet.dispose();
1355

    
1356
                FeatureQuery query = this.getDefaultQuery(result);
1357
                query.setAttributeNames(new String[] { "__ATTR1__" });
1358
                curSet = result.getFeatureSet(query);
1359

    
1360
                assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
1361
                                .size());
1362

    
1363
                assertEquals(orgSet.getSize(), curSet.getSize());
1364
                curIter = curSet.iterator();
1365
                while (curIter.hasNext()) {
1366
                        feature = (Feature) curIter.next();
1367
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1368
                }
1369
                curIter.dispose();
1370
                curSet.dispose();
1371

    
1372
                result.finishEditing();
1373

    
1374
                testIterationFastAndStandart(result);
1375

    
1376
                assertEquals(store.getDefaultFeatureType().size() + 1, result
1377
                                .getDefaultFeatureType().size());
1378

    
1379

    
1380
                orgSet = store.getFeatureSet(getDefaultQuery(store));
1381
                curSet = result.getFeatureSet(getDefaultQuery(result));
1382

    
1383
                assertEquals(orgSet.getDefaultFeatureType().size() + 1, curSet
1384
                                .getDefaultFeatureType().size());
1385

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

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

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

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

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

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

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

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

    
1414
                curIter = curSet.iterator();
1415
                while (curIter.hasNext()) {
1416
                        feature = (Feature) curIter.next();
1417
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1418
                }
1419
                curIter.dispose();
1420
                curSet.dispose();
1421

    
1422
                query = this.getDefaultQuery(result);
1423
                query.setAttributeNames(new String[] { "__ATTR1__" });
1424
                curSet = result.getFeatureSet(query);
1425

    
1426
                assertEquals(1 + pkAttributesCount, curSet.getDefaultFeatureType()
1427
                                .size());
1428

    
1429
                assertEquals(orgSet.getSize(), curSet.getSize());
1430
                curIter = curSet.iterator();
1431
                while (curIter.hasNext()) {
1432
                        feature = (Feature) curIter.next();
1433
                        assertEquals("HOLA", feature.get("__ATTR1__"));
1434
                }
1435
                curIter.dispose();
1436
                curSet.dispose();
1437

    
1438
                orgSet.dispose();
1439
                result.dispose();
1440
                this.clearCopy(store, newParams);
1441
                store.dispose();
1442

    
1443

    
1444
        }
1445

    
1446
        public void testResourcesLocks() throws Exception {
1447

    
1448

    
1449
        }
1450

    
1451
}