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

History | View | Annotate | Download (31.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

    
12
import org.gvsig.fmap.dal.DataFactory;
13
import org.gvsig.fmap.dal.DataManager;
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.ExpressionEvaluator;
25
import org.gvsig.fmap.dal.NewDataStoreParameters;
26
import org.gvsig.fmap.dal.OpenErrorHandler;
27
import org.gvsig.fmap.dal.Register;
28
import org.gvsig.fmap.dal.exception.DataException;
29
import org.gvsig.fmap.dal.exception.InitializeException;
30
import org.gvsig.fmap.dal.exception.OpenException;
31
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
32
import org.gvsig.fmap.dal.exception.CreateFileStoreException;
33
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
34
import org.gvsig.fmap.dal.feature.EditableFeatureType;
35
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
36
import org.gvsig.fmap.dal.feature.FeatureQuery;
37
import org.gvsig.fmap.dal.feature.FeatureStore;
38
import org.gvsig.fmap.dal.feature.FeatureType;
39
import org.gvsig.fmap.dal.feature.impl.DefaultEditableFeatureType;
40
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureIndex;
41
import org.gvsig.fmap.dal.feature.impl.FeatureStoreFactory;
42
import org.gvsig.fmap.dal.feature.paging.FeaturePagingHelper;
43
import org.gvsig.fmap.dal.feature.paging.impl.FeaturePagingHelperImpl;
44
import org.gvsig.fmap.dal.feature.spi.ExpressionBuilderBase;
45
import org.gvsig.fmap.dal.feature.spi.ExpressionEvaluatorBase;
46
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
47
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
48
import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProvider;
49
import org.gvsig.fmap.dal.feature.spi.cache.FeatureCacheProviderFactory;
50
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
51
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
52
import org.gvsig.fmap.dal.raster.NewRasterStoreParameters;
53
import org.gvsig.fmap.dal.raster.impl.RasterStoreFactory;
54
import org.gvsig.fmap.dal.raster.impl.RasterStoreOldFactory;
55
import org.gvsig.fmap.dal.raster.spi.CoverageStoreProvider;
56
import org.gvsig.fmap.dal.spi.DALSPILocator;
57
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
58
import org.gvsig.fmap.dal.spi.DataStoreProvider;
59
import org.gvsig.fmap.dal.spi.DataStoreProviderServices;
60
import org.gvsig.fmap.dal.store.memory.MemoryStoreParameters;
61
import org.gvsig.fmap.dal.store.memory.MemoryStoreProvider;
62
import org.gvsig.tools.ToolsLocator;
63
import org.gvsig.tools.dataTypes.DataType;
64
import org.gvsig.tools.dataTypes.DataTypesManager;
65
import org.gvsig.tools.dynobject.DynObject;
66
import org.gvsig.tools.dynobject.DynStruct;
67
import org.gvsig.tools.dynobject.DynStruct_v2;
68
import org.gvsig.tools.dynobject.Tags;
69
import org.gvsig.tools.evaluator.Evaluator;
70
import org.gvsig.tools.exception.BaseException;
71
import org.gvsig.tools.extensionpoint.ExtensionPoint;
72
import org.gvsig.tools.identitymanagement.SimpleIdentityManager;
73
import org.gvsig.tools.identitymanagement.UnauthorizedException;
74
import org.gvsig.tools.service.spi.Services;
75

    
76
public class DefaultDataManager
77
        implements DataManager, DataManagerProviderServices, Services {
78

    
79
    final static private String DATA_MANAGER_CACHE = "Data.manager.caches";
80
    final static private String DATA_MANAGER_CACHE_DESCRIPTION =
81
        "DAL cache providers";
82

    
83
    public static final String FILESYSTEM_EXPLORER_NAME = "FilesystemExplorer";
84

    
85

    
86
    private class Registers {
87

    
88
        private final Register store;
89
        private final Register storeProvider;
90
        private final Register serverExplorer;
91
        private final Register featureIndexProvider;
92

    
93
        public Registers() {
94
            this.store = new RegisterImpl(
95
                    "Data.manager.stores.factory",
96
                    "DAL store factories"
97
            );
98
            this.storeProvider = new RegisterImpl(
99
                    "Data.manager.providers.factory",
100
                    "DAL store provider factories"
101
            );
102
            this.serverExplorer = new RegisterImpl(
103
                    "Data.manager.servereexplorer.factory",
104
                    "DAL server explorer factories"
105
            );
106
            this.featureIndexProvider = new RegisterImpl(
107
                    "Data.manager.feature.index.factory",
108
                    "DAL feature index factories"
109
            );
110

    
111
            this.store.register(new FeatureStoreFactory());
112
        }
113
    }
114
    private static final String TAG_DAL_OPENSTORE = "dal.openstore.";
115

    
116
    private final Registers registers;
117

    
118
    private final Map<Integer, String> defaultDataIndexProviders;
119

    
120
    private Class defaultEvaluatorClass = null;
121

    
122
    private OpenErrorHandler openErrorHandler = null;
123

    
124
    private DataServerExplorerPool dataServerExplorerPool = null;
125

    
126
    private List<DataType> dataTypes = null;
127

    
128
    private ClassLoader resourcesLoader = null;
129

    
130
    public DefaultDataManager() {
131
        this.registers = new Registers();
132
        this.defaultDataIndexProviders = new HashMap<>();
133
    }
134

    
135
    @Override
136
    public Register getStoreRegister() {
137
        return this.registers.store;
138
    }
139

    
140
    @Override
141
    public Register getStoreProviderRegister() {
142
        return this.registers.storeProvider;
143
    }
144

    
145
    @Override
146
    public Register getServerExplorerRegister() {
147
        return this.registers.serverExplorer;
148
    }
149

    
150
    @Override
151
    public Register getFeatureIndexRegister() {
152
        return this.registers.featureIndexProvider;
153
    }
154

    
155
    private String getStoreName(DataStoreParameters parameters) {
156
        for (DataFactory factory : this.getStoreRegister()) {
157
            DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) factory;
158
            if (storeFactory.canUse(parameters)) {
159
                return storeFactory.getName();
160
            }
161
        }
162
        return null;
163
    }
164

    
165
    /**
166
     * @deprecated
167
     */
168
    @Override
169
    public void registerDefaultRasterStore(Class rasterStoreClass) {
170
        // Metodo usado por el raster nuevo para regstrar su factoria de store
171
        this.getStoreRegister().register(new RasterStoreFactory(rasterStoreClass));
172
    }
173

    
174
    /**
175
     * @deprecated
176
     */
177
    @Override
178
    public void registerStoreFactory(String name, Class storeFactoryClass) {
179
        // Metodo usado por el raster viejo para registrar las factorias de sus stores
180
        this.getStoreRegister().register(new RasterStoreOldFactory(name, storeFactoryClass));
181
    }
182

    
183
    /**
184
     * @param name
185
     * @param storeProviderClass
186
     * @param parametersClass
187
     * @deprecated use registerStoreProviderFactory
188
     */
189
    @Override
190
    public void registerStoreProvider(String name, Class storeProviderClass,
191
            Class parametersClass) {
192
        if (name == null || storeProviderClass == null || parametersClass == null) {
193
            throw new IllegalArgumentException("Any parameters can be null");
194
        }
195

    
196
        if (!DataStoreParameters.class.isAssignableFrom(parametersClass)) {
197
            throw new IllegalArgumentException(parametersClass.getName()
198
                    + " must implement org.gvsig.fmap.dal.DataStoreParameters");
199
        }
200

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

    
208
        if (FeatureStoreProvider.class.isAssignableFrom(storeProviderClass)) {
209
            // Envuelve al proveedor en una factoria por defecto.
210
            this.registerStoreProviderFactory(new DataStoreProviderToFeatureStoreProviderFactoryWrapper(
211
                    name, "", storeProviderClass, parametersClass));
212
            return;
213
        }
214

    
215
        throw new IllegalArgumentException("Not supported implemtation: name="
216
                + name + " provider class=" + storeProviderClass.getName());
217

    
218
    }
219

    
220
    @Override
221
    public void registerExplorerProvider(String name, Class explorerClass, Class parametersClass) {
222
        if (name == null || explorerClass == null || parametersClass == null) {
223
            // FIXME Exception
224
            throw new IllegalArgumentException("Any parameters can be null");
225
        }
226

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

    
235
        if (!DataServerExplorer.class.isAssignableFrom(explorerClass)) {
236
            // FIXME Exception
237
            throw new IllegalArgumentException(explorerClass.getName()
238
                    + " must implement org.gvsig.fmap.dal.DataServerExplorer");
239
        }
240

    
241
        // Envuelve al proveedor en una factoria por defecto.
242
        this.registerServerExplorerFactory(
243
                new DataServerExplorerToDataExplorerFactoryWrapper(
244
                        name, "", explorerClass, parametersClass
245
                )
246
        );
247

    
248
    }
249

    
250
    @Override
251
    public void registerStoreFactory(DataStoreFactory_v2_4 factory) {
252
        this.getStoreRegister().register(factory);
253
    }
254

    
255
    @Override
256
    public void registerStoreProviderFactory(DataStoreProviderFactory factory) {
257
        this.getStoreProviderRegister().register(factory);
258
    }
259

    
260
    @Override
261
    public void registerServerExplorerFactory(DataServerExplorerFactory factory) {
262
        this.getServerExplorerRegister().register(factory);
263
    }
264

    
265
    @Override
266
    public DataStoreParameters createStoreParameters(String providerName) throws InitializeException, ProviderNotRegisteredException {
267
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
268
        return (DataStoreParameters) providerFactory.createParameters();
269
    }
270

    
271
    @Override
272
    public NewDataStoreParameters createNewStoreParameters(String explorerName, String providerName) throws InitializeException, ProviderNotRegisteredException {
273
        try {
274
            DataServerExplorer explorer = this.openServerExplorer(explorerName, (DataServerExplorerParameters)null);
275
            return explorer.getAddParameters(providerName);
276
        } catch (Exception ex) {
277
            throw new InitializeException(ex);
278
        }
279
    }
280

    
281
    @Override
282
    public DataServerExplorerParameters createServerExplorerParameters(String explorerName) throws InitializeException, ProviderNotRegisteredException {
283
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
284
        DataServerExplorerParameters params = (DataServerExplorerParameters) explorerFactory.createParameters();
285
        return params;
286
    }
287

    
288
    @Override
289
    public DataStoreParameters createMemoryStoreParameters(String autoOrderAttributeName) throws InitializeException {
290
        try {
291
            DataStoreParameters parameters = createStoreParameters(MemoryStoreProvider.NAME);
292
            if (autoOrderAttributeName != null) {
293
                parameters.setDynValue(
294
                        MemoryStoreParameters.ORDER_PARAMETER_NAME,
295
                        autoOrderAttributeName);
296
            }
297
            return parameters;
298
        } catch (Exception ex) {
299
            throw new InitializeException(ex);
300
        }
301
    }
302

    
303
    @Override
304
    public DataServerExplorer openServerExplorer(String explorerName, DataServerExplorerParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
305
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
306
        if (parameters == null) {
307
            parameters = (DataServerExplorerParameters) explorerFactory.createParameters();
308
        }
309
        DataServerExplorer explorer = (DataServerExplorer) explorerFactory.create(
310
                parameters,
311
                new DefaultDataServerExplorerProviderServices()
312
        );
313
        return explorer;
314
    }
315

    
316
    @Override
317
    public DataServerExplorer openServerExplorer(String explorerName, Object... arguments) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
318
        if( (arguments.length % 2)!= 0 ) {
319
            throw new ValidateDataParametersException();
320
        }
321
        DataFactory explorerFactory = this.getServerExplorerRegister().getFactory(explorerName);
322
        DataServerExplorerParameters parameters = (DataServerExplorerParameters) explorerFactory.createParameters();
323
        for( int i=0; i<arguments.length; i+=2 ) {
324
            String name = (String) arguments[i];
325
            Object value = arguments[i+1];
326
            parameters.setDynValue(name, value);
327
        }
328
        return this.openServerExplorer(explorerName, parameters);
329

    
330
    }
