Revision 33949

View differences:

tags/v2_0_0_Build_2020/libraries/libFMap_dal/src-test/org/gvsig/fmap/dal/AllTests.java
1
package org.gvsig.fmap.dal;
2

  
3
import junit.framework.Test;
4
import junit.framework.TestCase;
5
import junit.framework.TestSuite;
6

  
7
import org.gvsig.fmap.dal.commands.CommandTest;
8
import org.gvsig.fmap.dal.feature.FeatureTest;
9

  
10
public class AllTests extends TestCase{
11
	public static Test suite() {
12
		TestSuite suite = new TestSuite("Test for libDataSource");
13
		//$JUnit-BEGIN$
14
		suite.addTestSuite(CommandTest.class);
15
		suite.addTestSuite(DataStoreTest.class);
16
		suite.addTestSuite(FeatureTest.class);
17

  
18
		//$JUnit-END$
19
		return suite;
20
	}
21
}
tags/v2_0_0_Build_2020/libraries/libFMap_dal/src-test/org/gvsig/fmap/dal/feature/BaseTestFeatureStore.java
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.ArrayList;
34
import java.util.Collections;
35
import java.util.Iterator;
36
import java.util.List;
37
import java.util.Random;
38
import java.util.TreeSet;
39

  
40
import org.gvsig.fmap.dal.DALLocator;
41
import org.gvsig.fmap.dal.DataManager;
42
import org.gvsig.fmap.dal.DataServerExplorer;
43
import org.gvsig.fmap.dal.DataStoreParameters;
44
import org.gvsig.fmap.dal.DataTypes;
45
import org.gvsig.fmap.dal.exception.DataEvaluatorRuntimeException;
46
import org.gvsig.fmap.dal.exception.DataException;
47
import org.gvsig.fmap.dal.feature.FeatureQueryOrder.FeatureQueryOrderMember;
48
import org.gvsig.fmap.dal.feature.testmulithread.StoreTask;
49
import org.gvsig.fmap.dal.resource.ResourceManager;
50
import org.gvsig.fmap.geom.Geometry;
51
import org.gvsig.tools.ToolsLocator;
52
import org.gvsig.tools.dispose.DisposableIterator;
53
import org.gvsig.tools.dynobject.DynClass;
54
import org.gvsig.tools.dynobject.DynField;
55
import org.gvsig.tools.dynobject.DynObject;
56
import org.gvsig.tools.evaluator.Evaluator;
57
import org.gvsig.tools.evaluator.EvaluatorData;
58
import org.gvsig.tools.evaluator.EvaluatorException;
59
import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
60
import org.gvsig.tools.junit.AbstractLibraryAutoInitTestCase;
61
import org.gvsig.tools.persistence.PersistentState;
62
import org.gvsig.tools.persistence.exception.PersistenceException;
63
import org.slf4j.Logger;
64
import org.slf4j.LoggerFactory;
65

  
66
/**
67
 * @author jmvivo
68
 *
69
 */
