Revision 42891 trunk/org.gvsig.desktop/org.gvsig.desktop.compat.cdc/org.gvsig.fmap.dal/org.gvsig.fmap.dal.impl/src/main/java/org/gvsig/fmap/dal/impl/DefaultDataManager.java
DefaultDataManager.java | ||
---|---|---|
23 | 23 |
*/ |
24 | 24 |
package org.gvsig.fmap.dal.impl; |
25 | 25 |
|
26 |
import org.gvsig.fmap.dal.ExternalStoreProviderFactory; |
|
26 | 27 |
import java.io.File; |
27 | 28 |
import java.lang.reflect.InvocationTargetException; |
28 | 29 |
import java.util.ArrayList; |
29 | 30 |
import java.util.HashMap; |
30 |
import java.util.Iterator; |
|
31 | 31 |
import java.util.List; |
32 | 32 |
import java.util.Map; |
33 | 33 |
|
... | ... | |
47 | 47 |
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException; |
48 | 48 |
import org.gvsig.fmap.dal.exception.ValidateDataParametersException; |
49 | 49 |
import org.gvsig.fmap.dal.feature.EditableFeatureType; |
50 |
import org.gvsig.fmap.dal.feature.Feature; |
|
51 | 50 |
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor; |
52 | 51 |
import org.gvsig.fmap.dal.feature.FeatureAttributeGetter; |
53 | 52 |
import org.gvsig.fmap.dal.feature.FeatureQuery; |
... | ... | |
57 | 56 |
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType; |
58 | 57 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureIndex; |
59 | 58 |
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore; |
60 |
import org.gvsig.fmap.dal.feature.impl.dynobjectutils.DynObjectFeatureFacade; |
|
61 | 59 |
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper; |
62 | 60 |
import org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl; |
63 |
import org.gvsig.fmap.dal.feature.spi.DataStoreProviderToFeatureStoreProviderFactoryWrapper; |
|
64 | 61 |
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider; |
65 | 62 |
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices; |
66 | 63 |
import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProvider; |
67 | 64 |
import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProviderFactory; |
68 | 65 |
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider; |
69 | 66 |
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices; |
67 |
import org.gvsig.fmap.dal.raster.RasterStoreProviderFactory; |
|
70 | 68 |
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider; |
71 | 69 |
import org.gvsig.fmap.dal.resource.ResourceManager; |
72 | 70 |
import org.gvsig.fmap.dal.spi.DataManagerProviderServices; |
... | ... | |
228 | 226 |
* |
229 | 227 |
* Store related services |
230 | 228 |
*/ |
229 |
@Override |
|
231 | 230 |
public void registerStoreProvider(String name, Class storeProviderClass, |
232 | 231 |
Class parametersClass) { |
233 |
if (name == null || storeProviderClass == null |
|
234 |
|| parametersClass == null) { |
|
235 |
// FIXME Exception |
|
232 |
if (name == null || storeProviderClass == null || parametersClass == null) { |
|
236 | 233 |
throw new IllegalArgumentException("Any parameters can be null"); |
237 | 234 |
} |
238 | 235 |
|
239 | 236 |
if (!DataStoreParameters.class.isAssignableFrom(parametersClass)) { |
240 |
// FIXME Exception |
|
241 | 237 |
throw new IllegalArgumentException(parametersClass.getName() |
242 | 238 |
+ " must implement org.gvsig.fmap.dal.DataStoreParameters"); |
243 | 239 |
} |
244 | 240 |
|
245 | 241 |
if (CoverageStoreProvider.class.isAssignableFrom(storeProviderClass)) { |
246 |
ToolsLocator.getExtensionPointManager() |
|
247 |
.add(DATA_MANAGER_STORE, DATA_MANAGER_STORE_DESCRIPTION) |
|
248 |
.append(name, null, storeProviderClass); |
|
249 |
|
|
250 |
ToolsLocator |
|
251 |
.getExtensionPointManager() |
|
252 |
.add(DATA_MANAGER_STORE_PARAMS, |
|
253 |
DATA_MANAGER_STORE_PARAMS_DESCRIPTION) |
|
254 |
.append(name, null, parametersClass); |
|
242 |
// Envuelve al proveedor en una factoria por defecto. |
|
243 |
this.registerStoreProviderFactory(new DataStoreProviderToCoverageProviderFactoryWrapper( |
|
244 |
name, "", storeProviderClass, parametersClass)); |
|
255 | 245 |
return; |
256 | 246 |
} |
257 | 247 |
|
... | ... | |
351 | 341 |
throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, provider); |
352 | 342 |
} |
353 | 343 |
|
354 |
// Usa el DynObjectEncoder y no el toString para ver los parametros aunque |
|
344 |
// Usa el DynObjectEncoder y no el toString para poder ver los parametros aunque
|
|
355 | 345 |
// el proveedor de datos sobreescriba el metodo toString. |
356 | 346 |
DynObjectEncoder encoder = ToolsLocator.getDynObjectManager().createSimpleDynObjectEncoder(); |
357 | 347 |
logger.info("openStore('{}','{}')", provider, encoder.encode(parameters)); |
... | ... | |
360 | 350 |
|
361 | 351 |
parameters.validate(); |
362 | 352 |
|
363 |
DataStore store; |
|
364 |
try { |
|
365 |
DataStoreProviderFactory providerFactory; |
|
366 |
providerFactory = |
|
367 |
(DataStoreProviderFactory) ToolsLocator |
|
368 |
.getExtensionPointManager() |
|
369 |
.get(DATA_MANAGER_STORE_PROVIDER_FACTORY).create(name); |
|
370 |
if (providerFactory != null) { |
|
371 |
if (FeatureStoreProviderFactory.class |
|
372 |
.isAssignableFrom(providerFactory.getClass())) { |
|
373 |
store = new DefaultFeatureStore(); |
|
374 |
this.intializeDataStore(store, parameters); |
|
375 |
return store; |
|
376 |
} |
|
377 |
} |
|
378 |
} catch (InstantiationException e1) { |
|
379 |
// ignore |
|
380 |
} catch (IllegalAccessException e1) { |
|
381 |
// ignore |
|
353 |
DataStoreProviderFactory providerFactory = this.getStoreProviderFactory(name); |
|
354 |
if( providerFactory == null ) { |
|
355 |
throw new CantFindTheProviderFactoryException(name); |
|
382 | 356 |
} |
357 |
if( providerFactory instanceof FeatureStoreProviderFactory ) { |
|
358 |
DataStore store = this.createDefaultFeatureStore(); |
|
359 |
this.intializeDataStore(store, parameters); |
|
360 |
return store; |
|
361 |
|
|
362 |
} else if( providerFactory instanceof RasterStoreProviderFactory ) { |
|
363 |
DataStore store = this.createDefaultRasterStore(); |
|
364 |
this.intializeDataStore(store, parameters); |
|
365 |
return store; |
|
366 |
|
|
367 |
} else if( providerFactory instanceof ExternalStoreProviderFactory ) { |
|
368 |
DataStoreFactory factory = this.getStoreFactory(name); |
|
369 |
factory.setParameters(parameters); |
|
370 |
DataStore store = factory.createStore(); |
|
371 |
this.intializeDataStore(store, parameters); |
|
372 |
return store; |
|
373 |
|
|
374 |
} |
|
375 |
throw new UnsupportedProviderFactoryException(name,providerFactory); |
|
376 |
} |
|
383 | 377 |
|
384 |
Extension storeProviderExtension = |
|
385 |
ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_STORE) |
|
386 |
.get(name); |
|
378 |
private static class UnsupportedProviderFactoryException extends InitializeException { |
|
379 |
private static final long serialVersionUID = 2635455949723618046L; |
|
387 | 380 |
|
388 |
if (storeProviderExtension == null) { |
|
389 |
throw new ProviderNotRegisteredException(name); |
|
381 |
public UnsupportedProviderFactoryException(String resourceName,DataStoreProviderFactory providerFactory) { |
|
382 |
super("Error intializing resource '%(resource)'. Unsupported provider factory '%(factory).", |
|
383 |
"_UnsupportedProviderFactoryException", |
|
384 |
serialVersionUID |
|
385 |
); |
|
386 |
setValue("resource", resourceName); |
|
387 |
setValue("factory", providerFactory.getClass().getName()); |
|
390 | 388 |
} |
389 |
|
|
390 |
} |
|
391 |
|
|
392 |
private static class CantFindTheProviderFactoryException extends InitializeException { |
|
393 |
private static final long serialVersionUID = -2736434434177690011L; |
|
391 | 394 |
|
392 |
Class providerClass = storeProviderExtension.getExtension(); |
|
393 |
if (providerClass == null) { |
|
394 |
throw new ProviderNotRegisteredException(name); |
|
395 |
public CantFindTheProviderFactoryException(String resourceName) { |
|
396 |
super("Error intializing resource '%(resource)'. Can't find provider factory for this resource.", |
|
397 |
"_CantFindTheProviderFactoryException", |
|
398 |
serialVersionUID |
|
399 |
); |
|
400 |
setValue("resource", resourceName); |
|
395 | 401 |
} |
396 |
|
|
397 |
if (CoverageStoreProvider.class.isAssignableFrom(providerClass)) { |
|
398 |
ExtensionPoint.Extension point = |
|
399 |
ToolsLocator.getExtensionPointManager() |
|
400 |
.get(DATA_MANAGER_STORE_FACTORY).get(name); |
|
401 |
DataStoreFactory factory = null; |
|
402 |
try { |
|
403 |
factory = (DataStoreFactory) point.create(); |
|
404 |
} catch (InstantiationException e) { |
|
405 |
throw new InitializeException(e); |
|
406 |
} catch (IllegalAccessException e) { |
|
407 |
throw new InitializeException(e); |
|
408 |
} |
|
409 |
factory.setParameters(parameters); |
|
410 |
store = factory.createStore(); |
|
411 |
} else |
|
412 |
if (FeatureStoreProvider.class.isAssignableFrom(providerClass)) { |
|
413 |
|
|
414 |
store = new DefaultFeatureStore(); |
|
415 |
|
|
416 |
} else { |
|
417 |
// FIXME Exception |
|
418 |
throw new InitializeException(name, new RuntimeException( |
|
419 |
"Not supported implemtation: name=" + name |
|
420 |
+ " provider class=" + providerClass.getName())); |
|
421 |
} |
|
422 |
|
|
423 |
this.intializeDataStore(store, parameters); |
|
424 |
|
|
425 |
return store; |
|
402 |
|
|
426 | 403 |
} |
427 |
|
|
404 |
|
|
405 |
private DataStore createDefaultFeatureStore() { |
|
406 |
return new DefaultFeatureStore(); |
|
407 |
} |
|
408 |
|
|
409 |
private DataStore createDefaultRasterStore() { |
|
410 |
try { |
|
411 |
return (DataStore) this.defaultRasterStoreClass.newInstance(); |
|
412 |
} catch (InstantiationException | IllegalAccessException ex) { |
|
413 |
throw new RuntimeException("Can't create the default RasterStore", ex); |
|
414 |
} |
|
415 |
} |
|
416 |
|
|
417 |
private Class defaultRasterStoreClass = null; |
|
418 |
public void registerDefaultRasterStore(Class rasterStoreClass) { |
|
419 |
this.defaultRasterStoreClass = rasterStoreClass; |
|
420 |
} |
|
421 |
|
|
422 |
private DataStoreFactory getStoreFactory(String name) throws InitializeException { |
|
423 |
ExtensionPoint.Extension point = |
|
424 |
ToolsLocator.getExtensionPointManager() |
|
425 |
.get(DATA_MANAGER_STORE_FACTORY).get(name); |
|
426 |
try { |
|
427 |
DataStoreFactory factory = (DataStoreFactory) point.create(); |
|
428 |
return factory; |
|
429 |
} catch (InstantiationException | IllegalAccessException e) { |
|
430 |
throw new InitializeException(e); |
|
431 |
} |
|
432 |
} |
|
433 |
|
|
428 | 434 |
public DataStore openStore(String provider, DynObject parameters) |
429 | 435 |
throws InitializeException, ProviderNotRegisteredException, |
430 | 436 |
ValidateDataParametersException { |
... | ... | |
470 | 476 |
return names3; |
471 | 477 |
} |
472 | 478 |
|
479 |
@Override |
|
473 | 480 |
public DataStoreProviderFactory getStoreProviderFactory(String name) { |
474 | 481 |
try { |
475 | 482 |
return (DataStoreProviderFactory) ToolsLocator |
476 | 483 |
.getExtensionPointManager() |
477 | 484 |
.get(DATA_MANAGER_STORE_PROVIDER_FACTORY).create(name); |
478 |
} catch (InstantiationException e) { |
|
485 |
} catch (InstantiationException | IllegalAccessException e) {
|
|
479 | 486 |
return null; |
480 |
} catch (IllegalAccessException e) { |
|
481 |
return null; |
|
482 | 487 |
} |
483 | 488 |
} |
484 | 489 |
|
Also available in: Unified diff