Statistics
| Revision:

root / branches / v2_0_0_prep / libraries / libFMap_dal / src / org / gvsig / fmap / dal / impl / DefaultDataManager.java @ 24496

History | View | Annotate | Download (12.2 KB)

1 24496 jmvivo
package org.gvsig.fmap.dal.impl;
2 19399 vcaballero
3 23754 jjdelcerro
import java.lang.reflect.InvocationTargetException;
4 23864 jiyarza
import java.util.HashMap;
5 21594 jmvivo
import java.util.List;
6 23864 jiyarza
import java.util.Map;
7 19399 vcaballero
8 24496 jmvivo
import org.gvsig.fmap.dal.DALLocator;
9
import org.gvsig.fmap.dal.DataExplorer;
10
import org.gvsig.fmap.dal.DataExplorerParameters;
11
import org.gvsig.fmap.dal.DataManager;
12
import org.gvsig.fmap.dal.DataStore;
13
import org.gvsig.fmap.dal.DataStoreParameters;
14
import org.gvsig.fmap.dal.exceptions.InitializeException;
15
import org.gvsig.fmap.dal.exceptions.ProviderNotRegisteredException;
16
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
17
import org.gvsig.fmap.dal.feature.FeatureStore;
18
import org.gvsig.fmap.dal.feature.FeatureType;
19
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureIndex;
20
import org.gvsig.fmap.dal.feature.impl.DefaultFeatureStore;
21
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProvider;
22
import org.gvsig.fmap.dal.feature.spi.FeatureStoreProviderServices;
23
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProvider;
24
import org.gvsig.fmap.dal.feature.spi.index.FeatureIndexProviderServices;
25
import org.gvsig.fmap.dal.resource.ResourceManager;
26
import org.gvsig.fmap.dal.spi.DataManagerProviderServices;
27
import org.gvsig.fmap.dal.spi.DataStoreProvider;
28 24111 jiyarza
import org.gvsig.tools.ToolsLocator;
29 23754 jjdelcerro
import org.gvsig.tools.evaluator.Evaluator;
30 24118 jiyarza
import org.gvsig.tools.operations.OperationManager;
31 19399 vcaballero
32 24111 jiyarza
public class DefaultDataManager implements DataManager, DataManagerProviderServices {
33 21594 jmvivo
34 24111 jiyarza
        final static private String DATA_MANAGER_STORE = "Data.manager.stores";
35
        final static private String DATA_MANAGER_STORE_DESCRIPTION = "DAL stores providers";
36 19399 vcaballero
37 24111 jiyarza
        final static private String DATA_MANAGER_STORE_PARAMS = "Data.manager.stores.params";
38
        final static private String DATA_MANAGER_STORE_PARAMS_DESCRIPTION = "DAL stores providers parameters";
39 23911 jmvivo
40 24111 jiyarza
        final static private String DATA_MANAGER_EXPLORER = "Data.manager.explorers";
41
        final static private String DATA_MANAGER_EXPLORER_DESCRIPTION = "DAL explorers providers";
42 19399 vcaballero
43 24111 jiyarza
        final static private String DATA_MANAGER_EXPLORER_PARAMS = "Data.manager.explorers.params";
44
        final static private String DATA_MANAGER_EXPLORER_PARAMS_DESCRIPTION = "DAL explorer providers parameters";
45 23864 jiyarza
46 24111 jiyarza
        final static private String DATA_MANAGER_INDEX = "Data.manager.indexes";
47
        final static private String DATA_MANAGER_INDEX_DESCRIPTION = "DAL index providers";
48 23864 jiyarza
49 24111 jiyarza
        final static private String DATA_MANAGER_EXPRESION_EVALUATOR = "Data.manager.expresion.evaluator";
50
        final static private String DATA_MANAGER_EXPRESION_EVALUATOR_DEFAULT = "default";
51
        final static private String DATA_MANAGER_EXPRESION_EVALUATOR_DESCRIPTION = "DAL expresion evaluators.";
52 24162 jjdelcerro
53 24111 jiyarza
        /** This map contains the name of the default provider for each data type */
54
        private Map defaultDataIndexProviders;
55 23911 jmvivo
56 19399 vcaballero
57 24111 jiyarza
        public DefaultDataManager() {
58
                /*
59
                 * Create te extensions point in te registry.
60
                 */
61
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_STORE,
62
                                DATA_MANAGER_STORE_DESCRIPTION);
63 19399 vcaballero
64 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_STORE_PARAMS,
65
                                DATA_MANAGER_STORE_PARAMS_DESCRIPTION);
66 21594 jmvivo
67 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_EXPLORER,
68
                                DATA_MANAGER_EXPLORER_DESCRIPTION);