70
public abstract class BaseTestFeatureStore extends
71
		AbstractLibraryAutoInitTestCase {
72

  
73
	private static Logger logger = null;
74

  
75
	protected DataManager dataManager = null;
76
	private static Random rnd;
77

  
78
	public Logger getLogger() {
79
		if (logger == null) {
80
			logger = LoggerFactory.getLogger(this.getClass());
81
		}
82
		return logger;
83
	}
84

  
85
	public abstract boolean usesResources();
86

  
87
	public abstract boolean hasExplorer();
88

  
89
	public FeatureQuery getDefaultQuery(FeatureStore store)
90
			throws DataException {
91
		FeatureQuery query = store.createFeatureQuery();
92
		FeatureAttributeDescriptor[] key = store.getDefaultFeatureType()
93
				.getPrimaryKey();
94
		for (int i = 0; i < key.length; i++) {
95
			query.getOrder().add(key[i].getName(), true);
96
		}
97

  
98
		return query;
99
	}
100

  
101

  
102
	public abstract DataStoreParameters getDefaultDataStoreParameters()
103
			throws DataException;
104

  
105

  
106
	protected void doSetUp() throws Exception {
107
		dataManager = DALLocator.getDataManager();
108
	}
109

  
110

  
111
	//=================================================
112

  
113

  
114
	public void printFeature(Feature feature, int maxColSize) {
115
		printFeature(feature, true, maxColSize);
116
	}
117

  
118

  
119
	public void printFeature(Feature feature, boolean showColName,int maxColSize) {
120
		FeatureType fType = feature.getType();
121
		if (showColName){
122
			this.printFeatureTypeColNames(feature.getType(), maxColSize);
123
		}
124
		StringBuffer row = new StringBuffer();
125
		Iterator iter = fType.iterator();
126
		FeatureAttributeDescriptor attr;
127

  
128
		while (iter.hasNext()) {
129
			attr = (FeatureAttributeDescriptor) iter.next();
130
			row.append(truncateOrFillString(feature.get(attr.getName()),
131
					maxColSize + 1, ' '));
132
		}
133
		System.out.println(row.toString());
134
	}
135

  
136
	public String truncateOrFillString(Object str, int max, char fillWith) {
137
		if (str == null) {
138
			return truncateOrFillString("{null}", max, fillWith);
139
		}
140
		return truncateOrFillString(str.toString(), max, fillWith);
141
	}
142

  
143
	public String truncateOrFillString(String str, int max, char fillWith) {
144
		if (str.length() > max) {
145
			return str.substring(0, max - 1) + " ";
146
		} else {
147
			StringBuffer strB = new StringBuffer(str);
148
			while (strB.length() < max) {
149
				strB.append(fillWith);
150
			}
151
			return strB.toString();
152
		}
153

  
154
	}
155

  
156
	public void printFeatureTypeColNames(FeatureType fType, int maxColSize) {
157
		Iterator iter = fType.iterator();
158
		FeatureAttributeDescriptor attr;
159
		StringBuffer colNames = new StringBuffer();
160
		StringBuffer typeNames = new StringBuffer();
161
		StringBuffer sep = new StringBuffer();
162
		if (maxColSize < 1){
163
			maxColSize = 15;
164
		}
165
		while (iter.hasNext()) {
166
			attr = (FeatureAttributeDescriptor) iter.next();
167
			colNames.append(truncateOrFillString(attr.getName(), maxColSize + 1, ' '));
168
			typeNames.append(truncateOrFillString("(" + attr.getDataTypeName() + ")",
169
					maxColSize + 1, ' '));
170
			sep.append(truncateOrFillString("", maxColSize, '='));
171
			sep.append(' ');
172
		}
173

  
174
		System.out.println("");
175
		System.out.println("");
176
		System.out.println(colNames.toString());
177
		System.out.println(typeNames.toString());
178
		System.out.println(sep.toString());
179
	}
180

  
181
	protected FeatureAttributeDescriptor getFirstAttributeOfType(
182
			FeatureType ftype, int dataType) {
183
		return getFirstAttributeOfType(ftype, new int[] { dataType });
184
	}
185

  
186
	protected FeatureAttributeDescriptor getFirstAttributeOfType(
187
			FeatureType ftype, int[] dataTypes) {
188
		FeatureAttributeDescriptor attr;
189
		Iterator iter = ftype.iterator();
190
		int i;
191
		while (iter.hasNext()) {
192
			attr = (FeatureAttributeDescriptor) iter.next();
193
			for (i = 0; i < dataTypes.length; i++) {
194
				if (attr.getType() == dataTypes[i]) {
195
					return attr;
196
				}
197
			}
198
		}
199
		return null;
200
	}
201

  
202
	protected boolean compareDynObject(DynObject obj1, DynObject obj2) {
203
		DynClass dynClass = obj1.getDynClass();
204
		if (!dynClass.getName().equals(obj2.getDynClass().getName())) {
205
			return false;
206
		}
207

  
208
		DynField[] fields = dynClass.getDeclaredDynFields();
209
		String fieldName;
210
		Object v1, v2;
211
		for (int i = 0; i < fields.length; i++) {
212
			fieldName = fields[i].getName();
213
			v1 = obj1.getDynValue(fieldName);
214
			v2 = obj2.getDynValue(fieldName);
215
			if (v1 == v2) {
216
				continue;
217
			} else if (v1 != null) {
218
				if (!v1.equals(v2)) {
219
					return false;
220
				}
221
			}
222
		}
223

  
224
		return true;
225
	}
226

  
227
	protected boolean compareStores(FeatureStore store1, FeatureStore store2)
228
			throws DataException {
229
		if (store1.getParameters().getClass() != store2.getParameters()
230
				.getClass()) {
231
			return false;
232
		}
233
		if (!compareDynObject(store1.getParameters(), store2.getParameters())) {
234
			return false;
235
		}
236

  
237
		if (store1.getEnvelope() != store2.getEnvelope()) {
238
			if (store1.getEnvelope() != null) {
239
				return store1.getEnvelope().equals(store2.getEnvelope());
240
			} else {
241
				return false;
242
			}
243
		}
244

  
245
		if (!store1.getName().equals(store2.getName())) {
246
			return false;
247
		}
248
		if (((FeatureSelection) store1.getSelection()).getSize() != ((FeatureSelection) store2
249
				.getSelection()).getSize()) {
250
			return false;
251
		}
252
		DisposableIterator iter1 = ((FeatureSelection) store1.getSelection())
253
				.fastIterator();
254
		DisposableIterator iter2 = ((FeatureSelection) store2.getSelection())
255
				.fastIterator();
256
		if (!compareFeatureIterators(iter1, iter2)) {
257
			return false;
258
		}
259
		iter1.dispose();
260
		iter2.dispose();
261

  
262
		if (store1.getFeatureTypes().size() != store2.getFeatureTypes().size()) {
263
			return false;
264
		}
265
		Iterator iterTypes1 = store1.getFeatureTypes().iterator();
266
		Iterator iterTypes2 = store2.getFeatureTypes().iterator();
267
		while (iterTypes1.hasNext()) {
268
			if (!compareTypes((FeatureType) iterTypes1.next(),
269
					(FeatureType) iterTypes2
270
					.next())) {
271
				return false;
272
			}
273
		}
274
		if (!compareTypes(store1.getDefaultFeatureType(), store2
275
				.getDefaultFeatureType())) {
276
			return false;
277
		}
278

  
279
		if (store1.getLocks() != null) {
280
			if (store1.getLocks().getLocksCount() != store2.getLocks()
281
					.getLocksCount()) {
282
				return false;
283
			}
284
			if (!compareFeatureIterators(store1.getLocks().getLocks(), store2
285
					.getLocks().getLocks())) {
286
				return false;
287
			}
288

  
289
		} else if (store2.getLocks() != null) {
290
			return false;
291
		}
292

  
293
		return true;
294
	}
295

  
296
	protected boolean compareFeatureIterators(Iterator iter1, Iterator iter2) {
297
		Feature feature;
298
		Feature ffeature;
299
		while (iter1.hasNext()) {
300
			feature = (Feature) iter1.next();
301
			ffeature = (Feature) iter2.next();
302
			if (!this.compareFeatures(feature, ffeature)) {
303
				return false;
304
			}
305
		}
306

  
307
		if (!iter2.hasNext()) {
308
			return true;
309
		} else {
310
			getLogger().warn("size !=");
311
			return false;
312
		}
313

  
314
	}
315

  
316
	protected boolean compareFeatureIterators(Iterator iter1, Iterator iter2,
317
			String[] attrNames) {
318
		Feature feature;
319
		Feature ffeature;
320
		while (iter1.hasNext()) {
321
			feature = (Feature) iter1.next();
322
			ffeature = (Feature) iter2.next();
323
			if (!this.compareFeatures(feature, ffeature, attrNames)) {
324
				return false;
325
			}
326
		}
327

  
328
		return !iter2.hasNext();
329

  
330
	}
331

  
332

  
333

  
334
	protected boolean compareTypes(FeatureType ft1, FeatureType ft2) {
335
		if (ft1.size() != ft2.size()) {
336
			getLogger().warn("size !=");
337
			return false;
338
		}
339
		if (ft1.getDefaultGeometryAttributeIndex() != ft2
340
				.getDefaultGeometryAttributeIndex()) {
341
			getLogger().warn(
342
					"getDefaultGeometryAttributeIndex "
343
							+ ft1.getDefaultGeometryAttributeIndex() +
344
					" !="+ ft2.getDefaultGeometryAttributeIndex());
345
			return false;
346
		}
347
		if (ft1.getDefaultGeometryAttributeIndex() > -1) {
348
			if (ft1.getDefaultSRS() != null) {
349
				if (!ft1.getDefaultSRS().equals(ft2.getDefaultSRS())) {
350
					getLogger().warn("getDefaultSRS !=");
351
					return false;
352
				}
353

  
354
			} else {
355
				if (ft2.getDefaultSRS() != null) {
356
					getLogger().warn("getDefaultSRS !=");
357
					return false;
358
				}
359
			}
360
		}
361

  
362
		if (ft1.getDefaultGeometryAttributeName() != null) {
363
			if (!ft1.getDefaultGeometryAttributeName().equals(
364
					ft2.getDefaultGeometryAttributeName())) {
365
				getLogger().warn("getDefaultGeometryAttributeName !=");
366

  
367
				return false;
368
			}
369
		} else {
370
			if (ft2.getDefaultGeometryAttributeName() != null) {
371
				getLogger().warn("getDefaultGeometryAttributeName !=");
372
				return false;
373
			}
374
		}
375

  
376

  
377

  
378
		FeatureAttributeDescriptor attr1, attr2;
379
		for (int i = 0; i < ft1.size(); i++) {
380
			attr1 = ft1.getAttributeDescriptor(i);
381
			attr2 = ft2.getAttributeDescriptor(i);
382

  
383
			if (!compareAttributes(attr1, attr2)) {
384
				return false;
385
			}
386

  
387
		}
388
		return true;
389

  
390
	}
391

  
392
	protected boolean compareAttributes(FeatureAttributeDescriptor attr1,
393
			FeatureAttributeDescriptor attr2) {
394
		if (attr1 == null || attr2 == null) {
395
			getLogger().warn("attr1 == null || attr2 == null");
396
			return false;
397
		}
398
		if (!attr1.getName().equals(attr2.getName())) {
399
			getLogger().warn(
400
					"name '" + attr1.getName() + "' != '" + attr2.getName()
401
							+ "'");
402
			return false;
403
		}
404

  
405
		if (attr1.getDataType() != attr2.getDataType()) {
406
			getLogger().warn(
407
					attr1.getName() + ":" +
408
					"dataType '" + attr1.getDataTypeName() + "'["
409
							+ attr1.getDataType() + "] != '"
410
							+ attr2.getDataTypeName() + "'["
411
							+ attr2.getDataType() + "]");
412
			return false;
413
		}
414

  
415
		if (attr1.getSize() != attr2.getSize()) {
416
			getLogger().warn(
417
					attr1.getName() + ":" +
418
					"size " + attr1.getSize() + " != " + attr2.getSize());
419
			return false;
420
		}
421

  
422
		if (attr1.getPrecision() != attr2.getPrecision()) {
423
			getLogger().warn(
424
					attr1.getName() + ":" +
425
					"precision " + attr1.getPrecision() + " != "
426
							+ attr1.getPrecision());
427
			return false;
428
		}
429

  
430
		if (attr1.getGeometryType() != attr2.getGeometryType()) {
431
			getLogger().warn(
432
					attr1.getName() + ":" +
433
					"GeometryType " + attr1.getGeometryType() + " != "
434
							+ attr2.getGeometryType());
435
			return false;
436
		}
437

  
438
		if (attr1.getGeometrySubType() != attr2.getGeometrySubType()) {
439
			getLogger().warn(
440
					attr1.getName() + ":" +
441
					"GeometrySubType " + attr1.getGeometrySubType() + " != "
442
							+ attr2.getGeometrySubType());
443

  
444
			return false;
445
		}
446

  
447
		if (attr1.getSRS() != null) {
448
			if (!attr1.getSRS().equals(attr2.getSRS())) {
449
				getLogger().warn(
450
						attr1.getName() + ":" +
451
						"srs " + attr1.getSRS() + " != " + attr2.getSRS());
452
				return false;
453
			}
454
		} else {
455
			if (attr2.getSRS() != null) {
456
				getLogger().warn(
457
						attr1.getName() + ":" +
458
						"srs " + attr1.getSRS() + " != " + attr2.getSRS());
459
				return false;
460
			}
461
		}
462

  
463
		return true;
464
	}
465

  
466
	protected boolean compareFeatures(Feature f1, Feature f2,
467
			String[] attrsNames) {
468
		FeatureAttributeDescriptor attr1;
469
		FeatureAttributeDescriptor attr2;
470
		Object v1, v2;
471
		for (int i = 0; i < attrsNames.length; i++) {
472
			attr1 = f1.getType().getAttributeDescriptor(attrsNames[i]);
473
			attr2 = f2.getType().getAttributeDescriptor(attrsNames[i]);
474
			if (attr1 != attr2) {
475
				if (!compareAttributes(attr1, attr1)) {
476
					return false;
477
				}
478
			}
479
			v1 = f1.get(attr1.getName());
480
			v2 = f2.get(attr2.getName());
481
			if (!compareFeatureValue(v1, v2, attr1)) {
482
				return false;
483
			}
484
		}
485

  
486
		return true;
487
	}
488

  
489
	protected boolean compareFeatures(Feature f1, Feature f2) {
490
		if (!compareTypes(f1.getType(), f2.getType())) {
491
			return false;
492
		}
493
		Iterator iter = f1.getType().iterator();
494
		FeatureAttributeDescriptor attr;
495
		Object v1, v2;
496
		while (iter.hasNext()) {
497
			attr = (FeatureAttributeDescriptor) iter.next();
498
			v1 = f1.get(attr.getName());
499
			v2 = f2.get(attr.getName());
500
			if (!compareFeatureValue(v1, v2, attr)) {
501
				return false;
502
			}
503
		}
504

  
505
		return true;
506

  
507
	}
508

  
509
	protected boolean compareFeatureValue(Object v1, Object v2,
510
			FeatureAttributeDescriptor attr) {
511

  
512
		if ((v1 == null || v2 == null) &&  !attr.allowNull() ){
513
			getLogger().warn("null and !allowNull:"
514
							+ attr.getName());
515
			return false;
516
		}
517

  
518
		if (v1 == v2) {
519
			return true;
520
		} else if (v1 == null) {
521
			getLogger().warn(" v1 == null and v2 != null:"
522
							+ attr.getName());
523
			return false;
524
		} else if (v2 == null) {
525
			getLogger().warn("v2 == null and v1 != null:"
526
							+ attr.getName());
527
			return false;
528

  
529
		}
530
		switch (attr.getType()) {
531
		case DataTypes.GEOMETRY:
532
			Geometry geom1 = (Geometry) v1;
533
			Geometry geom2 = (Geometry) v2;
534
			if (!geom1.equals(geom2)) {
535
				getLogger().warn(" v1 != v2 (Geom):" + attr.getName());
536
				return false;
537

  
538
			}
539
			return true;
540
		case DataTypes.DOUBLE:
541
			double diff = ((Double) v1).doubleValue()
542
					- ((Double) v1).doubleValue();
543
			if (!(Math.abs(diff) < 0.000001)) {
544
				getLogger().warn(" v1 != v2 (Dobule):" + attr.getName());
545
				return false;
546

  
547
			}
548
			return true;
549

  
550
		case DataTypes.OBJECT:
551
			if (!v1.equals(v2)) {
552
				getLogger().warn(
553
						" v1 != v2 (object):" + attr.getName() + " [ignored]");
554
				return false;
555
			}
556
			return true;
557

  
558
		default:
559
			if (!v1.equals(v2)) {
560
				getLogger()
561
						.warn(
562
								" v1 != v2:" + attr.getName() + ": " + v1
563
										+ " != " + v2);
564
				return false;
565
			}
566
		}
567
		return true;
568

  
569
	}
570

  
571

  
572
	//------------------------------------------------
573

  
574
	public void testSimpleIteration(FeatureStore store) {
575
		this.testSimpleIteration(store, null);
576
	}
577

  
578
	protected String[] getRandomAttibuteList(FeatureType fType) {
579
		String[] attrNames = new String[fType.size()];
580
		Iterator iter = fType.iterator();
581
		int i = 0;
582
		while (iter.hasNext()) {
583
			attrNames[i] = ((FeatureAttributeDescriptor) iter.next()).getName();
584
			i++;
585
		}
586
		return this.getRandomAttibuteList(attrNames);
587
	}
588

  
589
	protected Random getRandom(){
590
		if (rnd == null){
591
			rnd = new Random();
592
			rnd.setSeed(System.currentTimeMillis());
593
		}
594
		return rnd;
595
	}
596

  
597
	protected String[] getRandomAttibuteList(String[] attrNames) {
598
		int nAttributes = getRandom().nextInt(
599
				attrNames.length + (attrNames.length / 2)) + 1;
600
		TreeSet set = new TreeSet();
601
		for (int i = 0; i < nAttributes; i++) {
602
			set.add(attrNames[getRandom().nextInt(attrNames.length)]);
603
		}
604
		return (String[]) set.toArray(new String[0]);
605
	}
606

  
607
	public void testIterationFastAndStandart(FeatureStore store)
608
			throws Exception {
609
		this.testIterationFastAndStandart(store, null);
610

  
611
		FeatureQuery query = this.getDefaultQuery(store);
612
		// Random Attribute list
613
		query.setAttributeNames(getRandomAttibuteList(store
614
				.getDefaultFeatureType()));
615
		this.testIterationFastAndStandart(store, query);
616

  
617
		// Sorted
618
		FeatureAttributeDescriptor attr = getFirstAttributeOfType(store
619
				.getDefaultFeatureType(), new int[] { DataTypes.INT,
620
				DataTypes.LONG, DataTypes.STRING });
621
		{
622
			// asure that attr is in query attributes
623
			boolean attrFound = false;
624
			String[] curAttrs = query.getAttributeNames();
625
			for (int i = 0; i < curAttrs.length; i++) {
626
				if (curAttrs[i].equals(attr.getName())) {
627
					attrFound = true;
628
					break;
629

  
630
				}
631
			}
632
			if (!attrFound) {
633
				String[] newAttrs = new String[curAttrs.length + 1];
634
				for (int i = 0; i < curAttrs.length; i++) {
635
					newAttrs[i] = curAttrs[i];
636
				}
637
				newAttrs[curAttrs.length] = attr.getName();
638
				query.setAttributeNames(newAttrs);
639
			}
640
		}
641

  
642

  
643
		query.getOrder().add(attr.getName(), true);
644
		this.testIterationFastAndStandart(store, query);
645

  
646
		// Filter
647
		query = this.getDefaultQuery(store);
648

  
649
		query.setFilter(new Evaluator(){
650

  
651
			public Object evaluate(EvaluatorData data)
652
					throws EvaluatorException {
653
				// TODO Auto-generated method stub
654
				return Boolean.TRUE;
655
			}
656

  
657
			public String getSQL() {
658
				return "true = true";
659
			}
660

  
661
			public String getDescription() {
662
				// TODO Auto-generated method stub
663
				return null;
664
			}
665

  
666
			public String getName() {
667
				return "AlwaysTrue";
668
			}
669

  
670
			public EvaluatorFieldsInfo getFieldsInfo() {
671
				// TODO Auto-generated method stub
672
				return null;
673
			}
674

  
675
		});
676
		this.testIterationFastAndStandart(store, query);
677

  
678
		// Filter + Sorted
679
		query.getOrder().add(attr.getName(), true);
680
		this.testIterationFastAndStandart(store, query);
681
	}
682

  
683
	public void testSimpleIteration(FeatureStore store, FeatureQuery query) {
684
		FeatureSet set;
685
		try {
686

  
687
			if (query == null) {
688
				query = this.getDefaultQuery(store);
689
			}
690
			set = store.getFeatureSet(query);
691
			FeatureType type = set.getDefaultFeatureType();
692

  
693
			DisposableIterator it = set.iterator();
694
			Feature feature;
695
			printFeatureTypeColNames(type, 15);
696
			while (it.hasNext()) {
697

  
698
				feature = (Feature) it.next();
699
				printFeature(feature, false, 15);
700
			}
701

  
702
			it.dispose();
703
			set.dispose();
704

  
705
		} catch (DataException e3) {
706
			e3.printStackTrace();
707
			fail();
708
			return;
709
		}
710

  
711
	}
712

  
713
	public void testIterationFastAndStandart(FeatureStore store,
714
			FeatureQuery query) {
715
		FeatureSet set;
716
		try {
717

  
718
			if (query == null) {
719
				query = this.getDefaultQuery(store);
720
			}
721
			set = store.getFeatureSet(query);
722

  
723
			DisposableIterator it = set.iterator();
724
			DisposableIterator fit = set.fastIterator();
725

  
726
			assertTrue(this.compareFeatureIterators(it, fit));
727

  
728
			it.dispose();
729
			fit.dispose();
730
			set.dispose();
731

  
732
		} catch (DataException e3) {
733
			e3.printStackTrace();
734
			fail();
735
			return;
736
		}
737

  
738
	}
739

  
740
	public void testSimpleIteration(DataStoreParameters parameters)
741
			throws Exception {
742
		FeatureStore store = null;
743
		store = (FeatureStore) dataManager.openStore(parameters
744
				.getDataStoreName(), parameters);
745

  
746
		this.testSimpleIteration(store);
747

  
748
		store.dispose();
749

  
750
	}
751

  
752
	public void testIterationFastAndStandart(DataStoreParameters parameters)
753
			throws Exception {
754
		FeatureStore store = null;
755
		store = (FeatureStore) dataManager.openStore(parameters
756
				.getDataStoreName(), parameters);
757

  
758
		this.testIterationFastAndStandart(store);
759

  
760
		store.dispose();
761

  
762
	}
763

  
764
	/**
765
	 *
766
	 * @param count
767
	 *            if (< 0) list.size() >= 1 else list.size() == count
768
	 * @throws Exception
769
	 */
770
	public void testExplorerList(int count) throws Exception {
771
		FeatureStore store = null;
772
		DataStoreParameters params = getDefaultDataStoreParameters();
773
		store = (FeatureStore) dataManager.openStore(params.getDataStoreName(),
774
				params);
775

  
776
		DataServerExplorer explorer;
777
		explorer = store.getExplorer();
778

  
779
		if (count < 0) {
780
			assertTrue(explorer.list().size() >= 1);
781
		} else {
782
			assertTrue(explorer.list().size() == count);
783
		}
784

  
785
		store.dispose();
786

  
787
		explorer.dispose();
788
	}
789

  
790
	//=================================================
791
	//=================================================
792

  
793

  
794

  
795

  
796
	public void testIterationFastAndStandart() throws Exception {
797
		this.testIterationFastAndStandart(this.getDefaultDataStoreParameters());
798
	}
799

  
800
	public void testSimpleIteration() throws Exception {
801
		this.testSimpleIteration(this.getDefaultDataStoreParameters());
802
	}
803

  
804
	public void testInitializeStore() throws Exception {
805
		DataStoreParameters params = getDefaultDataStoreParameters();
806
		FeatureStore store = (FeatureStore) dataManager.openStore(params
807
				.getDataStoreName(), params);
808

  
809
		assertNotNull(store.getMetadataID());
810
		assertNotNull(store.getName());
811
		assertEquals(store.getEnvelope(), store.getDynValue("Envelope"));
812
		assertTrue("Feature count not > 0", store.getFeatureCount() > 0);
813
		if (store.isLocksSupported()) {
814
			assertNotNull(store.getLocks());
815
		} else {
816
			assertNull(store.getLocks());
817
		}
818
		store.dispose();
819
	}
820

  
821

  
822
	public void testExplorer() throws Exception {
823
		if (!this.hasExplorer()) {
824
			return;
825
		}
826
		this.testExplorerList(-1);
827

  
828
	}
829

  
830
	public void testSelection() throws Exception {
831
		DataStoreParameters parameters = this.getDefaultDataStoreParameters();
832

  
833
		FeatureStore store = (FeatureStore) dataManager.openStore(parameters
834
				.getDataStoreName(), parameters);
835
		FeatureSet set = store.getFeatureSet();
836

  
837
		assertTrue(store.getFeatureSelection().isEmpty());
838
		store.setSelection(set);
839
		assertFalse(store.getFeatureSelection().isEmpty());
840

  
841
		assertEquals(set.getSize(), store.getFeatureSelection().getSize());
842

  
843
		DisposableIterator iter = set.iterator();
844
		while (iter.hasNext()) {
845
			assertTrue(store.getFeatureSelection().isSelected(
846
					(Feature) iter.next()));
847
		}
848
		iter.dispose();
849

  
850
		store.getFeatureSelection().reverse();
851
		assertTrue(store.getFeatureSelection().isEmpty());
852
		assertEquals(0, store.getFeatureSelection().getSize());
853
		iter = set.iterator();
854
		while (iter.hasNext()) {
855
			assertFalse(store.getFeatureSelection().isSelected(
856
					(Feature) iter.next()));
857
		}
858
		iter.dispose();
859

  
860
		store.getFeatureSelection().reverse();
861
		assertEquals(set.getSize(), store.getFeatureSelection().getSize());
862
		assertFalse(store.getFeatureSelection().isEmpty());
863

  
864
		set.dispose();
865

  
866
	}
867

  
868
	public void testCustomFTypeSet() throws Exception {
869
		DataStoreParameters dbfParameters = this
870
				.getDefaultDataStoreParameters();
871

  
872
		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
873
				.getDataStoreName(), dbfParameters);
874

  
875
		testCustomFTypeSet(store);
876

  
877
		store.dispose();
878
	}
