Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.geodb.app / org.gvsig.geodb.app.mainplugin / src / main / java / org / gvsig / geodb / AbstractWizardDB.java @ 45008

History | View | Annotate | Download (24.7 KB)

1
package org.gvsig.geodb;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Dimension;
5
import java.awt.event.ActionEvent;
6
import java.awt.event.ActionListener;
7
import java.awt.event.ItemEvent;
8
import java.awt.event.ItemListener;
9
import java.util.ArrayList;
10
import java.util.Collection;
11
import java.util.Comparator;
12
import java.util.HashMap;
13
import java.util.List;
14
import java.util.Map;
15
import javax.swing.ComboBoxModel;
16
import javax.swing.DefaultComboBoxModel;
17
import javax.swing.DefaultListModel;
18
import javax.swing.DefaultListSelectionModel;
19
import javax.swing.ListModel;
20
import javax.swing.ListSelectionModel;
21
import javax.swing.event.ChangeEvent;
22
import javax.swing.event.ChangeListener;
23
import javax.swing.event.ListSelectionEvent;
24
import javax.swing.event.ListSelectionListener;
25
import org.apache.commons.lang3.StringUtils;
26
import org.cresques.cts.IProjection;
27
import org.gvsig.app.gui.WizardPanel;
28
import org.gvsig.app.prepareAction.PrepareContextView;
29
import org.gvsig.expressionevaluator.Expression;
30
import org.gvsig.expressionevaluator.ExpressionUtils;
31
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
32
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
33
import org.gvsig.expressionevaluator.swing.ExpressionPickerController;
34
import org.gvsig.fmap.dal.DALLocator;
35
import org.gvsig.fmap.dal.DataManager;
36
import org.gvsig.fmap.dal.DataServerExplorer;
37
import org.gvsig.fmap.dal.DataStoreParameters;
38
import org.gvsig.fmap.dal.DataTypes;
39
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
40
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
41
import org.gvsig.fmap.dal.feature.FeatureStore;
42
import org.gvsig.fmap.dal.feature.FeatureType;
43
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
44
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
45
import org.gvsig.fmap.dal.swing.DALSwingLocator;
46
import org.gvsig.fmap.dal.swing.DataSwingManager;
47
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanel;
48
import org.gvsig.fmap.dal.swing.dataStoreParameters.DataStoreParametersPanelManager;
49
import org.gvsig.tools.ToolsLocator;
50
import org.gvsig.tools.i18n.I18nManager;
51
import org.gvsig.tools.swing.api.JListWithCheckbox;
52
import org.gvsig.tools.swing.api.ToolsSwingLocator;
53
import org.gvsig.tools.swing.api.ToolsSwingManager;
54
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
55
import org.gvsig.tools.swing.api.windowmanager.Dialog;
56
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
57
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
58
import org.gvsig.tools.util.LabeledValue;
59
import org.gvsig.tools.util.LabeledValueImpl;
60
import org.slf4j.Logger;
61
import org.slf4j.LoggerFactory;
62

    
63
/**
64
 *
65
 * @author jjdelcerro
66
 */
67
public abstract class AbstractWizardDB extends WizardPanel {
68

    
69
    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractWizardDB.class);