331

    
332
    /**
333
     * @param parameters
334
     * @return
335
     * @throws org.gvsig.fmap.dal.exception.InitializeException
336
     * @throws org.gvsig.fmap.dal.exception.ProviderNotRegisteredException
337
     * @throws org.gvsig.fmap.dal.exception.ValidateDataParametersException
338
     * @deprecated see openServerExplorer
339
     */
340
    @Override
341
    public DataServerExplorer createServerExplorer(
342
            DataServerExplorerParameters parameters) throws InitializeException,
343
            ProviderNotRegisteredException, ValidateDataParametersException {
344
        return openServerExplorer(parameters.getExplorerName(), parameters);
345
    }
346

    
347
    /**
348
     * @deprecated use openStore
349
     * @param parameters
350
     * @return
351
     * @throws InitializeException
352
     * @throws ProviderNotRegisteredException
353
     * @throws ValidateDataParametersException
354
     */
355
    @Override
356
    public DataStore createStore(DataStoreParameters parameters)
357
        throws InitializeException, ProviderNotRegisteredException,
358
        ValidateDataParametersException {
359
        return openStore(parameters.getDataStoreName(), parameters);
360
    }
361

    
362
    @Override
363
    public DataStore openStore(String providerName, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
364

    
365
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
366
        if (!identityManager.getCurrentIdentity().isAuthorized(READ_STORE_AUTHORIZATION, parameters, providerName)) {
367
            throw new UnauthorizedException(READ_STORE_AUTHORIZATION, parameters, providerName);
368
        }
369

    
370
        parameters.validate();
371

    
372
        String storeName = this.getStoreName(parameters);
373

    
374
        DataStoreFactory_v2_4 storeFactory = (DataStoreFactory_v2_4) this.getStoreRegister().getFactory(storeName);
375
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
376

    
377
        DataStore store = (DataStore) storeFactory.create(parameters, this);
378
        DataStoreProvider provider = (DataStoreProvider) providerFactory.create(parameters, store);
379

    
380
        storeFactory.setProvider(store, provider);
381
        return store;
382
    }
