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

History | View | Annotate | Download (30.8 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, (DataServerExplorerParameters)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
    @Override
310
    public DataServerExplorer openServerExplorer(String explorerName, Object... arguments) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
311
        if( (arguments.length % 2)!= 0 ) {
312
            throw new ValidateDataParametersException();
313
        }
314
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
315
        DataServerExplorerParameters parameters = (DataServerExplorerParameters) explorerFactory.createParameters();
316
        for( int i=0; i<arguments.length; i+=2 ) {
317
            String name = (String) arguments[i];
318
            Object value = arguments[i+1];
319
            parameters.setDynValue(name, value);
320
        }
321
        return this.openServerExplorer(explorerName, parameters);
322
        
323
    }
324
    
325
    /**
326
     * @param parameters
327
     * @return
328
     * @throws org.gvsig.fmap.dal.exception.InitializeException
329
     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
330
     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
331
     * @deprecated see openServerExplorer
332
     */
333
    @Override
334
    public DataServerExplorer createServerExplorer(
335
            DataServerExplorerParameters parameters) throws InitializeException,
336
            ProviderNotRegisteredException, ValidateDataParametersException {
337
        return openServerExplorer(parameters.getExplorerName(), parameters);
338
    }
339

    
340
    /**
341
     * @deprecated use openStore
342
     * @param parameters
343
     * @return
344
     * @throws InitializeException
345
     * @throws ProviderNotRegisteredException
346
     * @throws ValidateDataParametersException 
347
     */
348
    @Override
349
    public DataStore createStore(DataStoreParameters parameters)
350
        throws InitializeException, ProviderNotRegisteredException,
351
        ValidateDataParametersException {
352
        return openStore(parameters.getDataStoreName(), parameters);
353
    }
354
    
355
    @Override
356
    public DataStore openStore(String providerName, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
357

    
358
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
359
        if (!identityManager.getCurrentIdentity().isAuthorized(READ_STORE_AUTHORIZATION, parameters, providerName)) {
360
            throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, providerName);
361
        }
362

    
363
        parameters.validate();
364
        
365
        String storeName = this.getStoreName(parameters);
366

    
367
        DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) this.getStoreRegister().getFactory(storeName);
368
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
369

    
370
        DataStore store = (DataStore) storeFactory.create(parameters, this);
371
        DataStoreProvider provider = (DataStoreProvider) providerFactory.create(parameters, store);
372

    
373
        storeFactory.setProvider(store, provider);
374
        return store;
375
    }
376

    
377
    @Override
378
    public DataStore openStore(String provider, DynObject parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
379
        DataStoreParameters params = toDataStoreParameters(provider, parameters);
380
        DataStore store = openStore(params.getDataStoreName(), params);
381
        return store;
382
    }
383

    
384
    @Override
385
    public DataStore openStore(String providerName, Object... arguments) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
386
        if( (arguments.length % 2)!= 0 ) {
387
            throw new ValidateDataParametersException();
388
        }
389
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
390
        DataStoreParameters parameters = (DataStoreParameters) providerFactory.createParameters();
391
        for( int i=0; i<arguments.length; i+=2 ) {
392
            String name = (String) arguments[i];
393
            Object value = arguments[i+1];
394
            parameters.setDynValue(name, value);
395
        }
396
        return this.openStore(providerName, parameters);
397
    }
398
    
399
    @Override
400
    public FeatureStore createMemoryStore(String autoOrderAttributeName) throws InitializeException {
401
        try {
402
            DataStoreParameters parameters = createMemoryStoreParameters(autoOrderAttributeName);
403
            DataStore store = openStore(MemoryStoreProvider.NAME, parameters);
404
            return (FeatureStore) store;
405
        } catch (Exception ex) {
406
            throw new InitializeException(ex);
407
        }
408
    }
409

    
410
    @Override
411
    public DataStoreProviderFactory getStoreProviderFactory(String providerName) {
412
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
413
        return (DataStoreProviderFactory) providerFactory;
414
    }
415

    
416
    @Override
417
    public List<String> getStoreProviders() {
418
        return this.getStoreProviderRegister().getFactoryNames();
419
    }
420

    
421
    @Override
422
    public List<String> getStoreProviders(String explorerName) {
423
        try {
424
            DataServerExplorer explorer = openServerExplorer(explorerName, (DataServerExplorerParameters)null);
425
            List names = explorer.getDataStoreProviderNames();
426
            return names;
427
        } catch (Exception ex) {
428
            throw new RuntimeException("Can't get stores availables for explorer '" + explorerName + "'.", ex);
429
        }
430
    }
