Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / project / castor / ProjectTable.java @ 652

History | View | Annotate | Download (7.44 KB)

1
package com.iver.cit.gvsig.project.castor;
2

    
3
import com.hardcode.driverManager.DriverLoadException;
4

    
5
import com.hardcode.gdbms.engine.data.DataSource;
6
import com.hardcode.gdbms.engine.data.DataSourceFactory;
7
import com.hardcode.gdbms.engine.data.DataSourceFactory.DBDriverInfo;
8
import com.hardcode.gdbms.engine.data.DataSourceFactory.DriverInfo;
9
import com.hardcode.gdbms.engine.data.DataSourceFactory.FileDriverInfo;
10
import com.hardcode.gdbms.engine.data.NoSuchTableException;
11

    
12
import com.iver.cit.gvsig.fmap.DriverException;
13
import com.iver.cit.gvsig.fmap.layers.FLayer;
14
import com.iver.cit.gvsig.fmap.layers.SelectableDataSource;
15
import com.iver.cit.gvsig.fmap.layers.XMLException;
16
import com.iver.cit.gvsig.fmap.layers.layerOperations.AlphanumericData;
17
import com.iver.cit.gvsig.project.ProjectFactory;
18

    
19
import com.iver.utiles.XMLEntity;
20

    
21
import java.text.DateFormat;
22

    
23
import java.util.Date;
24

    
25

    
26
/**
27
 * Tabla del proyecto
28
 *
29
 * @author Fernando Gonz?lez Cort?s
30
 */