69 19399 vcaballero
70 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(
71
                                DATA_MANAGER_EXPLORER_PARAMS,
72
                                DATA_MANAGER_EXPLORER_PARAMS_DESCRIPTION);
73 19399 vcaballero
74 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_INDEX,
75
                                DATA_MANAGER_INDEX_DESCRIPTION);
76 19399 vcaballero
77 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(
78
                                DATA_MANAGER_EXPRESION_EVALUATOR,
79
                                DATA_MANAGER_EXPRESION_EVALUATOR_DESCRIPTION);
80 24162 jjdelcerro
81 24111 jiyarza
                initializeIndexes();
82 19399 vcaballero
        }
83 23339 jmvivo
84 19399 vcaballero
        /**
85 23754 jjdelcerro
         *
86 24111 jiyarza
         * @return ResourceManager
87 23754 jjdelcerro
         */
88 23339 jmvivo
89 24111 jiyarza
        public ResourceManager getResourceManager() {
90
                return DALLocator.getResourceManager();
91 23339 jmvivo
        }
92
93 24118 jiyarza
        public OperationManager getOperationManager() {
94
                return ToolsLocator.getOperationManager();
95
        }
96
97 24111 jiyarza
        public String getTemporaryDirectory() {
98
                // FIXME Define a better tempdir solution
99
                String tmp = System.getenv("TMP");
100
                if (tmp == null) {
101
                        tmp = System.getenv("TEMP");
102 19399 vcaballero
                }
103 24111 jiyarza
                if (tmp == null) {
104
                        tmp = System.getenv("HOME");
105 21594 jmvivo
                }
106 24111 jiyarza
                return tmp;
107 19399 vcaballero
        }
108
109 24111 jiyarza
        /*
110
         * ====================================================================
111 19399 vcaballero
         *
112 24111 jiyarza
         * Store related services
113 19399 vcaballero
         */
114 24111 jiyarza
        public void registerStoreProvider(String name,
115
                        Class storeProviderClass,
116
                        Class parametersClass) {
117 19399 vcaballero
118 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_STORE,
119 24162 jjdelcerro
                                DATA_MANAGER_STORE_DESCRIPTION).append(name, null,
120 24111 jiyarza
                                storeProviderClass);
121 23339 jmvivo
122 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_STORE_PARAMS,
123 24162 jjdelcerro
                                DATA_MANAGER_STORE_PARAMS_DESCRIPTION).append(name, null,
124 24198 jmvivo
                                parametersClass);
125 19399 vcaballero
        }
126 23032 jmvivo
127 24111 jiyarza
        public DataStoreParameters createStoreParameters(String name)
128 23958 jiyarza
                        throws InitializeException, ProviderNotRegisteredException {
129 21594 jmvivo
                try {
130 24111 jiyarza
                        DataStoreParameters params = (DataStoreParameters) ToolsLocator
131
                                        .getExtensionPointManager().get(DATA_MANAGER_STORE_PARAMS)
132
                                        .create(name);
133
                        if (params == null) {
134
                                throw new ProviderNotRegisteredException(name);
135
                        }
136
                        return params;
137 21594 jmvivo
                } catch (InstantiationException e) {
138 24111 jiyarza
                        throw new InitializeException(e);
139 21594 jmvivo
                } catch (IllegalAccessException e) {
140 23774 jjdelcerro
                        throw new InitializeException(e);
141 24111 jiyarza
                } catch (SecurityException e) {
142
                        throw new InitializeException(e);
143
                } catch (IllegalArgumentException e) {
144
                        throw new InitializeException(e);
145 23032 jmvivo
                }
146
        }
147
148 24111 jiyarza
        public DataStore createStore(DataStoreParameters parameters)
149 23958 jiyarza
                        throws InitializeException, ProviderNotRegisteredException {
150 24111 jiyarza
                String name = parameters.getDataStoreName();
151
152 21594 jmvivo
                try {
153 24204 jmvivo
                        DataStoreProvider storeProvider = (DataStoreProvider) ToolsLocator
154 24111 jiyarza
                                        .getExtensionPointManager().get(DATA_MANAGER_STORE).create(
155
                                                        name, new Object[] { parameters });
156 24204 jmvivo
                        if (storeProvider == null) {
157 24111 jiyarza
                                throw new ProviderNotRegisteredException(name);
158
                        }
159 24204 jmvivo
160
                        return new DefaultFeatureStore(this, parameters,
161
                                        (FeatureStoreProvider) storeProvider);
162 21594 jmvivo
                } catch (InstantiationException e) {
163 24111 jiyarza
                        throw new InitializeException(e);
164 21594 jmvivo
                } catch (IllegalAccessException e) {
165 23774 jjdelcerro
                        throw new InitializeException(e);
166 24111 jiyarza
                } catch (SecurityException e) {
167
                        throw new InitializeException(e);
168
                } catch (IllegalArgumentException e) {
169
                        throw new InitializeException(e);
170
                } catch (NoSuchMethodException e) {
171
                        throw new InitializeException(e);
172
                } catch (InvocationTargetException e) {
173
                        throw new InitializeException(e);
174 23032 jmvivo
                }
175
        }