431

    
432
    @Override
433
    public List<String> getExplorerProviders() {
434
        List<String> names = this.getServerExplorerRegister().getFactoryNames();
435
        return names;
436
    }
437

    
438
    @Override
439
    public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException {
440

    
441
        String providerName = parameters.getDataStoreName();
442
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
443
        if (providerFactory == null) {
444
            throw new ProviderNotRegisteredException(providerName);
445
        }
446
        while (true) {
447
            try {
448
                DataStoreProvider provider = (DataStoreProvider) providerFactory.create(
449
                        parameters, providerServices
450
                );
451
                return provider;
452
            } catch (Exception e) {
453
                if (openErrorHandler == null) {
454
                    throw new InitializeException(providerName, e);
455
                }
456
                boolean retry = openErrorHandler.canRetryOpen(e, parameters);
457
                if (!retry) {
458
                    throw new InitializeException(providerName, e);
459
                }
460
            }
461
        }
462
    }
463

    
464
    @Override
465
    public List<String> getFeatureIndexProviders() {
466
        List<String> names = this.getFeatureIndexRegister().getFactoryNames();
467
        return names;
468
    }
469

    
470
    @Override
471
    public void setDefaultFeatureIndexProviderName(int dataType, String name) {
472
        this.defaultDataIndexProviders.put(dataType, name);
473
    }
474

    
475
    @Override
476
    public String getDefaultFeatureIndexProviderName(int dataType) {
477
        return this.defaultDataIndexProviders.get(dataType);
478
    }
479

    
480
    @Override
481
    public FeatureIndexProviderServices createFeatureIndexProvider(
482
            String name,
483
            FeatureStore store,
484
            FeatureType type,
485
            String indexName,
486
            FeatureAttributeDescriptor attr
487
    ) throws InitializeException, ProviderNotRegisteredException {
488

    
489
        if (name == null) {
490
            name = getDefaultFeatureIndexProviderName(attr.getType());
491
        }
492

    
493
        if (name == null) {
494
            throw new InitializeException(
495
                    "There not any index provider registered.", null);
496
        }
497
        DataFactory indexfactory = this.getFeatureIndexRegister().getFactory(name);
498
        if (indexfactory == null) {
499
            throw new InitializeException(
500
                    "There not any index provider registered with name '" + name + "'.", null);
501

    
502
        }
503
        FeatureIndexProvider provider = (FeatureIndexProvider) indexfactory.create(null, null);
504

    
505
        FeatureIndexProviderServices services = new DefaultFeatureIndex(
506
                (FeatureStoreProviderServices) store,
507
                type,
508
                provider,
509
                attr.getName(),
510
                indexName
511
        );
512
        services.initialize();
513
        return services;
514

    
515
    }
516

    
517
    @Override
518
    public String getTemporaryDirectory() {
519
        // FIXME Define a better tempdir solution
520
        String tmp = System.getProperty("TMP");
521
        if (tmp == null) {
522
            tmp = System.getProperty("TEMP");
523
        }
524
        if (tmp == null) {
525
            File tmp_file = new File(System.getProperty("HOME"), "_daltmp_");
526
            int i = 1;
527
            while (!tmp_file.exists() || !tmp_file.isDirectory()) {
528
                tmp_file = new File(tmp_file.getAbsolutePath() + i);
529
                i++;
530
            }
531
            if (!tmp_file.exists()) {
532
                tmp_file.mkdir();
533
            }
534
            tmp = tmp_file.getAbsolutePath();
535
        }
536
        return tmp;
537
    }
538

    
539
    @Override
540
    public DataStoreParameters createStoreParameters(DynStruct struct) throws InitializeException, ProviderNotRegisteredException {
541
        if (!(struct instanceof DynStruct_v2)) {
542
            throw new IllegalArgumentException("A DynStruct_v2 is required.");
543
        }
544
        Tags tags = ((DynStruct_v2) struct).getTags();
545
        return this.createStoreParameters(tags);
546
    }
547

    
548
    @Override
549
    public DataStoreParameters createStoreParameters(Tags tags) throws InitializeException, ProviderNotRegisteredException {
550
        String providerName = (String) tags.get(TAG_DAL_OPENSTORE + "provider");
551
        if (providerName == null) {
552
            throw new IllegalArgumentException("Tag DAL.OpenStore.provider is missing in struct.");
553
        }
554
        int prefixlen = TAG_DAL_OPENSTORE.length();
555
        DataStoreParameters parameters = this.createStoreParameters(providerName);
556
        for (String key : tags) {
557
            if (key.startsWith(TAG_DAL_OPENSTORE)) {
558
                parameters.setDynValue(key.substring(prefixlen), tags.get(key));
559
            }
560
        }
561
        return parameters;
562
    }
