Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.wmts / org.gvsig.wmts.swing / org.gvsig.wmts.swing.impl / src / main / java / org / gvsig / wmts / swing / impl / DefaultWMTSParametersPanelController.java @ 8842

History | View | Annotate | Download (36.7 KB)

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

    
25
import java.awt.Color;
26
import java.awt.Component;
27
import java.awt.event.ActionEvent;
28
import java.awt.event.ActionListener;
29
import java.awt.event.MouseAdapter;
30
import java.awt.event.MouseEvent;
31
import java.net.URL;
32
import java.util.Iterator;
33
import java.util.List;
34

    
35
import javax.swing.DefaultComboBoxModel;
36
import javax.swing.DefaultListModel;
37
import javax.swing.JComponent;
38
import javax.swing.JLabel;
39
import javax.swing.JPanel;
40
import javax.swing.JRadioButton;
41
import javax.swing.JTree;
42
import javax.swing.ListSelectionModel;
43
import javax.swing.SwingUtilities;
44
import javax.swing.event.ListSelectionEvent;
45
import javax.swing.event.ListSelectionListener;
46
import javax.swing.event.TreeModelListener;
47
import javax.swing.tree.DefaultTreeCellRenderer;
48
import javax.swing.tree.DefaultTreeModel;
49
import javax.swing.tree.TreeModel;
50
import javax.swing.tree.TreeNode;
51
import javax.swing.tree.TreePath;
52

    
53
import org.apache.commons.lang3.StringUtils;
54
import org.cresques.cts.IProjection;
55
import org.slf4j.Logger;
56
import org.slf4j.LoggerFactory;
57

    
58
import org.gvsig.fmap.crs.CRSFactory;
59
import org.gvsig.fmap.dal.DALLocator;
60
import org.gvsig.fmap.dal.DataManager;
61
import org.gvsig.fmap.dal.DataServerExplorerParameters;
62
import org.gvsig.fmap.dal.DataServerExplorerPool;
63
import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
64
import org.gvsig.tools.ToolsLocator;
65
import org.gvsig.tools.dispose.DisposeUtils;
66
import org.gvsig.tools.i18n.I18nManager;
67
import org.gvsig.tools.swing.api.ToolsSwingLocator;
68
import org.gvsig.tools.swing.icontheme.IconTheme;
69
import org.gvsig.wmts.provider.WMTSRasterProviderParameters;
70
import org.gvsig.wmts.provider.WMTSRasterServerExplorer;
71
import org.gvsig.wmts.provider.WMTSRasterServerExplorerParameters;
72
import org.gvsig.wmts.provider.tree.WMTSLayerNode;
73
import org.gvsig.wmts.provider.tree.WMTSNode;
74
import org.gvsig.wmts.provider.tree.WMTSStyleData;
75
import org.gvsig.wmts.swing.api.WMTSParametersPanel;
76

    
77
/**
78
 * @author fdiaz
79
 *
80
 */