70

    
71
    protected class TableInfo extends LabeledValueImpl<JDBCStoreParameters> {
72

    
73
        private final ListSelectionModel columnChecksModel;
74
        private FeatureType featureType;
75
        private int geomFieldSelected = -1;
76
        private int idFieldSelected = -1;
77
        private ComboBoxModel<String> idFieldComboModel;
78
        private ComboBoxModel<String> geomFieldComboModel;
79
        private List<FeatureAttributeDescriptor> attributeDescriptors;
80
        private ListModel<LabeledValue<FeatureAttributeDescriptor>> columnsListModel;
81
        private Expression filter;
82
        private IProjection projection;
83
        private boolean selected;
84
        private String documentName;
85

    
86
        public TableInfo(JDBCStoreParameters parameters) {
87
            super(parameters.getTable(), parameters);
88
            this.columnChecksModel = new DefaultListSelectionModel();
89
            this.selected = false;
90
            this.documentName = parameters.getTable();
91
        }
92

    
93
        public String getDocumentName() {
94
            return this.documentName;
95
        }
96

    
97
        public void setDocumentName(String name) {
98
            this.documentName = name;
99
        }
100

    
101
        public boolean isSelected() {
102
            return selected;
103
        }
104

    
105
        public void setSelected(boolean selected) {
106
            this.selected = selected;
107
        }
108

    
109
        public ListSelectionModel getColumnChecksModel() {
110
            return this.columnChecksModel;
111
        }
112

    
113
        public JDBCStoreParameters getParameters() {
114
            JDBCStoreParameters p = this.getValue();
115
            StringBuilder fields = new StringBuilder();
116
            List<FeatureAttributeDescriptor> attributes = this.getAttributeDescriptors();
117
            boolean allSelected = true;
118
            for (int i = 0; i < attributes.size(); i++) {
119
                if (this.columnChecksModel.isSelectedIndex(i)) {
120
                    if (fields.length() > 0) {
121
                        fields.append(",");
122
                    }
123
                    fields.append(attributes.get(i).getName());
124
                    
125
                } else {
126
                    allSelected = false;
127
                }
128
            }
129
            if( !allSelected ) {
130
                p.setFields(fields.toString());
131
            }
132
            p.setPkFields(this.getFieldId());
133
            p.setCRS(this.getProjection());
134
            p.setDefaultGeometryField(this.getGeomField());
135
            if (!ExpressionUtils.isEmpty(this.filter)) {
136
                p.setBaseFilter(this.filter.toString());
137
            } else {
138
                p.setBaseFilter(null);
139
            }
140
            return p;
141
        }
142

    
143
        public void setProjection(IProjection projection) {
144
            this.projection = projection;
145
        }
146

    
147
        public IProjection getProjection() {
148
            return projection;
149
        }
150

    
151
        public String getFieldId() {
152
            if (this.idFieldSelected < 0) {
153
                return null;
154
            }
155
            return this.idFieldComboModel.getElementAt(this.idFieldSelected);
156
        }
157

    
158
        public String getGeomField() {
159
            if (this.geomFieldSelected < 0) {
160
                return null;
161
            }
162
            return this.geomFieldComboModel.getElementAt(this.geomFieldSelected);
163
        }
164

    
165
        public FeatureType getFeatureType() {
166
            if (this.featureType == null) {
167
                DataManager dataManager = DALLocator.getDataManager();
168
                try {
169
                    JDBCStoreParameters params = this.getValue();
170
                    FeatureStore store = (FeatureStore) dataManager.openStore(
171
                            params.getDataStoreName(),
172
                            params
173
                    );
174
                    this.featureType = store.getDefaultFeatureType();
175
                } catch (Exception ex) {
176
                }
177
            }
178
            return this.featureType;
179
        }
180

    
181
        public ComboBoxModel getGeomFieldComboModel() {
182
            if (this.geomFieldComboModel == null) {
183
                DefaultComboBoxModel<String> geomModel = new DefaultComboBoxModel<>();
184
                geomModel.addElement(" ");
185
                int geomIndex = -1;
186
                int n = 1;
187
                for (FeatureAttributeDescriptor attr : this.getAttributeDescriptors()) {
188
                    if (geomIndex < 0 && attr.getType() == DataTypes.GEOMETRY) {
189
                        geomIndex = n;
190
                    }
191
                    int dataType = attr.getType();
192
                    if (dataType == DataTypes.GEOMETRY
193
                            || dataType == DataTypes.BYTEARRAY
194
                            || dataType == DataTypes.STRING) {
195
                        geomModel.addElement(attr.getName());
196
                        n++;
197
                    }
198
                }
199
                if (geomIndex < 0) {
200
                    geomIndex = 0;
201
                }
202
                this.geomFieldComboModel = geomModel;
203
                this.geomFieldSelected = geomIndex;
204
            }
205
            return this.geomFieldComboModel;
206
        }
207

    
208
        public int getGeomFieldSelected() {
209
            return this.geomFieldSelected;
210
        }
211

    
212
        public ComboBoxModel getIdFieldComboModel() {
213
            if (this.idFieldComboModel == null) {
214
                StringBuilder pkName = new StringBuilder();
215
                for (FeatureAttributeDescriptor attr : this.getAttributeDescriptors()) {
216
                    if (attr.isPrimaryKey()) {
217
                        if (!StringUtils.isBlank(pkName)) {
218
                            pkName.append(",");
219
                        }
220
                        pkName.append(attr.getName());
221
                    }
222
                }
223
                DefaultComboBoxModel<String> idsModel = new DefaultComboBoxModel<>();
224
                idsModel.addElement(" ");
225
                int idsIndex = -1;
226
                int n = 1;
227
                if (!StringUtils.isBlank(pkName) && StringUtils.contains(pkName, "/")) {
228
                    idsModel.addElement(pkName.toString());
229
                    idsIndex = n++;
230
                }
231
                for (FeatureAttributeDescriptor attr : getAttributeDescriptors()) {
232
                    if (idsIndex < 0 && attr.isPrimaryKey()) {
233
                        idsIndex = n;
234
                    }
235
                    idsModel.addElement(attr.getName());
236
                    n++;
237
                }
238
                if (idsIndex < 0) {
239
                    idsIndex = 0;
240
                }
241
                this.idFieldComboModel = idsModel;
242
                this.idFieldSelected = idsIndex;
243
            }
244
            return this.idFieldComboModel;
245
        }
246

    
247
        public List<FeatureAttributeDescriptor> getAttributeDescriptors() {
248
            if (this.attributeDescriptors == null) {
249
                List<FeatureAttributeDescriptor> attrs = new ArrayList<>();
250
                for (FeatureAttributeDescriptor attr : this.getFeatureType()) {
251
                    attrs.add(attr);
252
                }
253
                attrs.sort(new Comparator<FeatureAttributeDescriptor>() {
254
                    @Override
255
                    public int compare(FeatureAttributeDescriptor o1, FeatureAttributeDescriptor o2) {
256
                        return o1.getName().compareTo(o2.getName());
257
                    }
258
                });
259
                this.columnChecksModel.setSelectionInterval(0, attrs.size());
260
                this.attributeDescriptors = attrs;
261
            }
262
            return this.attributeDescriptors;
263
        }
264

    
265
        public ListModel<LabeledValue<FeatureAttributeDescriptor>> getColumnsListModel() {
266
            if (this.columnsListModel == null) {
267
                DefaultListModel<LabeledValue<FeatureAttributeDescriptor>> model = new DefaultListModel<>();
268
                for (FeatureAttributeDescriptor attr : this.getAttributeDescriptors()) {
269
                    model.addElement(new LabeledValueImpl<>(
270
                            attr.getName() + " [" + attr.getDataTypeName() + "]",
271
                            attr
272
                    )
273
                    );
274
                }
275
                this.columnsListModel = model;
276
            }
277
            return this.columnsListModel;
278
        }
279

    
280
        public FeatureAttributeDescriptor getAttributeDescriptor(String attrName) {
281
            return this.getFeatureType().getAttributeDescriptor(attrName);
282
        }
283

    
284
        public int getIdFieldSelected() {
285
            return this.idFieldSelected;
286
        }
287

    
288
        public Expression getFilter() {
289
            return this.filter;
290
        }
291

    
292
        public void setFilter(Expression filter) {
293
            this.filter = filter;
294
        }
295

    
296
        private void setIdFieldSelected(int selectedIndex) {
297
            this.idFieldSelected = selectedIndex;
298
        }
299

    
300
        private void setGeomFieldSelected(int selectedIndex) {
301
            this.geomFieldSelected = selectedIndex;
302
        }
303

    
304
        private boolean hasValidValues() {
305
            if (this.getGeomFieldSelected() < 0 && requireGeometry()) {
306
                return false;
307
            }
308
            JDBCStoreParameters p = this.getParameters();
309
            try {
310
                p.validate();
311
                return true;
312
            } catch (ValidateDataParametersException ex) {
313
                return false;
314
            }
315
        }
316

    
317
    }
