Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.geodb.app / org.gvsig.geodb.app.mainplugin / src / main / java / org / gvsig / geodb / databaseworkspace / WorkspaceConfigurationPanel.java @ 46542

History | View | Annotate | Download (17.3 KB)

1
package org.gvsig.geodb.databaseworkspace;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.event.ActionEvent;
5
import java.awt.event.ActionListener;
6
import javax.swing.JButton;
7
import javax.swing.JComponent;
8
import javax.swing.JOptionPane;
9
import javax.swing.event.ChangeEvent;
10
import org.apache.commons.lang.StringUtils;
11
import org.gvsig.featureform.swing.JFeaturesForm;
12
import org.gvsig.fmap.dal.DALLocator;
13
import org.gvsig.fmap.dal.DataManager;
14
import org.gvsig.fmap.dal.DataStoreParameters;
15
import org.gvsig.fmap.dal.DatabaseWorkspaceManager;
16
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYID;
17
import static org.gvsig.fmap.dal.DatabaseWorkspaceManager.CONFIG_NAME_STORESREPOSITORYLABEL;
18
import org.gvsig.fmap.dal.StoresRepository;
19
import org.gvsig.fmap.dal.feature.Feature;
20
import org.gvsig.fmap.dal.feature.FeatureStore;
21
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
22
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
23
import org.gvsig.fmap.dal.swing.DALSwingLocator;
24
import org.gvsig.fmap.dal.swing.DataSwingManager;
25
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
26
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
27
import org.gvsig.fmap.dal.swing.searchpanel.FeatureStoreSearchPanel;
28
import org.gvsig.tools.ToolsLocator;
29
import org.gvsig.tools.i18n.I18nManager;
30
import org.gvsig.tools.swing.api.Component;
31
import org.gvsig.tools.swing.api.ToolsSwingLocator;
32
import org.gvsig.tools.swing.api.ToolsSwingUtils;
33
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
34
import org.gvsig.tools.swing.api.windowmanager.Dialog;
35
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
36
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
37
import org.gvsig.tools.util.LabeledValue;
38
import org.slf4j.Logger;
39
import org.slf4j.LoggerFactory;
40

    
41
/**
42
 *
43
 * @author jjdelcerro
44
 */
45
@SuppressWarnings("UseSpecificCatch")
46
public class WorkspaceConfigurationPanel
47
        extends WorkspaceConfigurationPanelView
