Statistics
| Revision:

svn-gvsig-desktop / 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 @ 43020

History | View | Annotate | Download (25.1 KB)

1
package org.gvsig.fmap.dal.impl;
2

    
3
import java.io.File;
4
import java.io.InputStream;
5
import java.net.URL;
6
import java.net.URLClassLoader;
7
import java.util.ArrayList;
8
import java.util.HashMap;
9
import java.util.List;
10
import java.util.Map;
11
import org.gvsig.fmap.dal.DataFactory;
12
import org.gvsig.fmap.dal.DataManager;
13
import static org.gvsig.fmap.dal.DataManager.READ_STORE_AUTHORIZATION;
14
import org.gvsig.fmap.dal.DataServerExplorer;
15
import org.gvsig.fmap.dal.DataServerExplorerFactory;
16
import org.gvsig.fmap.dal.DataServerExplorerParameters;
17
import org.gvsig.fmap.dal.DataServerExplorerPool;
18
import org.gvsig.fmap.dal.DataStore;
19
import org.gvsig.fmap.dal.DataStoreFactory_v2_4;
20
import org.gvsig.fmap.dal.DataStoreParameters;
21
import org.gvsig.fmap.dal.DataStoreProviderFactory;
22
import org.gvsig.fmap.dal.DataTypes;
23
import org.gvsig.fmap.dal.NewDataStoreParameters;
24
import org.gvsig.fmap.dal.OpenErrorHandler;
25
import org.gvsig.fmap.dal.Register;
26
import org.gvsig.fmap.dal.exception.InitializeException;
27
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
28
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
29
import org.gvsig.fmap.dal.feature.EditableFeatureType;
30
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
31
import org.gvsig.fmap.dal.feature.FeatureQuery;
32
import org.gvsig.fmap.dal.feature.FeatureStore;
33
import org.gvsig.fmap.dal.feature.FeatureType;
34
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType;
35
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureIndex;
36
import org.gvsig.fmap.dal.feature.impl.FeatureStoreFactory;
37
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
38
import org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl;
39
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
40
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
41
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
42
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
43
import org.gvsig.fmap.dal.raster.impl.RasterStoreOldFactory;
44
import org.gvsig.fmap.dal.raster.impl.RasterStoreFactory;
45
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
46
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
47
import org.gvsig.fmap.dal.spi.DataStoreProvider;
48
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
49
import org.gvsig.fmap.dal.store.memory.MemoryStoreParameters;
50
import org.gvsig.fmap.dal.store.memory.MemoryStoreProvider;
51
import org.gvsig.tools.ToolsLocator;
52
import org.gvsig.tools.dataTypes.DataType;
53
import org.gvsig.tools.dataTypes.DataTypesManager;
54
import org.gvsig.tools.dynobject.DynObject;
55
import org.gvsig.tools.dynobject.DynStruct;
56
import org.gvsig.tools.dynobject.DynStruct_v2;
57
import org.gvsig.tools.dynobject.Tags;
58
import org.gvsig.tools.evaluator.Evaluator;
59
import org.gvsig.tools.exception.BaseException;
60
import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
61
import org.gvsig.tools.identitymanagement.UnauthorizedException;
62
import org.gvsig.tools.service.spi.Services;
63

    
64
public class DefaultDataManager
65
        implements DataManager, DataManagerProviderServices, Services {
66

    
67
    private class Registers {
68

    
69
        private final Register store;
70
        private final Register storeProvider;
71
        private final Register serverExplorer;
72
        private final Register featureIndexProvider;
73

    
74
        public Registers() {
75
            this.store = new RegisterImpl(
76
                    "Data.manager.stores.factory",
77
                    "DAL store factories"
78
            );
79
            this.storeProvider = new RegisterImpl(
80
                    "Data.manager.providers.factory",
81
                    "DAL store provider factories"
82
            );
83
            this.serverExplorer = new RegisterImpl(
84
                    "Data.manager.servereexplorer.factory",
85
                    "DAL server explorer factories"
86
            );
87
            this.featureIndexProvider = new RegisterImpl(
88
                    "Data.manager.feature.index.factory",
89
                    "DAL feature index factories"
90
            );
91

    
92
            this.store.register(new FeatureStoreFactory());
93
        }
94
    }
95
    private static final String TAG_DAL_OPENSTORE = "dal.openstore.";
96

    
97
    private final Registers registers;
98

    
99
    private final Map<Integer, String> defaultDataIndexProviders;
100

    
101
    private Class defaultEvaluatorClass = null;
102

    
103
    private OpenErrorHandler openErrorHandler = null;
104

    
105
    private DataServerExplorerPool dataServerExplorerPool = null;
106

    
107
    private List<DataType> dataTypes = null;
108

    
109
    private ClassLoader resourcesLoader = null;
110

    
111
    public DefaultDataManager() {
112
        this.registers = new Registers();
113
        this.defaultDataIndexProviders = new HashMap<>();
114
    }
115

    
116
    @Override
117
    public Register getStoreRegister() {
118
        return this.registers.store;
119
    }
120

    
121
    @Override
122
    public Register getStoreProviderRegister() {
123
        return this.registers.storeProvider;
124
    }
125

    
126
    @Override
127
    public Register getServerExplorerRegister() {
128
        return this.registers.serverExplorer;
129
    }
130

    
131
    @Override
132
    public Register getFeatureIndexRegister() {
133
        return this.registers.featureIndexProvider;
134
    }
135

    
136
    private String getStoreName(DataStoreParameters parameters) {
137
        for (DataFactory factory : this.getStoreRegister()) {
138
            DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) factory;
139
            if (storeFactory.canUse(parameters)) {
140
                return storeFactory.getName();
141
            }
142
        }
143
        return null;
144
    }