318

    
319
    private AbstractWizardDBView view;
320
    private PickerController<JDBCServerExplorerParameters> pickerConnection;
321
    private PickerController<IProjection> pickerProjection;
322
    private ExpressionPickerController pickerFilter;
323
    private JListWithCheckbox lwcTables;
324
    private JListWithCheckbox lwcColumns;
325
    private Map<String, TableInfo> tablesInfo = null;
326

    
327
    public AbstractWizardDB() {
328
        initComponents();
329
    }
330

    
331
    private void initComponents() {
332
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
333
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
334
        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
335

    
336
        this.view = new AbstractWizardDBView();
337

    
338
        toolsSwingManager.translate(this.view.btnDeselectAllColumns);
339
        toolsSwingManager.translate(this.view.btnSelectAllColumns);
340
        toolsSwingManager.translate(this.view.lblColumns);
341
        toolsSwingManager.translate(this.view.lblConnection);
342
        toolsSwingManager.translate(this.view.lblFilter);
343
        toolsSwingManager.translate(this.view.lblGeometryField);
344
        toolsSwingManager.translate(this.view.lblIdField);
345
        toolsSwingManager.translate(this.view.lblName);
346
        toolsSwingManager.translate(this.view.lblProjection);
347
        toolsSwingManager.translate(this.view.lblTable);
348

    
349
        toolsSwingManager.addClearButton(this.view.txtName);
350
        toolsSwingManager.setDefaultPopupMenu(this.view.txtName);
351

    
352
        this.lwcTables = toolsSwingManager.createJListWithCheckbox(
353
                this.view.lstTables
354
        );
355
        this.lwcColumns = toolsSwingManager.createJListWithCheckbox(
356
                this.view.lstColumns
357
        );
358

    
359
        this.pickerConnection = dataSwingManager.createJDBCConnectionPickerController(
360
                this.view.cboConnection,
361
                this.view.btnConnection
362
        );
363
        this.pickerConnection.addChangeListener(new ChangeListener() {
364
            @Override
365
            public void stateChanged(ChangeEvent e) {
366
                doUpdateTables();
367
                setEditableTables(true);
368
            }
369
        });
370
        this.pickerProjection = dataSwingManager.createProjectionPickerController(
371
                this.view.txtProjection,
372
                this.view.btnProjection
373
        );
374
        this.pickerFilter = expressionSwingManager.createExpressionPickerController(
375
                this.view.txtFilter,
376
                this.view.btnFilter,
377
                this.view.btnFilterBookmarks,
378
                this.view.btnFilterHistory
379
        );
380
        this.lwcTables.addListSelectionListener(new ListSelectionListener() {
381
            @Override
382
            public void valueChanged(ListSelectionEvent e) {
383
                doChangeTableSelected();
384
            }
385
        });
386
        this.lwcTables.addChecksListener(new ListSelectionListener() {
387
            @Override
388
            public void valueChanged(ListSelectionEvent e) {
389
                doChangeTableSelected();
390
            }
391
        });
392
        this.view.cboGeometryField.addItemListener(new ItemListener() {
393
            @Override
394
            public void itemStateChanged(ItemEvent e) {
395
                if (e.getStateChange() == ItemEvent.SELECTED) {
396
                    doChangeGeometryField();
397
                }
398
            }
399
        });
400
        this.view.btnDeselectAllColumns.addActionListener(new ActionListener() {
401
            @Override
402
            public void actionPerformed(ActionEvent e) {
403
                doDeselectAllColumns();
404
            }
405
        });
406
        this.view.btnSelectAllColumns.addActionListener(new ActionListener() {
407
            @Override
408
            public void actionPerformed(ActionEvent e) {
409
                doSelectAllColumns();
410
            }
411
        });
412
        this.view.btnAdvancedProperties.addActionListener(new ActionListener() {
413
            @Override
414
            public void actionPerformed(ActionEvent e) {
415
                doShowAdvancedProperties();
416
            }
417
        });
418

    
419
        this.clearTables();
420
        this.setEditableTables(false);
421

    
422
        this.setLayout(new BorderLayout());
423
        this.add(this.view, BorderLayout.CENTER);
424
        this.setPreferredSize(new Dimension(500, 400));
425
    }
