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 @ 44533

History | View | Annotate | Download (24.5 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
        if( this.tablesInfo == null ) {
431
            this.tablesInfo = new HashMap<>();
432
        }
433
        return this.tablesInfo.values();
434
    }
435
    
436
    private void doDeselectAllColumns() {
437
        TableInfo info = this.getCurrentTableInfo();
438
        if (info == null) {
439
            return;
440
        }
441
        info.getColumnChecksModel().clearSelection();
442
    }
443

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

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

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

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

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

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

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

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

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

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

    
584
    private void put(TableInfo tableInfo) {
585
        this.lwcColumns.setModel(tableInfo.getColumnsListModel());
586
        this.lwcColumns.setCheckedModel(tableInfo.getColumnChecksModel());
587

    
588
        this.view.cboGeometryField.setModel(tableInfo.getGeomFieldComboModel());
589
        this.view.cboGeometryField.setSelectedIndex(tableInfo.getGeomFieldSelected());
590

    
591
        this.view.cboIdField.setModel(tableInfo.getIdFieldComboModel());
592
        this.view.cboIdField.setSelectedIndex(tableInfo.getIdFieldSelected());
593

    
594
        this.pickerProjection.set(tableInfo.getProjection());
595
        this.pickerFilter.set(tableInfo.getFilter());
596
        this.view.txtName.setText(tableInfo.getDocumentName());
597
    }
598

    
599
    private void fetch(TableInfo tableInfo) {
600
        tableInfo.setIdFieldSelected(this.view.cboIdField.getSelectedIndex());
601
        tableInfo.setGeomFieldSelected(this.view.cboGeometryField.getSelectedIndex());
602
        tableInfo.setFilter(this.pickerFilter.get());
603
        tableInfo.setProjection(this.pickerProjection.get());
604
        tableInfo.setDocumentName(this.view.txtName.getText());
605
        int index = this.lwcTables.getSelectedIndex();
606
        tableInfo.setSelected(this.lwcTables.getCheckedModel().isSelectedIndex(index));
607
    }
608

    
609
    @Override
610
    public void initWizard() {
611
        I18nManager i18n = ToolsLocator.getI18nManager();
612
        setTabName(i18n.getTranslation("_Database"));
613
    }
614

    
615
    @Override
616
    public boolean areSettingsValid() {
617
        boolean hasInvalidValues = false;
618
        boolean hasSelectedTables = false;
619
        for (TableInfo tableInfo : this.getTablesInformation() ) {
620
            if (tableInfo.isSelected()) {
621
                hasSelectedTables = true;
622
                if (!tableInfo.hasValidValues()) {
623
                    hasInvalidValues = true;
624
                }
625
            }
626
        }
627
        return hasSelectedTables && !hasInvalidValues;
628
    }
629

    
630
    @Override
631
    public DataStoreParameters[] getParameters() {
632
        int sz = 0;
633
        for (TableInfo tableInfo : this.getTablesInformation() ) {
634
            if( tableInfo.isSelected() ) {
635
                sz++;
636
            }
637
        }
638
        if( sz == 0 ) {
639
            return null;
640
        }
641
        DataStoreParameters[] dbParameters = new DataStoreParameters[sz];
642
        int n = 0;
643
        for (TableInfo tableInfo : this.getTablesInformation() ) {
644
            if( tableInfo.isSelected() ) {
645
                dbParameters[n++] = tableInfo.getParameters();
646
            }
647
        }
648
        return dbParameters;
649
    }
650
    
651
    @Override
652
    public void execute() {
653
        executeWizard();
654
    }
655

    
656
    @Override
657
    public void close() {
658
        
659
    }
660
    
661
    protected void checkFinishable() {
662
        boolean finishable = areSettingsValid();
663
        callStateChanged(finishable);
664
    }
665

    
666
}