81
public class DefaultWMTSParametersPanelController extends DefaultWMTSParametersPanelView implements WMTSParametersPanel {
82

    
83
    /**
84
     *
85
     */
86
    private static final long serialVersionUID = -2391337189247788651L;
87
    private static final String NAME = "DefaultGoogleMapsParametersPanelController";
88
    private static final Logger logger = LoggerFactory.getLogger(DefaultWMTSParametersPanelController.class);
89
    private static final int TAB_CONNECTION_INDEX = 0;
90
    private static final int TAB_LAYERS_INDEX = 1;
91
    private static final int TAB_STYLES_INDEX = 2;
92
    private static final int TAB_DIMENSIONS_INDEX = 3;
93
    private static final int TAB_FORMATS_INDEX = 4;
94
    // List<WMSParametersEntry> parameterList;
95
    WMTSRasterServerExplorer explorer;
96
    private WMTSRasterServerExplorer serverExplorer;
97
    private String format = null;
98
    private String infoFormat = null;
99
    private String projection = "";
100
    private IProjection mapCtxProj = null;
101

    
102
    private Thread connectionThread;
103
    private WMTSLayerNode selectedLayer;
104
    protected String selectedStyle;
105

    
106
    /**
107
     *
108
     */
109
    public DefaultWMTSParametersPanelController() {
110
        super();
111
        initComponents();
112
        translate();
113
    }
114

    
115
    @Override
116
    public void setPreferredProjection(IProjection proj) {
117
        mapCtxProj = proj;
118
    }
119

    
120
    private void translate() {
121
        I18nManager i18nManager = ToolsLocator.getI18nManager();
122
        // Title tab translate
123
        for (int i = 0; i < tabWMTS.getTabCount(); i++) {
124
            tabWMTS.setTitleAt(i, i18nManager.getTranslation(tabWMTS.getTitleAt(i)));
125
        }
126

    
127
        // Tab connection
128
        lblServer.setText(i18nManager.getTranslation(lblServer.getText()));
129
        lblServer.setToolTipText(i18nManager.getTranslation(lblServer.getToolTipText()));
130

    
131
        cboServerList.setToolTipText(i18nManager.getTranslation(cboServerList.getToolTipText()));
132

    
133
        lblUser.setText(i18nManager.getTranslation(lblUser.getText()));
134
        lblUser.setToolTipText(i18nManager.getTranslation(lblUser.getToolTipText()));
135

    
136
        txtUser.setToolTipText(i18nManager.getTranslation(txtUser.getToolTipText()));
137

    
138
        lblPassword.setText(i18nManager.getTranslation(lblPassword.getText()));
139
        lblPassword.setToolTipText(i18nManager.getTranslation(lblPassword.getToolTipText()));
140

    
141
        txtPassword.setToolTipText(i18nManager.getTranslation(txtPassword.getToolTipText()));
142

    
143
        chkRefreshCache.setText(i18nManager.getTranslation(chkRefreshCache.getText()));
144
        chkRefreshCache.setToolTipText(i18nManager.getTranslation(chkRefreshCache.getToolTipText()));
145

    
146
        btnConnect.setText(i18nManager.getTranslation(btnConnect.getText()));
147
        btnConnect.setToolTipText(i18nManager.getTranslation(btnConnect.getToolTipText()));
148

    
149
        btnCancel.setText(i18nManager.getTranslation(btnCancel.getText()));
150
        btnCancel.setToolTipText(i18nManager.getTranslation(btnCancel.getToolTipText()));
151

    
152
        chkRefreshLocalCache.setText(i18nManager.getTranslation(chkRefreshLocalCache.getText()));
153
        chkRefreshLocalCache.setToolTipText(i18nManager.getTranslation(chkRefreshLocalCache.getToolTipText()));
154

    
155
        chkInvertAxisOrder.setText(i18nManager.getTranslation(chkInvertAxisOrder.getText()));
156
        chkInvertAxisOrder.setToolTipText(i18nManager.getTranslation(chkInvertAxisOrder.getToolTipText()));
157

    
158
        lblInformation.setText(i18nManager.getTranslation(lblInformation.getText()));
159
        lblInformation.setToolTipText(i18nManager.getTranslation(lblInformation.getToolTipText()));
160

    
161
        lblSelectLayers.setText(i18nManager.getTranslation(lblSelectLayers.getText()));
162
        lblSelectLayers.setToolTipText(i18nManager.getTranslation(lblSelectLayers.getToolTipText()));
163

    
164
        treeLayersSelector.setToolTipText(i18nManager.getTranslation(treeLayersSelector.getToolTipText()));
165

    
166
        lblSelectedLayer.setText(i18nManager.getTranslation(lblSelectedLayer.getText()));
167
        lblSelectedLayer.setToolTipText(i18nManager.getTranslation(lblSelectedLayer.getToolTipText()));
168

    
169
        txtSelectedLayer.setToolTipText(i18nManager.getTranslation(txtSelectedLayer.getToolTipText()));
170

    
171
        btnAddLayer.setText(""); // btnAddLayer.getText()));
172
        btnAddLayer.setToolTipText(i18nManager.getTranslation(btnAddLayer.getToolTipText()));
173

    
174
        btnRemoveLayer.setText(""); // btnRemoveLayer.getText()));
175
        btnRemoveLayer.setToolTipText(i18nManager.getTranslation(btnRemoveLayer.getToolTipText()));
176

    
177
        // Tab styles
178
        treeStyles.setToolTipText(i18nManager.getTranslation(treeStyles.getToolTipText()));
179

    
180
        // Tab dimensions
181
        lblSettings.setText(i18nManager.getTranslation(lblSettings.getText()));
182
        lblSettings.setToolTipText(i18nManager.getTranslation(lblSettings.getToolTipText()));
183

    
184
        lstDimensionsSettings.setToolTipText(i18nManager.getTranslation(lstDimensionsSettings.getToolTipText()));
185

    
186
        lblSettingsEditor.setText(i18nManager.getTranslation(lblSettingsEditor.getText()));
187
        lblSettingsEditor.setToolTipText(i18nManager.getTranslation(lblSettingsEditor.getToolTipText()));
188

    
189
        lstDimensions.setToolTipText(i18nManager.getTranslation(lstDimensions.getToolTipText()));
190

    
191
        lblValue.setText(i18nManager.getTranslation(lblValue.getText()));
192
        lblValue.setToolTipText(i18nManager.getTranslation(lblValue.getToolTipText()));
193

    
194
        lblFieldValue.setText("");
195
        lblFieldValue.setToolTipText(i18nManager.getTranslation(lblFieldValue.getToolTipText()));
196

    
197
        sldValues.setToolTipText(i18nManager.getTranslation(sldValues.getToolTipText()));
198

    
199
        btnFirst.setText(""); // btnFirst.getText()));
200
        btnFirst.setToolTipText(i18nManager.getTranslation(btnFirst.getToolTipText()));
201

    
202
        btnPrevious.setText(""); // btnPrevious.getText()));
203
        btnPrevious.setToolTipText(i18nManager.getTranslation(btnPrevious.getToolTipText()));
204

    
205
        txtDimensionNumber.setToolTipText(i18nManager.getTranslation(txtDimensionNumber.getToolTipText()));
206

    
207
        btnNext.setText(""); // btnNext.getText()));
208
        btnNext.setToolTipText(i18nManager.getTranslation(btnNext.getToolTipText()));
209

    
210
        btnLast.setText(""); // btnLast.getText()));
211
        btnLast.setToolTipText(i18nManager.getTranslation(btnLast.getToolTipText()));
212

    
213
        rdbSimpleValue.setText(i18nManager.getTranslation(rdbSimpleValue.getText()));
214
        rdbSimpleValue.setToolTipText(i18nManager.getTranslation(rdbSimpleValue.getToolTipText()));
215

    
216
        rdbMultipleValue.setText(i18nManager.getTranslation(rdbMultipleValue.getText()));
217
        rdbMultipleValue.setToolTipText(i18nManager.getTranslation(rdbMultipleValue.getToolTipText()));
218

    
219
        rdbInterval.setText(i18nManager.getTranslation(rdbInterval.getText()));
220
        rdbInterval.setToolTipText(i18nManager.getTranslation(rdbInterval.getToolTipText()));
221

    
222
        btnAddSetting.setText(i18nManager.getTranslation(btnAddSetting.getText()));
223
        btnAddSetting.setToolTipText(i18nManager.getTranslation(btnAddSetting.getToolTipText()));
224

    
225
        btnClearSetting.setText(i18nManager.getTranslation(btnClearSetting.getText()));
226
        btnClearSetting.setToolTipText(i18nManager.getTranslation(btnClearSetting.getToolTipText()));
227

    
228
        txtSetting.setToolTipText(i18nManager.getTranslation(txtSetting.getToolTipText()));
229

    
230
        btnSet.setText(i18nManager.getTranslation(btnSet.getText()));
231
        btnSet.setToolTipText(i18nManager.getTranslation(btnSet.getToolTipText()));
232

    
233
        // Tab formats
234
        lblFormats.setText(i18nManager.getTranslation(lblFormats.getText()));
235
        lblFormats.setToolTipText(i18nManager.getTranslation(lblFormats.getToolTipText()));
236

    
237
        lstFormats.setToolTipText(i18nManager.getTranslation(lstFormats.getToolTipText()));
238

    
239
        lblProjection.setText(i18nManager.getTranslation(lblProjection.getText()));
240
        lblProjection.setToolTipText(i18nManager.getTranslation(lblProjection.getToolTipText()));
241

    
242
        lstProjections.setToolTipText(i18nManager.getTranslation(lstProjections.getToolTipText()));
243

    
244
        lblInfoFormat.setText(i18nManager.getTranslation(lblInfoFormat.getText()));
245
        lblInfoFormat.setToolTipText(i18nManager.getTranslation(lblInfoFormat.getToolTipText()));
246

    
247
        lstInfoFormats.setToolTipText(i18nManager.getTranslation(lstInfoFormats.getToolTipText()));
248

    
249
    }
250

    
251
    private void initComponents() {
252
        fillConnections();
253

    
254
        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
255

    
256
        this.btnAddLayer.setIcon(iconTheme.get("add-layer-icon"));
257
        this.btnRemoveLayer.setIcon(iconTheme.get("remove-layer-icon"));
258

    
259
        this.btnFirst.setIcon(iconTheme.get("first-value-icon"));
260
        this.btnPrevious.setIcon(iconTheme.get("previous-value-icon"));
261
        this.btnNext.setIcon(iconTheme.get("next-value-icon"));
262
        this.btnLast.setIcon(iconTheme.get("last-value-icon"));
263

    
264
        this.btnConnect.addActionListener(new ActionListener() {
265

    
266
            @Override
267
            public void actionPerformed(ActionEvent e) {
268
                doConnect();
269
            }
270
        });
271

    
272
        this.btnCancel.addActionListener(new ActionListener() {
273

    
274
            @Override
275
            public void actionPerformed(ActionEvent e) {
276
                doCancelConnection();
277
            }
278
        });
279

    
280
        initializeTreeLayerSelector();
281
        initializeLstProjections();
282
        initializeTreeStyles();
283
        initializeLstFormats();
284
        initializeLstInfoFormats();
285
        // initializeTblDimensions();
286

    
287
        this.btnAddLayer.setEnabled(false);
288
        this.btnAddLayer.addActionListener(new ActionListener() {
289

    
290
            @Override
291
            public void actionPerformed(ActionEvent e) {
292
                WMTSNode node = (WMTSNode) treeLayersSelector.getLastSelectedPathComponent();
293
                if (node == null) {
294
                    return;
295
                }
296
                if (node instanceof WMTSLayerNode && node.isLeaf()) {
297
                    doSelectLayer(node);
298
                }
299
            }
300
        });
301

    
302
        this.btnRemoveLayer.setEnabled(false);
303
        this.btnRemoveLayer.addActionListener(new ActionListener() {
304

    
305
            @Override
306
            public void actionPerformed(ActionEvent e) {
307
                selectedLayer = null;
308
                updateTxtSelectedLayer();
309
            }
310
        });
311

    
312
        updateComponents();
313
    }
314

    
315
    protected void updateTxtSelectedLayer() {
316
        if (selectedLayer != null) {
317
            txtSelectedLayer.setText(selectedLayer.getTitle());
318
        } else {
319
            txtSelectedLayer.setText("");
320
        }
321
    }
322

    
323
    @Override
324
    public JComponent asJComponent() {
325
        return this;
326
    }
327

    
328
    @Override
329
    public void dispose() {
330
        DisposeUtils.disposeQuietly(serverExplorer);
331
    }
332

    
333
    private void doConnect() {
334
        final String selectedItem = (String) cboServerList.getSelectedItem();
335
        if (StringUtils.isEmpty(selectedItem)) {
336
            return;
337
        }
338

    
339
        btnConnect.setEnabled(false);
340
        btnCancel.setEnabled(true);
341

    
342
        connectionThread = new Thread(new Runnable() {
343

    
344
            @Override
345
            public void run() {
346
                DataManager manager = DALLocator.getDataManager();
347
                final DataServerExplorerParameters parameters;
348
                try {
349
                    parameters = manager.createServerExplorerParameters("WMTS");
350
                    parameters.setDynValue(WMTSRasterServerExplorerParameters.WMTS_SERVICE_PARAMETER_NAME, new URL(
351
                        selectedItem)); // "service"
352
                    // parameters.setDynValue(WMTSRasterServerExplorerParameters.WMTS_OVERRIDE_CAPABILITIES_PARAMETER_NAME,
353
                    // chkRefreshCache.isSelected()); // "override_capabilities"
354

    
355
                    final WMTSRasterServerExplorer serverExplorer =
356
                        (WMTSRasterServerExplorer) manager.openServerExplorer("WMTS", parameters);
357

    
358
                    // List layers = serverExplorer.list();
359

    
360
                    SwingUtilities.invokeLater(new Runnable() {
361

    
362
                        @Override
363
                        public void run() {
364
                            // if(Thread.interrupted()){
365
                            // return;
366
                            // }
367
                            setServerExplorer(serverExplorer);
368
                            DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
369

    
370
                            pool.add(((URL) parameters
371
                                .getDynValue(WMTSRasterServerExplorerParameters.WMTS_SERVICE_PARAMETER_NAME))
372
                                .toString(), serverExplorer.getParameters());
373

    
374
                        }
375
                    });
376
                } catch (Exception e) {
377
                    // FIXME: ?Mostrar di?logo para preguntar si se desea
378
                    // eliminar el servidor del pool de servidores en caso de
379
                    // existir ah??
380
                    setServerExplorer(null);
381
                }
382

    
383
            }
384
        }, "WMSConnection");
385
        connectionThread.start();
386
        try {
387
            Thread.sleep(2);
388
        } catch (InterruptedException e) {
389
        }
390
    }
391

    
392
    protected void doCancelConnection() {
393
        // if(connectionThread != null && connectionThread.isAlive()){
394
        // connectionThread.interrupt();
395
        // }
396
    }
397

    
398
    private void setServerExplorer(WMTSRasterServerExplorer serverExplorer) {
399
        this.serverExplorer = serverExplorer;
400

    
401
        this.updateComponents();
402

    
403
        WMTSNode node = (WMTSNode) this.serverExplorer.getListAsTree();
404
        fillLayers(node);
405

    
406
        txtInformation.setText(serverExplorer.getInfoString());
407

    
408
        tabWMTS.setEnabledAt(4, true);
409
    }
410

    
411
    private void updateComponents() {
412

    
413
        if (serverExplorer == null) {
414
            cboServerList.setEnabled(true);
415
            // Authentication of WMS servers is not yet implemented, when
416
            // implemented, enabling the following four controls.
417
            txtUser.setEnabled(false);
418
            txtPassword.setEnabled(false);
419
            lblUser.setEnabled(false);
420
            lblPassword.setEnabled(false);
421

    
422

    
423
            chkRefreshCache.setEnabled(true);
424
            btnConnect.setEnabled(true);
425
            btnCancel.setEnabled(false);
426

    
427
            chkRefreshLocalCache.setEnabled(false);
428
            chkInvertAxisOrder.setEnabled(false);
429
            txtInformation.setEnabled(false);
430

    
431
            tabWMTS.setEnabledAt(TAB_LAYERS_INDEX, false);
432
            tabWMTS.setEnabledAt(TAB_STYLES_INDEX, false);
433
            tabWMTS.setEnabledAt(TAB_DIMENSIONS_INDEX, false);
434
            tabWMTS.setEnabledAt(TAB_FORMATS_INDEX, false);
435
        } else {
436
            cboServerList.setEnabled(false);
437
            txtUser.setEnabled(false);
438
            txtPassword.setEnabled(false);
439
            lblUser.setEnabled(false);
440
            lblPassword.setEnabled(false);
441
            chkRefreshCache.setEnabled(false);
442
            btnConnect.setEnabled(false);
443
            btnCancel.setEnabled(false);
444

    
445
            chkRefreshLocalCache.setEnabled(true);
446
            chkInvertAxisOrder.setEnabled(true);
447
            txtInformation.setEnabled(true);
448

    
449
            tabWMTS.setEnabledAt(TAB_LAYERS_INDEX, true);
450
        }
451

    
452
    }
453

    
454
    private void fillConnections() {
455
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
456

    
457
        DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
458
        Iterator it = pool.iterator();
459
        while (it.hasNext()) {
460
            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
461
            DataServerExplorerParameters parameters = entry.getExplorerParameters();
462
            if (parameters instanceof WMTSRasterServerExplorerParameters) {
463
                model.addElement(((URL) parameters
464
                    .getDynValue(WMTSRasterServerExplorerParameters.WMTS_SERVICE_PARAMETER_NAME)).toString());
465
            }
466
        }
467

    
468
        this.cboServerList.setModel(model);
469
    }
470

    
471
    private void initializeLstFormats() {
472
        final DefaultListModel<String> model = new DefaultListModel<>();
473
        lstFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
474
        lstFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
475

    
476
            @Override
477
            public void valueChanged(ListSelectionEvent e) {
478
                int index = lstFormats.getSelectedIndex();
479
                if (index >= 0) {
480
                    format = model.getElementAt(index);
481
                } else {
482
                    format = "";
483
                }
484
            }
485
        });