563

    
564
    @Override
565
    public DataStore openStore(DynStruct struct) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
566
        DataStoreParameters paramters = this.createStoreParameters(struct);
567
        DataStore store = this.openStore(paramters.getDataStoreName(), paramters);
568
        return store;
569
    }
570

    
571
    @Override
572
    public void newStore(String explorerName, String providerName, NewDataStoreParameters parameters, boolean overwrite) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
573

    
574
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
575
        if (!identityManager.getCurrentIdentity().isAuthorized(CREATE_STORE_AUTHORIZATION, parameters, providerName)) {
576
            throw new UnauthorizedException(CREATE_STORE_AUTHORIZATION, parameters, providerName);
577
        }
578
        parameters.validate();
579
        try {
580
            DataServerExplorerParameters explorerParameters = this.createServerExplorerParameters(explorerName);
581
            DataServerExplorer server = this.openServerExplorer(explorerName, explorerParameters);
582
            server.add(providerName, parameters, overwrite);
583
        } catch (Exception e) {
584
            throw new InitializeException(e);
585
        }
586
    }
587

    
588
    @Override
589
    public void registerDefaultEvaluator(Class evaluatorClass) {
590
        if (!Evaluator.class.isAssignableFrom(evaluatorClass)) {
591
            throw new ClassCastException();
592
        }
593
        this.defaultEvaluatorClass = evaluatorClass;
594
    }
595

    
596
    @Override
597
    public Evaluator createExpresion(String expression) throws InitializeException {
598
        try {
599
            Evaluator eval = (Evaluator) this.defaultEvaluatorClass.
600
                    getConstructor(String.class).newInstance(expression);
601
            return eval;
602
        } catch (Exception ex) {
603
            throw new InitializeException(ex);
604
        }
605
    }
606

    
607
    @Override
608
    public  ExpressionEvaluator createExpresion() {
609
        return new ExpressionEvaluatorBase();
610
    }
611
    
612
    @Override
613
    public FeaturePagingHelper createFeaturePagingHelper(
614
            FeatureStore featureStore, int pageSize) throws BaseException {
615
        return new FeaturePagingHelperImpl(featureStore, pageSize);
616
    }
617

    
618
    @Override