145

    
146
    /**
147
     * @deprecated
148
     */
149
    @Override
150
    public void registerDefaultRasterStore(Class rasterStoreClass) {
151
        // Metodo usado por el raster nuevo para regstrar su factoria de store
152
        this.getStoreRegister().register(new RasterStoreFactory(rasterStoreClass));
153
    }
154

    
155
    /**
156
     * @deprecated
157
     */
158
    @Override
159
    public void registerStoreFactory(String name, Class storeFactoryClass) {
160
        // Metodo usado por el raster viejo para registrar las factorias de sus stores
161
        this.getStoreRegister().register(new RasterStoreOldFactory(name, storeFactoryClass));
162
    }
163

    
164
    /**
165
     * @param name
166
     * @param storeProviderClass
167
     * @param parametersClass
168
     * @deprecated use registerStoreProviderFactory
169
     */
170
    @Override
171
    public void registerStoreProvider(String name, Class storeProviderClass,
172
            Class parametersClass) {
173
        if (name == null || storeProviderClass == null || parametersClass == null) {
174
            throw new IllegalArgumentException("Any parameters can be null");
175
        }
176

    
177
        if (!DataStoreParameters.class.isAssignableFrom(parametersClass)) {
178
            throw new IllegalArgumentException(parametersClass.getName()
179
                    + " must implement org.gvsig.fmap.dal.DataStoreParameters");
180
        }
181

    
182
        if (CoverageStoreProvider.class.isAssignableFrom(storeProviderClass)) {
183
            // Envuelve al proveedor en una factoria por defecto.
184
            this.registerStoreProviderFactory(new DataStoreProviderToCoverageProviderFactoryWrapper(
185
                    name, "", storeProviderClass, parametersClass));
186
            return;
187
        }
188

    
189
        if (FeatureStoreProvider.class.isAssignableFrom(storeProviderClass)) {
190
            // Envuelve al proveedor en una factoria por defecto.
191
            this.registerStoreProviderFactory(new DataStoreProviderToFeatureStoreProviderFactoryWrapper(
192
                    name, "", storeProviderClass, parametersClass));
193
            return;
194
        }
195

    
196
        throw new IllegalArgumentException("Not supported implemtation: name="
197
                + name + " provider class=" + storeProviderClass.getName());
198

    
199
    }
200

    
201
    @Override
