Statistics
| Revision:

gvsig-projects-pool / org.gvsig.online / trunk / org.gvsig.online / org.gvsig.online.app / org.gvsig.online.app.mainplugin / src / main / java / org / gvsig / online / app / mainplugin / addlayer / AbstractWizardOnline.java @ 9521

History | View | Annotate | Download (30.7 KB)

1
package org.gvsig.online.app.mainplugin.addlayer;
2

    
3
import java.awt.BorderLayout;
4
import java.awt.Component;
5
import java.awt.Cursor;
6
import java.awt.event.ActionEvent;
7
import java.net.URL;
8
import java.util.ArrayList;
9
import java.util.Collection;
10
import java.util.HashMap;
11
import java.util.List;
12
import java.util.Map;
13
import java.util.function.Function;
14
import java.util.function.Predicate;
15
import javax.swing.ImageIcon;
16
import javax.swing.JButton;
17
import javax.swing.JCheckBox;
18
import javax.swing.JComboBox;
19
import javax.swing.JComponent;
20
import javax.swing.JLabel;
21
import javax.swing.JList;
22
import javax.swing.JOptionPane;
23
import javax.swing.JTextField;
24
import javax.swing.SwingUtilities;
25
import javax.swing.UIManager;
26
import javax.swing.event.ChangeEvent;
27
import org.apache.commons.io.FilenameUtils;
28
import org.apache.commons.lang3.StringUtils;
29
import org.gvsig.app.gui.WizardPanel;
30
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingLocator;
31
import org.gvsig.expressionevaluator.swing.ExpressionEvaluatorSwingManager;
32
import org.gvsig.fmap.dal.DataStoreParameters;
33
import org.gvsig.fmap.dal.store.jdbc.JDBCStoreParameters;
34
import org.gvsig.fmap.dal.swing.DALSwingLocator;
35
import org.gvsig.fmap.dal.swing.DataSwingManager;
36
import org.gvsig.fmap.mapcontext.MapContext;
37
import org.gvsig.geodb.TableInfo;
38
import org.gvsig.geodb.TableInfoController;
39
import org.gvsig.online.lib.api.workingcopy.OnlineEntity;
40
import org.gvsig.online.lib.api.workingcopy.OnlineWorkingcopy;
41
import org.gvsig.online.swing.api.OnlineEntitySelectorController;
42
import static org.gvsig.online.swing.api.OnlineEntitySelectorController.ACTION_BEGIN_PROCESSING_ID;
43
import static org.gvsig.online.swing.api.OnlineEntitySelectorController.ACTION_CHECK_ID;
44
import static org.gvsig.online.swing.api.OnlineEntitySelectorController.ACTION_END_PROCESSING_ID;
45
import static org.gvsig.online.swing.api.OnlineEntitySelectorController.ACTION_RELOAD_ID;
46
import static org.gvsig.online.swing.api.OnlineEntitySelectorController.ACTION_SELECT_ID;
47
import org.gvsig.online.swing.api.OnlineJDownload;
48
import org.gvsig.online.swing.api.OnlineJInitWorkingcopy;
49
import org.gvsig.online.swing.api.OnlineSwingLocator;
50
import org.gvsig.online.swing.api.OnlineSwingManager;
51
import org.gvsig.online.swing.api.OnlineSwingServices;
52
import org.gvsig.tools.ToolsLocator;
53
import org.gvsig.tools.dispose.DisposeUtils;
54
import org.gvsig.tools.i18n.I18nManager;
55
import org.gvsig.tools.locator.LocatorException;
56
import org.gvsig.tools.swing.api.InitComponentsListener;
57
import org.gvsig.tools.swing.api.ToolsSwingLocator;
58
import org.gvsig.tools.swing.api.ToolsSwingManager;
59
import org.gvsig.tools.swing.api.ToolsSwingUtils;
60
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
61
import org.gvsig.tools.swing.api.task.TaskStatusController;
62
import org.gvsig.tools.swing.api.task.TaskStatusSwingManager;
63
import org.gvsig.tools.swing.api.threadsafedialogs.ThreadSafeDialogsManager;
64
import org.gvsig.tools.swing.api.windowmanager.Dialog;
65
import org.gvsig.tools.swing.api.windowmanager.WindowManager;
66
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
67
import org.gvsig.tools.swing.icontheme.IconTheme;
68
import org.slf4j.Logger;
69
import org.slf4j.LoggerFactory;
70

    
71
/**
72
 *
73
 * @author jjdelcerro
74
 */
