Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.compat.cdc / org.gvsig.fmap.dal / org.gvsig.fmap.dal.swing / org.gvsig.fmap.dal.swing.impl / src / main / java / org / gvsig / fmap / dal / swing / impl / jdbc / DefaultJDBCConnectionDialog.java @ 44419

History | View | Annotate | Download (12.4 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (C) 2007-2013 gvSIG Association.
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 3
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.fmap.dal.swing.impl.jdbc;
25

    
26
import java.awt.BorderLayout;
27
import java.awt.event.ActionEvent;
28
import java.awt.event.ActionListener;
29
import java.awt.event.ItemEvent;
30
import java.awt.event.ItemListener;
31
import java.io.File;
32
import java.io.FileInputStream;
33
import java.io.FileOutputStream;
34
import java.io.InputStream;
35
import java.io.OutputStream;
36
import java.util.Objects;
37
import javax.swing.DefaultComboBoxModel;
38
import javax.swing.JOptionPane;
39
import javax.swing.filechooser.FileFilter;
40
import org.apache.commons.io.IOUtils;
41
import org.apache.commons.lang3.ArrayUtils;
42
import org.gvsig.filedialogchooser.FileDialogChooser;
43
import org.gvsig.fmap.dal.DALLocator;
44
import org.gvsig.fmap.dal.DataManager;
45
import org.gvsig.fmap.dal.DataServerExplorerPool;
46
import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
47
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
48
import org.gvsig.fmap.dal.swing.DALSwingLocator;
49
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
50
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
51
import org.gvsig.fmap.dal.swing.impl.dataStoreParameters.DataStoreDynObjectParametersPanel;
52
import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionPanel;
53
import org.gvsig.tools.ToolsLocator;
54
import org.gvsig.tools.i18n.I18nManager;
55
import org.gvsig.tools.swing.api.ToolsSwingLocator;
56
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
57

    
58
import org.slf4j.Logger;
59
import org.slf4j.LoggerFactory;
60
import org.gvsig.fmap.dal.swing.jdbc.JDBCConnectionDialog;
61
import org.gvsig.tools.folders.FoldersManager;
62
import org.gvsig.tools.persistence.PersistenceManager;
63
import org.gvsig.tools.persistence.PersistentState;
64
import org.gvsig.tools.swing.api.DropDown;
65
import org.gvsig.tools.swing.api.ToolsSwingManager;
66
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
67
import org.gvsig.tools.util.LabeledValue;
68
import org.gvsig.tools.util.LabeledValueImpl;
69

    
70

    
71

    
72

    
73
@SuppressWarnings("UseSpecificCatch")
74
public class DefaultJDBCConnectionDialog extends DefaultJDBCConnectionDialogView implements JDBCConnectionDialog {
75

    
76
    private static final long serialVersionUID = -5493563028200403559L;
77

    
78
    private static final Logger LOG = LoggerFactory
79
        .getLogger(DefaultJDBCConnectionDialog.class);
80

    
81
    private boolean isCanceled = false;
82
    private JDBCConnectionPanel jdbcServerExplorer;
83
    private DropDown ddnMore;
84

    
85
    public DefaultJDBCConnectionDialog() {
86
        initComponents();
87
    }
88
    
89
    private void initComponents() {
90
        I18nManager i18n = ToolsLocator.getI18nManager();
91
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
92
        this.btnAcept.setText(i18n.getTranslation("ok"));
93
        this.btnAcept.addActionListener(new ActionListener() {
94
            @Override
95
            public void actionPerformed(ActionEvent ae) {
96
                doAcept();
97
            }
98
        });
99
        this.btnCancel.setText(i18n.getTranslation("cancel"));
100
        this.btnCancel.addActionListener(new ActionListener() {
101
            @Override
102
            public void actionPerformed(ActionEvent ae) {
103
                doCancel();
104
            }
105
        });
106
        DefaultComboBoxModel<LabeledValue<String>> model = new DefaultComboBoxModel<>();
107
        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("advanced"), "advanced"));
108
        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("delete"), "delete"));
109
        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("load"), "load"));
110
        model.addElement(new LabeledValueImpl<>(i18n.getTranslation("save"), "save"));