202
    public void registerExplorerProvider(String name, Class explorerClass, Class parametersClass) {
203
        if (name == null || explorerClass == null || parametersClass == null) {
204
            // FIXME Exception
205
            throw new IllegalArgumentException("Any parameters can be null");
206
        }
207

    
208
        if (!DataServerExplorerParameters.class
209
                .isAssignableFrom(parametersClass)) {
210
            // FIXME Exception
211
            throw new IllegalArgumentException(
212
                    parametersClass.getName()
213
                    + " must implement org.gvsig.fmap.dal.DataServerExplorerParameters");
214
        }
215

    
216
        if (!DataServerExplorer.class.isAssignableFrom(explorerClass)) {
217
            // FIXME Exception
218
            throw new IllegalArgumentException(explorerClass.getName()
219
                    + " must implement org.gvsig.fmap.dal.DataServerExplorer");
220
        }
221

    
222
        // Envuelve al proveedor en una factoria por defecto.
223
        this.registerServerExplorerFactory(
224
                new DataServerExplorerToDataExplorerFactoryWrapper(
225
                        name, "", explorerClass, parametersClass
226
                )
227
        );
228

    
229
    }
230

    
231
    @Override
232
    public void registerStoreFactory(DataStoreFactory_v2_4 factory) {
233
        this.getStoreRegister().register(factory);
234
    }
235

    
236
    @Override
237
    public void registerStoreProviderFactory(DataStoreProviderFactory factory) {
238
        this.getStoreProviderRegister().register(factory);
239
    }
240

    
241
    @Override
242
    public void registerServerExplorerFactory(DataServerExplorerFactory factory) {
243
        this.getServerExplorerRegister().register(factory);
244
    }
245

    
246
    @Override
247
    public DataStoreParameters createStoreParameters(String providerName) throws InitializeException, ProviderNotRegisteredException {
248
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
249
        return (DataStoreParameters) providerFactory.createParameters();
250
    }
251

    
252
    @Override
253
    public NewDataStoreParameters createNewStoreParameters(String explorerName, String providerName) throws InitializeException, ProviderNotRegisteredException {
254
        try {
255
            DataServerExplorer explorer = this.openServerExplorer(explorerName, null);
256
            return explorer.getAddParameters(providerName);
257
        } catch (Exception ex) {
258
            throw new InitializeException(ex);
259
        }
260
    }
261

    
262
    @Override
263
    public DataServerExplorerParameters createServerExplorerParameters(String explorerName) throws InitializeException, ProviderNotRegisteredException {
264
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
265
        DataServerExplorerParameters params = (DataServerExplorerParameters) explorerFactory.createParameters();
266
        return params;
267
    }
268

    
269
    @Override
270
    public DataStoreParameters createMemoryStoreParameters(String autoOrderAttributeName) throws InitializeException {
271
        try {
272
            DataStoreParameters parameters = createStoreParameters(MemoryStoreProvider.NAME);
273
            if (autoOrderAttributeName != null) {
274
                parameters.setDynValue(
275
                        MemoryStoreParameters.ORDER_PARAMETER_NAME,
276
                        autoOrderAttributeName);
277
            }
278
            return parameters;
279
        } catch (Exception ex) {
280
            throw new InitializeException(ex);
281
        }
282
    }
283

    
284
    @Override
285
    public DataServerExplorer openServerExplorer(String explorerName, DataServerExplorerParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
286
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
287
        if (parameters == null) {
288
            parameters = (DataServerExplorerParameters) explorerFactory.createParameters();
289
        }
290
        DataServerExplorer explorer = (DataServerExplorer) explorerFactory.create(
291
                parameters,
292
                new DefaultDataServerExplorerProviderServices()
293
        );
294
        return explorer;
295
    }
296

    
297
    /**
298
     * @param parameters
299
     * @return
300
     * @throws org.gvsig.fmap.dal.exception.InitializeException
301
     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
302
     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
303
     * @deprecated see openServerExplorer
304
     */
305
    @Override
306
    public DataServerExplorer createServerExplorer(
307
            DataServerExplorerParameters parameters) throws InitializeException,
308
            ProviderNotRegisteredException, ValidateDataParametersException {
309
        return openServerExplorer(parameters.getExplorerName(), parameters);
310
    }
311

    
312
    @Override
313
    public DataStore openStore(String providerName, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
314

    
315
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
316
        if (!identityManager.getCurrentIdentity().isAuthorized(READ_STORE_AUTHORIZATION, parameters, providerName)) {
317
            throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, providerName);
318
        }
