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

History | View | Annotate | Download (29.2 KB)

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

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

    
72
public class DefaultDataManager
73
        implements DataManager, DataManagerProviderServices, Services {
74
    
75
    final static private String DATA_MANAGER_CACHE = "Data.manager.caches";
76
    final static private String DATA_MANAGER_CACHE_DESCRIPTION =
77
        "DAL cache providers";
78
    
79
    private class Registers {
80

    
81
        private final Register store;
82
        private final Register storeProvider;
83
        private final Register serverExplorer;
84
        private final Register featureIndexProvider;
85

    
86
        public Registers() {
87
            this.store = new RegisterImpl(
88
                    "Data.manager.stores.factory",
89
                    "DAL store factories"
90
            );
91
            this.storeProvider = new RegisterImpl(
92
                    "Data.manager.providers.factory",
93
                    "DAL store provider factories"
94
            );
95
            this.serverExplorer = new RegisterImpl(
96
                    "Data.manager.servereexplorer.factory",
97
                    "DAL server explorer factories"
98
            );
99
            this.featureIndexProvider = new RegisterImpl(
100
                    "Data.manager.feature.index.factory",
101
                    "DAL feature index factories"
102
            );
103

    
104
            this.store.register(new FeatureStoreFactory());
105
        }
106
    }
107
    private static final String TAG_DAL_OPENSTORE = "dal.openstore.";
108

    
109
    private final Registers registers;
110

    
111
    private final Map<Integer, String> defaultDataIndexProviders;
112

    
113
    private Class defaultEvaluatorClass = null;
114

    
115
    private OpenErrorHandler openErrorHandler = null;
116

    
117
    private DataServerExplorerPool dataServerExplorerPool = null;
118

    
119
    private List<DataType> dataTypes = null;
120

    
121
    private ClassLoader resourcesLoader = null;
122

    
123
    public DefaultDataManager() {
124
        this.registers = new Registers();
125
        this.defaultDataIndexProviders = new HashMap<>();
126
    }
127

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

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

    
138
    @Override
139
    public Register getServerExplorerRegister() {
140
        return this.registers.serverExplorer;
141
    }
142

    
143
    @Override
144
    public Register getFeatureIndexRegister() {
145
        return this.registers.featureIndexProvider;
146
    }
147

    
148
    private String getStoreName(DataStoreParameters parameters) {
149
        for (DataFactory factory : this.getStoreRegister()) {
150
            DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) factory;
151
            if (storeFactory.canUse(parameters)) {
152
                return storeFactory.getName();
153
            }
154
        }
155
        return null;
156
    }
157

    
158
    /**
159
     * @deprecated
160
     */
161
    @Override
162
    public void registerDefaultRasterStore(Class rasterStoreClass) {
163
        // Metodo usado por el raster nuevo para regstrar su factoria de store
164
        this.getStoreRegister().register(new RasterStoreFactory(rasterStoreClass));
165
    }
166

    
167
    /**
168
     * @deprecated
169
     */
170
    @Override
171
    public void registerStoreFactory(String name, Class storeFactoryClass) {
172
        // Metodo usado por el raster viejo para registrar las factorias de sus stores
173
        this.getStoreRegister().register(new RasterStoreOldFactory(name, storeFactoryClass));
174
    }
175

    
176
    /**
177
     * @param name
178
     * @param storeProviderClass
179
     * @param parametersClass
180
     * @deprecated use registerStoreProviderFactory
181
     */
182
    @Override
183
    public void registerStoreProvider(String name, Class storeProviderClass,
184
            Class parametersClass) {
185
        if (name == null || storeProviderClass == null || parametersClass == null) {
186
            throw new IllegalArgumentException("Any parameters can be null");
187
        }
188

    
189
        if (!DataStoreParameters.class.isAssignableFrom(parametersClass)) {
190
            throw new IllegalArgumentException(parametersClass.getName()
191
                    + " must implement org.gvsig.fmap.dal.DataStoreParameters");
192
        }
193

    
194
        if (CoverageStoreProvider.class.isAssignableFrom(storeProviderClass)) {
195
            // Envuelve al proveedor en una factoria por defecto.
196
            this.registerStoreProviderFactory(new DataStoreProviderToCoverageProviderFactoryWrapper(
197
                    name, "", storeProviderClass, parametersClass));
198
            return;
199
        }
200

    
201
        if (FeatureStoreProvider.class.isAssignableFrom(storeProviderClass)) {
202
            // Envuelve al proveedor en una factoria por defecto.
203
            this.registerStoreProviderFactory(new DataStoreProviderToFeatureStoreProviderFactoryWrapper(
204
                    name, "", storeProviderClass, parametersClass));
205
            return;
206
        }
207

    
208
        throw new IllegalArgumentException("Not supported implemtation: name="
209
                + name + " provider class=" + storeProviderClass.getName());
210

    
211
    }
