Revision 22964

View differences:

branches/v2_0_0_prep/libraries/libFMap_dataFile/src-test/org/gvsig/fmap/data/feature/file/ResourceManagerTest.java
60 60
			} else {
61 61
				return;
62 62
			}
63
			if (!rNotification.getType().equals(ResourceNotification.OPENED)) {
63
			if (rNotification.getType().equals(ResourceNotification.OPENED)) {
64 64
				try {
65 65
					this.ajustResources();
66 66
				} catch (CloseException e) {
......
71 71

  
72 72
		}
73 73

  
74
		public void closeAll() throws CloseException {
75
			ResourceManager rManager = ResourceManager.getResourceManager();
74 76

  
77
			Iterator iter = rManager.iterator();
78
			while (iter.hasNext()) {
79
				Resource res = (Resource) iter.next();
80
				if (res.isOpen()) {
81
					res.close();
82
					System.out.println("** closed: " + res.getName() + "("
83
							+ res.getKey() + ")");
84
				}
85

  
86
			}
87

  
88
			System.out.println("** Closed all resources");
89
		}
90

  
91

  
75 92
		public void ajustResources() throws CloseException {
76 93
			SortedSet resources = this.getResourcesOrdered();
77 94
			if (resources.isEmpty() || resources.size() < this.maxOpened) {
78 95
				return;
79 96
			}
80 97

  
81
			int opened = 0;
82
			Iterator iter = resources.iterator();
83
			while (iter.hasNext()) {
84
				if (((Resource) iter.next()).isOpen()) {
85
					opened++;
86
				}
87
			}
98
			int opened = this.getOpenedResources();
88 99
			int toClose = opened - this.maxOpened;
89 100
			if (toClose < 1) {
90 101
				return;
91 102
			}
92 103
			System.out.println("** Resources to close: " + toClose);
93
			iter = resources.iterator();
104
			Iterator iter = resources.iterator();
94 105
			while (iter.hasNext() && toClose > 0) {
95 106
				Resource res = (Resource) iter.next();
96 107
				if (res.isOpen()) {
......
187 198
	public void test_manual() {
188 199
		ResourceCloser closer = new ResourceCloser();
189 200

  
201
		//Nos aseguramos que no hay recursos abiertos
202
		try {
203
			closer.closeAll();
204
		} catch (CloseException e1) {
205
			e1.printStackTrace();
206
			fail();
207
		}
190 208

  
191 209
		org.gvsig.fmap.data.feature.file.dbf.Register.selfRegister();
192 210
		org.gvsig.fmap.data.feature.file.shp.Register.selfRegister();
......
301 319
		}
302 320
		assertEquals(2, closer.getOpenedResources());
303 321

  
322
		try {
323
			shp.dispose();
324
			shp_bis.dispose();
325
			shpNull.dispose();
326
		} catch (CloseException e) {
327
			e.printStackTrace();
328
			fail();
329
		}
304 330

  
331

  
305 332
	}
306 333

  
307 334

  
308 335

  
336
	public void test_auto() {
337
		ResourceCloser closer = new ResourceCloser();
338

  
339
		//Nos aseguramos que no hay recursos abiertos
340
		try {
341
			closer.closeAll();
342
		} catch (CloseException e1) {
343
			e1.printStackTrace();
344
			fail();
345
		}
346
		org.gvsig.fmap.data.feature.file.dbf.Register.selfRegister();
347
		org.gvsig.fmap.data.feature.file.shp.Register.selfRegister();
348
		org.gvsig.fmap.data.feature.file.dxf.Register.selfRegister();
349
		org.gvsig.fmap.data.feature.file.dgn.Register.selfRegister();
350

  
351
		DataStore shp = null;
352
		DataStore shp_bis = null;
353
		DataStore shpNull = null;
354
		DataStore dbf = null;
355

  
356
		// A?adimos el 'closer' como observador para que no deje abierta
357
		// nunca mas de 2 fuentes
358
		ResourceManager rManager = ResourceManager.getResourceManager();
359
		closer.setMaxOpened(2);
360
		rManager.addObserver(closer);
361

  
362
		// Abrimos y cerrarmos uno (ojo los shp son dos recursos el dbf y el shp)
363
		try {
364
			shp = dataManager.createDataStore(SHPTest
365
					.getParams(SHPTest.fileNormal));
366
			shp.getMetadata();
367
		} catch (BaseException e) {
368
			e.printStackTrace();
369
			fail();
370
		}
371
		assertEquals(2, closer.getOpenedResources());
372
		try {
373
			shp.dispose();
374
		} catch (CloseException e) {
375
			e.printStackTrace();
376
			fail();
377
		}
378
		assertEquals(0, closer.getOpenedResources());
379

  
380
		// Abrimos dos veces el mismo y comprobamos que solo
381
		// hay un recurso
382
		try {
383
			shp = dataManager.createDataStore(SHPTest
384
					.getParams(SHPTest.fileNormal));
385
			shp.getMetadata();
386
		} catch (BaseException e) {
387
			e.printStackTrace();
388
			fail();
389
		}
390

  
391
		assertEquals(2, closer.getOpenedResources());
392
		try {
393
			shp_bis = dataManager.createDataStore(SHPTest
394
					.getParams(SHPTest.fileNormal));
395
			shp_bis.getMetadata();
396
		} catch (BaseException e) {
397
			e.printStackTrace();
398
			fail();
399
		}
400
		assertEquals(2, closer.getOpenedResources());
401

  
402
		// Abrimos un shp mas y comprobamos si deja solo 2
403
		try {
404
			shpNull = dataManager.createDataStore(SHPTest
405
					.getParams(SHPTest.fileGeometryNull));
406
			shpNull.getMetadata();
407
		} catch (BaseException e) {
408
			e.printStackTrace();
409
			fail();
410
		}
411
		assertEquals(2, closer.getOpenedResources());
412

  
413
		//comprobamos que todos se puede volver a usar sin
414
		//problemas
415

  
416
		DataCollection coll;
417
		try {
418
			coll = shp.getDataCollection();
419
			coll.size();
420
			coll.iterator().next();
421
			coll.dispose();
422
			assertEquals(2, closer.getOpenedResources());
423

  
424
			coll = shp_bis.getDataCollection();
425
			coll.size();
426
			coll.iterator().next();
427
			coll.dispose();
428
			assertEquals(2, closer.getOpenedResources());
429

  
430
			coll = shpNull.getDataCollection();
431
			coll.size();
432
			coll.iterator().next();
433
			coll.dispose();
434
			assertEquals(2, closer.getOpenedResources());
435

  
436
		} catch (BaseException e) {
437
			e.printStackTrace();
438
			fail();
439
		}
440

  
441
		assertEquals(2, closer.getOpenedResources());
442

  
443
	}
309 444
}

Also available in: Unified diff