319

    
320
        String storeName = this.getStoreName(parameters);
321

    
322
        DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) this.getStoreRegister().getFactory(storeName);
323
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
324

    
325
        DataStore store = (DataStore) storeFactory.create(parameters, this);
326
        DataStoreProvider provider = (DataStoreProvider) providerFactory.create(parameters, store);
327

    
328
        storeFactory.setProvider(store, provider);
329
        return store;
330
    }
331

    
332
    @Override
333
    public DataStore openStore(String provider, DynObject parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
334
        DataStoreParameters params = toDataStoreParameters(provider, parameters);
335
        DataStore store = openStore(params.getDataStoreName(), params);
336
        return store;
337
    }
338

    
339
    @Override
340
    public FeatureStore createMemoryStore(String autoOrderAttributeName) throws InitializeException {
341
        try {
342
            DataStoreParameters parameters = createMemoryStoreParameters(autoOrderAttributeName);
343
            DataStore store = openStore(MemoryStoreProvider.NAME, parameters);
344
            return (FeatureStore) store;
345
        } catch (Exception ex) {
346
            throw new InitializeException(ex);
347
        }
348
    }
349

    
350
    @Override
351
    public DataStoreProviderFactory getStoreProviderFactory(String providerName) {
352
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
353
        return (DataStoreProviderFactory) providerFactory;
354
    }
355

    
356
    @Override
357
    public List<String> getStoreProviders() {
358
        return this.getStoreProviderRegister().getFactoryNames();
359
    }
360

    
361
    @Override
362
    public List<String> getStoreProviders(String explorerName) {
363
        try {
364
            DataServerExplorer explorer = openServerExplorer(explorerName, null);
365
            List names = explorer.getDataStoreProviderNames();
366
            return names;
367
        } catch (Exception ex) {
368
            throw new RuntimeException("Can't get stores availables for explorer '" + explorerName + "'.", ex);
369
        }
370
    }
371

    
372
    @Override
373
    public List<String> getExplorerProviders() {
374
        List<String> names = this.getServerExplorerRegister().getFactoryNames();
375
        return names;
376
    }
377

    
378
    @Override
379
    public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException {
380

    
381
        String providerName = parameters.getDataStoreName();
382
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
383
        if (providerFactory == null) {
384
            throw new ProviderNotRegisteredException(providerName);
385
        }
386
        while (true) {
387
            try {
388
                DataStoreProvider provider = (DataStoreProvider) providerFactory.create(
389
                        parameters, providerServices
390
                );
391
                return provider;
392
            } catch (Exception e) {
393
                if (openErrorHandler == null) {
394
                    throw new InitializeException(providerName, e);
395
                }
396
                boolean retry = openErrorHandler.canRetryOpen(e, parameters);
397
                if (!retry) {
398
                    throw new InitializeException(providerName, e);
399
                }
400
            }
401
        }
402
    }
403

    
404
    @Override
405
    public List<String> getFeatureIndexProviders() {
406
        List<String> names = this.getFeatureIndexRegister().getFactoryNames();
407
        return names;
408
    }
409

    
410
    @Override
411
    public void setDefaultFeatureIndexProviderName(int dataType, String name) {
412
        this.defaultDataIndexProviders.put(dataType, name);
413
    }
414

    
415
    @Override
416
    public String getDefaultFeatureIndexProviderName(int dataType) {
417
        return this.defaultDataIndexProviders.get(dataType);
418
    }
419

    
420
    @Override
421
    public FeatureIndexProviderServices createFeatureIndexProvider(
422
            String name,
423
            FeatureStore store,
424
            FeatureType type,
425
            String indexName,
426
            FeatureAttributeDescriptor attr
427
    ) throws InitializeException, ProviderNotRegisteredException {
428

    
429
        if (name == null) {
430
            name = getDefaultFeatureIndexProviderName(attr.getType());
431
        }
432

    
433
        if (name == null) {
434
            throw new InitializeException(
435
                    "There not any index provider registered.", null);
436
        }
437
        DataFactory indexfactory = this.getFeatureIndexRegister().getFactory(name);
438
        if (indexfactory == null) {
439
            throw new InitializeException(
440
                    "There not any index provider registered with name '" + name + "'.", null);
441

    
442
        }
443
        FeatureIndexProvider provider = (FeatureIndexProvider) indexfactory.create(null, null);
444

    
445
        FeatureIndexProviderServices services = new DefaultFeatureIndex(
446
                (FeatureStoreProviderServices) store,
447
                type,
448
                provider,
449
                attr.getName(),
450
                indexName
451
        );
452
        services.initialize();
453
        return services;
454

    
455
    }