486
        lstFormats.setModel(model);
487
    }
488

    
489
    private void updateLstFormats(List<String> formats) {
490
        final DefaultListModel<String> model = (DefaultListModel<String>) (lstFormats.getModel());
491
        model.clear();
492
        if (formats != null) {
493
            for (Iterator<String> iterator = formats.iterator(); iterator.hasNext();) {
494
                model.addElement(iterator.next());
495
            }
496
        }
497
        selectFormat();
498
    }
499

    
500
    private void initializeLstInfoFormats() {
501

    
502
        final DefaultListModel<String> model = new DefaultListModel<>();
503
        lstInfoFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
504
        lstInfoFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
505

    
506
            @Override
507
            public void valueChanged(ListSelectionEvent e) {
508
                int index = lstInfoFormats.getSelectedIndex();
509
                if (index >= 0) {
510
                    infoFormat = model.getElementAt(index);
511
                } else {
512
                    infoFormat = "";
513
                }
514
            }
515
        });
516
        lstInfoFormats.setModel(model);
517
    }
518

    
519
    private void updateLstInfoFormats(List<String> infoFormats) {
520

    
521
        final DefaultListModel<String> model = (DefaultListModel<String>) (lstInfoFormats.getModel());
522
        model.clear();
523
        if (infoFormats != null) {
524
            for (Iterator<String> iterator = infoFormats.iterator(); iterator.hasNext();) {
525
                model.addElement(iterator.next());
526
            }
527
        }
528
        selectInfoFormat();
529
    }
