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

History | View | Annotate | Download (25.8 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
    /**
315
     * @deprecated use openStore
316
     * @param parameters
317
     * @return
318
     * @throws InitializeException
319
     * @throws ProviderNotRegisteredException
320
     * @throws ValidateDataParametersException 
321
     */
322
    @Override
323
    public DataStore createStore(DataStoreParameters parameters)
324
        throws InitializeException, ProviderNotRegisteredException,
325
        ValidateDataParametersException {
326
        return openStore(parameters.getDataStoreName(), parameters);
327
    }
328
    
329
    @Override
330
    public DataStore openStore(String providerName, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
331

    
332
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
333
        if (!identityManager.getCurrentIdentity().isAuthorized(READ_STORE_AUTHORIZATION, parameters, providerName)) {
334
            throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, providerName);
335
        }
336

    
337
        String storeName = this.getStoreName(parameters);
338

    
339
        DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) this.getStoreRegister().getFactory(storeName);
340
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
341

    
342
        DataStore store = (DataStore) storeFactory.create(parameters, this);
343
        DataStoreProvider provider = (DataStoreProvider) providerFactory.create(parameters, store);
344

    
345
        storeFactory.setProvider(store, provider);
346
        return store;
347
    }
348

    
349
    @Override
350
    public DataStore openStore(String provider, DynObject parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
351
        DataStoreParameters params = toDataStoreParameters(provider, parameters);
352
        DataStore store = openStore(params.getDataStoreName(), params);
353
        return store;
354
    }
355

    
356
    @Override
357
    public FeatureStore createMemoryStore(String autoOrderAttributeName) throws InitializeException {
358
        try {
359
            DataStoreParameters parameters = createMemoryStoreParameters(autoOrderAttributeName);
360
            DataStore store = openStore(MemoryStoreProvider.NAME, parameters);
361
            return (FeatureStore) store;
362
        } catch (Exception ex) {
363
            throw new InitializeException(ex);
364
        }
365
    }
366

    
367
    @Override
368
    public DataStoreProviderFactory getStoreProviderFactory(String providerName) {
369
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
370
        return (DataStoreProviderFactory) providerFactory;
371
    }
372

    
373
    @Override
374
    public List<String> getStoreProviders() {
375
        return this.getStoreProviderRegister().getFactoryNames();
376
    }
377

    
378
    @Override
379
    public List<String> getStoreProviders(String explorerName) {
380
        try {
381
            DataServerExplorer explorer = openServerExplorer(explorerName, null);
382
            List names = explorer.getDataStoreProviderNames();
383
            return names;
384
        } catch (Exception ex) {
385
            throw new RuntimeException("Can't get stores availables for explorer '" + explorerName + "'.", ex);
386
        }
387
    }
388

    
389
    @Override
390
    public List<String> getExplorerProviders() {
391
        List<String> names = this.getServerExplorerRegister().getFactoryNames();
392
        return names;
393
    }
394

    
395
    @Override
396
    public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException {
397

    
398
        String providerName = parameters.getDataStoreName();
399
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
400
        if (providerFactory == null) {
401
            throw new ProviderNotRegisteredException(providerName);
402
        }
403
        while (true) {
404
            try {
405
                DataStoreProvider provider = (DataStoreProvider) providerFactory.create(
406
                        parameters, providerServices
407
                );
408
                return provider;
409
            } catch (Exception e) {
410
                if (openErrorHandler == null) {
411
                    throw new InitializeException(providerName, e);
412
                }
413
                boolean retry = openErrorHandler.canRetryOpen(e, parameters);
414
                if (!retry) {
415
                    throw new InitializeException(providerName, e);
416
                }
417
            }
418
        }
419
    }
420

    
421
    @Override
422
    public List<String> getFeatureIndexProviders() {
423
        List<String> names = this.getFeatureIndexRegister().getFactoryNames();
424
        return names;
425
    }
426

    
427
    @Override
428
    public void setDefaultFeatureIndexProviderName(int dataType, String name) {
429
        this.defaultDataIndexProviders.put(dataType, name);
430
    }
431

    
432
    @Override
433
    public String getDefaultFeatureIndexProviderName(int dataType) {
434
        return this.defaultDataIndexProviders.get(dataType);
435
    }
436

    
437
    @Override
