Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extGeoDB / src / com / prodevelop / cit / gvsig / vectorialdb / wizard / WizardVectorialDB.java @ 29199

History | View | Annotate | Download (10.7 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2006 Prodevelop and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *   Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *   +34 963862235
28
 *   gvsig@gva.es
29
 *   www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   Prodevelop Integraci?n de Tecnolog?as SL
34
 *   Conde Salvatierra de ?lava , 34-10
35
 *   46004 Valencia
36
 *   Spain
37
 *
38
 *   +34 963 510 612
39
 *   +34 963 510 968
40
 *   gis@prodevelop.es
41
 *   http://www.prodevelop.es
42
 */
43
package com.prodevelop.cit.gvsig.vectorialdb.wizard;
44

    
45
import java.awt.Window;
46
import java.util.ArrayList;
47
import java.util.Iterator;
48
import java.util.List;
49

    
50
import org.cresques.cts.IProjection;
51
import org.gvsig.AppGvSigLocator;
52
import org.gvsig.AppGvSigManager;
53
import org.gvsig.PrepareContext;
54
import org.gvsig.PrepareContextView;
55
import org.gvsig.fmap.dal.DALLocator;
56
import org.gvsig.fmap.dal.DataManager;
57
import org.gvsig.fmap.dal.DataStoreParameters;
58
import org.gvsig.fmap.dal.exception.DataException;
59
import org.gvsig.fmap.dal.exception.ReadException;
60
import org.gvsig.fmap.dal.feature.FeatureStore;
61
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
62
import org.gvsig.fmap.dal.store.db.DBStoreParameters;
63
import org.gvsig.fmap.geom.primitive.Envelope;
64
import org.gvsig.fmap.mapcontext.MapContext;
65
import org.gvsig.fmap.mapcontext.layers.CancelationException;
66
import org.gvsig.fmap.mapcontext.layers.FLayer;
67
import org.gvsig.fmap.mapcontext.layers.FLayers;
68
import org.gvsig.fmap.mapcontext.layers.LayerFactory;
69
import org.gvsig.fmap.mapcontrol.MapControl;
70
import org.slf4j.Logger;
71
import org.slf4j.LoggerFactory;
72

    
73
import com.iver.andami.PluginServices;
74
import com.iver.andami.messages.NotificationManager;
75
import com.iver.andami.ui.mdiManager.IWindow;
76
import com.iver.cit.gvsig.SingleVectorialDBConnectionExtension;
77
import com.iver.cit.gvsig.project.documents.view.gui.View;
78

    
79

    
80
/**
81
 * Driver-independent GeoDB wizard. Queries the drivers to fill GUI controls.
82
 * Multi-table selection available.
83
 *
84
 * @author jldominguez
85
 *
86
 */
87
public class WizardVectorialDB extends WizardDB {
88
    private static Logger logger = LoggerFactory
89
                        .getLogger(WizardVectorialDB.class.getName());
90

    
91
    private static final String GEODB_WIZARD_TAB_NAME = "GeoDB";
92
        private View view = null;
93

    
94
        private PrepareContextView prepareContext;
95

    
96
    /**
97
     * This method initializes this
98
     *
99
     * @return void
100
     */
101
    protected void initialize() {
102
                super.initialize();
103
        setTabName(GEODB_WIZARD_TAB_NAME);
104
        setLayout(null);
105
        setSize(512, 478);
106

    
107
        IWindow iw = PluginServices.getMDIManager().getActiveWindow();
108

    
109
        if (iw == null) {
110
            return;
111
        }
112

    
113
        if ((iw instanceof View)) {
114
                 view = (View) iw;
115
             setMapCtrl(view.getMapControl());
116
        }
117
    }
118

    
119

    
120
        protected TablesListItem createTabeListItem(DBServerExplorer dbExplorer,
121
                        DBStoreParameters param) {
122
                return new TablesListItemVectorial(dbExplorer, param, getMapCtrl(),
123
                                this);
124
        }
125

    
126
        public void setSettingsPanels(TablesListItem actTable) {
127
                super.setSettingsPanels(actTable);
128
        }
129

    
130
        protected UserTableSettingsPanel createSettingsPanel(
131
                        TablesListItem actTable) {
132
                if (actTable == null) {
133
                        return new UserTableSettingsVectorialPanel(null, null, "",
134
                                        getMapCtrl(), true, this, null, null);
135
                }
136
                String abrev = null;
137
                if (getMapCtrl() != null) {
138
                        abrev = getMapCtrl().getViewPort().getProjection().getAbrev();
139
                }
140

    
141
                return ((TablesListItemVectorial) actTable)
142
                                .getUserTableSettingsPanel(abrev);
143
        }
144

    
145

    
146
        public DataStoreParameters[] getParameters() {
147
                try {
148
                        TablesListItem[] selected = getSelectedTables();
149
                        int count = selected.length;
150
                        DBStoreParameters[] dbParameters = new DBStoreParameters[count];
151
                        String strEPSG = null;
152
                        if (getMapCtrl() != null) {
153
                                strEPSG = getMapCtrl().getViewPort().getProjection().getAbrev();
154
                        }
155

    
156
                        for (int i = 0; i < count; i++) {
157
                                TablesListItemVectorial item = (TablesListItemVectorial) selected[i];
158

    
159
                                dbParameters[i] = getParameterForTable(item);
160
                        }
161

    
162
                        return dbParameters;// layerArrayToGroup(all_layers, groupName);
163
                } catch (Exception e) {
164
                        logger.error("While creating jdbc layer: " + e.getMessage(), e);
165
                        NotificationManager.addError("Error al cargar la capa: "
166
                                        + e.getMessage(), e);
167
                }
168

    
169
                return null;
170
        }
171

    
172
        public void execute() {
173
                SingleVectorialDBConnectionExtension.saveAllToPersistence();
174

    
175
                MapControl mapControl = this.getMapCtrl();
176
                IProjection proj = null;
177
                TablesListItem[] tables = getSelectedTables();
178

    
179

    
180
                List all_layers = new ArrayList();
181
                String strEPSG = mapControl.getViewPort().getProjection().getAbrev();
182
                LayerFactory layerFactory = LayerFactory.getInstance();
183
                String groupName = null;
184
                Envelope env = null;
185
                DBStoreParameters parameter;
186
                TablesListItem table;
187
                FeatureStore store, storeToAdd;
188

    
189
                DataManager man = DALLocator.getDataManager();
190

    
191
                AppGvSigManager appGvSIGMan = AppGvSigLocator.getAppGvSigManager();
192
                PrepareContext context = this.getPrepareDataStoreContext();
193

    
194

    
195
                FLayer layer;
196
                for (int i = 0; i < tables.length; i++) {
197
                        table = tables[i];
198
                        UserTableSettingsVectorialPanel userTableSettingsPanel = (UserTableSettingsVectorialPanel) table
199
                                        .getUserTableSettingsPanel();
200
                        parameter = getParameterForTable(table);
201
                        if (i == 0) {
202
                                groupName = parameter.getDBName() + " (" + parameter.getHost()
203
                                                + ")";
204
                        }
205
                        try {
206
                                parameter = (DBStoreParameters) appGvSIGMan
207
                                                .prepareOpenDataStoreParameters(parameter, context);
208

    
209
                        } catch (Exception e2) {
210
                                NotificationManager.addError(e2);
211
                                continue;
212
                        }
213

    
214
                        try {
215
                                store = (FeatureStore) man.createStore(parameter);
216
                        } catch (Exception e) {
217
                                NotificationManager.addError(e);
218
                                return;
219
                        }
220

    
221
                        try {
222
                                storeToAdd = (FeatureStore) appGvSIGMan.pepareOpenDataSource(
223
                                                store, context);
224
                        } catch (Exception e) {
225
                                NotificationManager.addError(e);
226
                                try {
227
                                        store.dispose();
228
                                } catch (DataException e1) {
229
                                        logger
230
                                                        .error(
231
                                                                        "Exception when disposing a store after prepareStore exception",
232
                                                                        e1);
233
                                }
234
                                continue;
235
                        }
236

    
237
                        try {
238

    
239
                                layer = layerFactory.createLayer(userTableSettingsPanel
240
                                                .getUserLayerName(), storeToAdd);
241
                                all_layers.add(layer);
242
                                if (env == null) {
243
                                        env = layer.getFullEnvelope();
244
                                } else {
245
                                        env.add(layer.getFullEnvelope());
246
                                }
247
                        } catch (Exception e) {
248
                                try {
249
                                        storeToAdd.dispose();
250
                                } catch (DataException e1) {
251
                                        logger
252
                                                        .error(
253
                                                                        "Exception when disposing a store after createLayer exception",
254
                                                                        e1);
255
                                }
256

    
257
                                NotificationManager.addError(e);
258
                        }
259
                }
260

    
261
                MapContext mc = mapControl.getMapContext();
262
                FLayers root = mapControl.getMapContext().getLayers();
263
                if (all_layers.size() > 1) {
264
                        FLayers group = new FLayers();// (mc,root);
265
                        group.setMapContext(mc);
266
                        group.setParentLayer(root);
267
                        group.setName(groupName);
268

    
269
                        Iterator iter = all_layers.iterator();
270
                        while (iter.hasNext()) {
271
                                group.addLayer((FLayer) iter.next());
272
                        }
273

    
274
                        if ((group != null) && !(group.isOk())) {
275
                                // if the layer is not okay (it has errors) process them
276
                                processErrorsOfLayer(group, mapControl);
277
                        }
278

    
279
                        if (group != null) {
280
                                group.setVisible(true);
281
                                mapControl.getMapContext().beginAtomicEvent();
282
                                try {
283
                                        // checkProjection(group, mapControl.getViewPort());
284
                                        try {
285
                                                mapControl.getMapContext().getLayers().addLayer(group);
286
                                        } catch (CancelationException e) {
287
                                                // TODO Auto-generated catch block
288
                                                e.printStackTrace();
289
                                        }
290
                                        if (mapControl.getViewPort().getExtent() == null) {
291
                                                mapControl.getViewPort().setEnvelope(env);
292
                                        }
293
                                } finally {
294
                                        mapControl.getMapContext().endAtomicEvent();
295
                                }
296
                                return;
297
                        }
298
                } else if (all_layers.size() == 1) {
299
                        layer = (FLayer) all_layers.get(0);
300
                        if (!(layer.isOk())) {
301
                                // if the layer is not okay (it has errors) process them
302
                                processErrorsOfLayer(layer, mapControl);
303
                        }
304

    
305
                        layer.setVisible(true);
306
                        mapControl.getMapContext().beginAtomicEvent();
307
                        // checkProjection(all_layers[0], mapControl.getViewPort());
308
                        try {
309
                                try {
310
                                        mapControl.getMapContext().getLayers().addLayer(layer);
311
                                } catch (CancelationException e) {
312
                                        return;
313
                                }
314

    
315
                                if (mapControl.getViewPort().getExtent() == null) {
316
                                        try {
317
                                                mapControl.getViewPort().setEnvelope(
318
                                                                layer.getFullEnvelope());
319
                                        } catch (ReadException e) {
320
                                                NotificationManager.addError(e);
321
                                                return;
322
                                        }
323
                                }
324
                        } finally {
325

    
326
                                mapControl.getMapContext().endAtomicEvent();
327
                        }
328
                        return;
329
                }
330
        }
331

    
332
        protected PrepareContext getPrepareDataStoreContext() {
333
                if (this.prepareContext == null) {
334
                        this.prepareContext = new PrepareContextView() {
335
                                public Window getOwnerWindow() {
336
                                        return null;
337
                                }
338

    
339
                                public MapControl getMapControl() {
340
                                        return WizardVectorialDB.this
341
                                                        .getMapCtrl();
342
                                }
343

    
344
                        };
345
                }
346
                return this.prepareContext;
347
        }
348

    
349
        protected DBStoreParameters getParameterForTable(TablesListItem table) {
350
                DBStoreParameters parameters = table.getParameters();
351

    
352
                String strEPSG = null;
353
                if (getMapCtrl() != null) {
354
                        strEPSG = getMapCtrl().getViewPort().getProjection().getAbrev();
355
                }
356

    
357
                UserTableSettingsVectorialPanel userTableSettingsPanel = (UserTableSettingsVectorialPanel) table
358
                                .getUserTableSettingsPanel();
359

    
360
                Envelope _wa = userTableSettingsPanel.getWorkingArea();
361

    
362
                String geomField = userTableSettingsPanel.getGeoFieldName();
363
                String fidField = userTableSettingsPanel.getIdFieldName();
364
                if (!(fidField.startsWith("{") && fidField.endsWith("}"))) {
365
                        parameters.setPkFields(new String[] { fidField });
366
                        fidField = null;
367
                }
368
                String[] fields = table.getUserSelectedFieldsPanel()
369
                                .getUserSelectedFields(fidField, geomField);
370

    
371
                if (userTableSettingsPanel.isSqlActive()) {
372
                        String whereClause = userTableSettingsPanel.getWhereClause();
373
                        parameters.setInitialFilter(whereClause);
374
                } else {
375
                        parameters.setInitialFilter("");
376
                }
377

    
378
                parameters.setFields(fields);
379
                parameters.setDefaultGeometry(geomField);
380
                if (_wa != null) {
381
                        parameters.setWorkingArea(_wa);
382
                }
383

    
384
                parameters.setSRSID(strEPSG);
385

    
386
                return parameters;
387

    
388
        }
389

    
390

    
391
}