530

    
531
    private void fillLayers(TreeNode node) {
532
        TreeModel treeModel = new DefaultTreeModel(node, true);
533
        treeLayersSelector.setModel(treeModel);
534
    }
535

    
536
    /**
537
     *
538
     */
539
    private void initializeTreeLayerSelector() {
540
        treeLayersSelector.setCellRenderer(new DefaultTreeCellRenderer() {
541

    
542
            /**
543
             *
544
             */
545
            private static final long serialVersionUID = -6800758982020754819L;
546

    
547
            @Override
548
            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
549
                boolean leaf, int row, boolean hasFocus) {
550
                Component comp =
551
                    super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
552
                String text;
553
                if (value instanceof WMTSNode) {
554
                    WMTSNode node = (WMTSNode) value;
555
                    text = node.getTitle();
556
                    setText(text);
557
                }
558
                return comp;
559
            }
560
        });
561

    
562
        treeLayersSelector.addMouseListener(new MouseAdapter() {
563

    
564
            @Override
565
            public void mouseClicked(MouseEvent e) {
566
                if (e.getClickCount() == 1) {
567
                    WMTSNode node = (WMTSNode) treeLayersSelector.getLastSelectedPathComponent();
568
                    btnAddLayer.setEnabled(node != null && node.isLeaf() && node instanceof WMTSLayerNode);
569
                } else if (e.getClickCount() == 2) {
570
                    WMTSNode node = (WMTSNode) treeLayersSelector.getLastSelectedPathComponent();
571
                    if (node == null)
572
                        return;
573
                    if (node.isLeaf() && node instanceof WMTSLayerNode) {
574
                        doSelectLayer((WMTSLayerNode) node);
575
                    }
576
                }
577
            }
578
        });