426

    
427
    protected abstract boolean requireGeometry();
428

    
429
    protected Collection<TableInfo> getTablesInformation() {
430
        this.updateTableInfoFromUI();
431
        if( this.tablesInfo == null ) {
432
            this.tablesInfo = new HashMap<>();
433
        }
434
        return this.tablesInfo.values();
435
    }
436
    
437
    private void doDeselectAllColumns() {
438
        TableInfo info = this.getCurrentTableInfo();
439
        if (info == null) {
440
            return;
441
        }
442
        info.getColumnChecksModel().clearSelection();
443
    }
444

    
445
    private void doSelectAllColumns() {
446
        TableInfo info = this.getCurrentTableInfo();
447
        if (info == null) {
448
            return;
449
        }
450
        info.getColumnChecksModel().setSelectionInterval(0, info.getAttributeDescriptors().size());
451
    }
452

    
453
    private void doShowAdvancedProperties() {
454
        final TableInfo info = this.getCurrentTableInfo();
455
        if (info == null) {
456
            return;
457
        }
458
        this.fetch(info);
459
        I18nManager i18n = ToolsLocator.getI18nManager();
460
        WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
461
        DataStoreParametersPanelManager paramsPanelManager = DALSwingLocator.getDataStoreParametersPanelManager();
462
        
463
        final DataStoreParametersPanel panel = paramsPanelManager.createDataStoreParametersPanel(info.getParameters());
464
        final Dialog dialog = winmgr.createDialog(
465
                panel.asJComponent(),
466
                i18n.getTranslation("_Connection_parameters"),
467
                null, 
468
                WindowManager_v2.BUTTONS_OK_CANCEL
469
        );
470
        dialog.addActionListener(new ActionListener() {
471
            @Override
472
            public void actionPerformed(ActionEvent e) {
473
                if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
474
                    panel.fetchParameters(info.getParameters());
475
                }
476
            }
477
        });