879

  
880
	public void testCustomFTypeSet(FeatureStore store) throws Exception{
881

  
882
		FeatureSet set, set1;
883
		FeatureQuery query;
884
		DisposableIterator iter, iter1;
885
		Iterator attrIter;
886
		FeatureAttributeDescriptor attr;
887

  
888
		set = store.getFeatureSet(this.getDefaultQuery(store));
889
		attrIter = store.getDefaultFeatureType().iterator();
890

  
891
		String[] names;
892
		while (attrIter.hasNext()) {
893
			attr = (FeatureAttributeDescriptor) attrIter.next();
894
			int fieldIndex = attr.getIndex();
895

  
896
			query = this.getDefaultQuery(store);
897
			String fieldName = store.getDefaultFeatureType()
898
			.getAttributeDescriptor(fieldIndex).getName();
899

  
900
			names = new String[] { fieldName };
901
			query.setAttributeNames(names);
902
			set1 = store.getFeatureSet(query);
903

  
904
			if (getRandom().nextBoolean()) {
905
				iter = set.fastIterator();
906
			} else {
907
				iter = set.iterator();
908
			}
909
			if (getRandom().nextBoolean()) {
910
				iter1 = set1.fastIterator();
911
			} else {
912
				iter1 = set1.iterator();
913
			}
914

  
915
			assertTrue(compareFeatureIterators(iter, iter1, names));
916

  
917
			iter.dispose();
918
			iter1.dispose();
919
			set1.dispose();
920
		}
921

  
922
		int ntimes = getRandom().nextInt(10) + 5;
923
		FeatureType type = store.getDefaultFeatureType();
924
		query = this.getDefaultQuery(store);
925
		for (int i = 0; i < ntimes; i++) {
926
			names = getRandomAttibuteList(type);
927

  
928
			query.setAttributeNames(names);
929
			set1 = store.getFeatureSet(query);
930

  
931
			if (getRandom().nextBoolean()) {
932
				iter = set.fastIterator();
933
			} else {
934
				iter = set.iterator();
935
			}
936
			if (getRandom().nextBoolean()) {
937
				iter1 = set1.fastIterator();
938
			} else {
939
				iter1 = set1.iterator();
940
			}
941

  
942
			assertTrue(compareFeatureIterators(iter, iter1, names));
943

  
944
			iter.dispose();
945
			iter1.dispose();
946

  
947
			iter1 = set1.fastIterator();
948
			assertTrue(checksAttributesPositions(iter1, names));
949
			iter1.dispose();
950

  
951
			iter1 = set1.iterator();
952
			assertTrue(checksAttributesPositions(iter1, names));
953
			iter1.dispose();
954

  
955
			set1.dispose();
956

  
957

  
958
		}
959

  
960

  
961

  
962
		set.dispose();
963

  
964
	}