579
    }
580

    
581
    protected void doSelectLayer(Object selected) {
582
        if (selected instanceof WMTSLayerNode) {
583
            WMTSLayerNode node = (WMTSLayerNode) selected;
584
            this.selectedLayer = node;
585
            updateTxtSelectedLayer();
586

    
587
            List<String> formats = null;
588
            if (selectedLayer != null) {
589
                formats = this.selectedLayer.getFormats();
590
            }
591

    
592
            updateLstFormats(formats);
593
            int formatIndex = -1;
594
            if (!StringUtils.isEmpty(format)) {
595
                if (formats.contains(format)) {
596
                    formatIndex = formats.indexOf(format);
597
                }
598
            } else {
599
                if (formats.size() > 0) {
600
                    formatIndex = 0;
601
                    format = formats.get(formatIndex);
602
                }
603
            }
604
            lstFormats.getSelectionModel().setSelectionInterval(formatIndex, formatIndex);
605

    
606
            List<String> infoFormats = null;
607
            if (selectedLayer != null) {
608
                infoFormats = this.selectedLayer.getInfoFormats();
609
            }
610
            updateLstInfoFormats(infoFormats);
611
            int formatInfoIndex = -1;
612
            if (infoFormats != null) {
613
                if (!StringUtils.isEmpty(infoFormat)) {
614
                    if (infoFormats.contains(infoFormat)) {
615
                        formatInfoIndex = infoFormats.indexOf(infoFormat);
616
                    }
617
                } else {
618
                    if (infoFormats.size() > 0) {
619
                        formatInfoIndex = 0;
620
                        infoFormat = infoFormats.get(formatInfoIndex);
621
                    }
622
                }
623
                lstInfoFormats.getSelectionModel().setSelectionInterval(formatInfoIndex, formatInfoIndex);
624
            }
625
            updateLstProjections();
626
            updateTreeStyles();
627
        }
628
    }
