Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / libraries / libFMap_dal / src-test / org / gvsig / fmap / dal / feature / BaseTestEditableFeatureStore.java @ 26066

History | View | Annotate | Download (26.2 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.DataStoreParameters;
37
import org.gvsig.fmap.dal.DataTypes;
38
import org.gvsig.fmap.dal.exception.DataException;
39
import org.gvsig.fmap.dal.exception.RemoveException;
40
import org.gvsig.fmap.dal.feature.exception.ConcurrentDataModificationException;
41
import org.gvsig.fmap.dal.feature.testediting.DeleteFirstAndLastFeature;
42
import org.gvsig.fmap.dal.feature.testediting.DeleteLastFeature;
43
import org.gvsig.fmap.dal.feature.testediting.EditStore;
44
import org.gvsig.fmap.dal.feature.testediting.InsertFeature;
45
import org.gvsig.fmap.dal.feature.testediting.UpdateFeature;
46
import org.gvsig.fmap.geom.Geometry;
47
import org.gvsig.tools.evaluator.Evaluator;
48
import org.gvsig.tools.evaluator.EvaluatorData;
49
import org.gvsig.tools.evaluator.EvaluatorException;
50
import org.gvsig.tools.evaluator.EvaluatorFieldValue;
51

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

    
58
        public abstract NewFeatureStoreParameters getDefaultNewDataStoreParameters()
59
                        throws DataException;
60

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

    
64

    
65
        protected Evaluator getEvaluatorToLower(String attibuteName) {
66
                return new ToLower(attibuteName);
67

    
68
        }
69

    
70
        protected Evaluator getEvaluatorToUpper(String attibuteName) {
71
                return new ToUpper(attibuteName);
72
        }
73

    
74
        public class ToLower implements Evaluator {
75
                private String attributeName;
76

    
77
                public ToLower(String attrName) {
78
                        this.attributeName = attrName;
79
                }
80

    
81
                public Object evaluate(EvaluatorData data) throws EvaluatorException {
82
                        String value = (String) data.getDataValue(this.attributeName);
83
                        if (value == null) {
84
                                return null;
85
                        }
86
                        return value.toLowerCase();
87
                }
88

    
89
                public String getCQL() {
90
                        return null;
91
                }
92

    
93
                public String getDescription() {
94
                        return null;
95
                }
96

    
97
                public EvaluatorFieldValue[] getFieldValues(String name) {
98
                        return null;
99
                }
100

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

    
105
        }
106

    
107
        public class ToUpper implements Evaluator {
108
                private String attributeName;
109

    
110
                public ToUpper(String attrName) {
111
                        this.attributeName = attrName;
112
                }
113

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

    
122
                public String getCQL() {
123
                        return null;
124
                }
125

    
126
                public String getDescription() {
127
                        return null;
128
                }
129

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

    
134
                public String getName() {
135
                        return null;
136
                }
137

    
138
        }
139

    
140
        protected FeatureStore getStoreCopy(FeatureStore source,
141
                        NewFeatureStoreParameters targetParams) throws DataException {
142
                DataServerExplorer explorer = source.getExplorer();
143
                source.export(explorer, targetParams);
144
                FeatureStore result = (FeatureStore) dataManager
145
                                .createStore(targetParams);
146

    
147
                return result;
148
        }
149

    
150
        protected void clearCopy(FeatureStore source,
151
                        NewFeatureStoreParameters targetParams) throws DataException,
152
                        RemoveException {
153
                DataServerExplorer explorer = source.getExplorer();
154
                explorer.remove(targetParams);
155

    
156
        }
157

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

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

    
182
                return true;
183
        }
184

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

    
206

    
207
                return true;
208

    
209
        }
210

    
211
        protected boolean compareFeatureValue(Object v1, Object v2,
212
                        FeatureAttributeDescriptor attr) {
213

    
214
                if (v1 == v2) {
215
                        return true;
216
                } else if (v1 == null) {
217
                        return false;
218
                }
219
                switch (attr.getDataType()) {
220
                case DataTypes.FEATURE:
221
                        return compareFeatures((Feature) v1, (Feature) v2);
222

    
223
                case DataTypes.GEOMETRY:
224
                        Geometry geom1 = (Geometry) v1;
225
                        Geometry geom2 = (Geometry) v2;
226
                        return geom1.equals(geom2);
227
                case DataTypes.DOUBLE:
228
                        double diff = ((Double) v1).doubleValue()
229
                                        - ((Double) v1).doubleValue();
230
                        return Math.abs(diff) < 0.000001;
231

    
232

    
233
                default:
234
                        return v1.equals(v2);
235
                }
236

    
237
        }
