Statistics
| Revision:

gvsig-raster / org.gvsig.raster.postgis / trunk / org.gvsig.raster.postgis / org.gvsig.raster.postgis.app / org.gvsig.raster.postgis.app.postgisrasterclient / src / main / java / org / gvsig / raster / postgis / app / postgisrasterclient / gui / AddPostGISRasterLayerWizard.java @ 884

History | View | Annotate | Download (11 KB)

1
package org.gvsig.raster.postgis.app.postgisrasterclient.gui;
2

    
3
import java.awt.event.ActionEvent;
4
import java.awt.event.ActionListener;
5
import java.util.ArrayList;
6
import java.util.Iterator;
7
import java.util.List;
8
import java.util.Map;
9
import java.util.Map.Entry;
10

    
11
import javax.swing.JComboBox;
12
import javax.swing.JOptionPane;
13
import javax.swing.JPanel;
14

    
15
import org.apache.commons.collections.map.HashedMap;
16
import org.gvsig.andami.PluginServices;
17
import org.gvsig.andami.PluginsLocator;
18
import org.gvsig.andami.PluginsManager;
19
import org.gvsig.andami.messages.NotificationManager;
20
import org.gvsig.andami.ui.mdiManager.IWindow;
21
import org.gvsig.app.gui.WizardPanel;
22
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
23
import org.gvsig.fmap.dal.DALLocator;
24
import org.gvsig.fmap.dal.DataManager;
25
import org.gvsig.fmap.dal.DataStoreParameters;
26
import org.gvsig.fmap.dal.exception.DataException;
27
import org.gvsig.fmap.dal.exception.InitializeException;
28
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
29
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorer;
30
import org.gvsig.fmap.dal.serverexplorer.db.DBServerExplorerParameters;
31
import org.gvsig.fmap.dal.store.db.DBStoreParameters;
32
import org.gvsig.geodb.ExtDB_Spatial;
33
import org.gvsig.geodb.vectorialdb.wizard.MyExplorer;
34
import org.gvsig.geodb.vectorialdb.wizard.VectorialDBConnectionParamsDialog;
35
import org.gvsig.raster.postgis.swing.AddLayerUI;
36
import org.gvsig.raster.postgis.swing.PostGISRasterSwingLocator;
37
import org.gvsig.tools.dynobject.DynObject;
38
import org.slf4j.Logger;
39
import org.slf4j.LoggerFactory;
40

    
41
public class AddPostGISRasterLayerWizard extends WizardPanel implements ActionListener {
42
        private static final long           serialVersionUID      = 1L;
43
        private static final String         TAB_NAME              = "PostGIS Raster";
44
        private static Logger               logger                = LoggerFactory.getLogger(AddPostGISRasterLayerWizard.class.getName());
45
        private AbstractViewPanel           view                  = null;
46
        private AddLayerUI                  apiUI                 = null;
47
        private DBServerExplorerParameters  dbExplorerParameters  = null;
48
        
49
        public AddPostGISRasterLayerWizard() {
50
                super();
51
                initialize();
52
        }
53

    
54
        /**
55
         * This method initializes this
56
         *
57
         * @return void
58
         */
59
        private void initialize() {
60
                setTabName(PluginServices.getText(this, TAB_NAME));
61
                setLayout(null);
62

    
63
                IWindow iw = PluginServices.getMDIManager().getActiveWindow();
64

    
65
                if (iw == null) {
66
                        return;
67
                }
68

    
69
                if (!(iw instanceof AbstractViewPanel)) {
70
                        return;
71
                }
72
                
73
                apiUI = PostGISRasterSwingLocator.getSwingManager().createAddLayerUI();
74
                apiUI.addListenerToBDSelectionCombo(this);
75
                apiUI.addListenerToNewDBButton(this);
76
                
77
                view = (AbstractViewPanel) iw;
78
                setMapCtrl(view.getMapControl());
79
                
80
                JPanel mainPanel = (JPanel)apiUI.getComponent();
81
                mainPanel.setBounds(new java.awt.Rectangle(0, 0, 501, 350));
82
                add(mainPanel, null);
83
                loadVectorialDBDatasourcesCombo(null);
84
        }
85
        
86
        /**
87
         * Loads the ComboBox for listing connections
88
         * @param sel
89
         */
90
    @SuppressWarnings("unchecked")
91
        private void loadVectorialDBDatasourcesCombo(MyExplorer sel) {
92
            JComboBox combo = apiUI.getDBCombo();
93
        PluginsManager manager = PluginsLocator.getManager();
94
        DynObject values = manager.getPlugin(ExtDB_Spatial.class).getPluginProperties();
95
        Map connections = (Map) values.getDynValue("db_connections");
96
        if (connections != null){
97
            Iterator it = connections.entrySet().iterator();
98
            combo.removeAllItems();
99
            combo.addItem("");
100
            while (it.hasNext()){
101
                Map.Entry entry = (Entry) it.next();
102
                MyExplorer myExplorer = new MyExplorer();
103
                myExplorer.setDbExplorerParameters((DBServerExplorerParameters) entry.getValue());
104
                myExplorer.setName((String) entry.getKey());
105
                combo.addItem(myExplorer);
106
                if(sel!=null && sel.getName().equalsIgnoreCase(myExplorer.getName())){
107
                        combo.setSelectedItem(myExplorer);
108
                }
109
            }
110
        } else {
111
            connections = new HashedMap();
112
            values.setDynValue("db_connections", connections);
113
        }
114
        }
115
    
116
    /*public Object executeWizard() {
117
                ArrayList<Object> tableList = apiUI.getSelectedTables();
118

119
                DataManager man = DALLocator.getDataManager();
120
                FeatureStore store;
121
                
122
                String docName;
123
                TableDocument document;
124
                Project project = ProjectManager.getInstance().getCurrentProject();
125

126
                ApplicationManager appGvSIGMan = ApplicationLocator.getManager();
127
                PrepareContext context = this.getPrepareDataStoreContext();
128
                DBStoreParameters storeParams;
129
        List<TableDocument> tabledocs =
130
            new ArrayList<TableDocument>(tables.length);
131
                for (TablesListItem table : tables) {
132
                        storeParams = getParameterForTable(table);
133

134
                        try {
135
                                storeParams = (DBStoreParameters) appGvSIGMan
136
                                                .prepareOpenDataStoreParameters(storeParams, context);
137
                        } catch (Exception e2) {
138
                                NotificationManager.addError(e2);
139
                                continue;
140
                        }
141

142
                        UserTableSettingsPanel userTableSettingsPanel = table
143
                                        .getUserTableSettingsPanel();
144

145
                        docName = userTableSettingsPanel.getUserLayerName();
146
                        try {
147
                                store = (FeatureStore) man.openStore(storeParams.getDataStoreName(), storeParams);
148
                        } catch (Exception e) {
149
                                NotificationManager.addError(e);
150
                return null;
151
                        }
152

153
                        try {
154
                                appGvSIGMan.pepareOpenDataSource(
155
                                                store, context);
156
                        } catch (Exception e) {
157
                                NotificationManager.addError(e);
158
                                store.dispose();
159
                return null;
160
                        }
161

162
                        document = (TableDocument) ProjectManager.getInstance().createDocument(TableManager.TYPENAME, docName);
163
                        document.setStore(store);
164
            // project.add(document);
165
            tabledocs.add(document);
166
                }
167
        return tabledocs;
168
        }
169
    
170
    protected PrepareContext getPrepareDataStoreContext() {
171
                if (this.prepareDSContext == null) {
172
                        this.prepareDSContext = new PrepareContext() {
173
                                public Window getOwnerWindow() {
174
                                        return null;
175
                                }
176
                                public IProjection getViewProjection() {
177
                                        return null;
178
                                }
179
                        };
180
                }
181
                return this.prepareDSContext;
182
        }
183
    
184
    protected DBStoreParameters getParameterForTable(TablesListItem table) {
185
                DBStoreParameters parameters = table.getParameters();
186

187
                UserTableSettingsPanel userTableSettingsPanel = table.getUserTableSettingsPanel();
188

189
                String fidField = userTableSettingsPanel.getIdFieldName();
190
                if (!(fidField.startsWith("{") && fidField.endsWith("}"))) {
191
                        parameters.setPkFields(new String[] { fidField });
192
                        fidField = null;
193
                }
194
                String[] fields = table.getUserSelectedFieldsPanel()
195
                                .getUserSelectedFields(fidField, null);
196

197
                if (userTableSettingsPanel.isSqlActive()) {
198
                        String whereClause = userTableSettingsPanel
199
                                        .getWhereClause();
200
                        parameters.setBaseFilter(whereClause);
201
                } else {
202
                        parameters.setBaseFilter("");
203
                }
204
                
205
                parameters.setFields(fields);
206
                return parameters;
207
        }*/
208
    
209
        @Override
210
        public void close() {
211
                
212
        }
213

    
214
        @Override
215
        public void execute() {
216
                executeWizard();
217
        }
218

    
219
        @Override
220
        public DataStoreParameters[] getParameters() {
221
                return null;
222
        }
223

    
224
        @Override
225
        public void initWizard() {
226
                
227
        }
228
        
229
        /**
230
         * Updates the JList component with the list of tables of 
231
         * the selected database.
232
         * 
233
         * @param dbSeverExplorerParameters2
234
         */
235
        @SuppressWarnings("unchecked")
236
        private void updateTableList(
237
                        DBServerExplorerParameters dbSeverExplorerParameters2) {
238
                if (dbSeverExplorerParameters2 == null) {
239
                        return;
240
                }
241
                DataManager dm = DALLocator.getDataManager();
242
                DBServerExplorer dbExplorer = null;
243
                try {
244
                        dbExplorer = (DBServerExplorer) dm.openServerExplorer(dbSeverExplorerParameters2.getExplorerName(), dbSeverExplorerParameters2);
245

    
246
                        List parameters = dbExplorer.list();
247

    
248
                        Iterator iter = parameters.iterator();
249
                        DBStoreParameters param = null;
250
                        apiUI.clearList();
251
                        while (iter.hasNext()) {
252
                                param = (DBStoreParameters) iter.next();
253
                                apiUI.addElementToTable(new TableListItem(dbExplorer, param));
254
                        }
255

    
256
                } catch (InitializeException e) {
257
                        logger.error("While getting table names: " + e.getMessage(), e);
258
                        NotificationManager.showMessageError("While getting table names: "
259
                                        + e.getMessage(), e);
260
                        return;
261
                } catch (DataException e) {
262
                        logger.error("While getting table names: " + e.getMessage(), e);
263
                        NotificationManager.showMessageError("While getting table names: "
264
                                        + e.getMessage(), e);
265
                        return;
266
                } catch (ValidateDataParametersException e) {
267
                        logger.error("While getting table names: " + e.getMessage(), e);
268
                        NotificationManager.showMessageError("While getting table names: "
269
                                        + e.getMessage(), e);
270
                        return;
271
                }
272
        }
273

    
274
        /*
275
         * (non-Javadoc)
276
         * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
277
         */
278
        public void actionPerformed(ActionEvent e) {
279
                if (apiUI.isAddDBEventObject(e.getSource())) {
280
                        MyExplorer sel = addNewConnection();
281

    
282
                        if (sel != null) {
283
                                dbExplorerParameters = sel.getDbSeverExplorerParameters();
284
                                loadVectorialDBDatasourcesCombo(sel);
285
                                apiUI.getDBCombo().setSelectedItem(sel);
286
                        }
287
                }
288
                
289
                if(e.getSource() == apiUI.getDBCombo()) {
290
                        JComboBox dbCombo = apiUI.getDBCombo();
291
                        if(dbCombo.getItemCount() == 0) {
292
                                apiUI.clearList();
293
                        } else {
294
                                Object selected = dbCombo.getSelectedItem();
295
                                if(selected == null)
296
                                        return;
297
                                if (selected instanceof MyExplorer) {
298
                        MyExplorer sel_obj = (MyExplorer) selected;
299
                        dbCombo.repaint();
300
                        dbExplorerParameters = sel_obj.getDbSeverExplorerParameters();
301
                        updateTableList(dbExplorerParameters);
302
                    }
303
                        }
304
                }
305
        }
306
        
307
        /**
308
         * Adds a new connection using the generic dialog. This function
309
         * is used when the button add new connection is pressed by the user
310
         * @return
311
         */
312
        @SuppressWarnings("unchecked")
313
        private MyExplorer addNewConnection() {
314
                MyExplorer myExplorer = new MyExplorer();
315
                DBServerExplorerParameters resp = null;
316

    
317
                VectorialDBConnectionParamsDialog newco = new VectorialDBConnectionParamsDialog();
318
                newco.showDialog();
319

    
320
                if (newco.isOkPressed()) {
321
                        try {
322
                                resp = newco.getParameters();
323
                        } catch (Exception e) {
324
                                showConnectionErrorMessage(e.getMessage());
325
                                return null;
326
                        }
327
                        PluginsManager manager = PluginsLocator.getManager();
328
            DynObject values = manager.getPlugin(ExtDB_Spatial.class).getPluginProperties();
329
            Map connections = (Map) values.getDynValue("db_connections");
330
            if(connections == null){
331
                connections = new HashedMap();
332
                values.setDynValue("db_connections", connections);
333
            }
334
            connections.put(newco.getConnectionName(), resp);
335
            
336
                        myExplorer.setDbExplorerParameters(resp);
337
                        myExplorer.setName(newco.getConnectionName());
338
                        return myExplorer;
339
                } else {
340
                        return null;
341
                }
342
        }
343
        
344
        /**
345
         * Shows an error
346
         * @param _msg
347
         */
348
        private void showConnectionErrorMessage(String _msg) {
349
                String msg = (_msg.length() > 300) ? "" : (": " + _msg);
350
                String title = PluginServices.getText(this, "connection_error");
351
                JOptionPane.showMessageDialog(apiUI.getComponent(), title + msg, title,
352
                                JOptionPane.ERROR_MESSAGE);
353
        }
354

    
355
}