383

    
384
    @Override
385
    public DataStore openStore(String provider, DynObject parameters) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
386
        DataStoreParameters params = toDataStoreParameters(provider, parameters);
387
        DataStore store = openStore(params.getDataStoreName(), params);
388
        return store;
389
    }
390

    
391
    @Override
392
    public DataStore openStore(String providerName, Object... arguments) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
393
        if( (arguments.length % 2)!= 0 ) {
394
            throw new ValidateDataParametersException();
395
        }
396
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
397
        DataStoreParameters parameters = (DataStoreParameters) providerFactory.createParameters();
398
        for( int i=0; i<arguments.length; i+=2 ) {
399
            String name = (String) arguments[i];
400
            Object value = arguments[i+1];
401
            parameters.setDynValue(name, value);
402
        }
403
        return this.openStore(providerName, parameters);
404
    }
405

    
406
    @Override
407
    public FeatureStore createMemoryStore(String autoOrderAttributeName) throws InitializeException {
408
        try {
409
            DataStoreParameters parameters = createMemoryStoreParameters(autoOrderAttributeName);
410
            DataStore store = openStore(MemoryStoreProvider.NAME, parameters);
411
            return (FeatureStore) store;
412
        } catch (Exception ex) {
413
            throw new InitializeException(ex);
414
        }
415
    }