212

    
213
    @Override
214
    public void registerExplorerProvider(String name, Class explorerClass, Class parametersClass) {
215
        if (name == null || explorerClass == null || parametersClass == null) {
216
            // FIXME Exception
217
            throw new IllegalArgumentException("Any parameters can be null");
218
        }
219

    
220
        if (!DataServerExplorerParameters.class
221
                .isAssignableFrom(parametersClass)) {
222
            // FIXME Exception
223
            throw new IllegalArgumentException(
224
                    parametersClass.getName()
225
                    + " must implement org.gvsig.fmap.dal.DataServerExplorerParameters");
226
        }
227

    
228
        if (!DataServerExplorer.class.isAssignableFrom(explorerClass)) {
229
            // FIXME Exception
230
            throw new IllegalArgumentException(explorerClass.getName()
231
                    + " must implement org.gvsig.fmap.dal.DataServerExplorer");
232
        }
233

    
234
        // Envuelve al proveedor en una factoria por defecto.
235
        this.registerServerExplorerFactory(
236
                new DataServerExplorerToDataExplorerFactoryWrapper(
237
                        name, "", explorerClass, parametersClass
238
                )
239
        );
240

    
241
    }
242

    
243
    @Override
244
    public void registerStoreFactory(DataStoreFactory_v2_4 factory) {
245
        this.getStoreRegister().register(factory);
246
    }
247

    
248
    @Override
249
    public void registerStoreProviderFactory(DataStoreProviderFactory factory) {
250
        this.getStoreProviderRegister().register(factory);
251
    }
252

    
253
    @Override
254
    public void registerServerExplorerFactory(DataServerExplorerFactory factory) {
255
        this.getServerExplorerRegister().register(factory);
256
    }
257

    
258
    @Override
259
    public DataStoreParameters createStoreParameters(String providerName) throws InitializeException, ProviderNotRegisteredException {
260
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
261
        return (DataStoreParameters) providerFactory.createParameters();
262
    }
263

    
264
    @Override
265
    public NewDataStoreParameters createNewStoreParameters(String explorerName, String providerName) throws InitializeException, ProviderNotRegisteredException {
266
        try {
267
            DataServerExplorer explorer = this.openServerExplorer(explorerName, null);
268
            return explorer.getAddParameters(providerName);
269
        } catch (Exception ex) {
270
            throw new InitializeException(ex);
271
        }
272
    }
273

    
274
    @Override
275
    public DataServerExplorerParameters createServerExplorerParameters(String explorerName) throws InitializeException, ProviderNotRegisteredException {
276
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
277
        DataServerExplorerParameters params = (DataServerExplorerParameters) explorerFactory.createParameters();
278
        return params;
279
    }
280

    
281
    @Override
282
    public DataStoreParameters createMemoryStoreParameters(String autoOrderAttributeName) throws InitializeException {
283
        try {
284
            DataStoreParameters parameters = createStoreParameters(MemoryStoreProvider.NAME);
285
            if (autoOrderAttributeName != null) {
286
                parameters.setDynValue(
287
                        MemoryStoreParameters.ORDER_PARAMETER_NAME,
288
                        autoOrderAttributeName);
289
            }
290
            return parameters;
291
        } catch (Exception ex) {
292
            throw new InitializeException(ex);
293
        }
294
    }
295

    
296
    @Override
297
    public DataServerExplorer openServerExplorer(String explorerName, DataServerExplorerParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
298
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
299
        if (parameters == null) {
300
            parameters = (DataServerExplorerParameters) explorerFactory.createParameters();
301
        }
302
        DataServerExplorer explorer = (DataServerExplorer) explorerFactory.create(
303
                parameters,
304
                new DefaultDataServerExplorerProviderServices()
305
        );
306
        return explorer;
307
    }
