Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.xml2db / org.gvsig.xml2db.swing / org.gvsig.xml2db.swing.impl / src / main / java / org / gvsig / xml2db / swing / impl / importxml2db / ImportXML2dbPanel.java @ 47335

History | View | Annotate | Download (9.55 KB)

1
/* gvSIG. Desktop Geographic Information System.
2
 *
3
 * Copyright (c) 2007-2023 gvSIG Association
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., 51 Franklin Street, Fifth Floor, Boston,
18
 * MA  02110-1301, USA.
19
 *
20
 * For any additional information, do not hesitate to contact us
21
 * at info AT gvsig.com, or visit our website www.gvsig.com.
22
 */
23
package org.gvsig.xml2db.swing.impl.importxml2db;
24

    
25
import java.awt.Color;
26
import java.io.File;
27
import java.nio.charset.Charset;
28
import javax.swing.JComponent;
29
import javax.swing.JOptionPane;
30
import javax.swing.SwingUtilities;
31
import javax.swing.event.ChangeEvent;
32
import org.apache.commons.lang3.StringUtils;
33
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
34
import org.gvsig.fmap.dal.swing.DALSwingLocator;
35
import org.gvsig.fmap.dal.swing.DataSwingManager;
36
import org.gvsig.tools.ToolsLibrary;
37
import org.gvsig.tools.ToolsLocator;
38
import org.gvsig.tools.i18n.I18nManager;
39
import org.gvsig.tools.swing.api.ToolsSwingLocator;
40
import org.gvsig.tools.swing.api.ToolsSwingManager;
41
import org.gvsig.tools.swing.api.ToolsSwingUtils;
42
import org.gvsig.tools.swing.api.pickercontroller.CharsetPickerController;
43
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
44
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
45
import org.gvsig.tools.swing.api.task.TaskStatusController;
46
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
47
import org.gvsig.tools.swing.api.windowmanager.Dialog;
48
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
49
import org.gvsig.tools.task.SimpleTaskStatus;
50
import org.gvsig.xml2db.lib.api.Xml2dbLocator;
51
import org.gvsig.xml2db.lib.api.Xml2dbManager;
52
import org.gvsig.xml2db.swing.Xml2dbPanel;
53
import org.gvsig.xml2db.swing.impl.Xml2dbSwingCommons;
54
import org.gvsig.xml2db.swing.impl.createdbfromxml.CreatedbFromXmlPanel;
55
import org.gvsig.xml2db.swing.impl.Task;
56
import org.slf4j.Logger;
57
import org.slf4j.LoggerFactory;
58

    
59
/**
60
 *
61
 * @author jjdelcerro
62
 */
63
public class ImportXML2dbPanel 
64
        extends ImportXML2dbPanelView
65
        implements Xml2dbPanel
66
    {
67
    protected static final Logger LOGGER = LoggerFactory.getLogger(CreatedbFromXmlPanel.class);
68

    
69

    
70
    private Dialog dialog;
71
    private FilePickerController pickerXMLFile;
72
    private PickerController<JDBCServerExplorerParameters> pickerConnection;
73
    private TaskStatusController taskStatusController;
74
    private Task lastTask;
75
    private CharsetPickerController pickerCharset;
76
   
77
    public ImportXML2dbPanel() {
78
        this.createComponents();
79
    }
80
    
81
    private void createComponents() {    
82
        this.lastTask = Task.FAKE_TASK;
83
        this.initComponents();
84
    }
85
    
86
    private void initComponents() {
87
    
88
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
89
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
90
        
91
        this.taskStatusController = ToolsSwingLocator.getTaskStatusSwingManager().createTaskStatusController(
92
                lblStatusCaption, 
93
                lblStatusMsg,
94
                pbStatus
95
        );
96
        this.taskStatusController.setVisible(false);
97

    
98
        this.translate();
99
        
100
        this.pickerXMLFile = toolsSwingManager.createFilePickerController(
101
                this.txtXMLFile, 
102
                this.btnXMLFile
103
        );
104
        this.pickerXMLFile.addChangeListener((ChangeEvent e) -> {
105
            updateStateComponents();
106
        });
107
        
108
        this.pickerCharset = toolsSwingManager.createCharsetPickerController(
109
                null,
110
                this.cboCharset
111
        );
112
        this.pickerCharset.set(null);        
113
        
114
        this.pickerConnection = dataSwingManager.createJDBCConnectionPickerController(
115
                this.cboConnection, 
116
                this.btnConnection
117
        );
118
        this.pickerConnection.addChangeListener((ChangeEvent e) -> {
119
            updateStateComponents();
120
        });
121
        this.chkConnectToRepository.setSelected(true);
122
        
123
        ToolsSwingUtils.ensureRowsCols(this, 8, 80, 10, 100);
124
    }
125
    
126
    private void translate() {
127
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
128
        
129
        toolsSwingManager.translate(lblDatabase);
130
        toolsSwingManager.translate(lblFileXML);
131
        toolsSwingManager.translate(lblCharset);
132
        toolsSwingManager.translate(lblConnectToRepository);
133
    }
134
    
135
    private void updateStateComponents() {
136
        if( !SwingUtilities.isEventDispatchThread() ) {
137
            SwingUtilities.invokeLater(this::updateStateComponents);
138
            return;
139
        }
140
        message(null);
141
        if( this.isProcessing() ) {
142
            this.pickerXMLFile.setEnabled(false);
143
            this.pickerCharset.setEnabled(false);
144
            this.pickerConnection.setEnabled(false);
145
            if( this.dialog!=null ) {
146
                this.dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, false);
147
            }
148
            return;
149
        }
150
        this.pickerXMLFile.setEnabled(true);
151
        this.pickerCharset.setEnabled(true);
152
        this.pickerConnection.setEnabled(true);
153
        
154
        File xmlfile = this.pickerXMLFile.get();
155
        if( xmlfile == null || !xmlfile.exists() ) {
156
            if( xmlfile==null ) {
157
                this.message("_XML_file_is_required", JOptionPane.WARNING_MESSAGE);
158
            } else {
159
                this.message("_XML_file_not_exists", JOptionPane.WARNING_MESSAGE);
160
            }
161
            if( this.dialog!=null ) {
162
                this.dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, false);
163
            }
164
            return;
165
        }