478
        dialog.show(WindowManager.MODE.DIALOG);
479
    }
480

    
481
    private void clearTables() {
482
        this.lwcTables.setModel(new DefaultListModel());
483
        this.lwcTables.getCheckedModel().clearSelection();
484
        this.clearTableConfig();
485
    }
486

    
487
    private void clearTableConfig() {
488
        this.lwcColumns.setModel(new DefaultListModel());
489
        this.lwcColumns.getCheckedModel().clearSelection();
490
        this.view.txtName.setText("");
491
        this.view.cboGeometryField.setModel(new DefaultComboBoxModel());
492
        this.view.cboIdField.setModel(new DefaultComboBoxModel());
493
        this.pickerProjection.set(null);
494
        this.pickerFilter.set(null);
495
    }
496

    
497
    private void setEditableTables(boolean enable) {
498
        this.view.lstTables.setEnabled(enable);
499
        this.setEditableTableConfig(enable);
500
        this.view.btnDeselectAllColumns.setEnabled(enable);
501
        this.view.btnSelectAllColumns.setEnabled(enable);
502
    }
503

    
504
    private void setEditableTableConfig(boolean enable) {
505
        this.view.lstColumns.setEnabled(enable);
506
        this.view.txtName.setEditable(enable);
507
        this.view.cboGeometryField.setEnabled(enable);
508
        this.view.cboIdField.setEnabled(enable);
509
        this.pickerProjection.setEditable(enable);
510
        this.pickerFilter.setEditable(enable);
511
    }
512

    
513
    private TableInfo getCurrentTableInfo() {
514
        TableInfo xx = (TableInfo) this.view.lstTables.getSelectedValue();
515
        return xx;
516
    }
517

    
518
    private void doChangeGeometryField() {
519
        TableInfo info = this.getCurrentTableInfo();
520
        if (info == null) {
521
            return;
522
        }
523
        String attrName = (String) this.view.cboGeometryField.getSelectedItem();
524
        if (StringUtils.isBlank(attrName)) {
525
            return;
526
        }
527
        FeatureAttributeDescriptor attr = info.getAttributeDescriptor(attrName);
528
        IProjection srs = attr.getSRS();
529
        if (srs == null) {
530
            return;
531
        }
532
        this.pickerProjection.set(srs);
533
    }
534

    
535
    private void doUpdateTables() {
536
        JDBCServerExplorerParameters connection = this.pickerConnection.get();
537
        if (connection == null) {
538
            this.clearTables();
539
            return;
540
        }
541
        DataManager dataManager = DALLocator.getDataManager();
542
        try {
543
            DataServerExplorer explorer = dataManager.openServerExplorer(
544
                    connection.getDataStoreName(),
545
                    connection
546
            );
547
            List<TableInfo> parameters = new ArrayList<>();
548
            for (DataStoreParameters params : explorer.list()) {
549
                parameters.add(new TableInfo((JDBCStoreParameters) params));
550
            }
551
            parameters.sort(new Comparator<TableInfo>() {
552
                @Override
553
                public int compare(TableInfo o1, TableInfo o2) {
554
                    return o1.getDocumentName().compareTo(o2.getDocumentName());
555
                }
556
            });
557
            this.tablesInfo = new HashMap<>();
558
            DefaultListModel<TableInfo> model = new DefaultListModel<>();
559
            for (TableInfo x : parameters) {
560
                model.addElement(x);
561
                this.tablesInfo.put(x.getDocumentName(), x);
562
            }
563
            this.lwcTables.setModel(model);
564
            this.lwcTables.getCheckedModel().clearSelection();
565
        } catch (Exception ex) {
566
        }
567
    }