308

    
309
    /**
310
     * @param parameters
311
     * @return
312
     * @throws org.gvsig.fmap.dal.exception.InitializeException
313
     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
314
     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
315
     * @deprecated see openServerExplorer
316
     */
317
    @Override
318
    public DataServerExplorer createServerExplorer(
319
            DataServerExplorerParameters parameters) throws InitializeException,
320
            ProviderNotRegisteredException, ValidateDataParametersException {
321
        return openServerExplorer(parameters.getExplorerName(), parameters);
322
    }
323

    
324
    /**
325
     * @deprecated use openStore
326
     * @param parameters
327
     * @return
328
     * @throws InitializeException
329
     * @throws ProviderNotRegisteredException
330
     * @throws ValidateDataParametersException 
331
     */
332
    @Override
333
    public DataStore createStore(DataStoreParameters parameters)
334
        throws InitializeException, ProviderNotRegisteredException,
335
        ValidateDataParametersException {
336
        return openStore(parameters.getDataStoreName(), parameters);
337
    }
338
    
339
    @Override
340
    public DataStore openStore(String providerName, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
341

    
342
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
343
        if (!identityManager.getCurrentIdentity().isAuthorized(READ_STORE_AUTHORIZATION, parameters, providerName)) {
344
            throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, providerName);
345
        }
346

    
347
        parameters.validate();
348
        
349
        String storeName = this.getStoreName(parameters);
350

    
351
        DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) this.getStoreRegister().getFactory(storeName);
352
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
353

    
354
        DataStore store = (DataStore) storeFactory.create(parameters, this);
355
        DataStoreProvider provider = (DataStoreProvider) providerFactory.create(parameters, store);
356

    
357
        storeFactory.setProvider(store, provider);
358
        return store;
359
    }
360

    
361
    @Override
362
    public DataStore openStore(String provider, DynObject parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
363
        DataStoreParameters params = toDataStoreParameters(provider, parameters);
364
        DataStore store = openStore(params.getDataStoreName(), params);
365
        return store;
366
    }
367

    
368
    @Override
369
    public FeatureStore createMemoryStore(String autoOrderAttributeName) throws InitializeException {
370
        try {
371
            DataStoreParameters parameters = createMemoryStoreParameters(autoOrderAttributeName);
372
            DataStore store = openStore(MemoryStoreProvider.NAME, parameters);
373
            return (FeatureStore) store;
374
        } catch (Exception ex) {
375
            throw new InitializeException(ex);
376
        }
377
    }
378

    
379
    @Override
380
    public DataStoreProviderFactory getStoreProviderFactory(String providerName) {
381
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
382
        return (DataStoreProviderFactory) providerFactory;
383
    }
384

    
385
    @Override
386
    public List<String> getStoreProviders() {
387
        return this.getStoreProviderRegister().getFactoryNames();
388
    }
389

    
390
    @Override
391
    public List<String> getStoreProviders(String explorerName) {
392
        try {
393
            DataServerExplorer explorer = openServerExplorer(explorerName, null);
394
            List names = explorer.getDataStoreProviderNames();
395
            return names;
396
        } catch (Exception ex) {
397
            throw new RuntimeException("Can't get stores availables for explorer '" + explorerName + "'.", ex);
398
        }
399
    }
400

    
401
    @Override
402
    public List<String> getExplorerProviders() {
403
        List<String> names = this.getServerExplorerRegister().getFactoryNames();
404
        return names;
405
    }
406

    
407
    @Override
408
    public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException {
409

    
410
        String providerName = parameters.getDataStoreName();
411
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
412
        if (providerFactory == null) {
413
            throw new ProviderNotRegisteredException(providerName);
414
        }
415
        while (true) {
416
            try {
417
                DataStoreProvider provider = (DataStoreProvider) providerFactory.create(
418
                        parameters, providerServices
419
                );
420
                return provider;
421
            } catch (Exception e) {
422
                if (openErrorHandler == null) {
423
                    throw new InitializeException(providerName, e);
424
                }
425
                boolean retry = openErrorHandler.canRetryOpen(e, parameters);
426
                if (!retry) {
427
                    throw new InitializeException(providerName, e);
428
                }
429
            }
430
        }
431
    }