176
177 24111 jiyarza
        public List getStoreProviders() {
178
                return ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_STORE)
179
                                .getNames();
180 19399 vcaballero
        }
181 23339 jmvivo
182 24111 jiyarza
        /*
183
         * ====================================================================
184 23754 jjdelcerro
         *
185 24111 jiyarza
         * Explorer related services
186 23327 vacevedo
         */
187 24111 jiyarza
        public void registerExplorerProvider(String name, Class explorerClass,
188
                        Class parametersClass) {
189 21885 vcaballero
190 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_EXPLORER,
191 24162 jjdelcerro
                                DATA_MANAGER_EXPLORER_DESCRIPTION).append(name, null,
192
                                explorerClass);
193 19399 vcaballero
194 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(
195
                                DATA_MANAGER_EXPLORER_PARAMS,
196 24162 jjdelcerro
                                DATA_MANAGER_EXPLORER_PARAMS_DESCRIPTION).append(name, null,
197 24111 jiyarza
                                parametersClass);
198 19399 vcaballero
        }
199 23339 jmvivo
200 24111 jiyarza
        public DataExplorerParameters createExplorerParameters(String name)
201
                        throws InitializeException, ProviderNotRegisteredException {
202
                try {
203
                        DataExplorerParameters params = (DataExplorerParameters) ToolsLocator
204
                                        .getExtensionPointManager()
205
                                        .get(
206
                                                        DATA_MANAGER_EXPLORER_PARAMS)
207
                                        .create(name);
208
                        if (params == null) {
209
                                throw new ProviderNotRegisteredException(name);
210 23504 jmvivo
                        }
211 24111 jiyarza
                        return params;
212
                } catch (InstantiationException e) {
213
                        throw new InitializeException(e);
214
                } catch (IllegalAccessException e) {
215
                        throw new InitializeException(e);
216
                } catch (SecurityException e) {
217
                        throw new InitializeException(e);
218
                } catch (IllegalArgumentException e) {
219
                        throw new InitializeException(e);
220 23504 jmvivo
                }
221 21609 jmvivo
        }
222 23339 jmvivo
223 24111 jiyarza
        public DataExplorer createExplorer(DataExplorerParameters parameters)
224
                        throws InitializeException, ProviderNotRegisteredException {
225 21594 jmvivo
226 24111 jiyarza
                String name = parameters.getType().getName();
227 21885 vcaballero
228 24111 jiyarza
                try {
229
                        DataExplorer explorer = (DataExplorer) ToolsLocator
230
                                        .getExtensionPointManager().get(DATA_MANAGER_STORE).create(
231
                                                        name, new Object[] { parameters });
232
                        if (explorer == null) {
233
                                throw new ProviderNotRegisteredException(name);
234 19616 jmvivo
                        }
235 24111 jiyarza
                        return explorer;
236
                } catch (InstantiationException e) {
237
                        throw new InitializeException(e);
238
                } catch (IllegalAccessException e) {
239
                        throw new InitializeException(e);
240
                } catch (SecurityException e) {
241
                        throw new InitializeException(e);
242
                } catch (IllegalArgumentException e) {
243
                        throw new InitializeException(e);
244
                } catch (NoSuchMethodException e) {
245
                        throw new InitializeException(e);
246
                } catch (InvocationTargetException e) {
247
                        throw new InitializeException(e);
248 19616 jmvivo
                }
249 19399 vcaballero
        }
250 23339 jmvivo
251 24111 jiyarza
        public List getExplorerProviders() {
252
                return ToolsLocator.getExtensionPointManager().get(
253
                                DATA_MANAGER_EXPLORER).getNames();
254 21670 jmvivo
        }
255 23339 jmvivo
256 21670 jmvivo
257 24111 jiyarza
        /*
258
         * ====================================================================
259 23754 jjdelcerro
         *
260 24111 jiyarza
         * Expresion evaluation related services
261 23327 vacevedo
         */
262 24111 jiyarza
        public Evaluator createExpresion(String expresion)