629

    
630
    @SuppressWarnings("unchecked")
631
    private void initializeLstProjections() {
632

    
633
        final DefaultListModel<String> model = new DefaultListModel<>();
634

    
635
        lstProjections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
636

    
637
        ListSelectionModel selectionModel = lstProjections.getSelectionModel();
638
        selectionModel.addListSelectionListener(new ListSelectionListener() {
639

    
640
            @Override
641
            public void valueChanged(ListSelectionEvent e) {
642
                int selectedRow = lstProjections.getSelectedIndex();
643
                if (selectedRow >= 0 && selectedRow < model.getSize()) {
644
                    projection = model.getElementAt(selectedRow);
645
                }
646
            }
647
        });
648

    
649
        lstProjections.setModel(model);
650
    }
651

    
652
    private void updateLstProjections() {
653
        @SuppressWarnings("unchecked")
654
        DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
655
        model.clear();
656
        if (selectedLayer != null) {
657
            List<String> srss = selectedLayer.getSrsList();
658
            for (Iterator<String> iterator = srss.iterator(); iterator.hasNext();) {
659
                model.addElement(iterator.next());
660
            }
661
            selectProjection();
662
        } else {
663
            this.projection = null;
664
        }
665
    }
666

    
667
    @SuppressWarnings("unchecked")
668
    private void selectProjection() {
669
        if (!StringUtils.isEmpty(projection)) {
670
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
671
            for (int i = 0; i < model.size(); i++) {
672
                if (projection.equals(model.elementAt(i))) {
673
                    lstProjections.setSelectedIndex(i);
674
                    return;
675
                }
676
            }
677
        } else if (mapCtxProj != null) {
678
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
679
            for (int i = 0; i < model.size(); i++) {
680

    
681
                String srs = model.elementAt(i);
682
                try {
683
                    IProjection crs = CRSFactory.getCRS(model.elementAt(i));
684
                    if (crs != null && crs.equals(mapCtxProj)) {
685
                        lstProjections.setSelectedIndex(i);
686
                        return;
687
                    }
688
                } catch (Exception e) {
689
                    logger.info("Can't get crs from: '" + srs + "' code", e);
690
                }
691
            }
692
        }
693
        ;
694
        if (lstProjections.getModel().getSize() > 0) {
695
            lstProjections.setSelectedIndex(0);
696
        }
697
    }
698

    
699
    @SuppressWarnings("unchecked")
700
    private void selectFormat() {
701
        DefaultListModel<String> model = (DefaultListModel<String>) lstFormats.getModel();
702
        if (!StringUtils.isEmpty(format)) {
703
            for (int i = 0; i < model.size(); i++) {
704
                if (format.equals(model.elementAt(i))) {
705
                    lstFormats.setSelectedIndex(i);
706
                    return;
707
                }
708
            }
709
        }
710
        if (model.getSize() > 0) {
711
            lstFormats.setSelectedIndex(0);
712
        }
713
    }