416

    
417
    @Override
418
    public DataStoreProviderFactory getStoreProviderFactory(String providerName) {
419
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
420
        return (DataStoreProviderFactory) providerFactory;
421
    }
422

    
423
    @Override
424
    public List<String> getStoreProviders() {
425
        return this.getStoreProviderRegister().getFactoryNames();
426
    }
427

    
428
    @Override
429
    public List<String> getStoreProviders(String explorerName) {
430
        try {
431
            DataServerExplorer explorer = openServerExplorer(explorerName, (DataServerExplorerParameters)null);
432
            List names = explorer.getDataStoreProviderNames();
433
            return names;
434
        } catch (Exception ex) {
435
            throw new RuntimeException("Can't get stores availables for explorer '" + explorerName + "'.", ex);
436
        }
437
    }
438

    
439
    @Override
440
    public List<String> getExplorerProviders() {
441
        List<String> names = this.getServerExplorerRegister().getFactoryNames();
442
        return names;
443
    }
444

    
445
    @Override
446
    public DataStoreProvider createProvider(DataStoreProviderServices providerServices, DataStoreParameters parameters) throws InitializeException, ProviderNotRegisteredException {
447

    
448
        String providerName = parameters.getDataStoreName();
449
        DataFactory providerFactory = this.getStoreProviderRegister().getFactory(providerName);
450
        if (providerFactory == null) {
451
            throw new ProviderNotRegisteredException(providerName);
452
        }
453
        while (true) {
454
            try {
455
                DataStoreProvider provider = (DataStoreProvider) providerFactory.create(
456
                        parameters, providerServices
457
                );
458
                return provider;
459
            } catch (Exception e) {
460
                if (openErrorHandler == null) {
461
                    throw new InitializeException(providerName, e);
462
                }
463
                boolean retry = openErrorHandler.canRetryOpen(e, parameters);
464
                if (!retry) {
465
                    throw new InitializeException(providerName, e);
466
                }
467
            }
468
        }
469
    }