965

  
966
	protected boolean checksAttributesPositions(DisposableIterator iter,
967
			String[] names) {
968
		Feature feature;
969
		FeatureType type;
970
		FeatureAttributeDescriptor attr;
971
		while (iter.hasNext()) {
972
			feature = (Feature) iter.next();
973
			type = feature.getType();
974
			for (int i = 0; i < names.length; i++) {
975
				attr = type.getAttributeDescriptor(i);
976
				if (!names[i].equals(attr.getName())) {
977
					getLogger().error(
978
							"Error in attribute {} (expected: '{}' have: '{}'",
979
							new Object[] { new Integer(i), names[i],
980
									attr.getName() });
981
					return false;
982
				}
983
			}
984
		}
985
		return true;
986
	}
987

  
988
	 public void testPersistence() throws Exception {
989
		if (ToolsLocator.getPersistenceManager() == null) {
990
			fail("Default Persistence Manager not register");
991
		}
992
		DataStoreParameters params = this.getDefaultDataStoreParameters();
993

  
994
		FeatureStore store = (FeatureStore) dataManager.openStore(params
995
				.getDataStoreName(), params);
996

  
997
		testSimpleIteration(store);
998

  
999
		PersistentState state = ToolsLocator.getPersistenceManager().getState(
1000
				store);
1001

  
1002
		FeatureStore store2 = (FeatureStore) ToolsLocator
1003
				.getPersistenceManager().create(state);
1004

  
1005
		testSimpleIteration(store2);
1006

  
1007
		assertTrue(compareStores(store, store2));
1008

  
1009
		store.dispose();
1010
		store2.dispose();
1011

  
1012
	}