714

    
715
    @SuppressWarnings("unchecked")
716
    private void selectInfoFormat() {
717
        DefaultListModel<String> model = (DefaultListModel<String>) lstInfoFormats.getModel();
718
        if (!StringUtils.isEmpty(infoFormat)) {
719
            for (int i = 0; i < model.size(); i++) {
720
                if (format.equals(model.elementAt(i))) {
721
                    lstInfoFormats.setSelectedIndex(i);
722
                    return;
723
                }
724
            }
725
        }
726
        if (model.getSize() > 0) {
727
            lstInfoFormats.setSelectedIndex(0);
728
        }
729
    }
730

    
731
    /**
732
    *
733
    */
734
    private void initializeTreeStyles() {
735
        treeStyles.setToggleClickCount(1);
736
        treeStyles.setRowHeight(22);
737

    
738
        treeStyles.setCellRenderer(new DefaultTreeCellRenderer() {
739

    
740
            /**
741
             *
742
             */
743
            private static final long serialVersionUID = 4821777811489883864L;
744

    
745
            @Override
746
            public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
747
                boolean expanded, boolean leaf, int row, boolean hasFocus) {
748
                if (leaf) {
749
                    JPanel leafComponent = new JPanel();
750
                    leafComponent.setBackground(Color.WHITE);
751
                    JRadioButton leafRadioButton =
752
                        new JRadioButton("", ((StyleTreeModel) treeStyles.getModel()).isSelected((WMTSStyleData) value));
753

    
754
                    leafRadioButton.setBackground(Color.WHITE);
755
                    leafComponent.add(leafRadioButton);
756
                    String text = ((WMTSStyleData) value).getTitle();
757
                    if (StringUtils.isEmpty(text)) {
758
                        text = ((WMTSStyleData) value).getIdentifier();
759
                    }
760
                    leafComponent.add(new JLabel(((WMTSStyleData) value).getIdentifier()));
761
                    return leafComponent;
762
                } else {
763
                    super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
764
                    if (value instanceof WMTSLayerNode) {
765
                        WMTSLayerNode layerNode = (WMTSLayerNode) value;
766
                        String text = "";
767
                        if (layerNode != null) {
768
                            text = layerNode.getTitle();
769
                        }
770
                        setText(text);
771
                    } else if (value instanceof String) {
772
                        setText((String) value);
773
                    }
774
                    return this;
775
                }
776
            }
777
        });
778

    
779
        treeStyles.addMouseListener(new java.awt.event.MouseAdapter() {
780

    
781
            @Override
782
            public void mouseClicked(java.awt.event.MouseEvent e) {
783
                ((StyleTreeModel) treeStyles.getModel()).setSelectedLeaf(treeStyles.getSelectionPath());
784
                selectedStyle = ((WMTSNode) treeStyles.getSelectionPath().getLastPathComponent()).getIdentifier();
785
                treeStyles.clearSelection();
786
                repaint();
787
            }
788
        });
789
    }
790

    
791
    private void updateTreeStyles() {
792

    
793
        tabWMTS.setEnabledAt(TAB_STYLES_INDEX, selectedLayer != null);
794

    
795
        StyleTreeModel model = new StyleTreeModel(selectedLayer);
796

    
797
        treeStyles.setModel(model);
798
        expandAllNodes(treeStyles);
799
    }
800

    
801
    private void expandAllNodes(JTree tree) {
802
        int j = tree.getRowCount();
803
        int i = 0;
804
        while (i < j) {
805
            tree.expandRow(i);
806
            i += 1;
807
            j = tree.getRowCount();
808
        }
809
    }