48
        implements Component {
49

    
50
    private static final Logger LOGGER = LoggerFactory.getLogger(WorkspaceConfigurationPanel.class);
51
    private FeatureStoreSearchPanel configurationSearch;
52
    private FeatureStoreSearchPanel repositorySearch;
53
    private FeatureStoreSearchPanel resourcesSearch;
54

    
55
    private class TableController {
56

    
57
        private final JButton btnCreate;
58
        private final JButton btnDrop;
59
//        private final JButton btnSearch;
60
        private final JButton btnShowForm;
61
        private final int tableid;
62

    
63
        public TableController(
64
                int tableid,
65
                JButton btnCreate,
66
                JButton btnDrop //                , JButton btnSearch
67
                ,
68
                 JButton btnShowForm
69
        ) {
70
            this.tableid = tableid;
71
            this.btnCreate = btnCreate;
72
            this.btnDrop = btnDrop;
73
//            this.btnSearch = btnSearch;
74
            this.btnShowForm = btnShowForm;
75
            this.btnCreate.addActionListener(new ActionListener() {
76
                @Override
77
                public void actionPerformed(ActionEvent e) {
78
                    doCreate();
79
                }
80
            });
81
            this.btnDrop.addActionListener(new ActionListener() {
82
                @Override
83
                public void actionPerformed(ActionEvent e) {
84
                    doDrop();
85
                }
86
            });
87
            this.btnShowForm.addActionListener(new ActionListener() {
88
                @Override
89
                public void actionPerformed(ActionEvent e) {
90
                    doShowForm();
91
                }
92
            });
93
//            this.btnSearch.addActionListener(new ActionListener() {
94
//                @Override
95
//                public void actionPerformed(ActionEvent e) {
96
//                    doSearch();
97
//                }
98
//            });
99
        }
100

    
101
        private void doCreate() {
102
            DataManager dataManager = DALLocator.getDataManager();
103
            DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
104
            if (workspace.existsTable(this.tableid)) {
105
                return;
106
            }
107
            workspace.createTable(this.tableid);
108
        }
109

    
110
        private void doShowForm() {
111
            try {
112
                DataManager dataManager = DALLocator.getDataManager();
113
                DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
114
                if (!workspace.existsTable(this.tableid)) {
115
                    return;
116
                }
117
                FeatureStore store = workspace.getTable(this.tableid);
118
                DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
119
                JFeaturesForm form = dalSwingManager.createJFeaturesForm(store);
120
                WindowManager winManager = ToolsSwingLocator.getWindowManager();
121
                winManager.showWindow(
122
                        form.asJComponent(),
123
                        "Resources",
124
                        WindowManager.MODE.WINDOW
125
                );
126
            } catch (Exception ex) {
127
                LOGGER.warn("Can't show form of resources table.", ex);
128
            }
129
        }
130

    
131
        private void doDrop() {
132
            DataManager dataManager = DALLocator.getDataManager();
133
            DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
134
            if (!workspace.existsTable(this.tableid)) {
135
                return;
136
            }
137
            workspace.dropTable(this.tableid);
138
        }
139

    
140
//        private void doSearch() {
141
//            try {
142
//                DataManager dataManager = DALLocator.getDataManager();
143
//                DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
144
//                if (!workspace.existsTable(this.tableid)) {
145
//                    return;
146
//                }
147
//                FeatureStore store = workspace.getTable(this.tableid);
148
//                DataSwingManager dalSwingManager = DALSwingLocator.getSwingManager();
149
//                FeatureStoreSearchPanel search = dalSwingManager.createFeatureStoreSearchPanel(store);
150
//                WindowManager winManager = ToolsSwingLocator.getWindowManager();
151
//                winManager.showWindow(
152
//                        search.asJComponent(),
153
//                        "Resources",
154
//                        WindowManager.MODE.WINDOW
155
//                );
156
//            } catch (Exception ex) {
157
//                LOGGER.warn("Can't show search panel for resources table.", ex);
158
//            }
159
//        }
160
        public void setEnabled(boolean enabled) {
161
            this.btnCreate.setEnabled(enabled);
162
            this.btnDrop.setEnabled(enabled);
163
//            this.btnSearch.setEnabled(enabled);
164
            this.btnShowForm.setEnabled(enabled);
165
        }
166
    }
167

    
168
    private TableController resourcesTableController;
169
    private TableController repositoryTableController;
170
    private TableController configurationTableController;
171
    private PickerController<JDBCServerExplorerParameters> connectionPicker;
172

    
173
    public WorkspaceConfigurationPanel() {
174
        this.initComponents();
175
    }
176

    
177
    private void initComponents() {
178
        this.connectionPicker = DALSwingLocator.getSwingManager().createJDBCConnectionPickerController(
179
                this.cboConnections,
180
                this.btnAddConnection
181
        );
182
        this.connectionPicker.addChangeListener((ChangeEvent e) -> {
183
            doUpdateEnableComponents();
184
            doUpdateStoresRepositoryInfo();
185
        });
186
        this.resourcesTableController = new TableController(
187
                DatabaseWorkspaceManager.TABLE_RESOURCES,
188
                btnCreateResourceTable,
189
                btnDropResourceTable,
190
                btnShowResourceTable
191
        );
192
        this.repositoryTableController = new TableController(
193
                DatabaseWorkspaceManager.TABLE_REPOSITORY,
194
                btnCreateRepositoryTable,
195
                btnDropRepositoryTable,
196
                btnShowRepositoryTable
197
        );
198
        this.configurationTableController = new TableController(
199
                DatabaseWorkspaceManager.TABLE_CONFIGURATION,
200
                btnCreateConfigurationTable,
201
                btnDropConfigurationTable,
202
                btnShowConfigurationTable
203
        );
204

    
205
        this.btnRepositoryAddTable.addActionListener((ActionEvent e) -> {
206
            doAddTableToRepository();
207
        });
208

    
209
        this.btnConnectToRepository.addActionListener((ActionEvent e) -> {
210
            doConnectToRepository();
211
        });
212
        this.btnShowRepositoryTableParameters.addActionListener((ActionEvent e) -> {
213
            doShowParametersOfRepositoryTable();
214
        });
215
        this.btnFixRepositoryEntries.addActionListener((ActionEvent e) -> {
216
            doFixRepositoryEntriesToSelectedConnection();
217
        });
218
        this.pnlConfiguration.setLayout(new BorderLayout());
219
        this.pnlRepository.setLayout(new BorderLayout());
220
        this.pnlResorces.setLayout(new BorderLayout());
221
        
222
        
223
        ToolsSwingUtils.ensureRowsCols(this, 20, 150, 25, 200);
224
        doUpdateEnableComponents();
225
    }
226

    
227
    @Override
228
    public JComponent asJComponent() {
229
        return this;
230
    }
231

    
232
    public JDBCServerExplorerParameters getConnection() {
233
        JDBCServerExplorerParameters conn = this.connectionPicker.get();
234
        return conn;
235
    }
236

    
237
    private void doUpdateEnableComponents() {
238
        boolean theEnabled = this.getConnection() != null;
239
        this.repositoryTableController.setEnabled(theEnabled);
240
        this.resourcesTableController.setEnabled(theEnabled);
241
        this.configurationTableController.setEnabled(theEnabled);
242
        this.btnRepositoryAddTable.setEnabled(theEnabled);
243
        this.btnConnectToRepository.setEnabled(theEnabled);
244
    }
245

    
246
    private void doAddTableToRepository() {
247
        final RepositoryAddTablePanel panel = new RepositoryAddTablePanel();
248
        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
249
        final Dialog dialog = winManager.createDialog(
250
                panel,
251
                "Add table to repository",
252
                null,
253
                WindowManager_v2.BUTTONS_OK_CANCEL
254
        );
255
        dialog.addActionListener(new ActionListener() {
256
            @Override
257
            public void actionPerformed(ActionEvent e) {
258
                if (dialog.getAction() == WindowManager_v2.BUTTON_OK) {
259
                    DataManager dataManager = DALLocator.getDataManager();
260
                    DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
261
                    for (LabeledValue<DataStoreParameters> p : panel.getDataStoreParameters()) {
262
                        if (p == null) {
263
                            continue;
264
                        }
265
                        if (!workspace.writeStoresRepositoryEntry(p.getLabel(), p.getValue())) {
266
                            LOGGER.warn("Can't add table '" + p.getLabel() + "' to repository");
267
                            // TODO: mensaje al usuario,no se ha podido crear
268
                        }
269
                    }
270
                }
271
            }
272
        });
273
        dialog.show(WindowManager.MODE.DIALOG);
274
    }
275

    
276
    private void doUpdateStoresRepositoryInfo() {
277
        DataManager dataManager = DALLocator.getDataManager();
278
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
279

    
280
        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
281
        String id = workspace.get(CONFIG_NAME_STORESREPOSITORYID);
282
        String label = workspace.get(CONFIG_NAME_STORESREPOSITORYLABEL);
283
        this.txtStoresRepositoryId.setText(StringUtils.defaultIfBlank(id, ""));
284
        this.txtStoresRepositoryLabel.setText(StringUtils.defaultIfBlank(label, ""));
285

    
286
        this.btnConnectToRepository.setEnabled(!StringUtils.isBlank(id));
287

    
288
        try {
289
            this.pnlConfiguration.removeAll();
290
            this.configurationSearch = dataSwingManager.createFeatureStoreSearchPanel(
291
                    workspace.getTable(DatabaseWorkspaceManager.TABLE_CONFIGURATION)
292
            );
293
            this.pnlConfiguration.add(this.configurationSearch.asJComponent(), BorderLayout.CENTER);
294
            this.configurationSearch.setFilterOnlyMode(true);
295
            this.configurationSearch.setShowActions(false);
296
//            this.configurationSearch.setAllowCollapseSearchCondition(true);
297
//            this.configurationSearch.setCollapseSearchCondition(true);
298
        } catch (Exception ex) {
299

    
300
        }
301
        try {
302
            this.pnlRepository.removeAll();
303
            this.repositorySearch = dataSwingManager.createFeatureStoreSearchPanel(
304
                    workspace.getTable(DatabaseWorkspaceManager.TABLE_REPOSITORY)
305
            );
306
            this.pnlRepository.add(this.repositorySearch.asJComponent(), BorderLayout.CENTER);
307
            this.repositorySearch.setFilterOnlyMode(true);
308
            this.repositorySearch.setShowActions(false);
309
//            this.repositorySearch.setAllowCollapseSearchCondition(true);
310
//            this.repositorySearch.setCollapseSearchCondition(true);
311
        } catch (Exception ex) {
312

    
313
        }
314
        try {
315
            this.pnlResorces.removeAll();
316
            this.resourcesSearch = dataSwingManager.createFeatureStoreSearchPanel(
317
                    workspace.getTable(DatabaseWorkspaceManager.TABLE_RESOURCES)
318
            );
319
            this.resourcesSearch.setFilterOnlyMode(true);
320
            this.resourcesSearch.setShowActions(false);
321
//            this.resourcesSearch.setAllowCollapseSearchCondition(true);
322
//            this.resourcesSearch.setCollapseSearchCondition(true);
323
            this.pnlResorces.add(this.resourcesSearch.asJComponent(), BorderLayout.CENTER);
324
        } catch (Exception ex) {
325

    
326
        }
327

    
328
        this.invalidate();
329
    }
330

    
331
    private void doConnectToRepository() {
332
        DataManager dataManager = DALLocator.getDataManager();
333
        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
334
        StoresRepository repo = workspace.getStoresRepository();
335
        dataManager.getStoresRepository().addRepository(repo);
336
    }
337

    
338
    private void doShowParametersOfRepositoryTable() {
339
        try {
340
            DataManager dataManager = DALLocator.getDataManager();
341
            DataStoreParametersPanelManager manager = DALSwingLocator.getDataStoreParametersPanelManager();
342
            FeatureStore store = this.repositorySearch.getStore();
343
            Feature f = store.findFirst(this.repositorySearch.getFilterForSelectedFeature());
344
            if (f == null) {
345
                return;
346
            }
347
            String name = f.getString(DatabaseWorkspaceManager.FIELD_REPOSITORY_NAME);
348
            DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(getConnection());
349
            StoresRepository repository = workspace.getStoresRepository();
350
            DataStoreParameters parameters = repository.get(name);
351
            DataStoreParametersPanel panel = manager.createDataStoreParametersPanel(parameters);
352
            Dialog dialog = manager.createPropertiesDialog(parameters, panel);
353
            dialog.addActionListener((ActionEvent ae) -> {
354
                switch(ae.getID() ) {
355
                    case WindowManager_v2.BUTTON_APPLY:
356
                        manager.showAdvancedPropertiesDialog(parameters);
357
                        break;
358
                    case WindowManager_v2.BUTTON_OK:
359
                        panel.fetchParameters(parameters);
360
                        workspace.writeStoresRepositoryEntry(name, parameters);
361
                        break;
362
                    case WindowManager_v2.BUTTON_CANCEL:
363
                        break;
364
                }
365
            });
366
            dialog.show(WindowManager.MODE.WINDOW);
367
        } catch (Exception ex) {
368
            LOGGER.warn("Can't show parameters of repository table", ex);
369
        }
370
    }
371
    
372
    private void doFixRepositoryEntriesToSelectedConnection() {
373
        DataManager dataManager = DALLocator.getDataManager();
374
        I18nManager i18n = ToolsLocator.getI18nManager();
375

    
376
        JDBCServerExplorerParameters conn = getConnection();
377
        DatabaseWorkspaceManager workspace = dataManager.createDatabaseWorkspaceManager(conn);
378
        StoresRepository repository = workspace.getStoresRepository();
379

    
380
        int n = 0;
381
        for (String name : repository.keySet()) {
382
            DataStoreParameters params = repository.get(name);
383
            if( params instanceof JDBCStoreParameters ) {
384
                ((JDBCStoreParameters) params).setHost(conn.getHost());
385
                ((JDBCStoreParameters) params).setPort(conn.getPort());
386
                ((JDBCStoreParameters) params).setSchema(conn.getSchema());
387
                ((JDBCStoreParameters) params).setDBName(conn.getDBName());
388
                ((JDBCStoreParameters) params).setCatalog(conn.getCatalog());
389
                ((JDBCStoreParameters) params).setUser(conn.getUser());
390
                ((JDBCStoreParameters) params).setPassword(conn.getPassword());
391
                ((JDBCStoreParameters) params).setUrl(null);
392
                
393
                workspace.writeStoresRepositoryEntry(name, params);
394
                n++;
395
            }
396
        }
397
        ToolsSwingLocator.getThreadSafeDialogsManager().messageDialog(
398
                "Total updateds entries "+n, 
399
                i18n.getTranslation("_Manage_Dabatase_workspace"), 
400
                JOptionPane.INFORMATION_MESSAGE
401
        );
402

    
403
    }
404
}