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

View differences:

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