Statistics
| Revision:

root / branches / Mobile_Compatible_Hito_1 / libFMap / src-data / org / gvsig / data / DataManager.java @ 21606

History | View | Annotate | Download (5.29 KB)

1
package org.gvsig.data;
2

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

    
6
import org.gvsig.data.exception.InitializeException;
7

    
8
public class DataManager {
9
        private static ArrayList registers = new ArrayList();
10

    
11
        private static DataManager manager = null;
12

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

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

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

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

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

    
33
        }
34

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

    
95

    
96
        /* Como conjunto de propiedades genericas a un tipo de DataStore
97
         * a las que se puede acceder sin tener que crear un DataStore/Driver.
98
         *
99
         * Por ejemplo para "DriverDataSource.shp" podria tener el
100
         * tamaƱo de identificador de campo.
101
         *
102
         * En "DriverDataSource.postgres" podria aportar informacion sobre
103
         * las tablas disponibles o cosas asi. Hay que ver que precisa
104
         * GeoDB y de donde lo puede obtener.
105
         *
106
         * Hay que pensarlo bien.
107
         *
108
         */
109

    
110
        public void registerDataExplorer(String name, Class dataSourceClass, Class parametersClass) {
111
                RegisterInfo register=new RegisterInfo(name,dataSourceClass,parametersClass);
112
                if (registers.contains(register)){
113
                        return;
114
                }
115
                registers.add(register);
116
        }
117
        /**
118
         * Levanta una instancia de los parametros solicitados
119
         * inicializa el nombre en la instancia
120
         * y la devuelve.
121
         **/
122
        public IDataExplorerParameters createDataExplorerParameters(String name){
123
                Iterator iterator=registers.iterator();
124
                while (iterator.hasNext()) {
125
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
126
                        if (name.equals(registerInfo.name)){
127
                                try {
128
                                        return (IDataExplorerParameters)registerInfo.parametersClazz.newInstance();
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
                return null;
139
        }
140

    
141
        public IDataExplorer createDataExplorer(IDataExplorerParameters parameters) throws InitializeException {
142
                Iterator iterator=registers.iterator();
143
                while (iterator.hasNext()) {
144
                        RegisterInfo registerInfo = (RegisterInfo) iterator.next();
145
                        if (parameters.getDataExplorerName().equals(registerInfo.name)){
146
                                try {
147
                                        IDataExplorer dataSource= (IDataExplorer)registerInfo.clazz.newInstance();
148
                                        dataSource.init(parameters);
149
                                        return dataSource;
150
                                } catch (InstantiationException e) {
151
                                        // TODO Auto-generated catch block
152
                                        e.printStackTrace();
153
                                } catch (IllegalAccessException e) {
154
                                        // TODO Auto-generated catch block
155
                                        e.printStackTrace();
156
                                }
157
                        }
158
                }
159

    
160
                return null;
161
        }
162
        private class RegisterInfo{
163
                private String name;
164
                private Class clazz;
165
                private Class parametersClazz;
166

    
167
                public RegisterInfo(String name, Class dsc, Class pc){
168
                        this.name=name;
169
                        this.clazz=dsc;
170
                        this.parametersClazz=pc;
171
                }
172

    
173
                public boolean equals(Object obj) {
174
                        if (obj instanceof RegisterInfo){
175
                                RegisterInfo ri = (RegisterInfo)obj;
176
                                return ri.name.equals(this.name) &&
177
                                        ri.clazz.equals(this.clazz) &&
178
                                        ri.parametersClazz.equals(this.parametersClazz);
179
                        }
180
                        return super.equals(obj);
181
                }
182

    
183

    
184

    
185
        }
186

    
187
}