111
        this.ddnMore = toolsSwingManager.createDropDown(this.btnMore);
112
        this.ddnMore.setModel(model);
113
        this.ddnMore.addItemListener(new ItemListener() {
114
            @Override
115
            public void itemStateChanged(ItemEvent e) {
116
                LabeledValue<String> selectedItem = (LabeledValue<String>) ddnMore.getSelectedItem();
117
                switch(selectedItem.getValue()) {
118
                    case "advanced":
119
                        doAdvanced();
120
                        break;
121
                    case "delete":
122
                        doDelete();
123
                        break;
124
                    case "load":
125
                        doLoad();
126
                        break;
127
                    case "save":
128
                        doSave();
129
                        break;
130
                }
131
            }
132
        });
133

    
134
        this.jdbcServerExplorer = DALSwingLocator.getSwingManager().createJDBCConnectionPanel();
135
        this.containerJDBCConnectionPanel.setLayout(new BorderLayout());
136
        this.containerJDBCConnectionPanel.add(
137
                this.jdbcServerExplorer.asJComponent(),
138
                BorderLayout.CENTER
139
        );
140
    }
141

    
142
    protected void doLoad() {
143
        I18nManager i18n = ToolsLocator.getI18nManager();
144
        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
145
        FoldersManager folderManager = ToolsLocator.getFoldersManager();
146
        DataManager dataManager = DALLocator.getDataManager();
147

    
148
        File initialPath = folderManager.getLastPath("CONNECTIONS", null);
149
        File[] f = dialogs.showChooserDialog(
150
                i18n.getTranslation("_Load_connection"), 
151
                FileDialogChooser.OPEN_DIALOG, 
152
                FileDialogChooser.FILES_ONLY,
153
                false, 
154
                initialPath, 
155
                new FileFilter() {
156
                    @Override
157
                    public boolean accept(File f) {
158
                        return Objects.toString(f,"").toLowerCase().endsWith(".gvdbcon");
159
                    }
160

    
161
                    @Override
162
                    public String getDescription() {
163
                        return "Database connection (gvdbcon)";
164
                    }
165
                }, 
166
                true
167
        );
168
        if( ArrayUtils.isEmpty(f) || f[0]==null ) {
169
            return;
170
        }
171
        folderManager.setLastPath("CONNECTIONS", f[0].getParentFile());
172
        InputStream in = null;
173
        try {
174
            in = new FileInputStream(f[0]);
175
            PersistenceManager persistence = ToolsLocator.getPersistenceManager();
176
            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) persistence.getObject(in);
177
            LabeledValueImpl<JDBCServerExplorerParameters> parameters = new LabeledValueImpl<>(
178
                    entry.getName(), 
179
                    (JDBCServerExplorerParameters)entry.getExplorerParameters()
180
            );
181
            this.jdbcServerExplorer.setLabeledServerExplorerParameters(parameters);
182
        } catch(Throwable th) {
183
            LOG.warn("Problems loading connection",th);
184
            dialogs.messageDialog(
185
                    i18n.getTranslation("_Problems_loading_the_connection"), 
186
                    i18n.getTranslation("_Load_connection"), 
187
                    JOptionPane.WARNING_MESSAGE
188
            );
189
//            return;
190
        } finally {
191
            IOUtils.closeQuietly(in);
192
        }
193
    }
194
    