432

    
433
    @Override
434
    public List<String> getFeatureIndexProviders() {
435
        List<String> names = this.getFeatureIndexRegister().getFactoryNames();
436
        return names;
437
    }
438

    
439
    @Override
440
    public void setDefaultFeatureIndexProviderName(int dataType, String name) {
441
        this.defaultDataIndexProviders.put(dataType, name);
442
    }
443

    
444
    @Override
445
    public String getDefaultFeatureIndexProviderName(int dataType) {
446
        return this.defaultDataIndexProviders.get(dataType);
447
    }
448

    
449
    @Override
450
    public FeatureIndexProviderServices createFeatureIndexProvider(
451
            String name,
452
            FeatureStore store,
453
            FeatureType type,
454
            String indexName,
455
            FeatureAttributeDescriptor attr
456
    ) throws InitializeException, ProviderNotRegisteredException {
457

    
458
        if (name == null) {
459
            name = getDefaultFeatureIndexProviderName(attr.getType());
460
        }
461

    
462
        if (name == null) {
463
            throw new InitializeException(
464
                    "There not any index provider registered.", null);
465
        }
466
        DataFactory indexfactory = this.getFeatureIndexRegister().getFactory(name);
467
        if (indexfactory == null) {
468
            throw new InitializeException(
469
                    "There not any index provider registered with name '" + name + "'.", null);
470

    
471
        }
472
        FeatureIndexProvider provider = (FeatureIndexProvider) indexfactory.create(null, null);
473

    
474
        FeatureIndexProviderServices services = new DefaultFeatureIndex(
475
                (FeatureStoreProviderServices) store,
476
                type,
477
                provider,
478
                attr.getName(),
479
                indexName
480
        );
481
        services.initialize();
482
        return services;
483

    
484
    }
485

    
486
    @Override
487
    public String getTemporaryDirectory() {
488
        // FIXME Define a better tempdir solution
489
        String tmp = System.getProperty("TMP");
490
        if (tmp == null) {
491
            tmp = System.getProperty("TEMP");
492
        }
493
        if (tmp == null) {
494
            File tmp_file = new File(System.getProperty("HOME"), "_daltmp_");
495
            int i = 1;
496
            while (!tmp_file.exists() || !tmp_file.isDirectory()) {
497
                tmp_file = new File(tmp_file.getAbsolutePath() + i);
498
                i++;
499
            }
500
            if (!tmp_file.exists()) {
501
                tmp_file.mkdir();
502
            }
503
            tmp = tmp_file.getAbsolutePath();
504
        }
505
        return tmp;
506
    }
507

    
508
    @Override
509
    public DataStoreParameters createStoreParameters(DynStruct struct) throws InitializeException, ProviderNotRegisteredException {
510
        if (!(struct instanceof DynStruct_v2)) {
511
            throw new IllegalArgumentException("A DynStruct_v2 is required.");
512
        }
513
        Tags tags = ((DynStruct_v2) struct).getTags();
514
        return this.createStoreParameters(tags);
515
    }
516

    
517
    @Override
518
    public DataStoreParameters createStoreParameters(Tags tags) throws InitializeException, ProviderNotRegisteredException {
519
        String providerName = (String) tags.get(TAG_DAL_OPENSTORE + "provider");
520
        if (providerName == null) {
521
            throw new IllegalArgumentException("Tag DAL.OpenStore.provider is missing in struct.");
522
        }
523
        int prefixlen = TAG_DAL_OPENSTORE.length();
524
        DataStoreParameters parameters = this.createStoreParameters(providerName);
525
        for (String key : tags) {
526
            if (key.startsWith(TAG_DAL_OPENSTORE)) {
527
                parameters.setDynValue(key.substring(prefixlen), tags.get(key));
528
            }
529
        }
530
        return parameters;
531
    }
532

    
533
    @Override
534
    public DataStore openStore(DynStruct struct) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
535
        DataStoreParameters paramters = this.createStoreParameters(struct);
536
        DataStore store = this.openStore(paramters.getDataStoreName(), paramters);
537
        return store;
538
    }
539

    
540
    @Override
541
    public void newStore(String explorerName, String providerName, NewDataStoreParameters parameters, boolean overwrite) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