31
public class ProjectTable extends ProjectElement {
32
        private static int numTables = 0;
33
        private SelectableDataSource modelo;
34
        private String nameLayer;
35

    
36
        /* No es necesaria para operar, s?lo para guardar el proyecto */
37
        private AlphanumericData associatedTable;
38

    
39
        /**
40
         * Establece a true el bit index-?simo del bitmap de campos visibles. Los
41
         * campos cuyos bits est?n a true se considerar?n visibles y viceversa
42
         *
43
         * @param index indice del bit que se quiere establecer a true
44
         */
45
        public void set(int index) {
46
                //TODO implementar bien
47
                //        modelo.set(index);
48
                change.firePropertyChange("visibles", true, true);
49
        }
50

    
51
        /**
52
         * Obtiene el valor del bit index-?simo del bitmap de campos visibles
53
         *
54
         * @param index indice del bit que se quiere obtener
55
         *
56
         * @return devuelve true si el campo index-?simo es visible y false en caso
57
         *                    contrario
58
         */
59
        public boolean get(int index) {
60
                //TODO implementar bien
61
                //        return modelo.get(index);
62
                return false;
63
        }
64

    
65
        /**
66
         * Obtiene el modelo de la Tabla. Es decir, una clase con capacidad para
67
         * leer la informaci?n de la tabla
68
         *
69
         * @return
70
         */
71
        public SelectableDataSource getModelo() {
72
                return modelo;
73
        }
74

    
75
        /**
76
         * DOCUMENT ME!
77
         *
78
         * @param string DOCUMENT ME!
79
         */
80
        public void setName(String string) {
81
                super.setName(string);
82

    
83
                if (modelo != null) {
84
                        modelo.setName(string);
85
                }
86
        }
87

    
88
        /**
89
         * Establece el valor del bit index-?simo al valor  'value'
90
         *
91
         * @param bitIndex indice del bit que se quiere tocar
92
         * @param value valor que se quiere establecer en el bit indicado
93
         */
94
        public void set(int bitIndex, boolean value) {
95
                //TODO implementar bien
96
                //        modelo.set(bitIndex, value);
97
                change.firePropertyChange("visibles", value, value);
98
        }
99

    
100
        /**
101
         * DOCUMENT ME!
102
         *
103
         * @param baseName
104
         * @param sds DOCUMENT ME!
105
         *
106
         * @return
107
         */
108
        public static ProjectTable createTable(String baseName,
109
                SelectableDataSource sds) {
110
                ProjectTable t = new ProjectTable();
111
                t.modelo = sds;
112

    
113
                t.setName(baseName);
114
                t.setCreationDate(DateFormat.getInstance().format(new Date()));
115
                numTables++;
116

    
117
                return t;
118
        }
119

    
120
        //TODO implementar bien
121

    
122
        /*
123
         * @param baseName
124
         * @return
125
         *
126
                   public static ProjectTable createTable(String viewName, FTable ftable) {
127
                           Table t = new Table();
128
                           t.setName(viewName + " - Datos");
129
                           t.setCreationDate(DateFormat.getInstance().format(new Date()));
130
                           t.setModelo(ftable);
131
                           numTables++;
132
                           return t;
133
                   }*/
134

    
135
        /**
136
         * DOCUMENT ME!
137
         *
138
         * @return DOCUMENT ME!
139
         *
140
         * @throws DriverException
141
         */
142
        public XMLEntity getXMLEntity() {
143
                XMLEntity xml = super.getXMLEntity();
144
                xml.putProperty("nameClass", this.getClass().getName());
145
                xml.putProperty("numTables", numTables);
146
                xml.addChild(modelo.getXMLEntity());
147

    
148
                DriverInfo di = DataSourceFactory.getDriverInfo(modelo.getName());
149
                xml.putProperty("driverName", di.driverName);
150
                xml.putProperty("name", di.name);
151
                xml.putProperty("dbms", di.dbms);
152

    
153
                if (associatedTable != null) {
154
                        xml.putProperty("nameLayer", ((FLayer) associatedTable).getName());
155
                }
156

    
157
                if (di instanceof FileDriverInfo) {
158
                        xml.putProperty("type", "file");
159
                        xml.putProperty("file", ((FileDriverInfo) di).file);
160
                } else if (di instanceof DBDriverInfo) {
161
                        xml.putProperty("type", "db");
162

    
163
                        DBDriverInfo dbdi = (DBDriverInfo) di;
164

    
165
                        xml.putProperty("host", dbdi.host);
166
                        xml.putProperty("port", dbdi.port);
167
                        xml.putProperty("user", dbdi.user);
168
                        xml.putProperty("password", dbdi.password);
169
                        xml.putProperty("dbName", dbdi.dbName);
170
                        xml.putProperty("tableName", dbdi.sqlQuery);
171
                        xml.putProperty("driverInfo", dbdi.driverInfo);
172
                }
173

    
174
                return xml;
175
        }
176

    
177
        /*private void setProjectTable(ProjectTable pt){
178
           numTables=ProjectTable.numTables;
179
           associatedTable=pt.associatedTable;
180
           modelo=pt.modelo;
181
           }
182
         */
183
        /*public void setSelectionSupport(SelectionSupport ss){
184
           modelo.setSelectionSupport(ss);
185
           }
186
         */
187

    
188
        /**
189
         * DOCUMENT ME!
190
         *
191
         * @param xml DOCUMENT ME!
192
         * @param p DOCUMENT ME!
193
         *
194
         * @throws XMLException
195
         * @throws DriverException
196
         *
197
         * @see com.iver.cit.gvsig.project.castor.ProjectElement#setXMLEntity(com.iver.utiles.XMLEntity)
198
         */
199
        public void setXMLEntity(XMLEntity xml, Project p)
200
                throws XMLException, DriverException {
201
                numTables = xml.getIntProperty("numViews");
202

    
203
                if (xml.getStringProperty("nameLayer") != null) {
204
                        nameLayer = xml.getStringProperty("nameLayer");
205
                }
206

    
207
                if (xml.getStringProperty("type").equals("file")) {
208
                        DataSourceFactory.addFileDataSource(xml.getStringProperty(
209
                                        "driverName"), xml.getStringProperty("name"),
210
                                xml.getStringProperty("file"), xml.getStringProperty("dbms"));
211

    
212
                        DataSource dataSource;
213

    
214
                        try {
215
                                dataSource = DataSourceFactory.createRandomDataSource(xml.getStringProperty(
216
                                                        "name"));
217
                        } catch (NoSuchTableException e) {
218
                                throw new XMLException(e);
219
                        } catch (DriverLoadException e) {
220
                                throw new XMLException(e);
221
                        }
222

    
223
                        ProjectTable pt = ProjectFactory.createTable(xml.getStringProperty(
224
                                                "nameLayer"),
225
                                        new SelectableDataSource(xml.getStringProperty("name"),
226
                                                dataSource));
227

    
228
                        for (int i = 0; i < p.getViews().size(); i++) {
229
                                FLayer layer = ((ProjectView) p.getViews().get(i)).getMapContext()
230
                                                                .getLayers().getLayer(getNameLayer());
231

    
232
                                if (layer.getName().equals(getNameLayer())) {
233
                                        try {
234
                                                modelo = ((AlphanumericData) layer).getRecordset();
235
                                        } catch (com.iver.cit.gvsig.fmap.DriverException e1) {
236
                                                throw new DriverException(e1);
237
                                        }
238

    
239
                                        numTables = ProjectTable.numTables;
240
                                        associatedTable = (AlphanumericData) layer;
241
                                }
242
                        }
243
                } else if (xml.getStringProperty("type").equals("db")) {
244
                        DataSourceFactory.addDBDataSource(xml.getStringProperty("name"),
245
                                xml.getStringProperty("host"), xml.getIntProperty("port"),
246
                                xml.getStringProperty("user"),
247
                                xml.getStringProperty("password"),
248
                                xml.getStringProperty("dbName"),
249
                                xml.getStringProperty("tableName"),
250
                                xml.getStringProperty("driverName"));
251
                }
252

    
253
                setName(xml.getStringProperty("name"));
254
        }
255

    
256
        /**
257
         * DOCUMENT ME!
258
         *
259
         * @param associatedTable DOCUMENT ME!
260
         *
261
         * @throws DriverLoadException DOCUMENT ME!
262
         */
263

    
264
        public AlphanumericData getAssociatedTable() {
265
           return associatedTable;
266
           }
267
         
268

    
269
        /**
270
         * DOCUMENT ME!
271
         *
272
         * @param associatedTable DOCUMENT ME!
273
         *
274
         * @throws DriverLoadException
275
         */
276
        public void setAssociatedTable(AlphanumericData associatedTable) {
277
                this.associatedTable = associatedTable;
278
        }
279

    
280
        /**
281
         * DOCUMENT ME!
282
         *
283
         * @return DOCUMENT ME!
284
         */
285
        public String getNameLayer() {
286
                return nameLayer;
287
        }
288
}