Statistics
| Revision:

root / trunk / libraries / libDataSource / src / org / gvsig / data / DataSourceManager.java @ 19399

History | View | Annotate | Download (6.6 KB)

1
package org.gvsig.data;
2

    
3
import java.util.ArrayList;
4
import java.util.Iterator;
5

    
6
import org.gvsig.data.datastores.vectorial.driver.IDriver;
7
import org.gvsig.data.datastores.vectorial.driver.IDriverParameters;
8

    
9
public class DataSourceManager {
10
        private static ArrayList registers = new ArrayList();
11

    
12
        private static DataSourceManager manager = null;
13

    
14
        public static DataSourceManager getManager() {
15
                if( manager == null ) {
16
                        manager = new DataSourceManager();
17
                }
18
                return manager;
19
        }
20

    
21
        public static ResourceManager getResourceManager() {
22
                return ResourceManager.getResourceManager();
23
        }
24

    
25
        public DataSourceManager() {
26
//                org.gvsig.data.datastores.vectorial.driver.shp.Register.selfRegister();
27
//                org.gvsig.data.datastores.vectorial.driver.Register.selfRegister();
28

    
29
//                org.gvsig.data.datastores.gml.Register.selfRegister();
30
        }
31

    
32
        public void registerGeometryHandler(String dataStoreID, Class geometryHandlerClass) {
33

    
34
        }
35

    
36
        public void registerDataStore(String name, Class dataStoreClass, Class parametersClass) {
37
                RegisterInfo register=new RegisterInfo(name,dataStoreClass,parametersClass);
38
                registers.add(register);
39
        }
40
        /**
41
         * Levanta una instancia de los parametros solicitados
42
         * inicializa el nombre en la instancia
43
         * y la devuelve.
44
         **/
45
        public IDataStoreParameters createDataStoreParameters(String name){
46
                Iterator iterator=registers.iterator();
47
                while (iterator.hasNext()) {
48
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
49
                        if (name.equals(registerInfo.name)){
50
                                try {
51
                                        return (IDataStoreParameters)registerInfo.parametersClazz.newInstance();
52
                                } catch (InstantiationException e) {
53
                                        // TODO Auto-generated catch block
54
                                        e.printStackTrace();
55
                                } catch (IllegalAccessException e) {
56
                                        // TODO Auto-generated catch block
57
                                        e.printStackTrace();
58
                                }
59
                        }
60
                }
61
                return null;
62
        }
63
        /**
64
         * Levanta la instancia del datasource,
65
         * levanta una instancia del driver que precisa el datasource
66
         * y por ultimo invoca al metodo init del datasource.
67
         **/
68
        public IDataStore createDataStore(IDataStoreParameters parameters) {
69
                Iterator iterator=registers.iterator();
70
                while (iterator.hasNext()) {
71
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
72
                        if (registerInfo.parametersClazz.isAssignableFrom(parameters.getClass())){
73
                                try {
74
                                        IDataStore dataStore= (IDataStore)registerInfo.clazz.newInstance();
75
                                        dataStore.init(parameters);
76
                                        return dataStore;
77
                                } catch (InstantiationException e) {
78
                                        // TODO Auto-generated catch block
79
                                        e.printStackTrace();
80
                                } catch (IllegalAccessException e) {
81
                                        // TODO Auto-generated catch block
82
                                        e.printStackTrace();
83
                                }
84
                        }
85
                }
86
                return null;
87
        }
88

    
89

    
90
        public void registerDriver(String name, Class driverClass, Class parametersClass) {
91
                RegisterInfo register=new RegisterInfo(name,driverClass,parametersClass);
92
                registers.add(register);
93
        }
94
        /**
95
         * Levanta una instancia de los parametros solicitados
96
         * inicializa el nombre en la instancia
97
         * y la devuelve.
98
         **/
99
        public IDriverParameters createDriverParameters(String name){
100
                Iterator iterator=registers.iterator();
101
                while (iterator.hasNext()) {
102
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
103
                        if (name.equals(registerInfo.name)){
104
                                try {
105
                                        return (IDriverParameters)registerInfo.parametersClazz.newInstance();
106
                                } catch (InstantiationException e) {
107
                                        // TODO Auto-generated catch block
108
                                        e.printStackTrace();
109
                                } catch (IllegalAccessException e) {
110
                                        // TODO Auto-generated catch block
111
                                        e.printStackTrace();
112
                                }
113
                        }
114
                }
115

    
116
                return null;
117
        }
118

    
119

    
120
        public IDriver createDriver(IDriverParameters parameters) {
121
                Iterator iterator=registers.iterator();
122
                while (iterator.hasNext()) {
123
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
124
                        if (registerInfo.parametersClazz.isAssignableFrom(parameters.getClass())){
125
                                try {
126
                                        IDriver driver= (IDriver)registerInfo.clazz.newInstance();
127
                                        driver.init(parameters);
128
                                        return driver;
129
                                } catch (InstantiationException e) {
130
                                        // TODO Auto-generated catch block
131
                                        e.printStackTrace();
132
                                } catch (IllegalAccessException e) {
133
                                        // TODO Auto-generated catch block
134
                                        e.printStackTrace();
135
                                }
136
                        }
137
                }
138

    
139
                return null;
140
        }
141

    
142

    
143
        //FIXME: COncepto de DataSource
144
        /* Como conjunto de propiedades genericas a un tipo de DataStore
145
         * a las que se puede acceder sin tener que crear un DataStore/Driver.
146
         *
147
         * Por ejemplo para "DriverDataSource.shp" podria tener el
148
         * tamaƱo de identificador de campo.
149
         *
150
         * En "DriverDataSource.postgres" podria aportar informacion sobre
151
         * las tablas disponibles o cosas asi. Hay que ver que precisa
152
         * GeoDB y de donde lo puede obtener.
153
         *
154
         * Hay que pensarlo bien.
155
         *
156
         */
157

    
158
        public void registerDataSource(String name, Class dataSourceClass, Class parametersClass) {
159
                RegisterInfo register=new RegisterInfo(name,dataSourceClass,parametersClass);
160
                registers.add(register);
161
        }
162
        /**
163
         * Levanta una instancia de los parametros solicitados
164
         * inicializa el nombre en la instancia
165
         * y la devuelve.
166
         **/
167
        public IDataSourceParameters createDataSourceParameters(String name){
168
                Iterator iterator=registers.iterator();
169
                while (iterator.hasNext()) {
170
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
171
                        if (name.equals(registerInfo.name)){
172
                                try {
173
                                        return (IDataSourceParameters)registerInfo.parametersClazz.newInstance();
174
                                } catch (InstantiationException e) {
175
                                        // TODO Auto-generated catch block
176
                                        e.printStackTrace();
177
                                } catch (IllegalAccessException e) {
178
                                        // TODO Auto-generated catch block
179
                                        e.printStackTrace();
180
                                }
181
                        }
182
                }
183
                return null;
184
        }
185

    
186
        public IDataSource createDataSource(IDataSourceParameters parameters) {
187
                Iterator iterator=registers.iterator();
188
                while (iterator.hasNext()) {
189
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
190
                        if (registerInfo.parametersClazz.isAssignableFrom(parameters.getClass())){
191
                                try {
192
                                        IDataSource dataSource= (IDataSource)registerInfo.clazz.newInstance();
193
                                        dataSource.init(parameters);
194
                                        return dataSource;
195
                                } catch (InstantiationException e) {
196
                                        // TODO Auto-generated catch block
197
                                        e.printStackTrace();
198
                                } catch (IllegalAccessException e) {
199
                                        // TODO Auto-generated catch block
200
                                        e.printStackTrace();
201
                                }
202
                        }
203
                }
204

    
205
                return null;
206
        }
207
        private class RegisterInfo{
208
                private String name;
209
                private Class clazz;
210
                private Class parametersClazz;
211

    
212
                public RegisterInfo(String name, Class dsc, Class pc){
213
                        this.name=name;
214
                        this.clazz=dsc;
215
                        this.parametersClazz=pc;
216
                }
217

    
218
        }
219

    
220
}