542

    
543
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
544
        if (!identityManager.getCurrentIdentity().isAuthorized(CREATE_STORE_AUTHORIZATION, parameters, providerName)) {
545
            throw new UnauthorizedException(CREATE_STORE_AUTHORIZATION, parameters, providerName);
546
        }
547
        parameters.validate();
548
        try {
549
            DataServerExplorerParameters explorerParameters = this.createServerExplorerParameters(explorerName);
550
            DataServerExplorer server = this.openServerExplorer(explorerName, explorerParameters);
551
            server.add(providerName, parameters, overwrite);
552
        } catch (Exception e) {
553
            throw new InitializeException(e);
554
        }
555
    }
556

    
557
    @Override
558
    public void registerDefaultEvaluator(Class evaluatorClass) {
559
        if (!Evaluator.class.isAssignableFrom(evaluatorClass)) {
560
            throw new ClassCastException();
561
        }
562
        this.defaultEvaluatorClass = evaluatorClass;
563
    }
564

    
565
    @Override
566
    public Evaluator createExpresion(String expression) throws InitializeException {
567
        try {
568
            Evaluator eval = (Evaluator) this.defaultEvaluatorClass.
569
                    getConstructor(String.class).newInstance(expression);
570
            return eval;
571
        } catch (Exception ex) {
572
            throw new InitializeException(ex);
573
        }
574
    }
575

    
576
    @Override
577
    public  ExpressionEvaluator createExpresion() {
578
        return new ExpressionEvaluatorBase();
579
    }
580
    
581
    @Override
582
    public FeaturePagingHelper createFeaturePagingHelper(
583
            FeatureStore featureStore, int pageSize) throws BaseException {
584
        return new FeaturePagingHelperImpl(featureStore, pageSize);
585
    }
586

    
587
    @Override