238

    
239

    
240
        //---------------
241

    
242

    
243

    
244

    
245
        //=================================================
246
        //=================================================
247

    
248

    
249

    
250

    
251
        public void testExport() {
252
                DataStoreParameters parameters = null;
253

    
254
                try {
255
                        parameters = getDefaultDataStoreParameters();
256

    
257

    
258
                        FeatureStore store = (FeatureStore) dataManager
259
                                        .createStore(parameters);
260

    
261
                        NewFeatureStoreParameters newParams = this
262
                                        .getDefaultNewDataStoreParameters();
263
                        try {
264
                                this.clearCopy(store, newParams);
265
                        } catch (RemoveException e) {
266
                                //Dp nothing
267
                        }
268

    
269
                        FeatureStore result = this.getStoreCopy(store, newParams);
270

    
271
                        FeatureSet set = result.getFeatureSet();
272
                        FeatureSet originalSet = store.getFeatureSet();
273
                        assertEquals(set.getSize(), originalSet.getSize());
274

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

    
281
                        result.dispose();
282
                        this.clearCopy(store, newParams);
283
                        store.dispose();
284

    
285
                } catch (DataException e3) {
286
                        e3.printStackTrace();
287
                        fail();
288
                        return;
289
                }
290

    
291
        }
292

    
293
        public void testRemove() {
294
                DataStoreParameters parameters = null;
295

    
296
                try {
297
                        parameters = getDefaultDataStoreParameters();
298

    
299
                        FeatureStore store = (FeatureStore) dataManager
300
                                        .createStore(parameters);
301

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

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

    
312
                        result.edit(FeatureStore.MODE_FULLEDIT);
313

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

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

    
327
                        iter.remove();
328

    
329
                        assertEquals(originalSet.getSize() - 1, set.getSize());
330

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

    
340
                        iter.remove();
341

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

    
344
                        set.dispose();
345

    
346
                        result.finishEditing();
347

    
348
                        set = result.getFeatureSet();
349
                        assertEquals(originalSet.getSize() - 2, set.getSize());
350

    
351
                        originalIter = originalSet.iterator();
352
                        iter = set.iterator();
353
                        i = 0;
354
                        while (iter.hasNext()) {
355
                                assertTrue("" + i, compareFeatures((Feature) originalIter
356
                                                .next(), (Feature) iter.next()));
357
                                i++;
358
                        }
359

    
360
                        set.dispose();
361
                        originalSet.dispose();
362

    
363
                        result.dispose();
364
                        this.clearCopy(store, newParams);
365
                        store.dispose();
366

    
367
                } catch (DataException e3) {
368
                        e3.printStackTrace();
369
                        fail();
370
                        return;
371
                }
372

    
373
        }