810

    
811
    class StyleTreeModel implements TreeModel {
812

    
813
        WMTSLayerNode layerNode;
814

    
815
        public StyleTreeModel(WMTSLayerNode layerNode) {
816
            this.layerNode = layerNode;
817
        }
818

    
819
        /**
820
         * Will return true if this style is selected.
821
         * @param style
822
         * @return true if this style is selected.
823
         */
824
        public boolean isSelected(WMTSStyleData style) {
825
            if (layerNode.getSelectedStyle().equals(style)) {
826
                return true;
827
            }
828
            return false;
829
        }
830

    
831
        /**
832
         * Gets the name of the selected style.
833
         *
834
         * @return the names of the selected styles into a List using the same
835
         *         order as they was represented in the StylesTree.
836
         */
837
        public String getStyleSelectionTitles() {
838
            WMTSStyleData sty = layerNode.getSelectedStyle();
839
            if (sty == null) {
840
                return "";
841
            } else {
842
                return sty.getTitle();
843
            }
844
        }
845

    
846
        /**
847
         * Sets the selected style in the StylesTree. A blank or null string
848
         * will
849
         * leave the default style for that layer.
850
         * @param styleIdentifier
851
         *            , Vector containing the style names.
852
         *            The styles order <b>must match</b> with the layer order.
853
         */
854
        public void setStylesSelection(String styleIdentifier) {
855
            List<WMTSStyleData> styles = layerNode.getStyles();
856
            for (int j = 0; j < styles.size(); j++) {
857
                WMTSStyleData sty = styles.get(j);
858
                if (sty.getIdentifier().equals(styleIdentifier)) {
859
                    layerNode.setSelectedStyleIndex(j);
860
                    break;
861
                }
862
            }
863
        }
864

    
865
        /**
866
         * Sets a leaf (an style) selected.
867
         *
868
         * @param selectionPath
869
         *            to this leaf.
870
         */
871
        protected void setSelectedLeaf(TreePath selectionPath) {
872
            if (selectionPath != null) {
873
                Object[] objects = selectionPath.getPath();
874
                Object item = objects[objects.length - 1];
875
                if (isLeaf(item)) {
876
                    WMTSStyleData style = (WMTSStyleData) item;
877
                    WMTSLayerNode layerNode = (WMTSLayerNode) selectionPath.getParentPath().getLastPathComponent();
878
                    List<WMTSStyleData> styles = layerNode.getStyles();
879
                    for (int i = 0; i < styles.size(); i++) {
880
                        WMTSStyleData sty = styles.get(i);
881
                        if (sty.getIdentifier().equals(style.getIdentifier())) {
882
                            layerNode.setSelectedStyleIndex(i);
883
                            return;
884
                        }
885
                    }
886
                }
887
            }
888
        }
889

    
890
        @Override
891
        public Object getRoot() {
892
            return layerNode; // ToolsLocator.getI18nManager().getTranslation("_selected_layers");
893
        }
894

    
895
        @Override
896
        public int getChildCount(Object parent) {
897
            return ((WMTSLayerNode) parent).getStyles().size();
898
        }
899

    
900
        @Override
901
        public boolean isLeaf(Object node) {
902
            return (node instanceof WMTSStyleData);
903
        }
904

    
905
        @Override
906
        public Object getChild(Object parent, int index) {
907
            if (parent instanceof WMTSStyleData) {
908
                return null;
909
            }
910
            return ((WMTSLayerNode) parent).getStyles().get(index);
911
        }
912

    
913
        @Override
914
        public int getIndexOfChild(Object parent, Object child) {
915
            if (parent instanceof WMTSStyleData) {
916
                return -1;
917
            }
918

    
919
            WMTSLayerNode node = (WMTSLayerNode) parent;
920
            for (int i = 0; i < node.getStyles().size(); i++) {
921
                if (node.getStyles().get(i).equals(child)) {
922
                    return i;
923
                }
924
            }
925
            return -1;
926
        }
927

    
928
        @Override
929
        public void addTreeModelListener(TreeModelListener l) {
930
            // TODO Auto-generated method stub
931

    
932
        }
933

    
934
        @Override
935
        public void removeTreeModelListener(TreeModelListener l) {
936
            // TODO Auto-generated method stub
937

    
938
        }
939

    
940
        @Override
941
        public void valueForPathChanged(TreePath path, Object newValue) {
942
            // TODO Auto-generated method stub
943

    
944
        }
945
    }
946

    
947
    @Override
948
    public WMTSLayerNode getParameters() {
949
        String identifier = selectedLayer.getIdentifier();
950

    
951
        WMTSNode root = serverExplorer.getListAsTree(true);
952
        WMTSLayerNode layerNode = (WMTSLayerNode) findLayer(root, identifier);
953
        fillParametersInNode(layerNode);
954

    
955
        return layerNode;
956
    }
957

    
958
    private WMTSNode findLayer(WMTSNode node, String identifier) {
959
        if (node.isLeaf() && node instanceof WMTSLayerNode && identifier.equals(node.getIdentifier())) {
960
            return node;
961
        }
962
        for (int i = 0; i < node.getChildCount(); i++) {
963
            WMTSNode child = (WMTSNode) node.getChildAt(i);
964
            WMTSNode found = findLayer(child, identifier);
965
            if(found!=null) {
966
                return found;
967
            }
968
        }
969
        return null;
970
    }
971

    
972
    private WMTSLayerNode fillParametersInNode(WMTSLayerNode node) {
973

    
974
        WMTSRasterProviderParameters parameters = (WMTSRasterProviderParameters) node.getParameters();
975
        parameters.setFormat(format);
976
        parameters.setInfoFormat(infoFormat);
977
        parameters.setStyle(selectedStyle);
978
        parameters.setForceChangeAxisOrder(chkInvertAxisOrder.isSelected());
979
        try {
980
            IProjection crs = CRSFactory.getCRS(projection);
981
            parameters.setCRS(crs);
982
        } catch (Exception e) {
983
            logger.info("Can't get crs from: '" + projection + "' code", e);
984
        }
985

    
986
        return node;
987
    }
988

    
989
    @Override
990
    public boolean refreshLocalCache() {
991
        return chkRefreshLocalCache.isSelected();
992
    }
993
}