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 @ 43040

History | View | Annotate | Download (25.3 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.ExpressionBuilder;
24
import org.gvsig.fmap.dal.NewDataStoreParameters;
25
import org.gvsig.fmap.dal.OpenErrorHandler;
26
import org.gvsig.fmap.dal.Register;
27
import org.gvsig.fmap.dal.exception.InitializeException;
28
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
29
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
30
import org.gvsig.fmap.dal.feature.EditableFeatureType;
31
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
32
import org.gvsig.fmap.dal.feature.FeatureQuery;
33
import org.gvsig.fmap.dal.feature.FeatureStore;
34
import org.gvsig.fmap.dal.feature.FeatureType;
35
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType;
36
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureIndex;
37
import org.gvsig.fmap.dal.feature.impl.FeatureStoreFactory;
38
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
39
import org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl;
40
import org.gvsig.fmap.dal.feature.spi.ExpressionBuilderBase;
41
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
42
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
43
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
44
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
45
import org.gvsig.fmap.dal.raster.impl.RasterStoreOldFactory;
46
import org.gvsig.fmap.dal.raster.impl.RasterStoreFactory;
47
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
48
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
49
import org.gvsig.fmap.dal.spi.DataStoreProvider;
50
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
51
import org.gvsig.fmap.dal.store.memory.MemoryStoreParameters;
52
import org.gvsig.fmap.dal.store.memory.MemoryStoreProvider;
53
import org.gvsig.tools.ToolsLocator;
54
import org.gvsig.tools.dataTypes.DataType;
55
import org.gvsig.tools.dataTypes.DataTypesManager;
56
import org.gvsig.tools.dynobject.DynObject;
57
import org.gvsig.tools.dynobject.DynStruct;
58
import org.gvsig.tools.dynobject.DynStruct_v2;
59
import org.gvsig.tools.dynobject.Tags;
60
import org.gvsig.tools.evaluator.Evaluator;
61
import org.gvsig.tools.exception.BaseException;
62
import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
63
import org.gvsig.tools.identitymanagement.UnauthorizedException;
64
import org.gvsig.tools.service.spi.Services;
65

    
66
public class DefaultDataManager
67
        implements DataManager, DataManagerProviderServices, Services {
68

    
69
    private class Registers {
70

    
71
        private final Register store;
72
        private final Register storeProvider;
73
        private final Register serverExplorer;
74
        private final Register featureIndexProvider;
75

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

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

    
99
    private final Registers registers;
100

    
101
    private final Map<Integer, String> defaultDataIndexProviders;
102

    
103
    private Class defaultEvaluatorClass = null;
104

    
105
    private OpenErrorHandler openErrorHandler = null;
106

    
107
    private DataServerExplorerPool dataServerExplorerPool = null;
108

    
109
    private List<DataType> dataTypes = null;
110

    
111
    private ClassLoader resourcesLoader = null;
112

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

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

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

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

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

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

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

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

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

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

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

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

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

    
201
    }
202

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

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

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

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

    
231
    }
232

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

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

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

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

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

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

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

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

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

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

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

    
322
        String storeName = this.getStoreName(parameters);
323

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

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

    
330
        storeFactory.setProvider(store, provider);
331
        return store;
332
    }
333

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

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

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

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

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

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

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

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

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

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

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

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

    
431
        if (name == null) {
432
            name = getDefaultFeatureIndexProviderName(attr.getType());
433
        }
434

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

    
444
        }
445
        FeatureIndexProvider provider = (FeatureIndexProvider) indexfactory.create(null, null);
446

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

    
457
    }
458

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
652
    @Override
653
    public InputStream getResourceAsStream(Object reourceLoader, String name) {
654
        InputStream x;
655
        if (this.resourcesLoader != null) {
656
            x = this.resourcesLoader.getResourceAsStream(name);
657
            if (x != null) {
658
                return x;
659
            }
660
        }
661
        x = reourceLoader.getClass().getResourceAsStream(name);
662
        return x;
663
    }
664
    
665
    @Override
666
    public ExpressionBuilder createExpressionBuilder() {
667
        return new ExpressionBuilderBase();
668
    }
669
}