166
        JDBCServerExplorerParameters conn = this.pickerConnection.get();
167
        if( conn==null ) {
168
            this.message("_Database_is_required", JOptionPane.WARNING_MESSAGE);
169
            if( this.dialog!=null ) {
170
                this.dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, false);
171
            }
172
            return;
173
        }
174
        if( this.dialog!=null ) {
175
            this.dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK, true);        
176
        }
177
        this.taskStatusController.setVisible(this.lastTask.needToShowTheStatus());        
178
    }
179

    
180
    @Override
181
    public void setDialog(Dialog dialog) {
182
        this.dialog = dialog;
183
    }
184

    
185
    @Override
186
    public JComponent asJComponent() {
187
        return this;
188
    }
189
    
190
    @Override
191
    public void performAction() {
192
        doImportXML();
193
    }
194

    
195
    private void doImportXML() {
196
        Xml2dbManager manager = Xml2dbLocator.getXml2dbManager();
197
        File xmlfile = this.pickerXMLFile.get();
198
        if( xmlfile == null || !xmlfile.exists() ) {
199
            return;
200
        }
201
        JDBCServerExplorerParameters dbparams = this.pickerConnection.get();
202
        if( dbparams==null ) {
203
            return;
204
        }
205
        Charset charset = this.pickerCharset.get();
206
        boolean connectToRepository = this.chkConnectToRepository.isSelected();
207
        
208
        this.lastTask = new Task(                
209
                "Xml2db_copyXmml2Db", 
210
                "Coping XML data", 
211
                this::updateStateComponents, 
212
                taskStatusController
213
            ) {
214
            @Override
215
            protected void task(SimpleTaskStatus taskStatus) throws Throwable{
216
                try {
217
                    manager.copyXml2Db(xmlfile, charset, dbparams, taskStatus);
218
                    if( connectToRepository) {
219
                        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
220
                        dataSwingManager.connectToDatabaseWorkspace(dbparams);                        
221
                    }
222
                    taskStatus.terminate();
223
                } catch(Exception ex) {
224
                    LOGGER.warn("Can't import xml",ex);
225
                    I18nManager i18n = ToolsLocator.getI18nManager();
226
                    ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
227
                    dialogs.messageDialog(
228
                            i18n.getTranslation("_Problems_processing_XML_file")
229
                                    +"\n\n"
230
                                    + ex.getLocalizedMessage(), 
231
                            i18n.getTranslation("_Xml2db_Import_xml_data_to_a_existing_database"), 
232
                            JOptionPane.WARNING_MESSAGE
233
                    );
234
                    throw ex;
235
                }
236
            }
237
        };
238
        this.lastTask.start();
239
    }
240
    
241
    private void message(String msg) {
242
        message(msg,JOptionPane.INFORMATION_MESSAGE);
243
    }
244
    
245
    private void message(String msg, int type) {
246
        if( StringUtils.isBlank(msg) ) {
247
            this.lblStatusMsg.setText("");
248
            return;
249
        }
250
        if( type == JOptionPane.WARNING_MESSAGE ) {
251
            msg = Xml2dbSwingCommons.getHTMLColorTag(Color.RED.darker(), msg);
252
        }        
253
        this.lblStatusMsg.setText(msg);
254
        this.lblStatusMsg.setVisible(true);
255
    }
256

    
257
    private boolean isProcessing() {
258
        return this.lastTask.isProcessing();
259
    }
260
    
261
}