374

    
375
        public void testInsert() {
376
                DataStoreParameters parameters = null;
377

    
378
                try {
379
                        parameters = getDefaultDataStoreParameters();
380

    
381

    
382
                        FeatureStore store = (FeatureStore) dataManager
383
                                        .createStore(parameters);
384

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

    
393
                        FeatureStore result = this.getStoreCopy(store, newParams);
394

    
395
                        result.edit(FeatureStore.MODE_FULLEDIT);
396

    
397
                        FeatureSet set = result.getFeatureSet();
398
                        FeatureSet originalSet = store.getFeatureSet();
399
                        assertEquals(set.getSize(), originalSet.getSize());
400

    
401
                        set.insert(result.createNewFeature(true));
402
                        Iterator originalIter = originalSet.iterator();
403
                        Iterator iter = set.iterator();
404
                        int i = 0;
405
                        while (originalIter.hasNext()) {
406
                                assertTrue("" + i, compareFeatures((Feature) originalIter
407
                                                .next(), (Feature) iter.next()));
408
                                i++;
409
                        }
410
                        assertTrue(iter.hasNext());
411
                        assertNotNull(iter.next());
412
                        assertFalse(iter.hasNext());
413

    
414
                        assertEquals(originalSet.getSize() + 1, set.getSize());
415

    
416
                        originalIter = originalSet.iterator();
417
                        iter = set.iterator();
418
                        i = 0;
419
                        while (originalIter.hasNext()) {
420
                                assertTrue("" + i, compareFeatures((Feature) originalIter
421
                                                .next(), (Feature) iter.next()));
422
                                i++;
423
                        }
424
                        assertTrue(iter.hasNext());
425
                        assertNotNull(iter.next());
426

    
427
                        set.insert(result.createNewFeature(true));
428

    
429
                        assertEquals(originalSet.getSize() + 2, set.getSize());
430

    
431
                        set.dispose();
432

    
433
                        result.finishEditing();
434

    
435
                        set = result.getFeatureSet();
436
                        assertEquals(originalSet.getSize() + 2, set.getSize());
437

    
438
                        originalIter = originalSet.iterator();
439
                        iter = set.iterator();
440
                        i = 0;
441
                        while (originalIter.hasNext()) {
442
                                assertTrue("" + i, compareFeatures((Feature) originalIter
443
                                                .next(), (Feature) iter.next()));
444
                                i++;
445
                        }
446

    
447
                        assertNotNull(iter.next());
448
                        assertNotNull(iter.next());
449
                        assertFalse(iter.hasNext());
450

    
451
                        set.dispose();
452
                        originalSet.dispose();
453

    
454
                        result.dispose();
455
                        this.clearCopy(store, newParams);
456
                        store.dispose();
457

    
458
                } catch (DataException e3) {
459
                        e3.printStackTrace();
460
                        fail();
461
                        return;
462
                }
463

    
464
        }
465

    
466

    
467

    
468
        public void testConcurrentRemove() {
469
                DataStoreParameters parameters = null;
470

    
471
                try {
472
                        parameters = getDefaultDataStoreParameters();
473

    
474

    
475
                        FeatureStore store = (FeatureStore) dataManager
476
                                        .createStore(parameters);
477

    
478
                        NewFeatureStoreParameters newParams = this
479
                                        .getDefaultNewDataStoreParameters();
480
                        try {
481
                                this.clearCopy(store, newParams);
482
                        } catch (RemoveException e) {
483
                                //Dp nothing
484
                        }
485

    
486
                        FeatureStore result = this.getStoreCopy(store, newParams);
487

    
488
                        result.edit(FeatureStore.MODE_FULLEDIT);
489

    
490
                        DeleteFirstAndLastFeature deleteFeature = new DeleteFirstAndLastFeature(
491
                                        "1", result, EditStore.TIME_TO_WAIT_NO_WAIT);
492

    
493
                        FeatureSet set = result.getFeatureSet();
494

    
495
                        Iterator iter = set.iterator();
496
                        assertTrue(iter.hasNext());
497
                        assertNotNull(iter.next());
498

    
499
                        deleteFeature.start();
500

    
501
                        while (deleteFeature.getCurrentStatus() <= EditStore.STATUS_RUNING) {
502
                                Thread.yield();
503
                                Thread.sleep(100);
504
                                if (deleteFeature.isOutOfDate()) {
505
                                        break;
506
                                }
507
                        }
508

    
509
                        assertEquals(deleteFeature.getCurrentStatus(),
510
                                        EditStore.STATUS_FINISHED_OK);
511

    
512
                        Exception ex = null;
513
                        try {
514
                                iter.next();
515
                        } catch (Exception e) {
516
                                ex = e;
517
                        }
518
                        assertNotNull(ex);
519
                        assertEquals(ConcurrentDataModificationException.class, ex
520
                                        .getClass());
521

    
522
                        ex = null;
523
                        try {
524
                                set.getSize();
525
                        } catch (Exception e) {
526
                                ex = e;
527
                        }
528
                        assertNotNull(ex);
529
                        assertEquals(ConcurrentDataModificationException.class, ex
530
                                        .getClass());
531

    
532
                        result.dispose();
533
                        this.clearCopy(store, newParams);
534
                        store.dispose();
535

    
536

    
537
                } catch (DataException e3) {
538
                        e3.printStackTrace();
539
                        fail();
540
                        return;
541
                } catch (InterruptedException e) {
542
                        e.printStackTrace();
543
                        fail();
544
                        return;
545
                }
546
        }