1013

  
1014

  
1015
	public void testSort() throws Exception {
1016
		DataStoreParameters dbfParameters = this
1017
				.getDefaultDataStoreParameters();
1018

  
1019
		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
1020
				.getDataStoreName(), dbfParameters);
1021

  
1022
		testSort(store);
1023

  
1024
		store.dispose();
1025

  
1026
	}
1027

  
1028
	public void testSort(FeatureStore store) throws Exception{
1029
		FeatureSet set1;
1030
		FeatureQuery query;
1031
		DisposableIterator iter1;
1032
		Iterator attrIter;
1033
		FeatureAttributeDescriptor attr;
1034

  
1035
		attrIter = store.getDefaultFeatureType().iterator();
1036

  
1037
		String[] names;
1038
		while (attrIter.hasNext()) {
1039
			attr = (FeatureAttributeDescriptor) attrIter.next();
1040

  
1041
			if (attr.getType() == DataTypes.GEOMETRY) {
1042
				continue;
1043
			}
1044
			query = this.getDefaultQuery(store);
1045
			String fieldName = attr.getName();
1046

  
1047

  
1048

  
1049
			names = new String[] { fieldName };
1050
			query.setAttributeNames(names);
1051
			query.getOrder().add(fieldName, getRandom().nextBoolean());
1052

  
1053
			set1 = store.getFeatureSet(query);
1054
			if (getRandom().nextBoolean()) {
1055
				iter1 = set1.fastIterator();
1056
			} else {
1057
				iter1 = set1.iterator();
1058
			}
1059

  
1060
			assertTrue(checkSort(iter1, query));
1061

  
1062
			iter1.dispose();
1063
			set1.dispose();
1064
		}
1065

  
1066
		int ntimes = getRandom().nextInt(10) + 5;
1067
		FeatureType type = store.getDefaultFeatureType();
1068
		query = this.getDefaultQuery(store);
1069
		for (int i = 0; i < ntimes; i++) {
1070
			names = getRandomAttibuteList(type);
1071

  
1072
			int nShortFields = getRandom().nextInt(names.length) + 1;
1073
			query.getOrder().clear();
1074
			for (int j = 0; j < nShortFields; j++) {
1075
				attr = store.getDefaultFeatureType().getAttributeDescriptor(names[getRandom().nextInt(names.length)]);
1076
				if (attr.getType() == DataTypes.INT
1077
						|| attr.getType() == DataTypes.LONG
1078
						|| attr.getType() == DataTypes.DOUBLE
1079
						|| attr.getType() == DataTypes.STRING
1080
						|| attr.getType() == DataTypes.DATE
1081
						|| attr.getType() == DataTypes.BOOLEAN
1082
						|| attr.getType() == DataTypes.BYTE
1083
						|| attr.getType() == DataTypes.FLOAT) {
1084

  
1085
					query.getOrder().add(attr.getName(),
1086
							getRandom().nextBoolean());
1087
				}
1088
			}
1089

  
1090
			query.setAttributeNames(names);
1091
			set1 = store.getFeatureSet(query);
1092

  
1093
			// if (getRandom().nextBoolean()) {
1094
				iter1 = set1.fastIterator();
1095
				// } else {
1096
				// iter1 = set1.iterator();
1097
				// }
1098

  
1099
				assertTrue(checkSort(iter1, query));
1100

  
1101
				iter1.dispose();
1102
				set1.dispose();
1103

  
1104
		}
1105

  
1106
	}
