Revision 44419 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

View differences:

DefaultJDBCConnectionDialog.java
26 26
import java.awt.BorderLayout;
27 27
import java.awt.event.ActionEvent;
28 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;
29 47
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
30 48
import org.gvsig.fmap.dal.swing.DALSwingLocator;
31 49
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
......
40 58
import org.slf4j.Logger;
41 59
import org.slf4j.LoggerFactory;
42 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;
43 69

  
44 70

  
45 71

  
46 72

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

  
49 76
    private static final long serialVersionUID = -5493563028200403559L;
......
53 80

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

  
57 85
    public DefaultJDBCConnectionDialog() {
58 86
        initComponents();
59 87
    }
60 88
    
61 89
    private void initComponents() {
62
        I18nManager i18nManager = ToolsLocator.getI18nManager();
63
        this.btnAdvanced.setText(i18nManager.getTranslation("advanced"));
64
        this.btnAdvanced.addActionListener(new ActionListener() {
65
            @Override
66
            public void actionPerformed(ActionEvent ae) {
67
                doAdvanced();
68
            }
69
        });
70
        this.btnAcept.setText(i18nManager.getTranslation("ok"));
90
        I18nManager i18n = ToolsLocator.getI18nManager();
91
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
92
        this.btnAcept.setText(i18n.getTranslation("ok"));
71 93
        this.btnAcept.addActionListener(new ActionListener() {
72 94
            @Override
73 95
            public void actionPerformed(ActionEvent ae) {
74 96
                doAcept();
75 97
            }
76 98
        });
77
        this.btnCancel.setText(i18nManager.getTranslation("cancel"));
99
        this.btnCancel.setText(i18n.getTranslation("cancel"));
78 100
        this.btnCancel.addActionListener(new ActionListener() {
79 101
            @Override
80 102
            public void actionPerformed(ActionEvent ae) {
81 103
                doCancel();
82 104
            }
83 105
        });
84
        
85
        this.btnDelete.setText(i18nManager.getTranslation("del"));
86
        this.btnDelete.addActionListener(new ActionListener() {
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() {
87 114
            @Override
88
            public void actionPerformed(ActionEvent ae) {
89
            	doDelete();
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
                }
90 131
            }
91 132
        });
133

  
92 134
        this.jdbcServerExplorer = DALSwingLocator.getSwingManager().createJDBCConnectionPanel();
93 135
        this.containerJDBCConnectionPanel.setLayout(new BorderLayout());
94 136
        this.containerJDBCConnectionPanel.add(
......
96 138
                BorderLayout.CENTER
97 139
        );
98 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
    }
99 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
    
100 266
    protected void doAdvanced() {
101 267
        JDBCServerExplorerParameters myParams = this.getServerExplorerParameters();
102 268
        try {
......
146 312
    }
147 313
    
148 314
    @Override
315
    public LabeledValue<JDBCServerExplorerParameters> getLabeledServerExplorerParameters() {
316
        return this.jdbcServerExplorer.getLabeledServerExplorerParameters();
317
    }
318
    
319
    @Override
149 320
    public String getConnectionName() {
150 321
        return this.jdbcServerExplorer.getConnectionName();
151 322
    }

Also available in: Unified diff