547

    
548
        public void testConcurrentInsert() {
549
                DataStoreParameters parameters = null;
550

    
551
                try {
552
                        parameters = getDefaultDataStoreParameters();
553

    
554

    
555
                        FeatureStore store = (FeatureStore) dataManager
556
                                        .createStore(parameters);
557

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

    
566
                        FeatureStore result = this.getStoreCopy(store, newParams);
567

    
568
                        result.edit(FeatureStore.MODE_FULLEDIT);
569

    
570
                        InsertFeature insertFeature = new InsertFeature("1", result,
571
                                        EditStore.TIME_TO_WAIT_NO_WAIT);
572

    
573
                        FeatureSet set = result.getFeatureSet();
574

    
575
                        Iterator iter = set.iterator();
576
                        assertTrue(iter.hasNext());
577
                        assertNotNull(iter.next());
578

    
579
                        insertFeature.start();
580

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

    
589
                        assertEquals(EditStore.STATUS_FINISHED_OK, insertFeature
590
                                        .getCurrentStatus());
591

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

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

    
612
                        result.dispose();
613
                        this.clearCopy(store, newParams);
614
                        store.dispose();
615

    
616
                } catch (DataException e3) {
617
                        e3.printStackTrace();
618
                        fail();
619
                        return;
620
                } catch (InterruptedException e) {
621
                        e.printStackTrace();
622
                        fail();
623
                        return;
624
                }
625
        }
626

    
627
        public void testConcurrentUpdate() {
628
                DataStoreParameters parameters = null;
629

    
630
                try {
631
                        parameters = getDefaultDataStoreParameters();
632

    
633

    
634
                        FeatureStore store = (FeatureStore) dataManager
635
                                        .createStore(parameters);
636

    
637
                        NewFeatureStoreParameters newParams = this
638
                                        .getDefaultNewDataStoreParameters();
639
                        try {
640
                                this.clearCopy(store, newParams);
641
                        } catch (RemoveException e) {
642
                                //Dp nothing
643
                        }
644

    
645
                        FeatureStore result = this.getStoreCopy(store, newParams);
646

    
647

    
648
                        result.edit(FeatureStore.MODE_FULLEDIT);
649

    
650
                        UpdateFeature updateFeature = new UpdateFeature("1", result,
651
                                        EditStore.TIME_TO_WAIT_NO_WAIT);
652

    
653
                        updateFeature.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES,
654
                                        "OTRO_IDIOM", "XXX");
655

    
656
                        FeatureSet set = result.getFeatureSet();
657

    
658
                        Iterator iter = set.iterator();
659
                        assertTrue(iter.hasNext());
660
                        assertNotNull(iter.next());
661

    
662
                        updateFeature.start();
663

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

    
672
                        assertEquals(EditStore.STATUS_FINISHED_OK, updateFeature
673
                                        .getCurrentStatus());
674

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

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

    
695
                        result.dispose();
696
                        this.clearCopy(store, newParams);
697
                        store.dispose();
698

    
699

    
700
                } catch (DataException e3) {
701
                        e3.printStackTrace();
702
                        fail();
703
                        return;
704
                } catch (InterruptedException e) {
705
                        e.printStackTrace();
706
                        fail();
707
                        return;
708
                }
709
        }
710

    
711
        public void testSequencedRemove() {
712
                DataStoreParameters parameters = null;
713

    
714
                int ntimes = 3;
715

    
716
                try {
717
                        parameters = getDefaultDataStoreParameters();
718

    
719
                        FeatureStore store = (FeatureStore) dataManager
720
                                        .createStore(parameters);
721

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

    
730
                        FeatureStore result = this.getStoreCopy(store, newParams);
731

    
732
                        result.edit(FeatureStore.MODE_FULLEDIT);
733

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

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

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

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

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

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

    
805
                        Iterator originalIter = originalSet.iterator();
806
                        Iterator iter = set.iterator();
807

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

    
815
                        set.dispose();
816

    
817
                        result.finishEditing();
818

    
819
                        set = result.getFeatureSet();
820
                        assertEquals(originalSet.getSize() - deletesFeature.length, set
821
                                        .getSize());
822

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

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

    
835
                        result.dispose();
836
                        this.clearCopy(store, newParams);
837
                        store.dispose();
838

    
839
                } catch (DataException e3) {
840
                        e3.printStackTrace();
841
                        fail();
842
                        return;
843
                }
844

    
845
        }
