Statistics
| Revision:

svn-gvsig-desktop / trunk / libraries / libDataSource / src / org / gvsig / data / DataSourceManager.java @ 19442

History | View | Annotate | Download (6.75 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
import org.gvsig.data.exception.InitializeException;
9

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

    
13
        private static DataSourceManager manager = null;
14

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

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

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

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

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

    
35
        }
36

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

    
91

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

    
118
                return null;
119
        }
120

    
121

    
122
        public IDriver createDriver(IDriverParameters parameters) throws InitializeException {
123
                Iterator iterator=registers.iterator();
124
                while (iterator.hasNext()) {
125
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
126
                        if (registerInfo.parametersClazz.isAssignableFrom(parameters.getClass())){
127
                                try {
128
                                        IDriver driver= (IDriver)registerInfo.clazz.newInstance();
129
                                        driver.init(parameters);
130
                                        return driver;
131
                                } catch (InstantiationException e) {
132
                                        throw new InitializeException(parameters.getClass().getName(),e);
133
                                } catch (IllegalAccessException e) {
134
                                        throw new InitializeException(parameters.getClass().getName(),e);
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
}