1107

  
1108

  
1109
	public boolean checkSort(Iterator iter, FeatureQuery query) {
1110

  
1111
		FeatureQueryOrderMember order;
1112
		Feature prevFeature = null;
1113
		Feature currFeature = null;
1114
		boolean isFirst = true;
1115
		Comparable v1, v2;
1116
		Object o1, o2;
1117
		int v;
1118
		FeatureQueryOrder queryOrder = query.getOrder();
1119

  
1120
		Iterator orderIter;
1121

  
1122
		//for debug only
1123
		/*
1124
		System.out.println("\nCheck order:");
1125
		Iterator orderIter = queryOrder.iterator();
1126
		while (orderIter.hasNext()) {
1127
			order = (FeatureQueryOrderMember) orderIter.next();
1128
			System.out.print(order.getAttributeName() + " ");
1129
			if (order.getAscending()) {
1130
				System.out.print("Asc, ");
1131
			} else {
1132
				System.out.print("Desc, ");
1133
			}
1134
		}
1135
		System.out.println(";");
1136
		*/
1137

  
1138
		while (iter.hasNext()) {
1139
			currFeature = (Feature) iter.next();
1140
			if (isFirst) {
1141
				prevFeature = currFeature.getCopy();
1142
				// printFeature(prevFeature, true, 15);
1143
				isFirst = false;
1144
				continue;
1145
			}
1146
			// printFeature(currFeature, false, 15);
1147
			orderIter = queryOrder.iterator();
1148
			while (orderIter.hasNext()) {
1149
				order = (FeatureQueryOrderMember) orderIter.next();
1150
				if (order.hasEvaluator()) {
1151
					try {
1152
						o1 = order.getEvaluator().evaluate(
1153
								(EvaluatorData) prevFeature);
1154
						o2 = order.getEvaluator().evaluate(
1155
								(EvaluatorData) currFeature);
1156
					} catch (EvaluatorException e) {
1157
						throw new DataEvaluatorRuntimeException(e);
1158
					}
1159
				} else {
1160

  
1161
					o1 = prevFeature.get(order.getAttributeName());
1162
					o2 = currFeature.get(order.getAttributeName());
1163
				}
1164
				if (o1 instanceof Comparable && o2 instanceof Comparable) {
1165
					v1 = (Comparable) o1;
1166
					v2 = (Comparable) o2;
1167
				} else {
1168
					// uncomparable objets
1169
					break;
1170
				}
1171
				if (v1 == null) {
1172
					if (v2 == null) {
1173
						break;
1174
					} else {
1175
						v = 1;
1176
					}
1177
				} else {
1178
					v = v1.compareTo(v2);
1179
				}
1180
				if (v != 0) {
1181
					if (!order.getAscending()) {
1182
						v = -v;
1183
					}
1184
				}
1185
				if (v < 0) {
1186
					break;
1187
				} else if (v > 0) {
1188
					// Checks for ignore case short
1189
					if (v1 instanceof String && v2 instanceof String) {
1190
						v1 = ((String)v1).toLowerCase();
1191
						v2 = ((String)v2).toLowerCase();
1192
						v = v1.compareTo(v2);
1193
						if (v != 0) {
1194
							if (!order.getAscending()) {
1195
								v = -v;
1196
							}
1197
						}
1198
						if (v < 0) {
1199
							getLogger()
1200
									.warn("Short compartor String ok with ignore case");
1201
							break;
1202
						} else if (v > 0) {
1203
							return false;
1204
						}
1205
					} else {
1206
						return false;
1207
					}
1208
				}
1209
			}
1210
			prevFeature = currFeature.getCopy();
1211
		}
1212

  
1213
		return true;
1214
	}
