Statistics
| Revision:

gvsig-projects-pool / org.gvsig.online / trunk / org.gvsig.online / org.gvsig.online.swing / org.gvsig.online.swing.impl / src / main / java / org / gvsig / online / swing / impl / initworkspace / OnlineJInitWorkingcopyImpl.java @ 9512

History | View | Annotate | Download (24.2 KB)

1
/**
2
 * gvSIG. Desktop Geographic Information System.
3
 *
4
 * Copyright (c) 2007-2020 gvSIG Association
5
 *
6
 * This program is free software; you can redistribute it and/or
7
 * modify it under the terms of the GNU General Public License
8
 * as published by the Free Software Foundation; either version 2
9
 * of the License, or (at your option) any later version.
10
 *
11
 * This program is distributed in the hope that it will be useful,
12
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
13
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
 * GNU General Public License for more details.
15
 *
16
 * You should have received a copy of the GNU General Public License
17
 * along with this program; if not, write to the Free Software
18
 * Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
 * MA  02110-1301, USA.
20
 *
21
 * For any additional information, do not hesitate to contact us
22
 * at info AT gvsig.com, or visit our website www.gvsig.com.
23
 */
24
package org.gvsig.online.swing.impl.initworkspace;
25

    
26
import java.awt.event.ActionEvent;
27
import java.awt.event.FocusEvent;
28
import java.awt.event.FocusListener;
29
import java.io.File;
30
import java.io.IOException;
31
import java.net.URL;
32
import java.util.ArrayList;
33
import java.util.List;
34
import javax.swing.DefaultComboBoxModel;
35
import javax.swing.ImageIcon;
36
import javax.swing.JComponent;
37
import javax.swing.SwingUtilities;
38
import javax.swing.event.ChangeEvent;
39
import javax.swing.event.ChangeListener;
40
import javax.swing.event.TableModelEvent;
41
import javax.swing.event.TableModelListener;
42
import org.apache.commons.collections4.CollectionUtils;
43
import org.apache.commons.lang3.StringUtils;
44
import org.gvsig.fmap.dal.store.h2.H2SpatialUtils;
45
import org.gvsig.fmap.dal.store.jdbc.JDBCServerExplorerParameters;
46
import org.gvsig.fmap.dal.store.jdbc2.JDBCServerExplorer;
47
import org.gvsig.fmap.dal.swing.DALSwingLocator;
48
import org.gvsig.fmap.dal.swing.DataSwingManager;
49
import org.gvsig.fmap.mapcontrol.MapControl;
50
import org.gvsig.online.lib.api.OnlineLayer;
51
import org.gvsig.online.lib.api.OnlineLocator;
52
import org.gvsig.online.lib.api.OnlineManager;
53
import static org.gvsig.online.lib.api.OnlineManager.ERR_NO_ERROR;
54
import static org.gvsig.online.lib.api.OnlineManager.ERR_PROJECT_REQUIRED;
55
import static org.gvsig.online.lib.api.OnlineManager.ERR_WORKINGAREA_REQUIRED;
56
import org.gvsig.online.lib.api.OnlineProject;
57
import org.gvsig.online.lib.api.OnlineSite;
58
import org.gvsig.online.lib.api.workingcopy.OnlineWorkingcopy;
59
import org.gvsig.online.lib.api.workingcopy.OnlineWorkingcopyDescriptor;
60
import org.gvsig.online.lib.api.workingcopy.WorkingArea;
61
import org.gvsig.online.swing.api.OnlineJInitWorkingcopy;
62
import org.gvsig.online.swing.api.OnlineSwingLocator;
63
import org.gvsig.online.swing.api.OnlineSwingServices;
64
import org.gvsig.online.swing.impl.OnlineSwingCommons;
65
import static org.gvsig.online.swing.impl.OnlineSwingCommons.notInSwingThreadInvokeLater;
66
import org.gvsig.online.swing.impl.workingarea.WorkingAreaPickerControllerImpl;
67
import org.gvsig.tools.ToolsLocator;
68
import org.gvsig.tools.dataTypes.CoercionException;
69
import org.gvsig.tools.dataTypes.DataTypes;
70
import org.gvsig.tools.dataTypes.DataTypesManager;
71
import org.gvsig.tools.dispose.DisposeUtils;
72
import org.gvsig.tools.i18n.I18nManager;
73
import org.gvsig.tools.swing.api.Component;
74
import org.gvsig.tools.swing.api.ToolsSwingLocator;
75
import org.gvsig.tools.swing.api.ToolsSwingManager;
76
import org.gvsig.tools.swing.api.ToolsSwingUtils;
77
import org.gvsig.tools.swing.api.bookmarkshistory.TextFieldWithHistoryAndBookmarkController;
78
import org.gvsig.tools.swing.api.pickercontroller.FilePickerController;
79
import org.gvsig.tools.swing.api.pickercontroller.PickerController;
80
import org.gvsig.tools.swing.api.task.TaskStatusController;
81
import org.gvsig.tools.swing.api.task.TaskStatusSwingManager;
82
import org.gvsig.tools.swing.api.windowmanager.Dialog;
83
import org.gvsig.tools.swing.api.windowmanager.WindowManager_v2;
84
import org.gvsig.tools.task.SimpleTaskStatus;
85
import org.gvsig.tools.task.UserCancelTaskException;
86
import org.gvsig.tools.util.LabeledValue;
87
import org.gvsig.tools.util.LabeledValueImpl;
88
import org.slf4j.LoggerFactory;
89

    
90
/**
91
 *
92
 * @author gvSIG Team
93
 */