263
                        throws InitializeException {
264 23754 jjdelcerro
                try {
265 24111 jiyarza
                        return (Evaluator) ToolsLocator.getExtensionPointManager().get(
266
                                        DATA_MANAGER_EXPRESION_EVALUATOR).create(
267
                                        DATA_MANAGER_EXPRESION_EVALUATOR_DEFAULT,
268
                                        new Object[] { expresion });
269
                } catch (SecurityException e) {
270
                        throw new InitializeException(e);
271
                } catch (IllegalArgumentException e) {
272
                        throw new InitializeException(e);
273
                } catch (NoSuchMethodException e) {
274
                        throw new InitializeException(e);
275 23754 jjdelcerro
                } catch (InstantiationException e) {
276 24111 jiyarza
                        throw new InitializeException(e);
277 23754 jjdelcerro
                } catch (IllegalAccessException e) {
278 24111 jiyarza
                        throw new InitializeException(e);
279 23754 jjdelcerro
                } catch (InvocationTargetException e) {
280 24111 jiyarza
                        throw new InitializeException(e);
281 23754 jjdelcerro
                }
282 23123 jmvivo
        }
283
284 23754 jjdelcerro
        public void registerDefaultEvaluator(Class evaluatorClass) {
285
                if (!evaluatorClass.isInstance(Evaluator.class)) {
286
                        throw new ClassCastException();
287
                }
288 24111 jiyarza
                ToolsLocator.getExtensionPointManager().add(
289
                                DATA_MANAGER_EXPRESION_EVALUATOR,
290 24162 jjdelcerro
                                DATA_MANAGER_EXPRESION_EVALUATOR_DESCRIPTION).append(
291 24111 jiyarza
                                DATA_MANAGER_EXPRESION_EVALUATOR_DEFAULT,
292
                                "Default expresion evaluator for use in DAL", evaluatorClass);
293 23123 jmvivo
        }
294
295 24111 jiyarza
        /*
296
         * ====================================================================
297
         *
298
         * Index related services
299
         */
300 24017 jjdelcerro
301
302 24111 jiyarza
        public List getFeatureIndexProviders() {
303
                return ToolsLocator.getExtensionPointManager().get(DATA_MANAGER_INDEX)
304
                .getNames();
305 23864 jiyarza
        }
306 24162 jjdelcerro
307 24111 jiyarza
        public void setDefaultFeatureIndexProviderName(int dataType, String name) {
308 23864 jiyarza
                defaultDataIndexProviders.put(new Integer(dataType), name);
309
        }
310 24017 jjdelcerro
311 24111 jiyarza
        public String getDefaultFeatureIndexProviderName(int dataType) {
312 24017 jjdelcerro
                return (String) defaultDataIndexProviders.get(new Integer(dataType));
313 23864 jiyarza
        }
314 24017 jjdelcerro
315 24111 jiyarza
        public FeatureIndexProviderServices createFeatureIndexProvider(
316
                        String name, FeatureStore store, FeatureType type, String indexName,
317
                        FeatureAttributeDescriptor attr)
318
                        throws InitializeException, ProviderNotRegisteredException {
319 24162 jjdelcerro
320 24111 jiyarza
                        if (name == null) {
321
                                name = getDefaultFeatureIndexProviderName(attr.getDataType());
322 24162 jjdelcerro
                        }
323
324 24111 jiyarza
                        try {
325
                                FeatureIndexProvider provider = (FeatureIndexProvider) ToolsLocator
326
                                                .getExtensionPointManager()
327
                                                .get(
328
                                                                DATA_MANAGER_INDEX)
329
                                                .create(name);
330
                                if (provider == null) {
331
                                        throw new ProviderNotRegisteredException(name);
332
                                }
333
                                FeatureIndexProviderServices services = new DefaultFeatureIndex((FeatureStoreProviderServices) store, type, provider, attr.getName(), indexName);
334
                                services.initialize();
335
                                return services;
336
                        } catch (InstantiationException e) {
337
                                throw new InitializeException(e);
338
                        } catch (IllegalAccessException e) {
339
                                throw new InitializeException(e);
340
                        } catch (SecurityException e) {
341
                                throw new InitializeException(e);
342
                        } catch (IllegalArgumentException e) {
343
                                throw new InitializeException(e);
344
                        }
345 24017 jjdelcerro
        }
346
347 24111 jiyarza
        public void registerFeatureIndexProvider(String name, String description,
348
                        Class clazz, int dataType) {
349
                ToolsLocator.getExtensionPointManager().add(DATA_MANAGER_INDEX,
350 24162 jjdelcerro
                                DATA_MANAGER_INDEX_DESCRIPTION).append(name, null,
351 24111 jiyarza
                                clazz);
352 24162 jjdelcerro
353 24111 jiyarza
                if (getDefaultFeatureIndexProviderName(dataType) == null) {
354
                        setDefaultFeatureIndexProviderName(dataType, name);
355
                }
356 24017 jjdelcerro
        }
357 24162 jjdelcerro
358 24111 jiyarza
        private void initializeIndexes() {
359 24162 jjdelcerro
                this.defaultDataIndexProviders = new HashMap();
360 24111 jiyarza
        }
361
362 19399 vcaballero
}