195
    protected void doSave() {
196
        I18nManager i18n = ToolsLocator.getI18nManager();
197
        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
198
        FoldersManager folderManager = ToolsLocator.getFoldersManager();
199
        DataManager dataManager = DALLocator.getDataManager();
200

    
201
        LabeledValue<JDBCServerExplorerParameters> parameters = this.getLabeledServerExplorerParameters();
202
        if( parameters == null || parameters.getValue()==null ) {
203
            dialogs.messageDialog(
204
                    i18n.getTranslation("_There_is_no_connection_to_save"), 
205
                    i18n.getTranslation("_Save_connection"), 
206
                    JOptionPane.INFORMATION_MESSAGE
207
            );
208
            return;
209
        }
210
        File initialPath = folderManager.getLastPath("CONNECTIONS", null);
211
        File[] f = dialogs.showChooserDialog(
212
                i18n.getTranslation("_Save_connection"), 
213
                FileDialogChooser.SAVE_DIALOG, 
214
                FileDialogChooser.FILES_ONLY,
215
                false, 
216
                initialPath, 
217
                new FileFilter() {
218
                    @Override
219
                    public boolean accept(File f) {
220
                        return Objects.toString(f,"").toLowerCase().endsWith(".gvdbcon");
221
                    }
222

    
223
                    @Override
224
                    public String getDescription() {
225
                        return "Database connection (gvdbcon)";
226
                    }
227
                }, 
228
                true
229
        );
230
        if( ArrayUtils.isEmpty(f) || f[0]==null ) {
231
            return;
232
        }
233
        folderManager.setLastPath("CONNECTIONS", f[0].getParentFile());
234

    
235
        File paramsFile = f[0];
236
        if( !f[0].toString().toLowerCase().endsWith(".gvdbcon") ) {
237
            paramsFile = new File(f[0].toString()+".gvdbcon");
238
        }
239

    
240
        DataServerExplorerPool pool = dataManager.getDataServerExplorerPool();
241
        DataServerExplorerPoolEntry entry = pool.createEntry(
242
                parameters.getLabel(), 
243
                null, 
244
                parameters.getValue()
245
        );
246
        
247
        OutputStream out = null;
248
        try {
249
            out = new FileOutputStream(paramsFile);
250
            PersistenceManager persistence = ToolsLocator.getPersistenceManager();
251
            PersistentState state = persistence.getState(entry);
252
            persistence.saveState(state, out);
253
        } catch(Throwable th) {
254
            LOG.warn("Problems saving connection",th);
255
            dialogs.messageDialog(
256
                    i18n.getTranslation("_Problems_saving_the_connection"), 
257
                    i18n.getTranslation("_Save_connection"), 
258
                    JOptionPane.WARNING_MESSAGE
259
            );
260
//            return;
261
        } finally {
262
            IOUtils.closeQuietly(out);
263
        }
264
    }
265
    
266
    protected void doAdvanced() {
267
        JDBCServerExplorerParameters myParams = this.getServerExplorerParameters();
268
        try {
269
            myParams.validate();
270
        } catch (Exception e) {
271
            // ignore... only for fill default values
272
        }
273
        DataStoreParametersPanelManager paramsManager = DALSwingLocator.getDataStoreParametersPanelManager();
274
        DataStoreParametersPanel panel =  new DataStoreDynObjectParametersPanel(myParams);
275
        paramsManager.showPropertiesDialog(myParams, panel);
276
    }
277
    
278
    protected void doAcept() {
279
        this.isCanceled = false;
280
        this.setVisible(false);
281
    }
282
    
283
    protected void doCancel() {
284
        this.isCanceled = true;
285
        this.setVisible(false);
286
    }
287
    
288
    protected void doDelete() {
289
            this.jdbcServerExplorer.delete();
290
            this.jdbcServerExplorer.clear();
291
    }
292
    
293
    @Override
294
    public void showDialog() {
295
        I18nManager i18nManager = ToolsLocator.getI18nManager();
296
        WindowManager winmgr = ToolsSwingLocator.getWindowManager();
297
        winmgr.showWindow(
298
                this, 
299
                i18nManager.getTranslation("_Connection_parameters"), 
300
                WindowManager.MODE.DIALOG
301
        );
302
    }
303
    
304
    @Override
305
    public boolean isCanceled() {
306
        return this.isCanceled;
307
    }
308
    
309
    @Override
310
    public JDBCServerExplorerParameters getServerExplorerParameters() {
311
        return this.jdbcServerExplorer.getServerExplorerParameters();
312
    }
313
    
314
    @Override
315
    public LabeledValue<JDBCServerExplorerParameters> getLabeledServerExplorerParameters() {
316
        return this.jdbcServerExplorer.getLabeledServerExplorerParameters();
317
    }
318
    
319
    @Override
320
    public String getConnectionName() {
321
        return this.jdbcServerExplorer.getConnectionName();
322
    }
323
   
324
}
325