470

    
471
    @Override
472
    public List<String> getFeatureIndexProviders() {
473
        List<String> names = this.getFeatureIndexRegister().getFactoryNames();
474
        return names;
475
    }
476

    
477
    @Override
478
    public void setDefaultFeatureIndexProviderName(int dataType, String name) {
479
        this.defaultDataIndexProviders.put(dataType, name);
480
    }
481

    
482
    @Override
483
    public String getDefaultFeatureIndexProviderName(int dataType) {
484
        return this.defaultDataIndexProviders.get(dataType);
485
    }
486

    
487
    @Override
488
    public FeatureIndexProviderServices createFeatureIndexProvider(
489
            String name,
490
            FeatureStore store,
491
            FeatureType type,
492
            String indexName,
493
            FeatureAttributeDescriptor attr
494
    ) throws InitializeException, ProviderNotRegisteredException {
495

    
496
        if (name == null) {
497
            name = getDefaultFeatureIndexProviderName(attr.getType());
498
        }
499

    
500
        if (name == null) {
501
            throw new InitializeException(
502
                    "There not any index provider registered.", null);
503
        }
504
        DataFactory indexfactory = this.getFeatureIndexRegister().getFactory(name);
505
        if (indexfactory == null) {
506
            throw new InitializeException(
507
                    "There not any index provider registered with name '" + name + "'.", null);
508

    
509
        }
510
        FeatureIndexProvider provider = (FeatureIndexProvider) indexfactory.create(null, null);
511

    
512
        FeatureIndexProviderServices services = new DefaultFeatureIndex(
513
                (FeatureStoreProviderServices) store,
514
                type,
515
                provider,
516
                attr.getName(),
517
                indexName
518
        );
519
        services.initialize();
520
        return services;
521

    
522
    }
523

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

    
546
    @Override
547
    public DataStoreParameters createStoreParameters(DynStruct struct) throws InitializeException, ProviderNotRegisteredException {
548
        if (!(struct instanceof DynStruct_v2)) {
549
            throw new IllegalArgumentException("A DynStruct_v2 is required.");
550
        }
551
        Tags tags = ((DynStruct_v2) struct).getTags();
552
        return this.createStoreParameters(tags);
553
    }