568

    
569
    private void doChangeTableSelected() {
570
        TableInfo tableInfo = (TableInfo) this.lwcTables.getSelectedValue();
571
        if (tableInfo == null) {
572
            this.clearTableConfig();
573
            this.setEditableTableConfig(false);
574
            return;
575
        }
576
        this.updateTableInfoFromUI();
577
        this.put(tableInfo);
578
        this.checkFinishable();
579
    }
580
    
581
    private void updateTableInfoFromUI() {
582
         String previousTableName = this.view.txtName.getText();
583
         if (this.tablesInfo!=null && !this.tablesInfo.isEmpty()) {
584
         TableInfo previousInfo = this.tablesInfo.get(previousTableName);
585
            if (previousInfo != null) {
586
               this.fetch(previousInfo);
587
           }
588
        }
589
    }
590

    
591
    private void put(TableInfo tableInfo) {
592
        this.lwcColumns.setModel(tableInfo.getColumnsListModel());
593
        this.lwcColumns.setCheckedModel(tableInfo.getColumnChecksModel());
594

    
595
        this.view.cboGeometryField.setModel(tableInfo.getGeomFieldComboModel());
596
        this.view.cboGeometryField.setSelectedIndex(tableInfo.getGeomFieldSelected());
597

    
598
        this.view.cboIdField.setModel(tableInfo.getIdFieldComboModel());
599
        this.view.cboIdField.setSelectedIndex(tableInfo.getIdFieldSelected());
600

    
601
        this.pickerProjection.set(tableInfo.getProjection());
602
        this.pickerFilter.set(tableInfo.getFilter());
603
        this.view.txtName.setText(tableInfo.getDocumentName());
604
    }
605

    
606
    private void fetch(TableInfo tableInfo) {
607
        tableInfo.setIdFieldSelected(this.view.cboIdField.getSelectedIndex());
608
        tableInfo.setGeomFieldSelected(this.view.cboGeometryField.getSelectedIndex());
609
        tableInfo.setFilter(this.pickerFilter.get());
610
        tableInfo.setProjection(this.pickerProjection.get());
611
        tableInfo.setDocumentName(this.view.txtName.getText());
612
        int index = this.lwcTables.getSelectedIndex();
613
        tableInfo.setSelected(this.lwcTables.getCheckedModel().isSelectedIndex(index));
614
    }
615

    
616
    @Override
617
    public void initWizard() {
618
        I18nManager i18n = ToolsLocator.getI18nManager();
619
        setTabName(i18n.getTranslation("_Database"));
620
    }
621

    
622
    @Override
623
    public boolean areSettingsValid() {
624
        boolean hasInvalidValues = false;
625
        boolean hasSelectedTables = false;
626
        for (TableInfo tableInfo : this.getTablesInformation() ) {
627
            if (tableInfo.isSelected()) {
628
                hasSelectedTables = true;
629
                if (!tableInfo.hasValidValues()) {
630
                    hasInvalidValues = true;
631
                }
632
            }
633
        }
634
        return hasSelectedTables && !hasInvalidValues;
635
    }
636

    
637
    @Override
638
    public DataStoreParameters[] getParameters() {
639
        int sz = 0;
640
        for (TableInfo tableInfo : this.getTablesInformation() ) {
641
            if( tableInfo.isSelected() ) {
642
                sz++;
643
            }
644
        }
645
        if( sz == 0 ) {
646
            return null;
647
        }
648
        DataStoreParameters[] dbParameters = new DataStoreParameters[sz];
649
        int n = 0;
650
        for (TableInfo tableInfo : this.getTablesInformation() ) {
651
            if( tableInfo.isSelected() ) {
652
                dbParameters[n++] = tableInfo.getParameters();
653
            }
654
        }
655
        return dbParameters;
656
    }
657
    
658
    @Override
659
    public void execute() {
660
        executeWizard();
661
    }
662

    
663
    @Override
664
    public void close() {
665
        
666
    }
667
    
668
    protected void checkFinishable() {
669
        boolean finishable = areSettingsValid();
670
        callStateChanged(finishable);
671
    }
672

    
673
}