75
@SuppressWarnings("UseSpecificCatch")
76
public abstract class AbstractWizardOnline extends WizardPanel {
77

    
78
    protected static final Logger LOGGER = LoggerFactory.getLogger(AbstractWizardOnline.class);
79

    
80
    protected WizardOnlineViewExtended view;
81
    private PickerController<OnlineWorkingcopy> workspacePicker;
82
    protected Map<String, TableInfo> tablesInfo = null;
83
    private boolean processing;
84
    private TaskStatusController taskStatusController;
85
    private TableInfoController tableInfoController;
86
    private OnlineEntitySelectorController entitySelector;
87

    
88
    private class OnlineTableInfoController extends TableInfoController {
89
        
90
        public OnlineTableInfoController(JButton btnDeselectAllColumns, JButton btnSelectAllColumns, JList lstColumns, JTextField txtName, JComboBox cboIdField, JComboBox cboGeometryField, JTextField txtProjection, JButton btnProjection, JTextField txtFilter, JButton btnFilter, JButton btnFilterBookmarks, JButton btnFilterHistory, JButton btnAdvancedProperties, JLabel lblReadOnlyNotification, JComponent pnlCfgActions, JButton btnChangeViewProjection, JCheckBox visible) {
91
            super(btnDeselectAllColumns, btnSelectAllColumns, lstColumns, txtName, cboIdField, cboGeometryField, txtProjection, btnProjection, txtFilter, btnFilter, btnFilterBookmarks, btnFilterHistory, btnAdvancedProperties, lblReadOnlyNotification, pnlCfgActions, btnChangeViewProjection, visible);
92
        }
93

    
94
        @Override
95
        public void put(TableInfo tableInfo) {
96
            if( tableInfo!=null ) {
97
                Boolean v = tableInfo.getVisible();
98
                if( v == null ) {
99
                    OnlineEntity entity = ((OnlineTableInfo)tableInfo).getEntity();
100
                    if( entity!=null ) {
101
                        String category = getCategory(entity);
102
                        boolean defaultVisibility = entity.getCategoryTags(category).getBoolean("visibility",true);
103
                        tableInfo.setVisible(defaultVisibility);
104
                    }
105
                }
106
            }
107
            super.put(tableInfo);
108
        }
109

    
110
        @Override
111
        protected void updateLabel(StringBuilder builder) throws LocatorException {
112
            super.updateLabel(builder);
113
            I18nManager i18n = ToolsLocator.getI18nManager();
114
            OnlineTableInfo info = (OnlineTableInfo) this.getTableInfo();
115
            if( info.needConnectToModel() ) {
116
                builder.append(" - <b>");
117
                builder.append(i18n.getTranslation("_Connect_to_model_required"));
118
                builder.append(" (");
119
                builder.append(info.getEntity().getDataModels());
120
                builder.append(")</b>");
121
            }
122
        }
123
        
124
    }
125
    
126
    public AbstractWizardOnline() {
127
        createComponents();
128
    }
129

    
130
    private static void waitCursor(Component component, Runnable action) {
131
        Cursor saved_cursor = component.getCursor();
132
        try {
133
            component.setCursor(Cursor.getPredefinedCursor(Cursor.WAIT_CURSOR));
134
            action.run();
135
        } finally {
136
            component.setCursor(saved_cursor);
137
        }
138
    }
139
    
140
    private void createComponents() {
141

    
142
        ToolsSwingUtils.addInitComponentsListener(this, new InitComponentsListener() {
143
            @Override
144
            public void doDisposeComponents() {
145
                disposeComponents();
146
            }
147

    
148
            @Override
149
            public void doInitComponents() {
150
                initComponents();
151
            }
152
        });
153

    
154
        this.view = new WizardOnlineViewExtended();
155

    
156
        this.tableInfoController = new OnlineTableInfoController(
157
                this.view.btnDeselectAllColumns,
158
                this.view.btnSelectAllColumns,
159
                this.view.lstColumns,
160
                this.view.txtName,
161
                this.view.cboIdField,
162
                this.view.cboGeometryField,
163
                this.view.txtProjection,
164
                this.view.btnProjection,
165
                this.view.txtFilter,
166
                this.view.btnFilter,
167
                this.view.btnFilterBookmarks,
168
                this.view.btnFilterHistory,
169
                this.view.btnAdvancedProperties,
170
                this.view.lblReadOnlyNotification,
171
                null,
172
                this.view.btnChangeViewProjection,
173
                this.view.chkVisible
174
        );
175
    }
176
    
177
    private void disposeComponents() {
178
        DisposeUtils.disposeQuietly(entitySelector);
179
    }
180
    
181
    private void initComponents() {
182
        if(this.entitySelector != null) {
183
            return;
184
        }
185
        DataSwingManager dataSwingManager = DALSwingLocator.getDataSwingManager();
186
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
187
        ExpressionEvaluatorSwingManager expressionSwingManager = ExpressionEvaluatorSwingLocator.getManager();
188
        OnlineSwingManager swingManager = OnlineSwingLocator.getOnlineSwingManager();
189

    
190
        this.entitySelector = swingManager.createEntitySelectorController(
191
                this.view.treeTables, 
192
                this.view.txtTablesFilter, 
193
                this.view.btnTablesFilter);
194
        
195
        Predicate<OnlineEntity> entitySelectorFilter = OnlineEntitySelectorController.ALL_ENTITIES;
196
        
197
        if(this.requireGeometry()){
198
            entitySelectorFilter = (OnlineEntity t) -> (StringUtils.isNotBlank(t.getGeometryFieldName()));
199
        }
200
        
201
        this.entitySelector.setFilter(entitySelectorFilter);
202
        this.entitySelector.setViewFilter(entitySelectorFilter);
203
        this.entitySelector.setLabelEntityFormatter(this.getLabelEntityFormatter());
204
        
205
        this.entitySelector.setChecksEnabled(true);
206
        
207
        TaskStatusSwingManager taskStatusManager = ToolsSwingLocator.getTaskStatusSwingManager();
208
        
209
        this.taskStatusController = taskStatusManager.createTaskStatusController(
210
                this.view.lblStatusTitle,
211
                this.view.lblStatusMessages,
212
                this.view.pbStatus
213
        );
214
        this.taskStatusController.setShowCancelButton(false);
215
        this.taskStatusController.setShowRemoveTaskButton(false);
216
        this.taskStatusController.bind(ToolsLocator.getTaskStatusManager());
217

    
218
        toolsSwingManager.translate(this.view.lblColumns);
219
        toolsSwingManager.translate(this.view.lblWorkspace);
220
        toolsSwingManager.translate(this.view.lblFilter);
221
        toolsSwingManager.translate(this.view.lblGeometryField);
222
        toolsSwingManager.translate(this.view.lblIdField);
223
        toolsSwingManager.translate(this.view.lblName);
224
        toolsSwingManager.translate(this.view.lblProjection);
225
        toolsSwingManager.translate(this.view.lblTable);
226
        toolsSwingManager.translate(this.view.cboWorkspaces);
227
        toolsSwingManager.translate(this.view.btnAddWorkspace);
228
        toolsSwingManager.translate(this.view.btnDownload);
229
        toolsSwingManager.translate(this.view.btnInitWorkspace);
230
//        toolsSwingManager.translate(this.view.chkMaintainStructureInToC);
231
        toolsSwingManager.translate(this.view.btnTablesCheckAll);
232
        toolsSwingManager.translate(this.view.btnTablesUncheckAll);
233
        toolsSwingManager.translate(this.view.btnTablesCollapseAll);
234
        toolsSwingManager.translate(this.view.btnTablesExpandAll);
235
//        toolsSwingManager.translate(this.view.chkCheckScale);
236
//        toolsSwingManager.translate(this.view.chkAddToCWhenLoadingAll);
237
        toolsSwingManager.translate(this.view.tabTableInfo);
238
        toolsSwingManager.translate(this.view.lblVisible);
239
//        toolsSwingManager.translate(this.view.btnConnectToModel);
240
        
241
        this.view.btnInitWorkspace.setText(toHTML(this.view.btnInitWorkspace.getText()));
242

    
243
        toolsSwingManager.addClearButton(this.view.txtName);
244
        toolsSwingManager.setDefaultPopupMenu(this.view.txtName);
245
        
246
        this.view.btnInitWorkspace.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
247
        this.view.btnAddWorkspace.setCursor(Cursor.getPredefinedCursor(Cursor.HAND_CURSOR));
248

    
249
        this.workspacePicker = swingManager.createPickerWorkspaceController(
250
            this.view.cboWorkspaces,
251
            this.view.btnAddWorkspace
252
        );
253

    
254
        this.workspacePicker.addChangeListener((ChangeEvent e) -> {
255
            waitCursor(this, () -> {
256
                doChangeWorkspace();
257
                doUpdateComponents();
258
            });
259
        });
260

    
261
        this.entitySelector.addActionListener((ActionEvent e) -> {
262
            switch(e.getID()){
263
                case ACTION_RELOAD_ID:
264
                    doReloadTablesInfo();
265
                    break;
266
                case ACTION_BEGIN_PROCESSING_ID:
267
                case ACTION_END_PROCESSING_ID:
268
                    doUpdateComponents();
269
                    break;
270
                case ACTION_SELECT_ID:
271
                    doChangeTableSelected();
272
                    break;
273
                case ACTION_CHECK_ID:
274
                    doChangeTableChecked();
275
                    doUpdateComponents();
276
                    break;
277
                    
278
            }
279
        });
280
        this.view.btnTablesCheckAll.addActionListener((ActionEvent e) -> {
281
//            this.entitySelector.checkAll();
282
            waitCursor(this, () -> {
283
                List<String> entityCodes = new ArrayList<>();
284
                Collection<OnlineEntity> entities = entitySelector.getEntities();
285
                for (OnlineEntity entity : entities) {
286
                    entityCodes.add(entity.getEntityCode());
287
                }
288
                entitySelector.setCheck(entityCodes, true);
289
            });
290
        });
291

    
292
        this.view.btnTablesUncheckAll.addActionListener((ActionEvent e) -> {
293
            this.entitySelector.clearChecks();
294
        });
295

    
296
        this.view.btnTablesCollapseAll.addActionListener((ActionEvent e) -> {
297
            this.entitySelector.collapseAll();
298
        });
299

    
300
        this.view.btnTablesExpandAll.addActionListener((ActionEvent e) -> {
301
            this.entitySelector.expandAll();
302
        });
303

    
304
        this.view.btnInitWorkspace.addActionListener((ActionEvent e) -> {
305
            doShowInitWorkspace();
306
        });
307

    
308
        this.view.btnDownload.setEnabled(true);
309
        this.view.btnDownload.addActionListener((ActionEvent e) -> {
310
            doDownload();
311
        });
312
        
313
//        this.view.btnConnectToModel.addActionListener((ActionEvent e) -> {
314
//            doConnectToModel();
315
//        });
316
        
317
        this.view.btnChangeViewProjection.setVisible(this.requireGeometry());
318
        
319
        this.view.btnInitWorkspace.setBackground(UIManager.getColor("Panel.background"));
320
//        this.view.txtRepositoryInfo.setBackground(UIManager.getColor("Panel.background"));
321
        
322
        this.clearTables();
323

    
324
//        this.view.chkMaintainStructureInToC.setVisible(false);
325
//        this.view.chkMaintainStructureInToC.setSelected(true);
326
//        
327
//        this.view.chkCheckScale.setSelected(true);
328
//
329
//        this.view.chkAddToCWhenLoadingAll.setSelected(true);
330
        
331
        this.setLayout(new BorderLayout());
332
        this.add(this.view, BorderLayout.CENTER);
333
        
334
        ToolsSwingUtils.ensureRowsCols(this, 22, 90, 25, 100);
335
        doUpdateComponents();
336
    }
337

    
338
    protected abstract boolean requireGeometry();
339

    
340
//    protected boolean maintainStructureInToC() {
341
//        return this.view.chkMaintainStructureInToC.isSelected();
342
//    }
343
//    
344
//    protected void setVisibleMaintainStructureInToC(boolean visible) {
345
//        this.view.chkMaintainStructureInToC.setVisible(visible);
346
//    }
347
    
348
    protected Collection<TableInfo> getTablesInformation() {
349
        this.updateTableInfoFromUI();
350
        if( this.tablesInfo == null ) {
351
            this.tablesInfo = new HashMap<>();
352
        }
353
        return this.tablesInfo.values();
354
    }
355
    
356
    private void clearTables() {
357
        this.entitySelector.clear();
358
        this.tableInfoController.clear();
359
    }
360

    
361
    private void doChangeWorkspace() {
362
        if (notInSwingThreadInvokeLater(this::doChangeWorkspace)) {
363
            return;
364
        }
365
        
366
        OnlineWorkingcopy workspace = workspacePicker.get();
367
        
368
        this.entitySelector.setWorkspace(workspace);
369
//        if (workspace == null) {
370
//            this.view.txtRepositoryInfo.setText("");
371
//            return;
372
//        }
373
//
374
//        this.view.txtRepositoryInfo.setText(workspace.getRepository().getLabel());
375
    }
376

    
377
    private TableInfo getTableInfo(OnlineEntity entity){
378
        Collection<TableInfo> tablesInformation = getTablesInformation();
379
        for (TableInfo tableInfo : tablesInformation) {
380
            OnlineEntity tableInfoEntity = (OnlineEntity) tableInfo.getProperty("entity");
381
            if(tableInfoEntity!=null && StringUtils.equals(tableInfoEntity.getEntityCode(), entity.getEntityCode())){
382
                return tableInfo;
383
            }
384
        }
385
        return null;
386
    }
387

    
388
    private void doChangeTableSelected() {
389
        if( notInSwingThreadInvokeLater(() -> {doChangeTableSelected();}) ) {
390
            return;
391
        }
392
        
393
        OnlineEntity selected = this.entitySelector.getSelectedEntity();
394
        if(selected == null){
395
            this.tableInfoController.put(null);
396
            return;
397
        }
398
        TableInfo tableInfo = getTableInfo(selected);
399
        if (tableInfo != null) {
400
            this.updateTableInfoFromUI();
401
            this.tableInfoController.put(tableInfo);
402
            this.tableInfoController.setEnabled(true);
403
        } else {
404
            this.tableInfoController.clear();
405
            this.tableInfoController.setEnabled(false);
406
        }
407
        
408
        showMessage("");
409
        doUpdateComponents();
410
    }
411
    
412
    private void doChangeTableChecked() {
413
        List<OnlineEntity> checkedEntities = this.entitySelector.getCheckedEntities();
414
        List<String> entityCodes = new ArrayList<>();
415
        for (OnlineEntity checkedEntity : checkedEntities) {
416
            if( checkedEntity!=null && !(checkedEntity instanceof OnlineEntity)){
417
                entityCodes.add(checkedEntity.getEntityCode());
418
            }
419
        }
420
        this.entitySelector.setCheck(entityCodes, false);
421

    
422
        Collection<TableInfo> tablesInformation = getTablesInformation();
423
        for (TableInfo tableInfo : tablesInformation) {
424
            OnlineEntity tableInfoEntity = (OnlineEntity) tableInfo.getProperty("entity");
425
            tableInfo.setSelected(checkedEntities.contains(tableInfoEntity));
426
        }
427
        this.checkFinishable();
428
    }
429
    
430

    
431
    private void updateTableInfoFromUI() {
432
        String previousId = this.tableInfoController.getId();
433
        if (previousId == null) {
434
            return;
435
        }
436

    
437
        if (this.tablesInfo != null && !this.tablesInfo.isEmpty()) {
438
            TableInfo previousInfo = this.tablesInfo.get(previousId);
439
            if (previousInfo != null) {
440
                this.tableInfoController.fetch(previousInfo);
441
            }
442
        }
443
    }
444

    
445
    @Override
446
    public void initWizard() {
447
        I18nManager i18n = ToolsLocator.getI18nManager();
448
        setTabName(i18n.getTranslation("_Online"));
449
    }
450

    
451
    @Override
452
    public boolean areSettingsValid() {
453
        if(processing){
454
            return false;
455
        }
456
        boolean hasInvalidValues = false;
457
        boolean hasSelectedTables = false;
458
        for (TableInfo tableInfo : this.getTablesInformation() ) {
459
            if (tableInfo.isSelected()) {
460
                hasSelectedTables = true;
461
                if (!tableInfo.hasValidValues()) {
462
                    hasInvalidValues = true;
463
                }
464
            }
465
        }
466
        return hasSelectedTables && !hasInvalidValues;
467
    }
468

    
469
    @Override
470
    public DataStoreParameters[] getParameters() {
471
        int sz = 0;
472
        for (TableInfo tableInfo : this.getTablesInformation() ) {
473
            if( tableInfo.isSelected() ) {
474
                sz++;
475
            }
476
        }
477
        if( sz == 0 ) {
478
            return null;
479
        }
480
        DataStoreParameters[] dbParameters = new DataStoreParameters[sz];
481
        int n = 0;
482
        for (TableInfo tableInfo : this.getTablesInformation() ) {
483
            if( tableInfo.isSelected() ) {
484
                dbParameters[n++] = tableInfo.getParameters();
485
            }
486
        }
487
        return dbParameters;
488
    }
489
    
490
    @Override
491
    public void execute() {
492
        executeWizard();
493
    }
494

    
495
    @Override
496
    public void close() {
497
        
498
    }
499
    
500
    protected void checkFinishable() {
501
        boolean finishable = areSettingsValid();
502
        callStateChanged(finishable);
503
    }
504
    
505
    private void doUpdateComponents() {
506
        OnlineEntity entity = this.entitySelector.getSelectedEntity();
507
        
508
        boolean theProcessing = this.processing || this.entitySelector.isProcessing();
509

    
510
        OnlineWorkingcopy ws = getWorkspace();
511
        this.view.btnDownload.setEnabled(ws!=null);
512
        if(entity == null){
513
            this.tableInfoController.setEnabled(false);
514
        } else if(entity instanceof OnlineEntity){
515
            this.tableInfoController.setEditable(!theProcessing && ws != null);
516
            this.tableInfoController.setEnabled(ws != null);
517
        } else { //Entidad de repositorio
518
            this.tableInfoController.setEnabled(false);
519
        }
520
        
521
        this.entitySelector.setEnabled(!theProcessing && ws != null);
522
        this.view.btnTablesCheckAll.setEnabled(this.entitySelector.isEnabled());
523
        this.view.btnTablesUncheckAll.setEnabled(this.entitySelector.isEnabled());
524
        this.view.btnTablesCollapseAll.setEnabled(this.entitySelector.isEnabled());
525
        this.view.btnTablesExpandAll.setEnabled(this.entitySelector.isEnabled());
526
        this.workspacePicker.setEnabled(!theProcessing);
527
        this.view.btnInitWorkspace.setEnabled(!theProcessing);
528
        this.setVisibleStatus(theProcessing);
529
        this.checkFinishable();
530
    }
531

    
532
    private void doShowInitWorkspace() {
533
        I18nManager i18nManager = ToolsLocator.getI18nManager();
534
        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
535
        OnlineSwingManager swingManager = OnlineSwingLocator.getOnlineSwingManager();
536

    
537
        final OnlineJInitWorkingcopy panelInitWorkspace = swingManager.createInitWorkspacePanel();
538
        final Dialog dialogInitWorkspace = winManager.createDialog(
539
                panelInitWorkspace.asJComponent(),
540
                i18nManager.getTranslation("_Online_Initialize_workingcopy"),
541
                i18nManager.getTranslation("_Online_Initialize_workingcopy"),
542
                WindowManager_v2.BUTTONS_OK_CANCEL
543
        );
544

    
545
        panelInitWorkspace.setDialog(dialogInitWorkspace);
546
        dialogInitWorkspace.setButtonLabel(
547
                WindowManager_v2.BUTTON_OK,
548
                i18nManager.getTranslation("_VCS_Initialize_workingcopy")
549
        );
550
        dialogInitWorkspace.addActionListener((ActionEvent e) -> {
551
            switch (dialogInitWorkspace.getAction()) {
552
                case WindowManager_v2.BUTTON_OK:
553
                    int r = panelInitWorkspace.actionPerformed();
554
                    if (r == 0) {
555
                        this.workspacePicker = swingManager.createPickerWorkspaceController(
556
                                this.view.cboWorkspaces,
557
                                this.view.btnAddWorkspace
558
                        );
559
                    } else {
560
                        String message = "_Cant_initialize_workingcopy_{0}";
561

    
562
                        StringBuilder compoundMessage = new StringBuilder();
563
                        String[] messageArgs = new String[]{panelInitWorkspace.getWorkspaceName()};
564

    
565
                        compoundMessage.append(i18nManager.getTranslation(
566
                                message,
567
                                messageArgs
568
                        ));
569

    
570
                        ThreadSafeDialogsManager dialogsManager = ToolsSwingLocator.getThreadSafeDialogsManager();
571
                        dialogsManager.messageDialog(
572
                                compoundMessage.toString(),
573
                                i18nManager.getTranslation("_VCS_Initialize_workingcopy"),
574
                                JOptionPane.WARNING_MESSAGE
575
                        );
576
                    }
577

    
578
                    break;
579

    
580
            }
581
        });
582
        dialogInitWorkspace.show(WindowManager.MODE.DIALOG);
583
    }
584

    
585
    public OnlineWorkingcopy getWorkspace() {
586
        return this.workspacePicker.get();
587
    }
588

    
589
    private void doReloadTablesInfo() {
590
        if (notInSwingThreadInvokeLater(() -> { doReloadTablesInfo(); })) {
591
            return;
592
        }
593

    
594
        I18nManager i18n = ToolsLocator.getI18nManager();
595

    
596
        try {
597
            Collection<OnlineEntity> entities = this.entitySelector.getEntities();
598
            for (OnlineEntity entity : entities) {
599
                if (entity instanceof OnlineEntity) {
600
                    JDBCStoreParameters parameters = getWorkspace().getExplorer().get(entity.getEntityName());
601
                    TableInfo tableInfo = new OnlineTableInfo(entity, parameters, this.requireGeometry(), false);
602
                    if(StringUtils.isNotBlank(entity.getLabel()) ) {
603
                        tableInfo.setDocumentName(entity.getLabel());
604
                    }
605
                    tableInfo.setProperty("entity", entity);
606
                    this.tablesInfo.put(tableInfo.getId(), tableInfo);
607
                }
608
            }
609

    
610
        } catch (Exception e) {
611
            LOGGER.warn("_Cant_update_layers_list", e);
612
            ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
613
            dialogs.messageDialog(
614
                    i18n.getTranslation("_Cant_update_layers_list") + "\n" + e.getMessage(),
615
                    i18n.getTranslation("_Add_layer"),
616
                    JOptionPane.WARNING_MESSAGE
617
            );
618
        }
619
    }
620

    
621
    private void doDownload() {
622
        OnlineWorkingcopy workspace = getWorkspace();
623
        if (workspace == null) {
624
            return;
625
        }
626
        WindowManager_v2 winmgr = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
627
        I18nManager i18n = ToolsLocator.getI18nManager();
628
        OnlineSwingManager onlineSwingManager = OnlineSwingLocator.getOnlineSwingManager();
629
        
630
        OnlineJDownload panel = onlineSwingManager.createDownloadPanel(workspace, null, null);
631
        Dialog dialog = winmgr.createDialog(
632
                panel.asJComponent(),
633
                i18n.getTranslation("_Online_Download"),
634
                i18n.getTranslation("_Online_Download"),
635
                WindowManager_v2.BUTTONS_OK_CANCEL
636
        );
637
        dialog.addActionListener((ActionEvent e) -> {
638
            if( dialog.getAction()==WindowManager_v2.BUTTON_OK ) {
639
                panel.actionPerformed();
640
            }
641
        });
642
        dialog.show(WindowManager.MODE.DIALOG);
643
    }
644
    
645
    private void showMessage(String message) {
646
        if( notInSwingThreadInvokeLater(() -> {showMessage(message);}) ) {
647
            return;
648
        }
649
        this.view.lblStatusMessages.setText(message);
650
    }
651
    
652
        public boolean isProcessing() {
653
        return processing;
654
    }
655
    
656
    public void setVisibleStatus(boolean visible) {
657
        if( notInSwingThreadInvokeLater(() -> {setVisibleStatus(visible);}) ) {
658
            return;
659
        }
660
        this.view.lblStatusTitle.setVisible(visible);
661
        this.view.pbStatus.setVisible(visible);
662
        this.view.lblStatusMessages.setVisible(true);
663
    }
664

    
665
    public TaskStatusController getTaskStatusController() {
666
        return this.taskStatusController;
667
    }
668

    
669
    public static boolean notInSwingThreadInvokeLater(Runnable x) {
670
        if( SwingUtilities.isEventDispatchThread() ) {
671
            return false;
672
        }
673
        SwingUtilities.invokeLater(x);
674
        return true;
675
    }
676
    
677
    protected static class WizardOnlineViewExtended extends AbstractWizardOnlineView {
678

    
679
        @Override
680
        public ImageIcon loadImage(String imageName) {
681
            String name = FilenameUtils.getBaseName(imageName);
682
            IconTheme theme = ToolsSwingLocator.getIconThemeManager().getDefault();
683
            if (theme.exists(name)) {
684
                return theme.get(name);
685
            }
686
            URL url = WizardOnlineViewExtended.class.getResource("images/" + name + ".png");
687
            if (url == null) {
688
                return null;
689
            }
690
            return new ImageIcon(url);
691
        }
692
    }
693

    
694
    private String toHTML(String s) {
695
      s = StringUtils.replace(s, "\n", "<br>");
696
      s = StringUtils.replace(s, "<html>", "");
697
      s = StringUtils.replace(s, "</html>", "");
698
      s = "<html>"+s+"</html>";
699
      return s;
700
    }
701

    
702
    protected void downloadAndRegisterResources(String tableName) {
703
        OnlineWorkingcopy workspace = getWorkspace();
704
        OnlineEntity entity = workspace.getWorkspaceEntityByName(tableName);
705
        if(entity == null){
706
            return;
707
        }
708
        OnlineEntity lEntity = workspace.getEntity(entity.getEntityCode());
709
//        String resources = lEntity.getResources();
710
//        if (StringUtils.isNotBlank(resources)) {
711
//            try {
712
//                if (!workspace.existsInWorkspace(workspace.getWorkspaceEntity(resources))) {
713
//                    workspace.checkout(
714
//                            resources,
715
//                            null
716
//                    );
717
//                }
718
//            } catch (Exception e) {
719
//                LOGGER.warn("Can't checkout resources table '" + resources + "'", e);
720
//            }
721
//            workspace.getExplorer().setCustomResources(entity.getEntityName(), resources,true);
722
//        }
723

    
724
    }
725

    
726
    @Override
727
    public void setMapContext(MapContext mapContext) {
728
        super.setMapContext(mapContext);
729
        this.tableInfoController.setMapContext(mapContext);
730
    }
731

    
732
    protected Function<OnlineEntity,String> getLabelEntityFormatter() {
733
        return null;
734
                
735
    }
736
    
737
//    protected boolean getCheckScale() {
738
//        return this.view.chkCheckScale.isSelected();
739
//    }
740
//    
741
//    protected boolean getAddToCWhenLoadingAll() {
742
//        return this.view.chkAddToCWhenLoadingAll.isSelected();
743
//    }
744
    
745
    protected String getCategory(OnlineEntity entity) {
746
        return this.entitySelector.getCategory(entity);
747
    }
748
    
749
    protected void registerDataModelRepository(OnlineWorkingcopy workspace, String dataModelName) {
750
        OnlineSwingManager swingManager = OnlineSwingLocator.getOnlineSwingManager();
751
        OnlineSwingServices services = swingManager.getDefaultServices();
752
        
753
        workspace.registerDataModelRepository(dataModelName);
754
        services.connectedToModel(workspace, dataModelName);
755
    }  
756
    
757
//    private void doConnectToModel() {
758
//        OnlineWorkingcopy workspace = getWorkspace();
759
//        if (workspace == null) {
760
//            return;
761
//        }
762
//        I18nManager i18n = ToolsLocator.getI18nManager();
763
////        ThreadSafeDialogsManager dialogs = ToolsSwingLocator.getThreadSafeDialogsManager();
764
//        WindowManager_v2 winManager = (WindowManager_v2) ToolsSwingLocator.getWindowManager();
765
//        OnlineSwingManager swingManager = OnlineSwingLocator.getOnlineSwingManager();
766
//        
767
//        String modelName = null;
768
//        OnlineEntity entity = this.entitySelector.getSelectedEntity();
769
//        if(entity != null ){
770
//            modelName = entity.getFirstDataModel();
771
//        }
772
//        OnlineJCheckoutDataModel panel = swingManager.createCheckoutDataModelPanel(workspace, modelName);        
773
//        Dialog theDialog = winManager.createDialog(
774
//                panel.asJComponent(),
775
//                i18n.getTranslation("_VCS_Connect_to_datamodel"),
776
//                null,
777
//                WindowManager_v2.BUTTONS_OK_CANCEL
778
//        );
779
//        panel.setDialog(theDialog);
780
//        theDialog.addActionListener((ActionEvent e) -> {
781
//            if( theDialog.getAction() == WindowManager_v2.BUTTON_OK) {
782
//                panel.connectToModel();
783
//            }
784
//        });        
785
//        theDialog.show(WindowManager.MODE.DIALOG);
786
//    }
787
    
788
}