554

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

    
571
    @Override
572
    public DataStore openStore(DynStruct struct) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
573
        DataStoreParameters paramters = this.createStoreParameters(struct);
574
        DataStore store = this.openStore(paramters.getDataStoreName(), paramters);
575
        return store;
576
    }
577

    
578
    @Override
579
    public void newStore(String explorerName, String providerName, NewDataStoreParameters parameters, boolean overwrite) throws InitializeException, ProviderNotRegisteredException, ValidateDataParametersException {
580

    
581
        SimpleIdentityManager identityManager = ToolsLocator.getIdentityManager();
582
        if (!identityManager.getCurrentIdentity().isAuthorized(CREATE_STORE_AUTHORIZATION, parameters, providerName)) {
583
            throw new UnauthorizedException(CREATE_STORE_AUTHORIZATION, parameters, providerName);
584
        }
585
        parameters.validate();
586
        try {
587
            DataServerExplorerParameters explorerParameters = this.createServerExplorerParameters(explorerName);
588
            DataServerExplorer server = this.openServerExplorer(explorerName, explorerParameters);
589
            server.add(providerName, parameters, overwrite);
590
        } catch (Exception e) {
591
            throw new InitializeException(e);
592
        }
593
    }
594

    
595
    @Override
596
    public void registerDefaultEvaluator(Class evaluatorClass) {
597
        if (!Evaluator.class.isAssignableFrom(evaluatorClass)) {
598
            throw new ClassCastException();
599
        }
600
        this.defaultEvaluatorClass = evaluatorClass;
601
    }
602

    
603
    @Override
604
    public Evaluator createExpresion(String expression) throws InitializeException {
605
        try {
606
            Evaluator eval = (Evaluator) this.defaultEvaluatorClass.
607
                    getConstructor(String.class).newInstance(expression);
608
            return eval;
609
        } catch (Exception ex) {
610
            throw new InitializeException(ex);
611
        }
612
    }
613

    
614
    @Override
615
    public  ExpressionEvaluator createExpresion() {
616
        return new ExpressionEvaluatorBase();
617
    }
618

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

    
625
    @Override
626
    public FeaturePagingHelper createFeaturePagingHelper(
627
            FeatureStore featureStore, FeatureQuery featureQuery, int pageSize)
628
            throws BaseException {
629
        return new FeaturePagingHelperImpl(featureStore, featureQuery, pageSize);
630
    }
631

    
632
    @Override
633
    public void setOpenErrorHandler(OpenErrorHandler handler) {
634
        openErrorHandler = handler;
635
    }
636

    
637
    @Override
638
    public OpenErrorHandler getOpenErrorHandler() {
639
        return this.openErrorHandler;
640
    }
641

    
642
    @Override
643
    public EditableFeatureType createFeatureType() {
644
        return new DefaultEditableFeatureType();
645
    }
646

    
647
    @Override
648
    public DataServerExplorerPool getDataServerExplorerPool() {
649
        if (this.dataServerExplorerPool == null) {
650
            this.dataServerExplorerPool = new DefaultDataServerExplorerPool();
651
        }
652
        return this.dataServerExplorerPool;
653
    }
654

    
655
    @Override
656
    public void setDataServerExplorerPool(DataServerExplorerPool pool) {
657
        this.dataServerExplorerPool = pool;
658
    }
659

    
660
    public DataStoreParameters toDataStoreParameters(String provider, DynObject params) throws InitializeException, ProviderNotRegisteredException {
661
        if (params instanceof DataStoreParameters) {
662
            return (DataStoreParameters) params;
663
        }
664
        String providerName;
665
        try {
666
            providerName = (String) params.getDynValue(DataStoreProviderServices.PROVIDER_PARAMTER_NAME);
667
        } catch (Exception ex) {
668
            providerName = provider;
669
        }
670
        DataStoreParameters parameters = this.createStoreParameters(providerName);
671
        ToolsLocator.getDynObjectManager().copy(params, parameters);
672
        return parameters;
673
    }