846

    
847
        public void testSequencedInsert() {
848
                DataStoreParameters parameters = null;
849

    
850
                int ntimes = 3;
851

    
852
                try {
853
                        parameters = getDefaultDataStoreParameters();
854

    
855

    
856
                        FeatureStore store = (FeatureStore) dataManager
857
                                        .createStore(parameters);
858

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

    
867
                        FeatureStore result = this.getStoreCopy(store, newParams);
868

    
869
                        result.edit(FeatureStore.MODE_FULLEDIT);
870

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

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

    
882
                        try {
883

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

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

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

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

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

    
948
                        Iterator originalIter = originalSet.iterator();
949
                        Iterator iter = set.iterator();
950

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

    
961
                        set.dispose();
962

    
963
                        result.finishEditing();
964

    
965
                        set = result.getFeatureSet();
966
                        assertEquals(originalSet.getSize() + insertsFeature.length, set
967
                                        .getSize());
968

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

    
981
                        set.dispose();
982
                        originalSet.dispose();
983

    
984
                        result.dispose();
985
                        this.clearCopy(store, newParams);
986
                        store.dispose();
987

    
988

    
989
                } catch (DataException e3) {
990
                        e3.printStackTrace();
991
                        fail();
992
                        return;
993
                }
994

    
995
        }
996

    
997

    
998
        public void testUpdate() {
999
                DataStoreParameters parameters = null;
1000

    
1001
                try {
1002
                        parameters = getDefaultDataStoreParameters();
1003

    
1004
                        FeatureStore store = (FeatureStore) dataManager
1005
                                        .createStore(parameters);
1006

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

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

    
1017
                        result.edit(FeatureStore.MODE_FULLEDIT);
1018

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

    
1022
                        set.dispose();
1023

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

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

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

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

    
1053
                        FeatureSet originalSet = store.getFeatureSet();
1054

    
1055
                        Iterator originalIter = originalSet.iterator();
1056

    
1057
                        iter = set.iterator();
1058

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

    
1071

    
1072
                        set.dispose();
1073

    
1074
                        result.finishEditing();
1075

    
1076
                        set = result.getFeatureSet();
1077
                        assertEquals(originalSet.getSize(), set.getSize());
1078

    
1079
                        originalIter = originalSet.iterator();
1080
                        iter = set.iterator();
1081
                        i = 0;
1082
                        while (originalIter.hasNext()) {
1083
                                try {
1084
                                        assertTrue("" + i, compareFeatures((Feature) originalIter
1085
                                                        .next(), (Feature) iter.next(), updater, i, size));
1086
                                } catch (EvaluatorException e) {
1087
                                        e.printStackTrace();
1088
                                        fail();
1089
                                }
1090
                                i++;
1091
                        }
1092

    
1093

    
1094
                        set.dispose();
1095

    
1096

    
1097
                        updater = new UpdateFeature("1", result,
1098
                                        UpdateFeature.TIME_TO_WAIT_NO_WAIT);
1099

    
1100
                        updater.addUpdate(UpdateFeature.UPDATE_ALL_FEATURES,
1101
                                        attr.getName(), getEvaluatorToLower(attr.getName()));
1102

    
1103
                        updater.run();
1104
                        while (updater.getCurrentStatus() < EditStore.STATUS_FINISHED_OK
1105
                                        && !updater.isOutOfDate()) {
1106
                                Thread.yield();
1107
                                try {
1108
                                        Thread.sleep(200);
1109
                                } catch (InterruptedException e) {
1110
                                        e.printStackTrace();
1111
                                        fail();
1112
                                }
1113
                        }
1114
                        set = result.getFeatureSet();
1115

    
1116
                        iter = set.iterator();
1117
                        originalIter = originalSet.iterator();
1118
                        i = 0;
1119
                        while (originalIter.hasNext()) {
1120
                                try {
1121
                                        assertTrue("" + i, compareFeatures((Feature) originalIter
1122
                                                        .next(), (Feature) iter.next(), updater, i, size));
1123
                                } catch (EvaluatorException e) {
1124
                                        e.printStackTrace();
1125
                                        fail();
1126
                                }
1127
                                i++;
1128
                        }
1129

    
1130
                        set.dispose();
1131

    
1132

    
1133
                        originalSet.dispose();
1134

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

    
1139
                } catch (DataException e3) {
1140
                        e3.printStackTrace();
1141
                        fail();
1142
                        return;
1143
                }
1144

    
1145
        }
1146

    
1147
}