456

    
457
    @Override
458
    public String getTemporaryDirectory() {
459
        // FIXME Define a better tempdir solution
460
        String tmp = System.getProperty("TMP");
461
        if (tmp == null) {
462
            tmp = System.getProperty("TEMP");
463
        }
464
        if (tmp == null) {
465
            File tmp_file = new File(System.getProperty("HOME"), "_daltmp_");
466
            int i = 1;
467
            while (!tmp_file.exists() || !tmp_file.isDirectory()) {
468
                tmp_file = new File(tmp_file.getAbsolutePath() + i);
469
                i++;
470
            }
471
            if (!tmp_file.exists()) {
472
                tmp_file.mkdir();
473
            }
474
            tmp = tmp_file.getAbsolutePath();
475
        }
476
        return tmp;
477
    }
478

    
479
    @Override
480
    public DataStoreParameters createStoreParameters(DynStruct struct) throws InitializeException, ProviderNotRegisteredException {
481
        if (!(struct instanceof DynStruct_v2)) {
482
            throw new IllegalArgumentException("A DynStruct_v2 is required.");
483
        }
484
        Tags tags = ((DynStruct_v2) struct).getTags();
485
        return this.createStoreParameters(tags);
486
    }
487

    
488
    @Override
489
    public DataStoreParameters createStoreParameters(Tags tags) throws InitializeException, ProviderNotRegisteredException {
490
        String providerName = (String) tags.get(TAG_DAL_OPENSTORE + "provider");
491
        if (providerName == null) {
492
            throw new IllegalArgumentException("Tag DAL.OpenStore.provider is missing in struct.");
493
        }
494
        int prefixlen = TAG_DAL_OPENSTORE.length();
495
        DataStoreParameters parameters = this.createStoreParameters(providerName);
496
        for (String key : tags) {
497
            if (key.startsWith(TAG_DAL_OPENSTORE)) {
498
                parameters.setDynValue(key.substring(prefixlen), tags.get(key));
499
            }
500
        }
501
        return parameters;
502
    }
503

    
504
    @Override
505
    public DataStore openStore(DynStruct struct) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
506
        DataStoreParameters paramters = this.createStoreParameters(struct);
507
        DataStore store = this.openStore(paramters.getDataStoreName(), paramters);
508
        return store;
509
    }
510

    
511
    @Override
512
    public void newStore(String explorerName, String providerName, NewDataStoreParameters parameters, boolean overwrite) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
513

    
514
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
515
        if (!identityManager.getCurrentIdentity().isAuthorized(CREATE_STORE_AUTHORIZATION, parameters, providerName)) {
516
            throw new UnauthorizedException(CREATE_STORE_AUTHORIZATION, parameters, providerName);
517
        }
518
        parameters.validate();
519
        try {
520
            DataServerExplorerParameters explorerParameters = this.createServerExplorerParameters(explorerName);
521
            DataServerExplorer server = this.openServerExplorer(explorerName, explorerParameters);
522
            server.add(providerName, parameters, overwrite);
523
        } catch (Exception e) {
524
            throw new InitializeException(e);
525
        }
526
    }
527

    
528
    @Override
529
    public void registerDefaultEvaluator(Class evaluatorClass) {
530
        if (!Evaluator.class.isAssignableFrom(evaluatorClass)) {
531
            throw new ClassCastException();
532
        }
533
        this.defaultEvaluatorClass = evaluatorClass;
534
    }
535

    
536
    @Override
537
    public Evaluator createExpresion(String expression) throws InitializeException {
538
        try {
539
            Evaluator eval = (Evaluator) this.defaultEvaluatorClass.
540
                    getConstructor(String.class).newInstance(expression);
541
            return eval;
542
        } catch (Exception ex) {
543
            throw new InitializeException(ex);
544
        }
545
    }