674

    
675
    @Override
676
    public List<DataType> getDataTypes() {
677
        if (dataTypes == null) {
678
            DataTypesManager manager = ToolsLocator.getDataTypesManager();
679
            dataTypes = new ArrayList<>();
680
            dataTypes.add(manager.get(DataTypes.STRING));
681
            dataTypes.add(manager.get(DataTypes.BOOLEAN));
682
            dataTypes.add(manager.get(DataTypes.INT));
683
            dataTypes.add(manager.get(DataTypes.DOUBLE));
684
            dataTypes.add(manager.get(DataTypes.DATE));
685
            dataTypes.add(manager.get(DataTypes.GEOMETRY));
686
        }
687
        return dataTypes;
688
    }
689

    
690
    @Override
691
    public void setResourcesLoader(ClassLoader loader) {
692
        this.resourcesLoader = loader;
693
    }
694

    
695
    @Override
696
    public void setResourcesLoader(File folder) {
697
        if (folder == null) {
698
            this.resourcesLoader = null;
699
            return;
700
        }
701
        try {
702
            URL[] urls = new URL[]{folder.toURI().toURL()};
703
            this.resourcesLoader = new URLClassLoader(urls);
704
        } catch (Exception ex) {
705
            throw new IllegalArgumentException("Can't create a ClassLoader from '" + folder.toString() + "'.", ex);
706
        }
707
    }
708

    
709
    @Override
710
    public URL getResource(Object reourceLoader, String name) {
711
        URL x;
712
        if (this.resourcesLoader != null) {
713
            x = this.resourcesLoader.getResource(name);
714
            if (x != null) {
715
                return x;
716
            }
717
        }
718
        x = reourceLoader.getClass().getResource(name);
719
        return x;
720
    }
721

    
722
    @Override
723
    public InputStream getResourceAsStream(Object reourceLoader, String name) {
724
        InputStream x;
725
        if (this.resourcesLoader != null) {
726
            x = this.resourcesLoader.getResourceAsStream(name);
727
            if (x != null) {
728
                return x;
729
            }
730
        }
731
        x = reourceLoader.getClass().getResourceAsStream(name);
732
        return x;
733
    }
734

    
735
    @Override
736
    public ExpressionBuilder createExpressionBuilder() {
737
        return new ExpressionBuilderBase();
738
    }
739

    
740
    public void registerFeatureCacheProvider(
741
        FeatureCacheProviderFactory providerFactory) {
742
        ToolsLocator.getExtensionPointManager()
743
            .add(DATA_MANAGER_CACHE, DATA_MANAGER_CACHE_DESCRIPTION)
744
            .append(providerFactory.getName(), "", providerFactory);
745
    }
746

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

    
775
    @Override
776
    public List getFeatureCacheProviders() {
777
        ExtensionPoint extensionPoint =
778
            ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_CACHE);
779
        if (extensionPoint != null) {
780
            return ToolsLocator.getExtensionPointManager()
781
                .get(DATA_MANAGER_CACHE).getNames();
782
        } else {
783
            return new ArrayList();
784
        }
785
    }
786

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

    
811
    @Override
812
    public void createFileStore(String providerName, NewRasterStoreParameters params, boolean overwrite) throws DataException {
813
        DataManagerProviderServices dataManager = DALSPILocator.getDataManagerProviderServices();
814
        DataServerExplorerParameters eparams = null;
815
        DataServerExplorer serverExplorer;
816
        try {
817
            serverExplorer = dataManager.openServerExplorer(FILESYSTEM_EXPLORER_NAME, eparams);
818
        } catch (ValidateDataParametersException | InitializeException | ProviderNotRegisteredException e) {
819
            throw new OpenException(FILESYSTEM_EXPLORER_NAME, e);
820
        }
821

    
822
        try {
823
            serverExplorer.add(providerName, params, overwrite);
824
        } catch (DataException e) {
825
            throw new CreateFileStoreException(e, providerName);
826
        }
827
    }
828

    
829

    
830
}