1215

  
1216
	protected void fullStoreIteratorTest(FeatureStore store) throws Exception{
1217
		testIterationFastAndStandart(store);
1218
		testCustomFTypeSet(store);
1219
		testSort(store);
1220
	}
1221

  
1222

  
1223
	public void testTransformsData() throws Exception {
1224
		DataStoreParameters dbfParameters = this
1225
				.getDefaultDataStoreParameters();
1226

  
1227
		FeatureStore store = (FeatureStore) dataManager.openStore(dbfParameters
1228
				.getDataStoreName(), dbfParameters);
1229

  
1230
		FeatureStore store1 = (FeatureStore) dataManager.openStore(
1231
				dbfParameters.getDataStoreName(), dbfParameters);
1232

  
1233
		FeatureStoreTransform transform = new StringsToLowerTransform();
1234
		transform.setFeatureStore(store);
1235

  
1236
		store.getTransforms().add(transform);
1237

  
1238
		FeatureSet set, set1;
1239
		DisposableIterator iter, iter1;
1240
		Iterator iterAttr;
1241
		FeatureAttributeDescriptor attr;
1242
		Feature feature, feature1;
1243
		int i, ntimes;
1244
		Object v1, v2;
1245

  
1246

  
1247
		fullStoreIteratorTest(store);
1248

  
1249
		set = store.getFeatureSet();
1250
		set1 = store1.getFeatureSet();
1251
		ntimes = getRandom().nextInt(3) + 1;
1252
		for (i = 0; i < ntimes; i++) {
1253
			if (getRandom().nextBoolean()) {
1254
				iter = set.fastIterator();
1255
			} else {
1256
				iter = set.iterator();
1257
			}
1258
			if (getRandom().nextBoolean()) {
1259
				iter1 = set1.fastIterator();
1260
			} else {
1261
				iter1 = set1.iterator();
1262
			}
1263
			while (iter.hasNext()) {
1264
				feature = (Feature) iter.next();
1265
				feature1 = (Feature) iter1.next();
1266

  
1267
				iterAttr = set.getDefaultFeatureType().iterator();
1268
				while (iterAttr.hasNext()) {
1269
					attr = (FeatureAttributeDescriptor) iterAttr.next();
1270
					v1 = feature.get(attr.getIndex());
1271
					v2 = feature1.get(attr.getIndex());
1272
					if (attr.getType() == DataTypes.STRING) {
1273
						if (v2 != null) {
1274
							v2 = ((String) v2).toLowerCase();
1275
						}
1276

  
1277
					}
1278
					assertTrue(compareFeatureValue(v1, v2, attr));
1279
				}
1280
			}
1281
			assertFalse(iter1.hasNext());
1282
			iter.dispose();
1283
			iter1.dispose();
1284
		}
1285

  
1286

  
1287
		set.dispose();
1288
		set1.dispose();
1289

  
1290

  
1291
		transform = new StringsToUpperTransform();
1292
		transform.setFeatureStore(store);
1293

  
1294
		store.getTransforms().add(transform);
1295

  
1296
		fullStoreIteratorTest(store);
1297

  
1298
		set = store.getFeatureSet();
1299
		set1 = store1.getFeatureSet();
1300
		ntimes = getRandom().nextInt(3) + 1;
1301
		for (i = 0; i < ntimes; i++) {
1302
			if (getRandom().nextBoolean()) {
1303
				iter = set.fastIterator();
1304
			} else {
1305
				iter = set.iterator();
1306
			}
1307
			if (getRandom().nextBoolean()) {
1308
				iter1 = set1.fastIterator();
1309
			} else {
1310
				iter1 = set1.iterator();
1311
			}
1312
			while (iter.hasNext()) {
1313
				feature = (Feature) iter.next();
1314
				feature1 = (Feature) iter1.next();
1315

  
1316
				iterAttr = set.getDefaultFeatureType().iterator();
1317
				while (iterAttr.hasNext()) {
1318
					attr = (FeatureAttributeDescriptor) iterAttr.next();
1319
					v1 = feature.get(attr.getIndex());
1320
					v2 = feature1.get(attr.getIndex());
1321
					if (attr.getType() == DataTypes.STRING) {
1322
						if (v2 != null) {
1323
							v2 = ((String) v2).toUpperCase();
1324
						}
1325

  
1326
					}
1327
					compareFeatureValue(v1, v2, attr);
1328
				}
1329
			}
1330
			assertFalse(iter1.hasNext());
1331
			iter.dispose();
1332
			iter1.dispose();
1333
		}
1334
		set.dispose();
1335
		set1.dispose();
1336

  
1337

  
1338
		transform = new AddPrefixAttributeName("_");
1339
		transform.setFeatureStore(store);
1340

  
1341
		store.getTransforms().add(transform);
1342

  
1343
		fullStoreIteratorTest(store);
1344

  
1345
		set = store.getFeatureSet();
1346
		set1 = store1.getFeatureSet();
1347
		ntimes = getRandom().nextInt(3) + 1;
1348
		for (i = 0; i < ntimes; i++) {
1349
			if (getRandom().nextBoolean()) {
1350
				iter = set.fastIterator();
1351
			} else {
1352
				iter = set.iterator();
1353
			}
1354
			if (getRandom().nextBoolean()) {
1355
				iter1 = set1.fastIterator();
1356
			} else {
1357
				iter1 = set1.iterator();
1358
			}
1359
			while (iter.hasNext()) {
1360
				feature = (Feature) iter.next();
1361
				feature1 = (Feature) iter1.next();
1362

  
1363
				iterAttr = set1.getDefaultFeatureType().iterator();
1364
				while (iterAttr.hasNext()) {
1365
					attr = (FeatureAttributeDescriptor) iterAttr.next();
1366
					v1 = feature.get("_" + attr.getName());
1367
					v2 = feature1.get(attr.getIndex());
1368
					if (attr.getType() == DataTypes.STRING) {
1369
						if (v2 != null) {
1370
							v2 = ((String) v2).toUpperCase();
1371
						}
1372

  
1373
					}
1374
					compareFeatureValue(v1, v2, attr);
1375
				}
1376
			}
1377
			assertFalse(iter1.hasNext());
1378
			iter.dispose();
1379
			iter1.dispose();
1380
		}
1381
		set.dispose();
1382
		set1.dispose();
1383

  
1384
		transform = new AddAttribute("__new__", DataTypes.STRING, "$$OK$$", 10);
1385
		transform.setFeatureStore(store);
1386

  
1387
		store.getTransforms().add(transform);
1388

  
1389
		fullStoreIteratorTest(store);
1390

  
1391
		set = store.getFeatureSet();
1392
		set1 = store1.getFeatureSet();
1393
		ntimes = getRandom().nextInt(3) + 1;
1394
		for (i = 0; i < ntimes; i++) {
1395
			if (getRandom().nextBoolean()) {
1396
				iter = set.fastIterator();
1397
			} else {
1398
				iter = set.iterator();
1399
			}
1400
			if (getRandom().nextBoolean()) {
1401
				iter1 = set1.fastIterator();
1402
			} else {
1403
				iter1 = set1.iterator();
1404
			}
1405
			while (iter.hasNext()) {
1406
				feature = (Feature) iter.next();
1407
				feature1 = (Feature) iter1.next();
1408

  
1409
				iterAttr = set1.getDefaultFeatureType().iterator();
1410
				while (iterAttr.hasNext()) {
1411
					attr = (FeatureAttributeDescriptor) iterAttr.next();
1412
					v1 = feature.get("_" + attr.getName());
1413
					v2 = feature1.get(attr.getIndex());
1414
					if (attr.getType() == DataTypes.STRING) {
1415
						if (v2 != null) {
1416
							v2 = ((String) v2).toUpperCase();
1417
						}
1418

  
1419
					}
1420
					compareFeatureValue(v1, v2, attr);
1421
				}
1422
				compareFeatureValue(feature.get("__new__"), "$$OK$$", set1
1423
						.getDefaultFeatureType().getAttributeDescriptor(
1424
								"__new__"));
1425
			}
1426
			assertFalse(iter1.hasNext());
1427
			iter.dispose();
1428
			iter1.dispose();
1429
		}
1430
		set.dispose();
1431
		set1.dispose();
1432

  
1433

  
1434
		transform = new RemoveAttribute("__new__");
1435
		transform.setFeatureStore(store);
1436

  
1437
		store.getTransforms().add(transform);
1438

  
1439
		fullStoreIteratorTest(store);
1440

  
1441
		set = store.getFeatureSet();
1442
		set1 = store1.getFeatureSet();
1443
		ntimes = getRandom().nextInt(3) + 1;
1444
		for (i = 0; i < ntimes; i++) {
1445
			if (getRandom().nextBoolean()) {
1446
				iter = set.fastIterator();
1447
			} else {
1448
				iter = set.iterator();
1449
			}
1450
			if (getRandom().nextBoolean()) {
1451
				iter1 = set1.fastIterator();
1452
			} else {
1453
				iter1 = set1.iterator();
1454
			}
1455
			while (iter.hasNext()) {
1456
				feature = (Feature) iter.next();
1457
				feature1 = (Feature) iter1.next();
1458

  
1459
				iterAttr = set1.getDefaultFeatureType().iterator();
1460
				while (iterAttr.hasNext()) {
1461
					attr = (FeatureAttributeDescriptor) iterAttr.next();
1462
					v1 = feature.get("_" + attr.getName());
1463
					v2 = feature1.get(attr.getIndex());
1464
					if (attr.getType() == DataTypes.STRING) {
1465
						if (v2 != null) {
1466
							v2 = ((String) v2).toUpperCase();
1467
						}
1468

  
1469
					}
... This diff was truncated because it exceeds the maximum size that can be displayed.

Also available in: Unified diff