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 |
} |