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

View differences:

ImportXML2dbPanel.java
22 22
 */
23 23
package org.gvsig.xml2db.swing.impl.importxml2db;
24 24

  
25
import java.awt.Color;
26
import java.io.File;
27
import java.nio.charset.Charset;
25 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;
26 33
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
27 34
import org.gvsig.fmap.dal.swing.DALSwingLocator;
28 35
import org.gvsig.fmap.dal.swing.DataSwingManager;
29 36
import org.gvsig.tools.swing.api.ToolsSwingLocator;
30 37
import org.gvsig.tools.swing.api.ToolsSwingManager;
31 38
import org.gvsig.tools.swing.api.ToolsSwingUtils;
39
import org.gvsig.tools.swing.api.pickercontroller.CharsetPickerController;
32 40
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
33 41
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
42
import org.gvsig.tools.swing.api.task.TaskStatusController;
34 43
import org.gvsig.tools.swing.api.windowmanager.Dialog;
44
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
45
import org.gvsig.tools.task.SimpleTaskStatus;
46
import org.gvsig.xml2db.lib.api.Xml2dbLocator;
47
import org.gvsig.xml2db.lib.api.Xml2dbManager;
35 48
import org.gvsig.xml2db.swing.Xml2dbPanel;
49
import org.gvsig.xml2db.swing.impl.Xml2dbSwingCommons;
50
import org.gvsig.xml2db.swing.impl.createdbfromxml.CreatedbFromXmlPanel;
51
import org.gvsig.xml2db.swing.impl.Task;
52
import org.slf4j.Logger;
53
import org.slf4j.LoggerFactory;
36 54

  
37 55
/**
38 56
 *
......
42 60
        extends ImportXML2dbPanelView
43 61
        implements Xml2dbPanel
44 62
    {
63
    protected static final Logger LOGGER = LoggerFactory.getLogger(CreatedbFromXmlPanel.class);
45 64

  
65

  
46 66
    private Dialog dialog;
47 67
    private FilePickerController pickerXMLFile;
48 68
    private PickerController<JDBCServerExplorerParameters> pickerConnection;
49
    
69
    private TaskStatusController taskStatusController;
70
    private Task lastTask;
71
    private CharsetPickerController pickerCharset;
72
   
50 73
    public ImportXML2dbPanel() {
51 74
        this.createComponents();
52 75
    }
53 76
    
54 77
    private void createComponents() {    
78
        this.lastTask = Task.FAKE_TASK;
55 79
        this.initComponents();
56 80
    }
57 81
    
......
60 84
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
61 85
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
62 86
        
87
        this.taskStatusController = ToolsSwingLocator.getTaskStatusSwingManager().createTaskStatusController(
88
                lblStatusCaption, 
89
                lblStatusMsg,
90
                pbStatus
91
        );
92
        this.taskStatusController.setVisible(false);
93

  
63 94
        this.translate();
64 95
        
65 96
        this.pickerXMLFile = toolsSwingManager.createFilePickerController(
66 97
                this.txtXMLFile, 
67 98
                this.btnXMLFile
68 99
        );
69

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

  
86 176
    @Override
......
95 185
    
96 186
    @Override
97 187
    public void performAction() {
188
        doImportXML();
189
    }
190

  
191
    private void doImportXML() {
192
        Xml2dbManager manager = Xml2dbLocator.getXml2dbManager();
193
        File xmlfile = this.pickerXMLFile.get();
194
        if( xmlfile == null || !xmlfile.exists() ) {
195
            return;
196
        }
197
        JDBCServerExplorerParameters dbparams = this.pickerConnection.get();
198
        if( dbparams==null ) {
199
            return;
200
        }
201
        Charset charset = this.pickerCharset.get();
202
        boolean connectToRepository = this.chkConnectToRepository.isSelected();
98 203
        
204
        this.lastTask = new Task(                
205
                "Xml2db_copyXmml2Db", 
206
                "Coping XML data", 
207
                this::updateStateComponents, 
208
                taskStatusController
209
            ) {
210
            @Override
211
            protected void task(SimpleTaskStatus taskStatus) throws Throwable{
212
                try {
213
                    manager.copyXml2Db(xmlfile, charset, dbparams, taskStatus);
214
                    if( connectToRepository) {
215
                        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
216
                        dataSwingManager.connectToDatabaseWorkspace(dbparams);                        
217
                    }
218
                } catch(Exception ex) {
219
                    LOGGER.warn("Can't import xml",ex);
220
                    throw ex;
221
                }
222
            }
223
        };
224
        this.lastTask.start();
99 225
    }
226
    
227
    private void message(String msg) {
228
        message(msg,JOptionPane.INFORMATION_MESSAGE);
229
    }
230
    
231
    private void message(String msg, int type) {
232
        if( StringUtils.isBlank(msg) ) {
233
            this.lblStatusMsg.setText("");
234
            return;
235
        }
236
        if( type == JOptionPane.WARNING_MESSAGE ) {
237
            msg = Xml2dbSwingCommons.getHTMLColorTag(Color.RED.darker(), msg);
238
        }        
239
        this.lblStatusMsg.setText(msg);
240
        this.lblStatusMsg.setVisible(true);
241
    }
100 242

  
243
    private boolean isProcessing() {
244
        return this.lastTask.isProcessing();
245
    }
246
    
101 247
}

Also available in: Unified diff