588
    public FeaturePagingHelper createFeaturePagingHelper(
589
            FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
590
            throws BaseException {
591
        return new FeaturePagingHelperImpl(featureStore, featureQuery, pageSize);
592
    }
593

    
594
    @Override
595
    public void setOpenErrorHandler(OpenErrorHandler handler) {
596
        openErrorHandler = handler;
597
    }
598

    
599
    @Override
600
    public OpenErrorHandler getOpenErrorHandler() {
601
        return this.openErrorHandler;
602
    }
603

    
604
    @Override
605
    public EditableFeatureType createFeatureType() {
606
        return new DefaultEditableFeatureType();
607
    }
608

    
609
    @Override
610
    public DataServerExplorerPool getDataServerExplorerPool() {
611
        if (this.dataServerExplorerPool == null) {
612
            this.dataServerExplorerPool = new DefaultDataServerExplorerPool();
613
        }
614
        return this.dataServerExplorerPool;
615
    }
616

    
617
    @Override
618
    public void setDataServerExplorerPool(DataServerExplorerPool pool) {
619
        this.dataServerExplorerPool = pool;
620
    }
621

    
622
    public DataStoreParameters toDataStoreParameters(String provider, DynObject params) throws InitializeException, ProviderNotRegisteredException {
623
        if (params instanceof DataStoreParameters) {
624
            return (DataStoreParameters) params;
625
        }
626
        String providerName;
627
        try {
628
            providerName = (String) params.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
629
        } catch (Exception ex) {
630
            providerName = provider;
631
        }
632
        DataStoreParameters parameters = this.createStoreParameters(providerName);
633
        ToolsLocator.getDynObjectManager().copy(params, parameters);
634
        return parameters;
635
    }
636

    
637
    @Override
638
    public List<DataType> getDataTypes() {
639
        if (dataTypes == null) {
640
            DataTypesManager manager = ToolsLocator.getDataTypesManager();
641
            dataTypes = new ArrayList<>();
642
            dataTypes.add(manager.get(DataTypes.STRING));
643
            dataTypes.add(manager.get(DataTypes.BOOLEAN));
644
            dataTypes.add(manager.get(DataTypes.INT));
645
            dataTypes.add(manager.get(DataTypes.DOUBLE));
646
            dataTypes.add(manager.get(DataTypes.DATE));
647
            dataTypes.add(manager.get(DataTypes.GEOMETRY));
648
        }
649
        return dataTypes;
650
    }
651

    
652
    @Override
653
    public void setResourcesLoader(ClassLoader loader) {
654
        this.resourcesLoader = loader;
655
    }
656

    
657
    @Override
658
    public void setResourcesLoader(File folder) {
659
        if (folder == null) {
660
            this.resourcesLoader = null;
661
            return;
662
        }
663
        try {
664
            URL[] urls = new URL[]{folder.toURI().toURL()};
665
            this.resourcesLoader = new URLClassLoader(urls);
666
        } catch (Exception ex) {
667
            throw new IllegalArgumentException("Can't create a ClassLoader from '" + folder.toString() + "'.", ex);
668
        }
669
    }
670

    
671
    @Override
672
    public URL getResource(Object reourceLoader, String name) {
673
        URL x;
674
        if (this.resourcesLoader != null) {
675
            x = this.resourcesLoader.getResource(name);
676
            if (x != null) {
677
                return x;
678
            }
679
        }
680
        x = reourceLoader.getClass().getResource(name);
681
        return x;
682
    }
683

    
684
    @Override
685
    public InputStream getResourceAsStream(Object reourceLoader, String name) {
686
        InputStream x;
687
        if (this.resourcesLoader != null) {
688
            x = this.resourcesLoader.getResourceAsStream(name);
689
            if (x != null) {
690
                return x;
691
            }
692
        }
693
        x = reourceLoader.getClass().getResourceAsStream(name);
694
        return x;
695
    }
696
    
697
    @Override
698
    public ExpressionBuilder createExpressionBuilder() {
699
        return new ExpressionBuilderBase();
700
    }
701

    
702
    public void registerFeatureCacheProvider(
703
        FeatureCacheProviderFactory providerFactory) {
704
        ToolsLocator.getExtensionPointManager()
705
            .add(DATA_MANAGER_CACHE, DATA_MANAGER_CACHE_DESCRIPTION)
706
            .append(providerFactory.getName(), "", providerFactory);
707
    }
708

    
709
    public FeatureCacheProvider createFeatureCacheProvider(String name,
710
        DynObject parameters) throws DataException {
711
        if (name == null) {
712
            throw new InitializeException(
713
                "It is necessary to provide a cache name", null);
714
        }
715
        if (parameters == null) {
716
            throw new InitializeException(
717
                "It is necessary to provide parameters to create the explorer",
718
                null);
719
        }
720
        FeatureCacheProviderFactory featureCacheProviderFactory;
721
        try {
722
            featureCacheProviderFactory =
723
                (FeatureCacheProviderFactory) ToolsLocator
724
                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
725
                    .create(name);
726
            if (featureCacheProviderFactory == null) {
727
                throw new ProviderNotRegisteredException(name);
728
            }
729
            return featureCacheProviderFactory.createCacheProvider(parameters);
730
        } catch (InstantiationException e) {
731
            throw new InitializeException(e);
732
        } catch (IllegalAccessException e) {
733
            throw new InitializeException(e);
734
        }
735
    }
736

    
737
    public List getFeatureCacheProviders() {
738
        ExtensionPoint extensionPoint =
739
            ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_CACHE);
740
        if (extensionPoint != null) {
741
            return ToolsLocator.getExtensionPointManager()
742
                .get(DATA_MANAGER_CACHE).getNames();
743
        } else {
744
            return new ArrayList();
745
        }
746
    }
747

    
748
    public DynObject createCacheParameters(String name)
749
        throws InitializeException, ProviderNotRegisteredException {
750
        if (name == null) {
751
            throw new InitializeException(
752
                "It is necessary to provide a cache name", null);
753
        }
754
        FeatureCacheProviderFactory featureCacheProviderFactory;
755
        try {
756
            featureCacheProviderFactory =
757
                (FeatureCacheProviderFactory) ToolsLocator
758
                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
759
                    .create(name);
760
            if (featureCacheProviderFactory == null) {
761
                throw new ProviderNotRegisteredException(name);
762
            }
763
            return featureCacheProviderFactory.createParameters();
764
        } catch (InstantiationException e) {
765
            throw new InitializeException(e);
766
        } catch (IllegalAccessException e) {
767
            throw new InitializeException(e);
768
        }
769
    }
770

    
771

    
772

    
773
}