@@ -10,6 +10,7 @@ import geoscript.filter.Filter
10
10
import geoscript.workspace.Memory
11
11
import geoscript.geom.*
12
12
import geoscript.workspace.Workspace
13
+ import geoscript.workspace.H2
13
14
14
15
/**
15
16
* The Layer UnitTest
@@ -358,31 +359,153 @@ class LayerTestCase {
358
359
}
359
360
360
361
@Test void cursorSorting () {
362
+ File f = new File (" target/h2" ). absoluteFile
363
+ if (f. exists()) {
364
+ boolean deleted = f. deleteDir()
365
+ }
366
+ H2 h2 = new H2(" facilities" , " target/h2" )
367
+ Layer layer = h2. create(' facilities' ,[new Field (" geom" ," Point" , " EPSG:2927" ), new Field (" name" ," string" ), new Field (" price" ," float" )])
368
+ layer. add(new Feature ([" geom" : new Point (111 ,-47 ), " name" : " A" , " price" : 10 ], " house1" ))
369
+ layer. add(new Feature ([" geom" : new Point (112 ,-46 ), " name" : " B" , " price" : 12 ], " house2" ))
370
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " C" , " price" : 13 ], " house3" ))
371
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " D" , " price" : 14 ], " house4" ))
372
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " E" , " price" : 15 ], " house5" ))
373
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " F" , " price" : 16 ], " house6" ))
374
+
375
+ Cursor c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]])
376
+ assertEquals " A" , c. next()[" name" ]
377
+ assertEquals " B" , c. next()[" name" ]
378
+ assertEquals " C" , c. next()[" name" ]
379
+ assertEquals " D" , c. next()[" name" ]
380
+ assertEquals " E" , c. next()[" name" ]
381
+ assertEquals " F" , c. next()[" name" ]
382
+ c. close()
383
+
384
+ c = layer. getCursor(Filter . PASS , [" name" ])
385
+ assertEquals " A" , c. next()[" name" ]
386
+ assertEquals " B" , c. next()[" name" ]
387
+ assertEquals " C" , c. next()[" name" ]
388
+ assertEquals " D" , c. next()[" name" ]
389
+ assertEquals " E" , c. next()[" name" ]
390
+ assertEquals " F" , c. next()[" name" ]
391
+ c. close()
392
+
393
+ c = layer. getCursor(Filter . PASS , [[" name" ," DESC" ]])
394
+ assertEquals " F" , c. next()[" name" ]
395
+ assertEquals " E" , c. next()[" name" ]
396
+ assertEquals " D" , c. next()[" name" ]
397
+ assertEquals " C" , c. next()[" name" ]
398
+ assertEquals " B" , c. next()[" name" ]
399
+ assertEquals " A" , c. next()[" name" ]
400
+ c. close()
401
+
402
+ // Named Parameters
403
+ c = layer. getCursor(filter : " price >= 14.0" , sort : [[" price" , " DESC" ]])
404
+ assertTrue c. hasNext()
405
+ assertEquals " F" , c. next()[" name" ]
406
+ assertEquals " E" , c. next()[" name" ]
407
+ assertEquals " D" , c. next()[" name" ]
408
+ assertFalse c. hasNext()
409
+ c. close()
410
+
411
+ h2. close()
412
+ }
413
+
414
+ @Test void cursorSortingAndPagingWithUnsupportedLayer () {
361
415
Schema s = new Schema (" facilities" , [new Field (" geom" ," Point" , " EPSG:2927" ), new Field (" name" ," string" ), new Field (" price" ," float" )])
362
416
Layer layer = new Layer (" facilities" , s)
363
417
layer. add(new Feature ([new Point (111 ,-47 ), " A" , 10 ], " house1" , s))
364
418
layer. add(new Feature ([new Point (112 ,-46 ), " B" , 12 ], " house2" , s))
365
419
layer. add(new Feature ([new Point (113 ,-45 ), " C" , 11 ], " house3" , s))
420
+ layer. add(new Feature ([new Point (113 ,-44 ), " D" , 15 ], " house4" , s))
366
421
422
+ // Sort ascending explicitly
367
423
Cursor c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]])
368
424
assertEquals " A" , c. next()[" name" ]
369
425
assertEquals " B" , c. next()[" name" ]
370
426
assertEquals " C" , c. next()[" name" ]
427
+ assertEquals " D" , c. next()[" name" ]
428
+ assertFalse c. hasNext()
371
429
c. close()
372
430
431
+ // Sort ascending implicitly
373
432
c = layer. getCursor(Filter . PASS , [" name" ])
374
433
assertEquals " A" , c. next()[" name" ]
375
434
assertEquals " B" , c. next()[" name" ]
376
435
assertEquals " C" , c. next()[" name" ]
436
+ assertEquals " D" , c. next()[" name" ]
437
+ assertFalse c. hasNext()
377
438
c. close()
378
439
379
- // @TODO MemoryDataStore doesn't actually sort!
380
- /* c = layer.getCursor(Filter.PASS, [["name","DESC"]])
440
+ // Sort descending
441
+ c = layer. getCursor(Filter . PASS , [[" name" ," DESC" ]])
442
+ assertEquals " D" , c. next()[" name" ]
381
443
assertEquals " C" , c. next()[" name" ]
382
444
assertEquals " B" , c. next()[" name" ]
383
445
assertEquals " A" , c. next()[" name" ]
446
+ assertFalse c. hasNext()
447
+ c. close()
448
+
449
+ // Page (will work with GeoTools 9.0)
450
+ /* c = layer.getCursor(start:0, max:2)
451
+ assertEquals "A", c.next()["name"]
452
+ assertEquals "B", c.next()["name"]
453
+ assertFalse c.hasNext()
454
+ c.close()
455
+ c = layer.getCursor(start:2, max:2)
456
+ assertEquals "C", c.next()["name"]
457
+ assertEquals "D", c.next()["name"]
458
+ assertFalse c.hasNext()
459
+ c.close()
460
+ c = layer.getCursor("price > 10", [["price", "DESC"]], 2, 1)
461
+ assertEquals "B", c.next()["name"]
462
+ assertEquals "C", c.next()["name"]
463
+ assertFalse c.hasNext()
384
464
c.close()*/
385
465
}
386
466
467
+ @Test void cursorPaging () {
468
+ File f = new File (" target/h2" ). absoluteFile
469
+ if (f. exists()) {
470
+ boolean deleted = f. deleteDir()
471
+ }
472
+ H2 h2 = new H2(" facilities" , " target/h2" )
473
+ Layer layer = h2. create(' facilities' ,[new Field (" geom" ," Point" , " EPSG:2927" ), new Field (" name" ," string" ), new Field (" price" ," float" )])
474
+ layer. add(new Feature ([" geom" : new Point (111 ,-47 ), " name" : " A" , " price" : 10 ], " house1" ))
475
+ layer. add(new Feature ([" geom" : new Point (112 ,-46 ), " name" : " B" , " price" : 12 ], " house2" ))
476
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " C" , " price" : 13 ], " house3" ))
477
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " D" , " price" : 14 ], " house4" ))
478
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " E" , " price" : 15 ], " house5" ))
479
+ layer. add(new Feature ([" geom" : new Point (113 ,-45 ), " name" : " F" , " price" : 16 ], " house6" ))
480
+
481
+ Cursor c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]], 2 , 0 )
482
+ assertEquals " A" , c. next()[" name" ]
483
+ assertEquals " B" , c. next()[" name" ]
484
+ assertFalse c. hasNext()
485
+ c. close()
486
+
487
+ c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]], 2 , 2 )
488
+ assertEquals " C" , c. next()[" name" ]
489
+ assertEquals " D" , c. next()[" name" ]
490
+ assertFalse c. hasNext()
491
+ c. close()
492
+
493
+ c = layer. getCursor(Filter . PASS , [[" name" ," ASC" ]], 2 , 4 )
494
+ assertEquals " E" , c. next()[" name" ]
495
+ assertEquals " F" , c. next()[" name" ]
496
+ assertFalse c. hasNext()
497
+ c. close()
498
+
499
+ // Named parameters
500
+ c = layer. getCursor(start : 0 , max : 4 )
501
+ assertEquals " A" , c. next()[" name" ]
502
+ assertEquals " B" , c. next()[" name" ]
503
+ assertEquals " C" , c. next()[" name" ]
504
+ assertEquals " D" , c. next()[" name" ]
505
+ c. close()
506
+
507
+ h2. close()
508
+ }
509
+
387
510
}
388
511
0 commit comments