546

    
547
    @Override
548
    public FeaturePagingHelper createFeaturePagingHelper(
549
            FeatureStore featureStore, int pageSize) throws BaseException {
550
        return new FeaturePagingHelperImpl(featureStore, pageSize);
551
    }
552

    
553
    @Override
554
    public FeaturePagingHelper createFeaturePagingHelper(
555
            FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
556
            throws BaseException {
557
        return new FeaturePagingHelperImpl(featureStore, featureQuery, pageSize);
558
    }
559

    
560
    @Override
561
    public void setOpenErrorHandler(OpenErrorHandler handler) {
562
        openErrorHandler = handler;
563
    }
564

    
565
    @Override
566
    public OpenErrorHandler getOpenErrorHandler() {
567
        return this.openErrorHandler;
568
    }
569

    
570
    @Override
571
    public EditableFeatureType createFeatureType() {
572
        return new DefaultEditableFeatureType();
573
    }
574

    
575
    @Override
576
    public DataServerExplorerPool getDataServerExplorerPool() {
577
        if (this.dataServerExplorerPool == null) {
578
            this.dataServerExplorerPool = new DefaultDataServerExplorerPool();
579
        }
580
        return this.dataServerExplorerPool;
581
    }
582

    
583
    @Override
584
    public void setDataServerExplorerPool(DataServerExplorerPool pool) {
585
        this.dataServerExplorerPool = pool;
586
    }
587

    
588
    public DataStoreParameters toDataStoreParameters(String provider, DynObject params) throws InitializeException, ProviderNotRegisteredException {
589
        if (params instanceof DataStoreParameters) {
590
            return (DataStoreParameters) params;
591
        }
592
        String providerName;
593
        try {
594
            providerName = (String) params.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
595
        } catch (Exception ex) {
596
            providerName = provider;
597
        }
598
        DataStoreParameters parameters = this.createStoreParameters(providerName);
599
        ToolsLocator.getDynObjectManager().copy(params, parameters);
600
        return parameters;
601
    }
602

    
603
    @Override
604
    public List<DataType> getDataTypes() {
605
        if (dataTypes == null) {
606
            DataTypesManager manager = ToolsLocator.getDataTypesManager();
607
            dataTypes = new ArrayList<>();
608
            dataTypes.add(manager.get(DataTypes.STRING));
609
            dataTypes.add(manager.get(DataTypes.BOOLEAN));
610
            dataTypes.add(manager.get(DataTypes.INT));
611
            dataTypes.add(manager.get(DataTypes.DOUBLE));
612
            dataTypes.add(manager.get(DataTypes.DATE));
613
            dataTypes.add(manager.get(DataTypes.GEOMETRY));
614
        }
615
        return dataTypes;
616
    }
617

    
618
    @Override
619
    public void setResourcesLoader(ClassLoader loader) {
620
        this.resourcesLoader = loader;
621
    }
622

    
623
    @Override
624
    public void setResourcesLoader(File folder) {
625
        if (folder == null) {
626
            this.resourcesLoader = null;
627
            return;
628
        }
629
        try {
630
            URL[] urls = new URL[]{folder.toURI().toURL()};
631
            this.resourcesLoader = new URLClassLoader(urls);
632
        } catch (Exception ex) {
633
            throw new IllegalArgumentException("Can't create a ClassLoader from '" + folder.toString() + "'.", ex);
634
        }
635
    }
636

    
637
    @Override
638
    public URL getResource(Object reourceLoader, String name) {
639
        URL x;
640
        if (this.resourcesLoader != null) {
641
            x = this.resourcesLoader.getResource(name);
642
            if (x != null) {
643
                return x;
644
            }
645
        }
646
        x = reourceLoader.getClass().getResource(name);
647
        return x;
648
    }
649

    
650
    @Override
651
    public InputStream getResourceAsStream(Object reourceLoader, String name) {
652
        InputStream x;
653
        if (this.resourcesLoader != null) {
654
            x = this.resourcesLoader.getResourceAsStream(name);
655
            if (x != null) {
656
                return x;
657
            }
658
        }
659
        x = reourceLoader.getClass().getResourceAsStream(name);
660
        return x;
661
    }
662
}