438
    public FeatureIndexProviderServices createFeatureIndexProvider(
439
            String name,
440
            FeatureStore store,
441
            FeatureType type,
442
            String indexName,
443
            FeatureAttributeDescriptor attr
444
    ) throws InitializeException, ProviderNotRegisteredException {
445

    
446
        if (name == null) {
447
            name = getDefaultFeatureIndexProviderName(attr.getType());
448
        }
449

    
450
        if (name == null) {
451
            throw new InitializeException(
452
                    "There not any index provider registered.", null);
453
        }
454
        DataFactory indexfactory = this.getFeatureIndexRegister().getFactory(name);
455
        if (indexfactory == null) {
456
            throw new InitializeException(
457
                    "There not any index provider registered with name '" + name + "'.", null);
458

    
459
        }
460
        FeatureIndexProvider provider = (FeatureIndexProvider) indexfactory.create(null, null);
461

    
462
        FeatureIndexProviderServices services = new DefaultFeatureIndex(
463
                (FeatureStoreProviderServices) store,
464
                type,
465
                provider,
466
                attr.getName(),
467
                indexName
468
        );
469
        services.initialize();
470
        return services;
471

    
472
    }
473

    
474
    @Override
475
    public String getTemporaryDirectory() {
476
        // FIXME Define a better tempdir solution
477
        String tmp = System.getProperty("TMP");
478
        if (tmp == null) {
479
            tmp = System.getProperty("TEMP");
480
        }
481
        if (tmp == null) {
482
            File tmp_file = new File(System.getProperty("HOME"), "_daltmp_");
483
            int i = 1;
484
            while (!tmp_file.exists() || !tmp_file.isDirectory()) {
485
                tmp_file = new File(tmp_file.getAbsolutePath() + i);
486
                i++;
487
            }
488
            if (!tmp_file.exists()) {
489
                tmp_file.mkdir();
490
            }
491
            tmp = tmp_file.getAbsolutePath();
492
        }
493
        return tmp;
494
    }
495

    
496
    @Override
497
    public DataStoreParameters createStoreParameters(DynStruct struct) throws InitializeException, ProviderNotRegisteredException {
498
        if (!(struct instanceof DynStruct_v2)) {
499
            throw new IllegalArgumentException("A DynStruct_v2 is required.");
500
        }
501
        Tags tags = ((DynStruct_v2) struct).getTags();
502
        return this.createStoreParameters(tags);
503
    }
504

    
505
    @Override
506
    public DataStoreParameters createStoreParameters(Tags tags) throws InitializeException, ProviderNotRegisteredException {
507
        String providerName = (String) tags.get(TAG_DAL_OPENSTORE + "provider");
508
        if (providerName == null) {
509
            throw new IllegalArgumentException("Tag DAL.OpenStore.provider is missing in struct.");
510
        }
511
        int prefixlen = TAG_DAL_OPENSTORE.length();
512
        DataStoreParameters parameters = this.createStoreParameters(providerName);
513
        for (String key : tags) {
514
            if (key.startsWith(TAG_DAL_OPENSTORE)) {
515
                parameters.setDynValue(key.substring(prefixlen), tags.get(key));
516
            }
517
        }
518
        return parameters;
519
    }
520

    
521
    @Override
522
    public DataStore openStore(DynStruct struct) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
523
        DataStoreParameters paramters = this.createStoreParameters(struct);
524
        DataStore store = this.openStore(paramters.getDataStoreName(), paramters);
525
        return store;
526
    }
527

    
528
    @Override
529
    public void newStore(String explorerName, String providerName, NewDataStoreParameters parameters, boolean overwrite) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
530

    
531
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
532
        if (!identityManager.getCurrentIdentity().isAuthorized(CREATE_STORE_AUTHORIZATION, parameters, providerName)) {
533
            throw new UnauthorizedException(CREATE_STORE_AUTHORIZATION, parameters, providerName);
534
        }
535
        parameters.validate();
536
        try {
537
            DataServerExplorerParameters explorerParameters = this.createServerExplorerParameters(explorerName);
538
            DataServerExplorer server = this.openServerExplorer(explorerName, explorerParameters);
539
            server.add(providerName, parameters, overwrite);
540
        } catch (Exception e) {
541
            throw new InitializeException(e);
542
        }
543
    }
544

    
545
    @Override
546
    public void registerDefaultEvaluator(Class evaluatorClass) {
547
        if (!Evaluator.class.isAssignableFrom(evaluatorClass)) {
548
            throw new ClassCastException();
549
        }
550
        this.defaultEvaluatorClass = evaluatorClass;
551
    }
552

    
553
    @Override