619
    public FeaturePagingHelper createFeaturePagingHelper(
620
            FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
621
            throws BaseException {
622
        return new FeaturePagingHelperImpl(featureStore, featureQuery, pageSize);
623
    }
624

    
625
    @Override
626
    public void setOpenErrorHandler(OpenErrorHandler handler) {
627
        openErrorHandler = handler;
628
    }
629

    
630
    @Override
631
    public OpenErrorHandler getOpenErrorHandler() {
632
        return this.openErrorHandler;
633
    }
634

    
635
    @Override
636
    public EditableFeatureType createFeatureType() {
637
        return new DefaultEditableFeatureType();
638
    }
639

    
640
    @Override
641
    public DataServerExplorerPool getDataServerExplorerPool() {
642
        if (this.dataServerExplorerPool == null) {
643
            this.dataServerExplorerPool = new DefaultDataServerExplorerPool();
644
        }
645
        return this.dataServerExplorerPool;
646
    }
647

    
648
    @Override
649
    public void setDataServerExplorerPool(DataServerExplorerPool pool) {
650
        this.dataServerExplorerPool = pool;
651
    }
652

    
653
    public DataStoreParameters toDataStoreParameters(String provider, DynObject params) throws InitializeException, ProviderNotRegisteredException {
654
        if (params instanceof DataStoreParameters) {
655
            return (DataStoreParameters) params;
656
        }
657
        String providerName;
658
        try {
659
            providerName = (String) params.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
660
        } catch (Exception ex) {
661
            providerName = provider;
662
        }
663
        DataStoreParameters parameters = this.createStoreParameters(providerName);
664
        ToolsLocator.getDynObjectManager().copy(params, parameters);
665
        return parameters;
666
    }
667

    
668
    @Override
669
    public List<DataType> getDataTypes() {
670
        if (dataTypes == null) {
671
            DataTypesManager manager = ToolsLocator.getDataTypesManager();
672
            dataTypes = new ArrayList<>();
673
            dataTypes.add(manager.get(DataTypes.STRING));
674
            dataTypes.add(manager.get(DataTypes.BOOLEAN));
675
            dataTypes.add(manager.get(DataTypes.INT));
676
            dataTypes.add(manager.get(DataTypes.DOUBLE));
677
            dataTypes.add(manager.get(DataTypes.DATE));
678
            dataTypes.add(manager.get(DataTypes.GEOMETRY));
679
        }
680
        return dataTypes;
681
    }
682

    
683
    @Override
684
    public void setResourcesLoader(ClassLoader loader) {
685
        this.resourcesLoader = loader;
686
    }
687

    
688
    @Override
689
    public void setResourcesLoader(File folder) {
690
        if (folder == null) {
691
            this.resourcesLoader = null;
692
            return;
693
        }
694
        try {
695
            URL[] urls = new URL[]{folder.toURI().toURL()};
696
            this.resourcesLoader = new URLClassLoader(urls);
697
        } catch (Exception ex) {
698
            throw new IllegalArgumentException("Can't create a ClassLoader from '" + folder.toString() + "'.", ex);
699
        }
700
    }
701

    
702
    @Override
703
    public URL getResource(Object reourceLoader, String name) {
704
        URL x;
705
        if (this.resourcesLoader != null) {
706
            x = this.resourcesLoader.getResource(name);
707
            if (x != null) {
708
                return x;
709
            }
710
        }
711
        x = reourceLoader.getClass().getResource(name);
712
        return x;
713
    }
714

    
715
    @Override
716
    public InputStream getResourceAsStream(Object reourceLoader, String name) {
717
        InputStream x;
718
        if (this.resourcesLoader != null) {
719
            x = this.resourcesLoader.getResourceAsStream(name);
720
            if (x != null) {
721
                return x;
722
            }
723
        }
724
        x = reourceLoader.getClass().getResourceAsStream(name);
725
        return x;
726
    }
727
    
728
    @Override
729
    public ExpressionBuilder createExpressionBuilder() {
730
        return new ExpressionBuilderBase();
731
    }
732

    
733
    public void registerFeatureCacheProvider(
734
        FeatureCacheProviderFactory providerFactory) {
735
        ToolsLocator.getExtensionPointManager()
736
            .add(DATA_MANAGER_CACHE, DATA_MANAGER_CACHE_DESCRIPTION)
737
            .append(providerFactory.getName(), "", providerFactory);
738
    }
739

    
740
    public FeatureCacheProvider createFeatureCacheProvider(String name,
741
        DynObject parameters) throws DataException {
742
        if (name == null) {
743
            throw new InitializeException(
744
                "It is necessary to provide a cache name", null);
745
        }
746
        if (parameters == null) {
747
            throw new InitializeException(
748
                "It is necessary to provide parameters to create the explorer",
749
                null);
750
        }
751
        FeatureCacheProviderFactory featureCacheProviderFactory;
752
        try {
753
            featureCacheProviderFactory =
754
                (FeatureCacheProviderFactory) ToolsLocator
755
                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
756
                    .create(name);
757
            if (featureCacheProviderFactory == null) {
758
                throw new ProviderNotRegisteredException(name);
759
            }
760
            return featureCacheProviderFactory.createCacheProvider(parameters);
761
        } catch (InstantiationException e) {
762
            throw new InitializeException(e);
763
        } catch (IllegalAccessException e) {
764
            throw new InitializeException(e);
765
        }
766
    }
767

    
768
    @Override
769
    public List getFeatureCacheProviders() {
770
        ExtensionPoint extensionPoint =
771
            ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_CACHE);
772
        if (extensionPoint != null) {
773
            return ToolsLocator.getExtensionPointManager()
774
                .get(DATA_MANAGER_CACHE).getNames();
775
        } else {
776
            return new ArrayList();
777
        }
778
    }
779

    
780
    @Override
781
    public DynObject createCacheParameters(String name)
782
        throws InitializeException, ProviderNotRegisteredException {
783
        if (name == null) {
784
            throw new InitializeException(
785
                "It is necessary to provide a cache name", null);
786
        }
787
        FeatureCacheProviderFactory featureCacheProviderFactory;
788
        try {
789
            featureCacheProviderFactory =
790
                (FeatureCacheProviderFactory) ToolsLocator
791
                    .getExtensionPointManager().get(DATA_MANAGER_CACHE)
792
                    .create(name);
793
            if (featureCacheProviderFactory == null) {
794
                throw new ProviderNotRegisteredException(name);
795
            }
796
            return featureCacheProviderFactory.createParameters();
797
        } catch (InstantiationException e) {
798
            throw new InitializeException(e);
799
        } catch (IllegalAccessException e) {
800
            throw new InitializeException(e);
801
        }
802
    }
803

    
804

    
805

    
806
}