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 / createdbfromxml / CreatedbFromXmlPanel.java @ 47263

History | View | Annotate | Download (10.9 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.createdbfromxml;
24

    
25
import java.awt.Cursor;
26
import java.awt.GridBagConstraints;
27
import java.awt.event.ActionEvent;
28
import java.awt.event.ActionListener;
29
import java.io.File;
30
import java.util.ArrayList;
31
import java.util.List;
32
import javax.swing.AbstractListModel;
33
import javax.swing.JComponent;
34
import org.cresques.cts.IProjection;
35
import java.nio.charset.Charset;
36
import java.util.Collections;
37
import javax.swing.SwingUtilities;
38
import javax.swing.event.ChangeEvent;
39
import javax.swing.event.ChangeListener;
40
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
41
import org.gvsig.fmap.dal.swing.DALSwingLocator;
42
import org.gvsig.fmap.dal.swing.DataSwingManager;
43
import org.gvsig.fmap.dal.swing.ProjectionPickerController;
44
import org.gvsig.fmap.dal.swing.featuretype.FeatureTypePanel;
45
import org.gvsig.tools.swing.api.ToolsSwingLocator;
46
import org.gvsig.tools.swing.api.ToolsSwingManager;
47
import org.gvsig.tools.swing.api.ToolsSwingUtils;
48
import org.gvsig.tools.swing.api.pickercontroller.CharsetPickerController;
49
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
50
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
51
import org.gvsig.tools.swing.api.windowmanager.Dialog;
52
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
53
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
54
import org.gvsig.tools.util.LabeledValue;
55
import org.gvsig.tools.util.LabeledValueImpl;
56
import org.gvsig.xml2db.lib.api.Xml2dbLocator;
57
import org.gvsig.xml2db.lib.api.Xml2dbManager;
58
import org.gvsig.xml2db.lib.api.xmlinfo.XMLInfo;
59
import org.gvsig.xml2db.lib.api.xmlinfo.XMLTableInfo;
60
import org.gvsig.xml2db.swing.Xml2dbPanel;
61

    
62
/**
63
 *
64
 * @author jjdelcerro
65
 */
66
public class CreatedbFromXmlPanel 
67
        extends CreatedbFromXmlPanelView 
68
        implements Xml2dbPanel
69
    {
70

    
71
    private static class XMLInfoListModel extends AbstractListModel<LabeledValue<XMLTableInfo>> {
72
        
73
        private final XMLInfo xmlinfo;
74
        private final List<LabeledValue<XMLTableInfo>> tables;
75
        
76
        
77
        public XMLInfoListModel() {
78
            this(null);
79
        }
80
        
81
        public XMLInfoListModel(XMLInfo xmlinfo) {
82
            this.xmlinfo = xmlinfo;
83
            if( xmlinfo != null ) {
84
                this.tables = new ArrayList<>(xmlinfo.size());
85
                for (XMLTableInfo tableInfo : xmlinfo) {
86
                    this.tables.add(new LabeledValueImpl<>(tableInfo.getName(),tableInfo));
87
                }
88
            } else {
89
                this.tables = null;
90
            }
91
        }
92

    
93
        @Override
94
        public LabeledValue<XMLTableInfo> getElementAt(int index) {
95
            if( this.tables == null ) {
96
                return null;
97
            }
98
            return tables.get(index);
99
        }
100

    
101
        @Override
102
        public int getSize() {
103
            if( this.tables == null ) {
104
                return 0;
105
            }
106
            return this.tables.size();
107
        }
108
        
109
        
110
    }
111
            
112
    
113
    private Dialog dialog;
114
    private FilePickerController pickerXMLFile;
115
    private PickerController<JDBCServerExplorerParameters> pickerConnection;
116
    private ProjectionPickerController pickerProjection;
117
    private CharsetPickerController pickerCharset;
118
    private boolean processing;
119
    
120
    public CreatedbFromXmlPanel() {
121
        this.createComponents();
122
    }
123
    
124
    private void createComponents() {    
125
        this.processing = false;
126
        this.initComponents();
127
    }
128
    
129
    private void initComponents() {
130
    
131
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
132
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
133
        
134
        this.translate();
135
        
136
        this.lstTables.setModel(new XMLInfoListModel());
137
        
138
        this.pickerXMLFile = toolsSwingManager.createFilePickerController(
139
                this.txtXMLFile, 
140
                this.btnXMLFile
141
        );
142
        this.pickerXMLFile.addChangeListener((ChangeEvent e) -> {
143
            updateEnableComponents();
144
        });
145

    
146
        this.pickerCharset = toolsSwingManager.createCharsetPickerController(
147
                null,
148
                this.cboCharset
149
        );
150
        
151
        this.pickerProjection = dataSwingManager.createProjectionPickerController(
152
                this.txtProjection, 
153
                this.btnProjection
154
        );
155
        
156
        this.pickerConnection = dataSwingManager.createJDBCConnectionPickerController(
157
                this.cboConnection, 
158
                this.btnConnection
159
        );
160
        
161
        this.btnAnalizeXML.addActionListener(new ActionListener() {
162
            @Override
163
            public void actionPerformed(ActionEvent e) {
164
                doAnalizeXML();
165
            }
166
        });
167
        this.btnAnalizeXML.setCursor(new Cursor(Cursor.HAND_CURSOR));
168
        
169
        this.btnViewTableStructure.addActionListener(new ActionListener() {
170
            @Override
171
            public void actionPerformed(ActionEvent e) {
172
                doViewTableStructure();
173
            }
174
        });
175
        this.btnViewTableStructure.setCursor(new Cursor(Cursor.HAND_CURSOR));
176
        
177
        this.pickerCharset.set(Charset.defaultCharset());
178
        
179
        SwingUtilities.invokeLater(() -> { updateEnableComponents(); });
180
        
181
        ToolsSwingUtils.ensureRowsCols(this, 4, 80, 5, 100);
182
    }
183

    
184
    private void translate() {
185
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
186
        
187
        toolsSwingManager.translate(this.lblCharset);
188
        toolsSwingManager.translate(this.lblConnectionName);
189
        toolsSwingManager.translate(this.lblCreatedb);
190
        toolsSwingManager.translate(this.lblFileXML);
191
        toolsSwingManager.translate(this.lblFileXML1);
192
        toolsSwingManager.translate(this.lblTables);
193
        toolsSwingManager.translate(this.btnAnalizeXML);
194
        toolsSwingManager.translate(this.btnViewTableStructure);
195
    }
196
    
197
    private boolean isProcessing() {
198
        return this.processing;
199
    }
200
    
201
    private void updateEnableComponents() {
202
        
203
        if( this.isProcessing() ) {
204
            this.pickerXMLFile.setEnabled(false);
205
            this.pickerCharset.setEnabled(false);
206
            this.pickerProjection.setEnabled(false);
207
            this.btnAnalizeXML.setEnabled(false);
208
            this.lstTables.setEnabled(false);
209
            this.btnViewTableStructure.setEnabled(false);
210
            if( this.dialog!=null ) {
211
                this.dialog.setButtonEnabled(WindowManager_v2.BUTTONS_OK, false);
212
            }
213
        }
214
        this.pickerXMLFile.setEnabled(true);
215
        this.pickerCharset.setEnabled(true);
216
        this.pickerProjection.setEnabled(true);
217
        
218
        File xmlfile = this.pickerXMLFile.get();
219
        if( xmlfile == null || !xmlfile.exists() ) {
220
            this.btnAnalizeXML.setEnabled(false);
221
            this.lstTables.setEnabled(false);
222
            this.btnViewTableStructure.setEnabled(false);
223
            if( this.dialog!=null ) {
224
                this.dialog.setButtonEnabled(WindowManager_v2.BUTTONS_OK, false);
225
            }
226
            return;
227
        }
228
        this.btnAnalizeXML.setEnabled(true);
229
        if( this.lstTables.getModel().getSize()<1 ) {
230
            this.btnViewTableStructure.setEnabled(false);
231
            if( this.dialog!=null ) {
232
                this.dialog.setButtonEnabled(WindowManager_v2.BUTTONS_OK, false);
233
            }
234
            return;
235
        }
236
        this.lstTables.setEnabled(true);
237
        this.btnViewTableStructure.setEnabled(true);
238
        JDBCServerExplorerParameters connection = this.pickerConnection.get();
239
        if( connection == null ) {
240
            if( this.dialog!=null ) {
241
                this.dialog.setButtonEnabled(WindowManager_v2.BUTTONS_OK, false);
242
            }
243
            return;
244
        }
245
        if( this.dialog!=null ) {
246
            this.dialog.setButtonEnabled(WindowManager_v2.BUTTONS_OK, false);        
247
        }
248
    }
249

    
250
    @Override
251
    public void setDialog(Dialog dialog) {
252
        this.dialog = dialog;
253
    }
254

    
255
    @Override
256
    public JComponent asJComponent() {
257
        return this;
258
    }
259
    
260
    @Override
261
    public void performAction() {
262
        
263
    }
264

    
265
    private void doAnalizeXML() {
266
        Xml2dbManager manager = Xml2dbLocator.getXml2dbManager();
267
        try {
268
            File xmlfile = this.pickerXMLFile.get();
269
            if( xmlfile == null || !xmlfile.exists() ) {
270
                return;
271
            }
272
            IProjection proj = this.pickerProjection.get();
273
            Charset charset = this.pickerCharset.get();
274

    
275
            XMLInfo xmlinfo = manager.extractStructure(xmlfile, charset, proj);
276
            if( xmlinfo != null ) {
277
                this.lstTables.setModel(new XMLInfoListModel(xmlinfo));
278
            }
279
        } catch(Exception ex) {
280
            //FIXME: LOGGER
281
            this.lstTables.setModel(new XMLInfoListModel());
282
        }
283
        this.updateEnableComponents();
284
    }
285
    
286
    private void doViewTableStructure() {
287
        LabeledValue<XMLTableInfo> x = (LabeledValue<XMLTableInfo>)this.lstTables.getSelectedValue();
288
        if( x == null ) {
289
            return;
290
        }
291
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
292
        WindowManager_v2 windowManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
293
        FeatureTypePanel panel = dataSwingManager.createFeatureTypePanel();
294
        panel.put(x.getValue().getFeatureType());
295
        Dialog dialog = windowManager.createDialog(
296
                panel.asJComponent(),
297
                "tit",
298
                null, 
299
                WindowManager_v2.BUTTONS_OK_CANCEL
300
        );
301
        dialog.addActionListener(new ActionListener() {
302
            @Override
303
            public void actionPerformed(ActionEvent e) {
304
                if( dialog.getAction()==WindowManager_v2.BUTTON_OK) {
305
                    panel.fetch(x.getValue().getFeatureType());
306
                }
307
            }
308
        });
309
        dialog.show(
310
                WindowManager.MODE.WINDOW,
311
                Collections.singletonMap("align", GridBagConstraints.CENTER)
312
        );
313
    }
314
}