554
    public Evaluator createExpresion(String expression) throws InitializeException {
555
        try {
556
            Evaluator eval = (Evaluator) this.defaultEvaluatorClass.
557
                    getConstructor(String.class).newInstance(expression);
558
            return eval;
559
        } catch (Exception ex) {
560
            throw new InitializeException(ex);
561
        }
562
    }
563

    
564
    @Override
565
    public FeaturePagingHelper createFeaturePagingHelper(
566
            FeatureStore featureStore, int pageSize) throws BaseException {
567
        return new FeaturePagingHelperImpl(featureStore, pageSize);
568
    }
569

    
570
    @Override
571
    public FeaturePagingHelper createFeaturePagingHelper(
572
            FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
573
            throws BaseException {
574
        return new FeaturePagingHelperImpl(featureStore, featureQuery, pageSize);
575
    }
576

    
577
    @Override
578
    public void setOpenErrorHandler(OpenErrorHandler handler) {
579
        openErrorHandler = handler;
580
    }
581

    
582
    @Override
583
    public OpenErrorHandler getOpenErrorHandler() {
584
        return this.openErrorHandler;
585
    }
586

    
587
    @Override
588
    public EditableFeatureType createFeatureType() {
589
        return new DefaultEditableFeatureType();
590
    }
591

    
592
    @Override
593
    public DataServerExplorerPool getDataServerExplorerPool() {
594
        if (this.dataServerExplorerPool == null) {
595
            this.dataServerExplorerPool = new DefaultDataServerExplorerPool();
596
        }
597
        return this.dataServerExplorerPool;
598
    }
599

    
600
    @Override
601
    public void setDataServerExplorerPool(DataServerExplorerPool pool) {
602
        this.dataServerExplorerPool = pool;
603
    }
604

    
605
    public DataStoreParameters toDataStoreParameters(String provider, DynObject params) throws InitializeException, ProviderNotRegisteredException {
606
        if (params instanceof DataStoreParameters) {
607
            return (DataStoreParameters) params;
608
        }
609
        String providerName;
610
        try {
611
            providerName = (String) params.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
612
        } catch (Exception ex) {
613
            providerName = provider;
614
        }
615
        DataStoreParameters parameters = this.createStoreParameters(providerName);
616
        ToolsLocator.getDynObjectManager().copy(params, parameters);
617
        return parameters;
618
    }
619

    
620
    @Override
621
    public List<DataType> getDataTypes() {
622
        if (dataTypes == null) {
623
            DataTypesManager manager = ToolsLocator.getDataTypesManager();
624
            dataTypes = new ArrayList<>();
625
            dataTypes.add(manager.get(DataTypes.STRING));
626
            dataTypes.add(manager.get(DataTypes.BOOLEAN));
627
            dataTypes.add(manager.get(DataTypes.INT));
628
            dataTypes.add(manager.get(DataTypes.DOUBLE));
629
            dataTypes.add(manager.get(DataTypes.DATE));
630
            dataTypes.add(manager.get(DataTypes.GEOMETRY));
631
        }
632
        return dataTypes;
633
    }
634

    
635
    @Override
636
    public void setResourcesLoader(ClassLoader loader) {
637
        this.resourcesLoader = loader;
638
    }
639

    
640
    @Override
641
    public void setResourcesLoader(File folder) {
642
        if (folder == null) {
643
            this.resourcesLoader = null;
644
            return;
645
        }
646
        try {
647
            URL[] urls = new URL[]{folder.toURI().toURL()};
648
            this.resourcesLoader = new URLClassLoader(urls);
649
        } catch (Exception ex) {
650
            throw new IllegalArgumentException("Can't create a ClassLoader from '" + folder.toString() + "'.", ex);
651
        }
652
    }
653

    
654
    @Override
655
    public URL getResource(Object reourceLoader, String name) {
656
        URL x;
657
        if (this.resourcesLoader != null) {
658
            x = this.resourcesLoader.getResource(name);
659
            if (x != null) {
660
                return x;
661
            }
662
        }
663
        x = reourceLoader.getClass().getResource(name);
664
        return x;
665
    }
666

    
667
    @Override
668
    public InputStream getResourceAsStream(Object reourceLoader, String name) {
669
        InputStream x;
670
        if (this.resourcesLoader != null) {
671
            x = this.resourcesLoader.getResourceAsStream(name);
672
            if (x != null) {
673
                return x;
674
            }
675
        }
676
        x = reourceLoader.getClass().getResourceAsStream(name);
677
        return x;
678
    }
679
    
680
    @Override
681
    public ExpressionBuilder createExpressionBuilder() {
682
        return new ExpressionBuilderBase();
683
    }
684
}