94
@SuppressWarnings("UseSpecificCatch")
95
public class OnlineJInitWorkingcopyImpl extends OnlineJInitWorkingcopyView
96
        implements Component, OnlineJInitWorkingcopy  {
97
    
98
    private static final org.slf4j.Logger LOGGER = LoggerFactory.getLogger(OnlineJInitWorkingcopyImpl.class);
99

    
100
    private Dialog dialog;
101

    
102
    private OnlineSite site;
103
    private JDBCServerExplorer workspaceServer;
104
    
105
    private FilePickerController workspaceFilePicker;
106
    private PickerController<JDBCServerExplorerParameters> workspaceServerPicker;
107
    private TextFieldWithHistoryAndBookmarkController siteURLController;
108
    private WorkingAreaPickerControllerImpl workingAreaPicker;
109
    private TaskStatusController taskStatusController;
110

    
111

    
112
    public OnlineJInitWorkingcopyImpl() {
113
        translate();
114
        
115
        initComponents();
116
        
117
    }
118
    
119
    private void initComponents() {
120
        ToolsSwingManager toolsSwingManager = ToolsSwingLocator.getToolsSwingManager();
121
        TaskStatusSwingManager taskStatusManager = ToolsSwingLocator.getTaskStatusSwingManager();
122
        OnlineSwingServices onlineservices = OnlineSwingLocator.getOnlineSwingManager().getDefaultServices();
123

    
124
        this.taskStatusController = taskStatusManager.createTaskStatusController(
125
                null,
126
                this.lblStatusTitle,
127
                this.lblStatusMessages,
128
                this.pbStatus,
129
                this.btnStatusCancel,
130
                null
131
        );
132
        this.taskStatusController.setShowCancelButton(false);
133
        this.taskStatusController.setShowRemoveTaskButton(false);
134
//        this.taskStatusController.bind(ToolsLocator.getTaskStatusManager());
135
        SwingUtilities.invokeLater(() -> {this.setVisibleStatus(false); });        
136
        
137
        this.workspaceFilePicker = toolsSwingManager.createFilePickerController(
138
                txtWorkspaceFile, 
139
                btnWorkspaceFile
140
        );
141
        this.workspaceFilePicker.addChangeListener((ChangeEvent e) -> {
142
            if (StringUtils.isBlank(this.txtWorkspaceName.getText())) {
143
                File file = this.workspaceFilePicker.get();
144
                if(file != null){
145
                    this.txtWorkspaceName.setText(H2SpatialUtils.removeH2FileNameExtension(file.getName()));
146
                }
147
            }
148
            doUpdateComponents();
149
        });
150
        
151
        this.txtWorkspaceFile.addFocusListener(new FocusListener() {
152
            @Override
153
            public void focusGained(FocusEvent e) {
154
                //DO NOTHING
155
            }
156

    
157
            @Override
158
            public void focusLost(FocusEvent e) {
159
                doUpdateComponents();
160
            }
161
        });
162
        
163
        this.txtWorkspaceName.addActionListener((ActionEvent e) -> {
164
            doUpdateComponents();
165
        });
166
        
167
        this.txtWorkspaceName.addFocusListener(new FocusListener() {
168
            @Override
169
            public void focusGained(FocusEvent e) {
170
                //DO NOTHING
171
            }
172

    
173
            @Override
174
            public void focusLost(FocusEvent e) {
175
                doUpdateComponents();
176
            }
177
        });
178

    
179
        this.siteURLController = toolsSwingManager.createTextFieldWithHistoryAndBookmarkController(
180
                OnlineSwingCommons.BOOKMARKSANDHISTORY_SITE_URL,
181
                txtSiteURL,
182
                btnSiteURLRefresh,
183
                btnSiteURLHistory,
184
                btnSiteURLBookmarks
185
        );
186
        this.siteURLController.setEnabled(true);
187
        this.siteURLController.addActionListener((ActionEvent e) -> {
188
            doChangeSiteURL();
189
        });
190
        this.cboProjects.addActionListener((ActionEvent e) -> {
191
            SwingUtilities.invokeLater(() -> {doChangeProject();});
192
        });
193
        
194
        this.workingAreaPicker = new WorkingAreaPickerControllerImpl(
195
            () -> {return getSite();},
196
            txtWorkingAreaLabel,
197
            txtWorkingArea,
198
            btnWorkingAreaFromView,
199
            btnWorkingAreaDialog,
200
            btnWorkingAreaHistory,
201
            btnWorkingAreaBookmarks,
202
            () -> {
203
                LabeledValue<MapControl> n = onlineservices.getActiveMapControl();
204
                return (n == null) ? null : n.getValue();
205
            },
206
            () -> {
207
                List<OnlineLayer> selectedLayers = getLayersModel().getSelectedLayers();
208
                if (selectedLayers.isEmpty()) {
209
                    return null;
210
                }
211
                return selectedLayers;
212
            }
213
        );
214
        this.workingAreaPicker.addChangeListener((ChangeEvent e) -> {
215
            doUpdateComponents();
216
        });
217
        
218
        SwingUtilities.invokeLater(() -> { clearMessage(); });
219
        ToolsSwingUtils.ensureRowsCols(this, 15, 40, 25, 100);
220

    
221
    }
222

    
223
    @Override
224
    public void setDialog(Dialog dialog) {
225
        this.dialog = dialog;
226
        this.doUpdateComponents();
227
    }
228

    
229
    private void doUpdateComponents() {
230
        message("");
231
        
232
        boolean enableAll = true;
233
        
234
        boolean isThereURL = false;
235
        boolean isThereProject = false;
236
        boolean isThereDbfile = false;
237
        boolean isThereWsName = false;
238
        boolean isThereSelectedsLayers = false;
239
        boolean isThereWorkingArea = false;
240
        
241
        // 0. Check is processing
242
        enableAll = !this.isProcessing();
243
        
244
        // 1. Check Site URL
245
        if( enableAll ) {
246
            URL url = this.getSiteURL();
247
            isThereURL = (url != null);
248
            if( !isThereURL ) {
249
                if( StringUtils.isBlank(this.txtSiteURL.getText()) ) {
250
                    message2(enableAll, "_The_site_url_is_blank");
251
                } else {
252
                    message2(enableAll, "_Invalid_site_url");
253
                }
254
            }
255
            enableAll = enableAll && isThereURL;
256
        }
257
            
258
        // 2. Check online project
259
        if( enableAll ) {
260
            OnlineProject project = this.getProject();
261
            isThereProject = (project != null);
262
            if( !isThereProject ) {
263
                message2(enableAll, "_Select_a_Online_project");
264
            }
265
            enableAll = enableAll && isThereProject;
266
        }
267

    
268
        // 3. Check workspace file
269
        if( enableAll ) {
270
            File f = this.getWorkspaceFile();
271
            isThereDbfile = (f!=null);
272
            if( !isThereDbfile ) {
273
                message2(enableAll, "_Selected_working_copy_file_is_not_valid");
274
            } else {
275
                f = H2SpatialUtils.normalizeH2File(f);
276
                if( f.exists() ) {
277
                    message2(enableAll, "_Selected_working_copy_file_already_exists");
278
                    isThereDbfile = false;
279
                }
280
            }
281
            enableAll = enableAll && isThereDbfile;
282
        }
283
        
284
        // 4. Check workspace name        
285
        if( enableAll ) {
286
            String wsname = this.getWorkspaceName();
287
            isThereWsName = StringUtils.isNotBlank(wsname);
288
            if( !isThereWsName ) {
289
                message2(enableAll, "_Need_a_working_copy_name");
290
            } else {
291
                OnlineManager manager = OnlineLocator.getOnlineManager();
292
                OnlineWorkingcopyDescriptor ws = manager.getWorkingcopyDescriptor(wsname);
293
                if( ws!=null ) {
294
                    message2(enableAll, "_A_working_copy_with_that_name_already_exists");
295
                    isThereWsName = false;
296
                }
297
            }
298
            enableAll = isThereURL && isThereWsName;
299
        }
300

    
301
        
302
        // 5. Check layers selected
303
        if( enableAll || isThereProject ) {
304
            isThereSelectedsLayers = !this.getLayersModel().isSelectionEmpty();
305
            if( !isThereSelectedsLayers ) {
306
                message2(enableAll, "_You_must_select_some_layer");
307
            }
308
            enableAll = isThereURL && isThereSelectedsLayers;
309
        }
310
        
311
        // 6. Check selected working area
312
        if( enableAll || isThereProject ) {
313
            WorkingArea workingArea = this.workingAreaPicker.getWithoutAddHistory();
314
            isThereWorkingArea = (workingArea != null && workingArea.getValue() != null);
315
            if( !isThereWorkingArea ) {
316
                message2(enableAll, "_You_must_select_a_working_area");
317
            }
318
            enableAll = isThereURL && isThereWorkingArea;
319
        }
320
        
321
        
322
        this.siteURLController.setEnabled(!this.isProcessing());
323
        this.cboProjects.setEnabled(isThereURL && this.cboProjects.getModel().getSize()>0 );
324
        this.workspaceFilePicker.setEnabled(isThereProject);
325
        this.chkCreateConnectionToDatabase.setEnabled(isThereProject && isThereDbfile);
326
        this.txtWorkspaceName.setEnabled(isThereProject && isThereDbfile);
327
        this.tblLayers.setEnabled(isThereURL && isThereProject);
328
        this.txtWorkingAreaLabel.setEnabled(isThereProject);
329
        
330
        this.txtWorkingArea.setEnabled(isThereProject);
331
        this.btnWorkingAreaFromView.setEnabled(isThereProject);
332
        this.btnWorkingAreaDialog.setEnabled(isThereSelectedsLayers);
333
        
334
        if (this.dialog != null) {
335
            this.dialog.setButtonEnabled(WindowManager_v2.BUTTON_OK,enableAll);
336
        }
337
    }
338

    
339
    
340
    @Override
341
    public JComponent asJComponent() {
342
        return this;
343
    }
344

    
345
    private void translate() {
346
        ToolsSwingManager swingManager = ToolsSwingLocator.getToolsSwingManager();
347
        swingManager.translate(this.chkCreateConnectionToDatabase);
348
        swingManager.translate(this.lblWorkspaceName);
349
        swingManager.translate(this.lblSiteUrl);
350
        swingManager.translate(this.lblProjects);
351
        swingManager.translate(this.lblWorkspaceFile);
352
        swingManager.translate(this.lblLayers);
353
        swingManager.translate(this.lblWorkspaceFile);
354
        swingManager.translate(this.lblWorkingArea);
355
        swingManager.translate(this.btnWorkingAreaFromView);
356
        swingManager.translate(this.btnWorkingAreaDialog);
357
    }
358
    
359
    private URL getSiteURL() {
360
        if(siteURLController.isEnabled()){
361
            String value = this.siteURLController.getText();
362

    
363
            URL url;
364
            DataTypesManager manager = ToolsLocator.getDataTypesManager();
365
            try {
366
                 url = (URL) manager.coerce(DataTypes.URL, value);
367
            } catch (CoercionException ex) {
368
                String s = (value==null)? "null":StringUtils.abbreviate(value, 100);
369
                LOGGER.warn("Can't coerce value ("+s+") to "+DataTypes.URL_NAME+".", ex);
370
                return null;
371
            }
372

    
373
            return url;
374
        }
375
        return null;
376
    }
377

    
378
    private File getWorkspaceFile() {
379
        File file = this.workspaceFilePicker.get();
380
        return file;
381
    }
382

    
383
    @Override
384
    public int actionPerformed() {
385
        I18nManager i18n = ToolsLocator.getI18nManager();
386
        OnlineManager manager = OnlineLocator.getOnlineManager();
387
        OnlineProject theProject = this.getProject();
388
        WorkingArea workingArea = this.workingAreaPicker.get();
389
        if (theProject == null ) {
390
            return ERR_PROJECT_REQUIRED;
391
        }
392
        if (workingArea==null ) {
393
            return ERR_WORKINGAREA_REQUIRED;
394
        }
395
        int err = ERR_NO_ERROR;
396
        SimpleTaskStatus status = this.getTaskStatus();
397
        try {
398
            File file = this.getWorkspaceFile();
399
            if (file != null) {
400
                status.setTitle(i18n.getTranslation("_Initializing_workspace"));
401
                err = manager.initWorkingcopy(file, theProject, getWorkspaceName(), getTaskStatus());
402
                if (err == ERR_NO_ERROR ) {
403
                    OnlineWorkingcopy ws = manager.openWorkingcopy(file);
404
                    if( this.chkCreateConnectionToDatabase.isSelected() ) {
405
                        ws.addToConnectionPool();
406
                    }
407
                    ws.download_config(true, status);
408
                    ws.download_resources(true, status);
409
                    ws.setCurrentWorkingArea(workingArea);
410
                    LayersTableModel model = (LayersTableModel) this.tblLayers.getModel();
411
                    List<OnlineLayer> selectedLayers = model.getSelectedLayers();
412
                    if( !CollectionUtils.isEmpty(selectedLayers) ) {
413
                        status.setRangeOfValues(0, selectedLayers.size());
414
                        status.setCurValue(0);
415
                        for (OnlineLayer layer : selectedLayers) {
416
                            status.incrementCurrentValue();
417
                            status.setTitle(i18n.getTranslation("_Adding_layer")+" "+layer.getName());
418
                            if( status.isCancellationRequested() ) {
419
                                status.cancel();
420
                                throw new UserCancelTaskException();
421
                            }
422
                            String fieldForLabel = "ogc_fid"; // FIXME: Pedir en el GUI
423
                            String label = layer.getName(); // FIXME: Pedir en el GUI
424
                            int tileSize = layer.calculateTileSize(5000, status);
425
                            ws.addEntity(
426
                                    layer.getFeatureType(), 
427
                                    layer.getName(), 
428
                                    layer.getTitle(), 
429
                                    fieldForLabel, 
430
                                    label, 
431
                                    layer.getPkName(),
432
                                    tileSize
433
                            );
434
                        }
435

    
436
                        status.setRangeOfValues(0, selectedLayers.size());
437
                        status.setCurValue(0);
438
                        for (OnlineLayer layer : selectedLayers) {
439
                            status.incrementCurrentValue();
440
                            status.setTitle(i18n.getTranslation("_Downloading_layer")+" "+layer.getName());
441
                            if( status.isCancellationRequested() ) {
442
                                status.cancel();
443
                                throw new UserCancelTaskException();
444
                            }
445
                            err = ws.download(layer.getName(),workingArea.getValue(), status);
446
                            if (err != ERR_NO_ERROR ) {
447
                                // TODO: Que hacer aqui si da error
448
                            }
449
                        }
450
                    }
451
                }
452

    
453
            }
454
        } catch (UserCancelTaskException ex) {
455
            LOGGER.info("Cancelled by user.");
456
            err = OnlineManager.ERR_CANCELLED_BY_USER;
457
        } catch (Exception ex) {
458
            LOGGER.info("Can't initialize workspace", ex);
459
            err = OnlineManager.ERR_EXCEPTION;
460
        }
461
        if( err==ERR_NO_ERROR || err == OnlineManager.ERR_CANCELLED_BY_USER) {
462
            URL siteurl = getSiteURL();
463
            if( siteurl != null ) {
464
                this.siteURLController.addHistory(siteurl.toString());
465
            }
466
        }
467
        return err;
468
    }
469

    
470
    private OnlineSite getSite() {
471
        if (site == null){
472
            try {
473
                OnlineManager manager = OnlineLocator.getOnlineManager();
474
                URL url = getSiteURL();
475
                if (url != null){
476
                    site = manager.connectSite(url);
477
                }
478
            } catch (IOException ex) {
479
                LOGGER.warn("Can't connect to site '"+this.txtSiteURL.getText()+"'", ex);
480
            }
481
        }
482
        return site;
483
    }
484

    
485
    private OnlineProject getProject() {
486
        OnlineSite theSite = this.getSite();
487
        if( theSite == null ) {
488
            return null;
489
        }
490
        LabeledValue<Integer> item = (LabeledValue<Integer>) this.cboProjects.getSelectedItem();
491
        if( item == null ) {
492
            return null;
493
        }
494
        return theSite.getProject(item.getValue());
495
    }
496

    
497
    @Override
498
    public String getWorkspaceName() {
499
        return txtWorkspaceName.getText();
500
    }
501

    
502
    public static void selfRegister() {
503

    
504
    }
505

    
506
    @Override
507
    public boolean isProcessing() {
508
        return false;
509
    }
510

    
511
    private void message2(boolean doMessage, String s) {
512
        if( doMessage ) {
513
            message(s);
514
        }
515
    }
516
    
517
    private void message(String message) {
518
        if( notInSwingThreadInvokeLater(() -> {message(message);}) ) {
519
            return;
520
        }
521
        String s = message;
522
        if( StringUtils.startsWith(s, "_") ) {
523
            I18nManager i18n = ToolsLocator.getI18nManager();
524
            s = i18n.getTranslation(s);
525
        }
526
        this.lblStatusMessages.setText(s);
527
//        this.lblStatusMessages.setToolTipText(toolTipText);        
528
        
529
    }
530

    
531
    @Override
532
    public ImageIcon loadImage(String imageName) {
533
        return OnlineSwingCommons.loadImage(imageName);
534
    }
535

    
536
    private void doChangeSiteURL() {
537
        String url_s = null;
538
        try {
539
            OnlineManager onlineManager = OnlineLocator.getOnlineManager();
540
            
541
            url_s = this.siteURLController.getText();
542
            if( StringUtils.isBlank(url_s) ) {
543
                DisposeUtils.dispose(this.site);
544
                this.site = null;
545
                return;
546
            }
547
            URL url = new URL(url_s);
548
            this.site = onlineManager.connectSite(url);
549
            this.siteURLController.addHistory(url_s);
550
            doFillProjects();
551
            doUpdateComponents();
552
        } catch (Exception ex) {
553
            LOGGER.warn("Can't chage site url ("+url_s+").",ex);
554
        }        
555
    }
556
    
557
    private void doFillProjects() {
558
        OnlineSite theSite = this.getSite();
559
        if( theSite == null ) {
560
            return;
561
        }
562
        List<LabeledValue<Integer>> projects = new ArrayList<>();
563
        for (OnlineProject project : theSite.projects()) {
564
            projects.add(new LabeledValueImpl<>(project.getTitle(),project.getId()));
565
        }
566
        projects.sort((LabeledValue<Integer> o1, LabeledValue<Integer> o2) -> o1.getLabel().compareTo(o2.getLabel()));
567
        DefaultComboBoxModel<LabeledValue<Integer>> model = new DefaultComboBoxModel<>();
568
        for (LabeledValue<Integer> project : projects) {
569
            model.addElement(project);
570
        }
571
        this.cboProjects.setModel(model);
572
        this.cboProjects.setSelectedIndex(-1);
573
        this.workspaceFilePicker.set(null);
574
        this.txtWorkspaceName.setText("");
575
        this.clearLayers();
576
    }
577
    
578
    private void doChangeProject() {
579
        OnlineSite theSite = this.getSite();
580
        LabeledValue<Integer> selected = (LabeledValue<Integer>) this.cboProjects.getSelectedItem();
581
        if( selected == null || theSite == null ) {
582
            this.workspaceFilePicker.set(null);
583
            this.txtWorkspaceName.setText("");
584
            this.clearLayers();
585
            return;
586
        }
587
        int projectId = selected.getValue();
588
        OnlineProject project = theSite.getProject(projectId);
589

    
590
        List<OnlineLayer> layers = new ArrayList<>();
591
        for (OnlineLayer layer : project.layers()) {
592
            if( layer.isHidden() ) {
593
                continue;
594
            }
595
            layers.add(layer);
596
        }
597
        layers.sort((OnlineLayer o1, OnlineLayer o2) -> o1.getLabel().compareTo(o2.getLabel()));
598
        LayersTableModel model = new LayersTableModel(layers);
599
        model.addTableModelListener(new TableModelListener() {
600
            @Override
601
            public void tableChanged(TableModelEvent e) {
602
                doUpdateComponents();
603
            }
604
        });
605
        this.tblLayers.setModel(model);
606
        doUpdateComponents();
607
    }
608

    
609
    private void clearLayers() {
610
        LayersTableModel model = new LayersTableModel();
611
        this.tblLayers.setModel(model);
612
    }
613
    
614
    private LayersTableModel getLayersModel() {
615
        return (LayersTableModel) this.tblLayers.getModel();
616
    }
617
    
618
    private SimpleTaskStatus getTaskStatus() {
619
        SimpleTaskStatus taskStatus = ToolsLocator.getTaskStatusManager().createDefaultSimpleTaskStatus("_Create_workingcopy");
620
        taskStatus.setAutoremove(true);
621
        taskStatus.add();
622
        taskStatus.setIndeterminate();
623
        this.taskStatusController.bind(taskStatus);
624
        return taskStatus;
625
    }
626

    
627
    public void setVisibleStatus(boolean visible) {
628
        if( notInSwingThreadInvokeLater(() -> {setVisibleStatus(visible);}) ) {
629
            return;
630
        }
631
        this.lblStatusTitle.setVisible(visible);
632
        this.pbStatus.setVisible(visible);
633
        this.lblStatusMessages.setVisible(true);
634
    }
635
    
636
    private void clearMessage() {
637
        message(" ");
638
    }
639
}