Statistics
| Revision:

gvsig-raster / org.gvsig.raster / branches / org.gvsig.raster.2.4 / org.gvsig.wms / org.gvsig.wms.swing / org.gvsig.wms.swing.impl / src / main / java / org / gvsig / wms / swing / impl / DefaultWMSParametersPanelController.java @ 8841

History | View | Annotate | Download (50.3 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.wms.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.ArrayList;
33
import java.util.Collections;
34
import java.util.Iterator;
35
import java.util.List;
36

    
37
import javax.swing.DefaultComboBoxModel;
38
import javax.swing.DefaultListCellRenderer;
39
import javax.swing.DefaultListModel;
40
import javax.swing.JComponent;
41
import javax.swing.JLabel;
42
import javax.swing.JPanel;
43
import javax.swing.JRadioButton;
44
import javax.swing.JTextArea;
45
import javax.swing.JTree;
46
import javax.swing.ListSelectionModel;
47
import javax.swing.SwingUtilities;
48
import javax.swing.event.ListDataEvent;
49
import javax.swing.event.ListDataListener;
50
import javax.swing.event.ListSelectionEvent;
51
import javax.swing.event.ListSelectionListener;
52
import javax.swing.event.TreeModelListener;
53
import javax.swing.tree.DefaultTreeCellRenderer;
54
import javax.swing.tree.DefaultTreeModel;
55
import javax.swing.tree.TreeModel;
56
import javax.swing.tree.TreeNode;
57
import javax.swing.tree.TreePath;
58

    
59
import org.apache.commons.lang3.StringUtils;
60
import org.cresques.cts.IProjection;
61
import org.slf4j.Logger;
62
import org.slf4j.LoggerFactory;
63

    
64
import org.gvsig.fmap.crs.CRSFactory;
65
import org.gvsig.fmap.dal.DALLocator;
66
import org.gvsig.fmap.dal.DataManager;
67
import org.gvsig.fmap.dal.DataServerExplorerParameters;
68
import org.gvsig.fmap.dal.DataServerExplorerPool;
69
import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
70
import org.gvsig.fmap.dal.DataStoreProviderFactory;
71
import org.gvsig.tools.ToolsLocator;
72
import org.gvsig.tools.dispose.DisposeUtils;
73
import org.gvsig.tools.i18n.I18nManager;
74
import org.gvsig.tools.swing.api.ToolsSwingLocator;
75
import org.gvsig.tools.swing.icontheme.IconTheme;
76
import org.gvsig.tools.util.Invocable;
77
import org.gvsig.wms.provider.WMSLayerNode;
78
import org.gvsig.wms.provider.WMSRasterProviderParameters;
79
import org.gvsig.wms.provider.WMSRasterServerExplorer;
80
import org.gvsig.wms.provider.WMSRasterServerExplorerParameters;
81
import org.gvsig.wms.provider.WMSStyleData;
82
import org.gvsig.wms.swing.api.WMSParametersPanel;
83

    
84
/**
85
 * @author fdiaz
86
 *
87
 */
88
public class DefaultWMSParametersPanelController extends DefaultWMSParametersPanelView implements WMSParametersPanel {
89

    
90
    /**
91
     *
92
     */
93
    private static final long serialVersionUID = -1408096805684368662L;
94
    private static final String NAME = "DefaultGoogleMapsParametersPanelController";
95
    private static final Logger logger = LoggerFactory.getLogger(DefaultWMSParametersPanelController.class);
96
    private static final int TAB_CONNECTION_INDEX = 0;
97
    private static final int TAB_LAYERS_INDEX = 1;
98
    private static final int TAB_STYLES_INDEX = 2;
99
    private static final int TAB_DIMENSIONS_INDEX = 3;
100
    private static final int TAB_FORMATS_INDEX = 4;
101
    private WMSRasterServerExplorer serverExplorer;
102
    private String format = null;
103
    private String infoFormat = null;
104
    private List<WMSLayerNode> selectedLayers;
105
    private String projection = "";
106
    private IProjection mapCtxProj = null;
107

    
108
    private Thread connectionThread;
109

    
110
    /**
111
     *
112
     */
113
    public DefaultWMSParametersPanelController() {
114
        super();
115
        selectedLayers = new ArrayList<>();
116
        initComponents();
117
        translate();
118
    }
119

    
120
    @Override
121
    public void setPreferredProjection(IProjection proj) {
122
        mapCtxProj = proj;
123
    }
124

    
125
    private void translate() {
126
        I18nManager i18nManager = ToolsLocator.getI18nManager();
127
        // Title tab translate
128
        for (int i = 0; i < tabWMS.getTabCount(); i++) {
129
            tabWMS.setTitleAt(i, i18nManager.getTranslation(tabWMS.getTitleAt(i)));
130
        }
131

    
132
        // Tab connection
133
        lblServer.setText(i18nManager.getTranslation(lblServer.getText()));
134
        lblServer.setToolTipText(i18nManager.getTranslation(lblServer.getToolTipText()));
135

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

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

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

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

    
146
        txtPassword.setToolTipText(i18nManager.getTranslation(txtPassword.getToolTipText()));
147

    
148
        chkRefreshCache.setText(i18nManager.getTranslation(chkRefreshCache.getText()));
149
        chkRefreshCache.setToolTipText(i18nManager.getTranslation(chkRefreshCache.getToolTipText()));
150

    
151
        btnConnect.setText(i18nManager.getTranslation(btnConnect.getText()));
152
        btnConnect.setToolTipText(i18nManager.getTranslation(btnConnect.getToolTipText()));
153

    
154
        btnCancel.setText(i18nManager.getTranslation(btnCancel.getText()));
155
        btnCancel.setToolTipText(i18nManager.getTranslation(btnCancel.getToolTipText()));
156

    
157
        chkLocalCache.setText(i18nManager.getTranslation(chkLocalCache.getText()));
158
        chkLocalCache.setToolTipText(i18nManager.getTranslation(chkLocalCache.getToolTipText()));
159

    
160
        chkRefreshLocalCache.setText(i18nManager.getTranslation(chkRefreshLocalCache.getText()));
161
        chkRefreshLocalCache.setToolTipText(i18nManager.getTranslation(chkRefreshLocalCache.getToolTipText()));
162

    
163
        chkAxisOrderXY.setText(i18nManager.getTranslation(chkAxisOrderXY.getText()));
164
        chkAxisOrderXY.setToolTipText(i18nManager.getTranslation(chkAxisOrderXY.getToolTipText()));
165

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

    
169
        // Tab layers
170
        lblLayerName.setText(i18nManager.getTranslation(lblLayerName.getText()));
171
        lblLayerName.setToolTipText(i18nManager.getTranslation(lblLayerName.getToolTipText()));
172

    
173
        txtLayerName.setToolTipText(i18nManager.getTranslation(txtLayerName.getToolTipText()));
174

    
175
        lblSelectLayers.setText(i18nManager.getTranslation(lblSelectLayers.getText()));
176
        lblSelectLayers.setToolTipText(i18nManager.getTranslation(lblSelectLayers.getToolTipText()));
177

    
178
        treeLayersSelector.setToolTipText(i18nManager.getTranslation(treeLayersSelector.getToolTipText()));
179

    
180
        lstLayers.setToolTipText(i18nManager.getTranslation(lstLayers.getToolTipText()));
181

    
182
        btnAddLayer.setText(""); // btnAddLayer.getText()));
183
        btnAddLayer.setToolTipText(i18nManager.getTranslation(btnAddLayer.getToolTipText()));
184

    
185
        btnRemoveLayer.setText(""); // btnRemoveLayer.getText()));
186
        btnRemoveLayer.setToolTipText(i18nManager.getTranslation(btnRemoveLayer.getToolTipText()));
187

    
188
        btnUpLayer.setText(""); // btnUpLayer.getText()));
189
        btnUpLayer.setToolTipText(i18nManager.getTranslation(btnUpLayer.getToolTipText()));
190

    
191
        btnDownLayer.setText(""); // btnDownLayer.getText()));
192
        btnDownLayer.setToolTipText(i18nManager.getTranslation(btnDownLayer.getToolTipText()));
193

    
194
        chkMaintainLayersStruct.setText(i18nManager.getTranslation(chkMaintainLayersStruct.getText()));
195
        chkMaintainLayersStruct.setToolTipText(i18nManager.getTranslation(chkMaintainLayersStruct.getToolTipText()));
196

    
197
        chkShowLayerNames.setText(i18nManager.getTranslation(chkShowLayerNames.getText()));
198
        chkShowLayerNames.setToolTipText(i18nManager.getTranslation(chkShowLayerNames.getToolTipText()));
199

    
200
        // Tab styles
201
        treeStyles.setToolTipText(i18nManager.getTranslation(treeStyles.getToolTipText()));
202

    
203
        // Tab dimensions
204
        lblSettings.setText(i18nManager.getTranslation(lblSettings.getText()));
205
        lblSettings.setToolTipText(i18nManager.getTranslation(lblSettings.getToolTipText()));
206

    
207
        lstDimensionsSettings.setToolTipText(i18nManager.getTranslation(lstDimensionsSettings.getToolTipText()));
208

    
209
        lblSettingsEditor.setText(i18nManager.getTranslation(lblSettingsEditor.getText()));
210
        lblSettingsEditor.setToolTipText(i18nManager.getTranslation(lblSettingsEditor.getToolTipText()));
211

    
212
        lstDimensions.setToolTipText(i18nManager.getTranslation(lstDimensions.getToolTipText()));
213

    
214
        lblValue.setText(i18nManager.getTranslation(lblValue.getText()));
215
        lblValue.setToolTipText(i18nManager.getTranslation(lblValue.getToolTipText()));
216

    
217
        lblFieldValue.setText("");
218
        lblFieldValue.setToolTipText(i18nManager.getTranslation(lblFieldValue.getToolTipText()));
219

    
220
        sldValues.setToolTipText(i18nManager.getTranslation(sldValues.getToolTipText()));
221

    
222
        btnFirst.setText(""); // btnFirst.getText()));
223
        btnFirst.setToolTipText(i18nManager.getTranslation(btnFirst.getToolTipText()));
224

    
225
        btnPrevious.setText(""); // btnPrevious.getText()));
226
        btnPrevious.setToolTipText(i18nManager.getTranslation(btnPrevious.getToolTipText()));
227

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

    
230
        btnNext.setText(""); // btnNext.getText()));
231
        btnNext.setToolTipText(i18nManager.getTranslation(btnNext.getToolTipText()));
232

    
233
        btnLast.setText(""); // btnLast.getText()));
234
        btnLast.setToolTipText(i18nManager.getTranslation(btnLast.getToolTipText()));
235

    
236
        rdbSimpleValue.setText(i18nManager.getTranslation(rdbSimpleValue.getText()));
237
        rdbSimpleValue.setToolTipText(i18nManager.getTranslation(rdbSimpleValue.getToolTipText()));
238

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

    
242
        rdbInterval.setText(i18nManager.getTranslation(rdbInterval.getText()));
243
        rdbInterval.setToolTipText(i18nManager.getTranslation(rdbInterval.getToolTipText()));
244

    
245
        btnAddSetting.setText(i18nManager.getTranslation(btnAddSetting.getText()));
246
        btnAddSetting.setToolTipText(i18nManager.getTranslation(btnAddSetting.getToolTipText()));
247

    
248
        btnClearSetting.setText(i18nManager.getTranslation(btnClearSetting.getText()));
249
        btnClearSetting.setToolTipText(i18nManager.getTranslation(btnClearSetting.getToolTipText()));
250

    
251
        txtSetting.setToolTipText(i18nManager.getTranslation(txtSetting.getToolTipText()));
252

    
253
        btnSet.setText(i18nManager.getTranslation(btnSet.getText()));
254
        btnSet.setToolTipText(i18nManager.getTranslation(btnSet.getToolTipText()));
255

    
256
        // Tab formats
257
        lblFormats.setText(i18nManager.getTranslation(lblFormats.getText()));
258
        lblFormats.setToolTipText(i18nManager.getTranslation(lblFormats.getToolTipText()));
259

    
260
        lstFormats.setToolTipText(i18nManager.getTranslation(lstFormats.getToolTipText()));
261

    
262
        chkTransparency.setText(i18nManager.getTranslation(chkTransparency.getText()));
263
        chkTransparency.setToolTipText(i18nManager.getTranslation(chkTransparency.getToolTipText()));
264

    
265
        lblProjection.setText(i18nManager.getTranslation(lblProjection.getText()));
266
        lblProjection.setToolTipText(i18nManager.getTranslation(lblProjection.getToolTipText()));
267

    
268
        lstProjections.setToolTipText(i18nManager.getTranslation(lstProjections.getToolTipText()));
269

    
270
        lblInfoFormat.setText(i18nManager.getTranslation(lblInfoFormat.getText()));
271
        lblInfoFormat.setToolTipText(i18nManager.getTranslation(lblInfoFormat.getToolTipText()));
272

    
273
        lstInfoFormats.setToolTipText(i18nManager.getTranslation(lstInfoFormats.getToolTipText()));
274

    
275
    }
276

    
277
    private void initComponents() {
278
        fillConnections();
279

    
280
        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
281

    
282
        this.btnAddLayer.setIcon(iconTheme.get("add-layer-icon"));
283
        this.btnRemoveLayer.setIcon(iconTheme.get("remove-layer-icon"));
284
        this.btnUpLayer.setIcon(iconTheme.get("up-layer-icon"));
285

    
286
        this.btnFirst.setIcon(iconTheme.get("first-value-icon"));
287
        this.btnPrevious.setIcon(iconTheme.get("previous-value-icon"));
288
        this.btnNext.setIcon(iconTheme.get("next-value-icon"));
289
        this.btnLast.setIcon(iconTheme.get("last-value-icon"));
290

    
291
        this.btnConnect.addActionListener(new ActionListener() {
292

    
293
            @Override
294
            public void actionPerformed(ActionEvent e) {
295
                doConnect();
296
            }
297
        });
298

    
299
        this.btnCancel.addActionListener(new ActionListener() {
300

    
301
            @Override
302
            public void actionPerformed(ActionEvent e) {
303
                doCancelConnection();
304
            }
305
        });
306

    
307
        initializeTreeLayerSelector();
308
        initializeLstLayers();
309
        initializeLstProjections();
310
        initializeTreeStyles();
311
//        initializeTblDimensions();
312

    
313
        this.btnAddLayer.setEnabled(false);
314
        this.btnAddLayer.addActionListener(new ActionListener() {
315

    
316
            @Override
317
            public void actionPerformed(ActionEvent e) {
318
                WMSLayerNode node =
319
                    (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
320
                if (node == null) {
321
                    return;
322
                }
323
                if (node.isLeaf()) {
324
                    doSelectLayer(node);
325
                }
326
            }
327
        });
328

    
329
        this.btnRemoveLayer.setEnabled(false);
330
        this.btnRemoveLayer.addActionListener(new ActionListener() {
331

    
332
            @Override
333
            public void actionPerformed(ActionEvent e) {
334
                int index = lstLayers.getSelectedIndex();
335
                doDeselectLayerByIndex(index);
336
                int toSelectIndex = Math.min(index, lstLayers.getModel().getSize() - 1);
337
                lstLayers.getSelectionModel().setSelectionInterval(toSelectIndex, toSelectIndex);
338
            }
339
        });
340

    
341
        this.btnUpLayer.setEnabled(false);
342
        this.btnUpLayer.addActionListener(new ActionListener() {
343

    
344
            @Override
345
            public void actionPerformed(ActionEvent e) {
346
                int toSelectIndex = lstLayers.getSelectedIndex();
347
                if (toSelectIndex > 0) {
348
                    Collections.swap(selectedLayers, toSelectIndex, toSelectIndex - 1);
349
                }
350
                updateLstLayers();
351
                lstLayers.getSelectionModel().setSelectionInterval(toSelectIndex - 1, toSelectIndex - 1);
352
            }
353
        });
354

    
355
        this.btnDownLayer.setEnabled(false);
356
        this.btnDownLayer.addActionListener(new ActionListener() {
357

    
358
            @Override
359
            public void actionPerformed(ActionEvent e) {
360
                int selectedRow = lstLayers.getSelectedIndex();
361
                if (selectedRow < lstLayers.getModel().getSize() - 1) {
362
                    Collections.swap(selectedLayers, selectedRow, selectedRow + 1);
363
                }
364
                updateLstLayers();
365
                lstLayers.getSelectionModel().setSelectionInterval(selectedRow + 1, selectedRow + 1);
366
            }
367
        });
368

    
369
        this.chkShowLayerNames.setSelected(true);
370
        this.chkShowLayerNames.addActionListener(new ActionListener() {
371

    
372
            @Override
373
            public void actionPerformed(ActionEvent e) {
374
                updateLstLayers();
375
            }
376
        });
377

    
378
        this.chkTransparency.setSelected(true);
379

    
380
        updateComponents();
381

    
382
    }
383

    
384
    @Override
385
    public JComponent asJComponent() {
386
        return this;
387
    }
388

    
389
    @Override
390
    public void dispose() {
391
        DisposeUtils.disposeQuietly(serverExplorer);
392
    }
393

    
394
    private void doConnect() {
395
        final String selectedItem = (String) cboServerList.getSelectedItem();
396
        if (StringUtils.isEmpty(selectedItem)) {
397
            return;
398
        }
399

    
400
        btnConnect.setEnabled(false);
401
        btnCancel.setEnabled(true);
402

    
403
        connectionThread = new Thread(new Runnable() {
404

    
405
            @Override
406
            public void run() {
407
                DataManager manager = DALLocator.getDataManager();
408
                final DataServerExplorerParameters parameters;
409
                try {
410
                    parameters = manager.createServerExplorerParameters("WMS");
411
                    parameters.setDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME, new URL(
412
                        selectedItem)); // "service"
413
                    parameters.setDynValue(WMSRasterServerExplorerParameters.WMS_OVERRIDE_CAPABILITIES_PARAMETER_NAME,
414
                        chkRefreshCache.isSelected()); // "override_capabilities"
415

    
416
                    final WMSRasterServerExplorer serverExplorer =
417
                        (WMSRasterServerExplorer) manager.openServerExplorer("WMS", parameters);
418

    
419
                    // List layers = serverExplorer.list();
420

    
421
                    SwingUtilities.invokeLater(new Runnable() {
422

    
423
                        @Override
424
                        public void run() {
425
//                            if(Thread.interrupted()){
426
//                                return;
427
//                            }
428
                            setServerExplorer(serverExplorer);
429
                            DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
430

    
431
                            pool.add(((URL) parameters
432
                                .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString(),
433
                                serverExplorer.getParameters());
434

    
435
                        }
436
                    });
437
                } catch (Exception e) {
438
                    // FIXME: ?Mostrar di?logo para preguntar si se desea
439
                    // eliminar el servidor del pool de servidores en caso de
440
                    // existir ah??
441
                    setServerExplorer(null);
442
                }
443

    
444
            }
445
        }, "WMSConnection");
446
        connectionThread.start();
447
        try {
448
            Thread.sleep(2);
449
        } catch (InterruptedException e) {
450
        }
451
    }
452

    
453

    
454
    protected void doCancelConnection() {
455
//        if(connectionThread != null && connectionThread.isAlive()){
456
//            connectionThread.interrupt();
457
//        }
458
    }
459

    
460

    
461
    private void setServerExplorer(WMSRasterServerExplorer serverExplorer) {
462
        this.serverExplorer = serverExplorer;
463

    
464
        this.updateComponents();
465
        if (this.serverExplorer != null) {
466
            List<String> formats = this.serverExplorer.getFormats();
467
            updateFormats(formats);
468
            List<String> infoFormats = this.serverExplorer.getInfoFormats();
469
            updateInfoFormats(infoFormats);
470
            txtInformation.setText(serverExplorer.getInfoString());
471
        } else {
472
            updateFormats(null);
473
            updateInfoFormats(null);
474
        }
475

    
476
        tabWMS.setEnabledAt(4, true);
477
    }
478

    
479
    /**
480
     * @param infoFormats
481
     */
482
    private void updateInfoFormats(List<String> infoFormats) {
483
        if (infoFormats != null) {
484
            fillInfoFormats(infoFormats);
485
            int formatInfoIndex = -1;
486
            if (!StringUtils.isEmpty(infoFormat)) {
487
                if (infoFormats.contains(infoFormat)) {
488
                    formatInfoIndex = infoFormats.indexOf(infoFormat);
489
                }
490
            } else {
491
                if (infoFormats.size() > 0) {
492
                    formatInfoIndex = 0;
493
                    infoFormat = infoFormats.get(formatInfoIndex);
494
                }
495
            }
496
            lstInfoFormats.getSelectionModel().setSelectionInterval(formatInfoIndex, formatInfoIndex);
497
        } else {
498
            fillInfoFormats(null);
499
        }
500
    }
501

    
502
    /**
503
     * @param formats
504
     */
505
    private void updateFormats(List<String> formats) {
506
        WMSLayerNode layerNode = (WMSLayerNode) this.serverExplorer.getListAsTree();
507
        if (formats != null) {
508
            txtLayerName.setText(layerNode.getTitle());
509
            fillLayers(layerNode);
510
            fillFormats(formats);
511
            int formatIndex = -1;
512
            if (!StringUtils.isEmpty(format)) {
513
                if (formats.contains(format)) {
514
                    formatIndex = formats.indexOf(format);
515
                }
516
            } else {
517
                if (formats.size() > 0) {
518
                    formatIndex = 0;
519
                    format = formats.get(formatIndex);
520
                }
521
            }
522
            lstFormats.getSelectionModel().setSelectionInterval(formatIndex, formatIndex);
523
        } else {
524
            fillFormats(null);
525
        }
526
    }
527

    
528

    
529

    
530
    private void updateComponents() {
531

    
532
        if (serverExplorer == null) {
533
            cboServerList.setEnabled(true);
534
            // Authentication of WMS servers is not yet implemented, when implemented, enabling the following four controls.
535
            txtUser.setEnabled(false);
536
            txtPassword.setEnabled(false);
537
            lblUser.setEnabled(false);
538
            lblPassword.setEnabled(false);
539

    
540
            chkRefreshCache.setEnabled(true);
541
            btnConnect.setEnabled(true);
542
            btnCancel.setEnabled(false);
543

    
544
            chkLocalCache.setEnabled(false);
545
            chkRefreshLocalCache.setEnabled(false);
546
            chkAxisOrderXY.setEnabled(false);
547
            txtInformation.setEnabled(false);
548

    
549
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, false);
550
            tabWMS.setEnabledAt(TAB_STYLES_INDEX, false);
551
            tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, false);
552
            tabWMS.setEnabledAt(TAB_FORMATS_INDEX, false);
553
        } else {
554
            cboServerList.setEnabled(false);
555
            txtUser.setEnabled(false);
556
            txtPassword.setEnabled(false);
557
            txtUser.setEnabled(false);
558
            txtPassword.setEnabled(false);
559

    
560
            chkRefreshCache.setEnabled(false);
561
            btnConnect.setEnabled(false);
562
            btnCancel.setEnabled(false);
563

    
564
            chkLocalCache.setEnabled(true);
565
            chkRefreshLocalCache.setEnabled(true);
566
            chkAxisOrderXY.setEnabled(true);
567
            txtInformation.setEnabled(true);
568

    
569
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, true);
570
        }
571
    }
572

    
573
    private void fillConnections() {
574
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
575

    
576
        DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
577
        Iterator<?> it = pool.iterator();
578
        while (it.hasNext()) {
579
            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
580
            DataServerExplorerParameters parameters = entry.getExplorerParameters();
581
            if (parameters instanceof WMSRasterServerExplorerParameters) {
582
                model.addElement(((URL) parameters
583
                    .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString());
584
            }
585
        }
586

    
587
        this.cboServerList.setModel(model);
588
    }
589

    
590
    private void fillFormats(List<String> formats) {
591
        final DefaultListModel<String> model = new DefaultListModel<>();
592
        for (Iterator<String> iterator = formats.iterator(); iterator.hasNext();) {
593
            model.addElement(iterator.next());
594
        }
595
        lstFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
596
        lstFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
597
            @Override
598
            public void valueChanged(ListSelectionEvent e) {
599
                int index = lstFormats.getSelectedIndex();
600
                format = model.getElementAt(index);
601
            }
602
        });
603
        lstFormats.setModel(model);
604
    }
605

    
606
    private void fillInfoFormats(List<String> infoFormats) {
607

    
608
        final DefaultListModel<String> model = new DefaultListModel<>();
609
        for (Iterator<String> iterator = infoFormats.iterator(); iterator.hasNext();) {
610
            model.addElement(iterator.next());
611
        }
612
        lstInfoFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
613
        lstInfoFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
614

    
615
            @Override
616
            public void valueChanged(ListSelectionEvent e) {
617
                int index = lstInfoFormats.getSelectedIndex();
618
                infoFormat = model.getElementAt(index);
619
            }
620
        });
621
        lstInfoFormats.setModel(model);
622
    }
623

    
624
    private void fillLayers(TreeNode node) {
625
        TreeModel treeModel = new DefaultTreeModel(node, true);
626
        treeLayersSelector.setModel(treeModel);
627
    }
628

    
629
    /**
630
     *
631
     */
632
    private void initializeTreeLayerSelector() {
633
        treeLayersSelector.setCellRenderer(new DefaultTreeCellRenderer() {
634

    
635
            /**
636
             *
637
             */
638
            private static final long serialVersionUID = -6800758982020754819L;
639

    
640
            @Override
641
            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
642
                boolean leaf, int row, boolean hasFocus) {
643
                Component comp = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
644
                String text;
645
                if (value instanceof WMSLayerNode) {
646
                    WMSLayerNode layerNode = (WMSLayerNode) value;
647
                    if (!chkShowLayerNames.isSelected()) {
648
                        text = layerNode.getTitle();
649
                    } else {
650
                        text = layerNode.toString();
651
                    }
652
                    setText(text);
653
                }
654
                return comp;
655
            }
656
        });
657

    
658

    
659
        treeLayersSelector.addMouseListener(new MouseAdapter() {
660

    
661
            @Override
662
            public void mouseClicked(MouseEvent e) {
663
                if (e.getClickCount() == 1) {
664
                    WMSLayerNode node = (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
665
                    btnAddLayer.setEnabled(node != null && node.isLeaf());
666
                } else if (e.getClickCount() == 2) {
667
                    WMSLayerNode node =
668
                        (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
669
                    if (node == null)
670
                        return;
671
                    if (node.isLeaf()) {
672
                        doSelectLayer(node);
673
                    }
674
                    // Cast nodeInfo to your object and do whatever you want
675
                }
676
            }
677
        });
678
    }
679

    
680
    protected void doSelectLayer(Object selected) {
681
        if (selected instanceof WMSLayerNode) {
682
            WMSLayerNode node = (WMSLayerNode) selected;
683
            if (selectedLayers.contains(node)) {
684
                return;
685
            }
686
            selectedLayers.add(node);
687
            updateLstLayers();
688
        }
689
    }
690

    
691
    @SuppressWarnings("unchecked")
692
    private void initializeLstLayers() {
693
        final DefaultListModel<WMSLayerNode> model = new DefaultListModel<>();
694

    
695
        lstLayers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
696

    
697
        model.addListDataListener(new ListDataListener() {
698

    
699
            @Override
700
            public void intervalRemoved(ListDataEvent e) {
701
                updateLstProjections();
702
            }
703

    
704
            @Override
705
            public void intervalAdded(ListDataEvent e) {
706
                updateLstProjections();
707
            }
708

    
709
            @Override
710
            public void contentsChanged(ListDataEvent e) {
711
                updateLstProjections();
712
            }
713
        });
714

    
715
        lstLayers.addMouseListener(new MouseAdapter() {
716

    
717
            @Override
718
            public void mouseClicked(MouseEvent e) {
719
                if (e.getClickCount() == 2) {
720
                    doDeselectLayerByIndex(lstLayers.getSelectedIndex());
721
                }
722
            }
723
        });
724

    
725
        final ListSelectionModel selectionModel = lstLayers.getSelectionModel();
726
        selectionModel.addListSelectionListener(new ListSelectionListener() {
727

    
728
            @Override
729
            public void valueChanged(ListSelectionEvent e) {
730
                btnRemoveLayer.setEnabled(!selectionModel.isSelectionEmpty());
731
                btnUpLayer.setEnabled(!selectionModel.isSelectionEmpty() && selectionModel.getMinSelectionIndex() > 0);
732
                btnDownLayer.setEnabled(!selectionModel.isSelectionEmpty()
733
                    && selectionModel.getMaxSelectionIndex() < model.getSize() - 1);
734
            }
735
        });
736

    
737
        lstLayers.setCellRenderer(new DefaultListCellRenderer() {
738

    
739
            /**
740
             *
741
             */
742
            private static final long serialVersionUID = 1430645485530520129L;
743
            JTextArea comp = new JTextArea();
744

    
745
            @SuppressWarnings("rawtypes")
746
            @Override
747
            public Component getListCellRendererComponent(javax.swing.JList list, Object value, int index,
748
                boolean isSelected, boolean cellHasFocus) {
749

    
750
                if (value instanceof WMSLayerNode) {
751
                    WMSLayerNode node = (WMSLayerNode) value;
752
                    String text = "";
753
                    if (!chkShowLayerNames.isSelected()) {
754
                        text = node.getTitle();
755
                    } else {
756
                        text = node.toString();
757
                    }
758
                    comp.setText(text);
759
                }
760
                if (isSelected) {
761
                    comp.setBackground(list.getSelectionBackground());
762
                    comp.setForeground(list.getSelectionForeground());
763
                } else {
764
                    comp.setBackground(list.getBackground());
765
                    comp.setForeground(list.getForeground());
766
                }
767
                return comp;
768
            }
769
        });
770
        lstLayers.setModel(model);
771
    }
772

    
773
    private void updateLstLayers() {
774
         @SuppressWarnings("unchecked")
775
        DefaultListModel<WMSLayerNode> model = ((DefaultListModel<WMSLayerNode>)lstLayers.getModel());
776
        model.clear();
777
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
778
            model.addElement(iterator.next());
779
        }
780
        updateLstProjections();
781
        updateTreeStyles();
782
//        updateLstDimensions();
783
    }
784

    
785
    @SuppressWarnings("unchecked")
786
    private void initializeLstProjections() {
787

    
788
        final DefaultListModel<String> model = new DefaultListModel<>();
789

    
790
        lstProjections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
791

    
792
        ListSelectionModel selectionModel = lstProjections.getSelectionModel();
793
        selectionModel.addListSelectionListener(new ListSelectionListener() {
794
            @Override
795
            public void valueChanged(ListSelectionEvent e) {
796
                int selectedRow = lstProjections.getSelectedIndex();
797
                if (selectedRow >= 0 && selectedRow < model.getSize()) {
798
                    projection = model.getElementAt(selectedRow);
799
                }
800
            }
801
        });
802

    
803
        lstProjections.setModel(model);
804
    }
805

    
806
    private void updateLstProjections() {
807

    
808
        WMSRasterProviderParameters providerParameters = getProviderParameters();
809

    
810
        List<String> srss = serverExplorer.getSrss(providerParameters);
811
        @SuppressWarnings("unchecked")
812
        DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
813
        model.clear();
814
        for (Iterator<String> iterator = srss.iterator(); iterator.hasNext();) {
815
            model.addElement(iterator.next());
816
        }
817
        selectProjection();
818
    }
819

    
820
    @SuppressWarnings("unchecked")
821
    private void selectProjection() {
822
        if(!StringUtils.isEmpty(projection)){
823
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
824
            for (int i=0; i<model.size(); i++) {
825
                if(projection.equals(model.elementAt(i))){
826
                    lstProjections.setSelectedIndex(i);
827
                    return;
828
                }
829
            }
830
        } else if(mapCtxProj != null){
831
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
832
            for (int i=0; i<model.size(); i++) {
833

    
834
                String srs = model.elementAt(i);
835
                try{
836
                    IProjection crs=CRSFactory.getCRS(model.elementAt(i));
837
                    if(crs!=null && crs.equals(mapCtxProj)){
838
                        lstProjections.setSelectedIndex(i);
839
                        return;
840
                    }
841
                }catch(Exception e){
842
                    logger.info("Can't get crs from: '"+srs+"' code", e);
843
                }
844
            }
845
        };
846
        if(lstProjections.getModel().getSize()>0){
847
            lstProjections.setSelectedIndex(0);
848
        }
849
    }
850

    
851
    /**
852
    *
853
    */
854
    private void initializeTreeStyles() {
855
        treeStyles.setToggleClickCount(1);
856
        treeStyles.setRowHeight(22);
857

    
858
        treeStyles.setCellRenderer(new DefaultTreeCellRenderer() {
859

    
860
            /**
861
             *
862
             */
863
            private static final long serialVersionUID = 4821777811489883864L;
864

    
865
            @Override
866
            public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
867
                boolean expanded, boolean leaf, int row, boolean hasFocus) {
868
                if (leaf) {
869
                    JPanel leafComponent = new JPanel();
870
                    leafComponent.setBackground(Color.WHITE);
871
                    JRadioButton leafRadioButton =
872
                        new JRadioButton("", ((StyleTreeModel) treeStyles.getModel()).isSelected((WMSStyleData) value));
873

    
874
                    leafRadioButton.setBackground(Color.WHITE);
875
                    leafComponent.add(leafRadioButton);
876
                    leafComponent.add(new JLabel(((WMSStyleData) value).getTitle()));
877
                    return leafComponent;
878
                } else {
879
                    super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
880
                    if (value instanceof WMSLayerNode) {
881
                        WMSLayerNode layerNode = (WMSLayerNode) value;
882
                        String text = "";
883
                        if (layerNode != null) {
884
                            if (!chkShowLayerNames.isSelected()) {
885
                                text = layerNode.getTitle();
886
                            } else {
887
                                text = layerNode.toString();
888
                            }
889
                        }
890
                        setText(text);
891
                    } else if (value instanceof String) {
892
                        setText((String)value);
893
                    }
894
                    return this;
895
                }
896
            }
897
        });
898

    
899
        treeStyles.addMouseListener(new java.awt.event.MouseAdapter() {
900
            @Override
901
            public void mouseClicked(java.awt.event.MouseEvent e) {
902
                ((StyleTreeModel) treeStyles.getModel()).setSelectedLeaf(treeStyles.getSelectionPath());
903
                treeStyles.clearSelection();
904
                repaint();
905
            }
906
        });
907
    }
908

    
909
    private void updateTreeStyles() {
910

    
911
        int size = selectedLayers.size();
912
        tabWMS.setEnabledAt(TAB_STYLES_INDEX, size > 0);
913

    
914
        StyleTreeModel model = new StyleTreeModel(selectedLayers);
915

    
916
        treeStyles.setModel(model);
917
        expandAllNodes(treeStyles);
918
    }
919

    
920
    private void expandAllNodes(JTree tree) {
921
        int j = tree.getRowCount();
922
        int i = 0;
923
        while (i < j) {
924
            tree.expandRow(i);
925
            i += 1;
926
            j = tree.getRowCount();
927
        }
928
    }
929

    
930
    class StyleTreeModel implements TreeModel {
931

    
932
        List<WMSLayerNode> layerNodes;
933

    
934
        public StyleTreeModel(List<WMSLayerNode> layerNodes) {
935
            this.layerNodes = layerNodes;
936
        }
937

    
938
        /**
939
         * Will return true if this style is selected.
940
         *
941
         * @param WMSStyle
942
         * @return true if this style is selected.
943
         */
944
        public boolean isSelected(WMSStyleData WMSStyle) {
945
            Iterator<WMSLayerNode> it = layerNodes.iterator();
946
            while (it.hasNext()) {
947
                WMSLayerNode node = it.next();
948
                if (node.getSelectedStyle().equals(WMSStyle)) {
949
                    return true;
950
                }
951
            }
952
            return false;
953
        }
954

    
955
        /**
956
         * Gets the names of the selected styles into a List using the same
957
         * order as they was represented in the StylesTree.
958
         *
959
         * @return the names of the selected styles into a List using the same
960
         * order as they was represented in the StylesTree.
961
         */
962
        public List<String> getStyleSelectionTitles() {
963
            List<String> styles = new ArrayList<String>();
964
            for (WMSLayerNode layerNode : layerNodes) {
965
                WMSStyleData sty = layerNode.getSelectedStyle();
966
                if (sty == null) {
967
                    styles.add("");
968
                } else {
969
                    styles.add(sty.getTitle());
970
                }
971
            }
972
            return styles;
973
        }
974

    
975
        /**
976
         * Sets the selected styles in the StylesTree. The argument styleNames
977
         * is a Vector with exactly the same amount of strings than the amount of
978
         * themes (layers) contained by the tree. A blank or null string will
979
         * leave the default style for that layer, but this element <b>must exist</b>
980
         * in the array in any case.
981
         *
982
         * @param styleNames
983
         *            , Vector containing the style names.
984
         *            The styles order <b>must match</b> with the layer order.
985
         */
986
        public void setStylesSelection(List<String> styleNames) {
987
            for (int i = 0; i < layerNodes.size(); i++) {
988
                WMSLayerNode layerNode = layerNodes.get(i);
989
                List<WMSStyleData> styles = layerNode.getStyles();
990
                for (int j = 0; j < styles.size(); j++) {
991
                    WMSStyleData sty = styles.get(j);
992
                    if (sty.getName().equals(styleNames.get(i))) {
993
                        layerNode.setSelectedStyleIndex(j);
994
                        break;
995
                    }
996
                }
997
            }
998
        }
999

    
1000
        /**
1001
         * Sets a leaf (an style) selected.
1002
         *
1003
         * @param selectionPath
1004
         *            to this leaf.
1005
         */
1006
        protected void setSelectedLeaf(TreePath selectionPath) {
1007
            if (selectionPath != null) {
1008
                Object[] objects = selectionPath.getPath();
1009
                Object item = objects[objects.length - 1];
1010
                if (isLeaf(item)) {
1011
                    WMSStyleData style = (WMSStyleData) item;
1012
                    WMSLayerNode layerNode = (WMSLayerNode) selectionPath.getParentPath().getLastPathComponent();
1013
                    List<WMSStyleData> styles = layerNode.getStyles();
1014
                    for (int i = 0; i < styles.size(); i++) {
1015
                        WMSStyleData sty = styles.get(i);
1016
                        if (sty.getName().equals(style.getName())) {
1017
                            layerNode.setSelectedStyleIndex(i);
1018
                            return;
1019
                        }
1020
                    }
1021
                }
1022
            }
1023
        }
1024

    
1025
        @Override
1026
        public Object getRoot() {
1027
            return ToolsLocator.getI18nManager().getTranslation("_selected_layers");
1028
        }
1029

    
1030
        @Override
1031
        public int getChildCount(Object parent) {
1032
            int count = 0;
1033

    
1034
            if (parent.equals(getRoot())) {
1035
                count = layerNodes.size();
1036
            } else {
1037
                count = ((WMSLayerNode) parent).getStyles().size();
1038
            }
1039
            return count;
1040
        }
1041

    
1042
        @Override
1043
        public boolean isLeaf(Object node) {
1044
            return (node instanceof WMSStyleData);
1045
        }
1046

    
1047
        @Override
1048
        public Object getChild(Object parent, int index) {
1049
            if (parent instanceof WMSStyleData)
1050
                return null;
1051
            if (parent.equals(getRoot()))
1052
                return layerNodes.get(index);
1053

    
1054
            return ((WMSLayerNode) parent).getStyles().get(index);
1055
        }
1056

    
1057
        @Override
1058
        public int getIndexOfChild(Object parent, Object child) {
1059
            if (parent instanceof WMSStyleData) {
1060
                return -1;
1061
            }
1062

    
1063
            if (parent.equals(getRoot())) {
1064
                for (int i = 0; i < layerNodes.size(); i++) {
1065
                    if (layerNodes.get(i).equals(child)) {
1066
                        return i;
1067
                    }
1068
                }
1069
            } else {
1070
                WMSLayerNode node = (WMSLayerNode)parent;
1071
                for (int i = 0; i < node.getStyles().size(); i++) {
1072
                    if (node.getStyles().get(i).equals(child)) {
1073
                        return i;
1074
                    }
1075
                }
1076
            }
1077
            return -1; //
1078
        }
1079

    
1080
        @Override
1081
        public void addTreeModelListener(TreeModelListener l) {
1082
            // TODO Auto-generated method stub
1083

    
1084
        }
1085

    
1086
        @Override
1087
        public void removeTreeModelListener(TreeModelListener l) {
1088
            // TODO Auto-generated method stub
1089

    
1090
        }
1091

    
1092
        @Override
1093
        public void valueForPathChanged(TreePath path, Object newValue) {
1094
            // TODO Auto-generated method stub
1095

    
1096
        }
1097
    }
1098

    
1099
//    private void initializeTblDimensions() {
1100
//
1101
//        final DefaultTableModel model = new DefaultTableModel() {
1102
//
1103
//            /**
1104
//         *
1105
//         */
1106
//            private static final long serialVersionUID = 5253505785616286765L;
1107
//
1108
//            @Override
1109
//            public boolean isCellEditable(int row, int column) {
1110
//                return false;
1111
//            }
1112
//        };
1113
//
1114
//        I18nManager i18nManager = ToolsLocator.getI18nManager();
1115
//        model.addColumn(i18nManager.getTranslation("_dimensions"));
1116
//
1117
//        lstDimensions.setTableHeader(null);
1118
//
1119
//        lstDimensions.setRowSelectionAllowed(true);
1120
//        lstDimensions.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
1121
//
1122
//        lstDimensions.setModel(model);
1123
//
1124
//        lstDimensions.setDefaultRenderer(Object.class, new TableCellRenderer() {
1125
//
1126
//            JTextArea comp = new JTextArea();
1127
//
1128
//            @Override
1129
//            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
1130
//                boolean hasFocus, int row, int column) {
1131
//
1132
//                if (value instanceof WMSDimension) {
1133
//                    WMSDimension dimension = (WMSDimension) value;
1134
//                    comp.setText(dimension.getName());
1135
//                }
1136
//                if (isSelected) {
1137
//                    comp.setBackground(table.getSelectionBackground());
1138
//                    comp.setForeground(table.getSelectionForeground());
1139
//                } else {
1140
//                    comp.setBackground(table.getBackground());
1141
//                    comp.setForeground(table.getForeground());
1142
//                }
1143
//                return comp;
1144
//            }
1145
//        });
1146
//
1147
//        ListSelectionModel selectionModel = lstDimensions.getSelectionModel();
1148
//        selectionModel.addListSelectionListener(new ListSelectionListener() {
1149
//
1150
//            @Override
1151
//            public void valueChanged(ListSelectionEvent e) {
1152
//                WMSDimension dimension = (WMSDimension) model.getValueAt(lstDimensions.getSelectedRow(), 0);
1153
//                String expr = dimension.getDimensionExpression();
1154
//
1155
//            }
1156
//        });
1157
//
1158
//    }
1159

    
1160
//    private void updateLstDimensions() {
1161
//
1162
//        tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, true);
1163
//        boolean hasAnyDimension = false;
1164
//        DefaultTableModel model = (DefaultTableModel) lstDimensions.getModel();
1165
//        model.setRowCount(0);
1166
//        for (Iterator<LayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1167
//            LayerNode node = iterator.next();
1168
//            WMSLayer layer = node.getLayer();
1169
//            // List<WMSDimension> dimensionsLayer =
1170
//            // (ArrayList<WMSDimension>)(layer.getDimensions());
1171
//            for (Iterator iterator2 = layer.getDimensions().iterator(); iterator2.hasNext();) {
1172
//                WMSDimension dimension = (WMSDimension) iterator2.next();
1173
//                WMSDimension row[] = { dimension };
1174
//                model.addRow(row);
1175
//                hasAnyDimension = true;
1176
//            }
1177
//        }
1178
//        tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, hasAnyDimension);
1179
//    }
1180

    
1181
    private WMSRasterProviderParameters getProviderParameters() {
1182
        DataManager manager = DALLocator.getDataManager();
1183
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1184
        WMSRasterProviderParameters providerParameters = (WMSRasterProviderParameters) factory.createParameters();
1185
        List<String> layers = new ArrayList<String>(selectedLayers.size());
1186
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1187
            WMSLayerNode layer = iterator.next();
1188
            layers.add(layer.getName());
1189
        }
1190

    
1191
        providerParameters.setLayers(layers);
1192
        providerParameters.setFormat(format);
1193
        providerParameters.setInfoFormat(infoFormat);
1194
        providerParameters.setOverride(chkRefreshCache.isSelected());
1195
        providerParameters.setService((URL) serverExplorer.getParameters().getDynValue(
1196
            WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME));
1197
        List<String> styles = getStyles();
1198
        providerParameters.setStyles(styles);
1199
        providerParameters.setTransparency(chkTransparency.isSelected());
1200
        providerParameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1201

    
1202
        return providerParameters;
1203
    }
1204

    
1205
    private List<String> getStyles() {
1206
        List<String> styles = new ArrayList<>();
1207
        Iterator<WMSLayerNode> it = selectedLayers.iterator();
1208
        while (it.hasNext()) {
1209
            WMSLayerNode layerNode = it.next();
1210
            WMSStyleData selectedStyle = layerNode.getSelectedStyle();
1211
            if(selectedStyle==null){
1212
                styles.add("");
1213
            } else {
1214
                styles.add(selectedStyle.getName());
1215
            }
1216
        }
1217
        return styles;
1218
    }
1219

    
1220
    /**
1221
     * @param index
1222
     */
1223
    private void doDeselectLayerByIndex(int index) {
1224
        WMSLayerNode layerNode = selectedLayers.get(index);
1225
        selectedLayers.remove(layerNode);
1226
        updateLstLayers();
1227
    }
1228

    
1229
    @Override
1230
    public WMSLayerNode getParameters() {
1231
        WMSLayerNode wmsLayerNode = null;
1232
        if (chkMaintainLayersStruct.isSelected()) {
1233
            wmsLayerNode = serverExplorer.getListAsTree(true);
1234
            wmsLayerNode.removeChildren(new Invocable() {
1235

    
1236
                @Override
1237
                public Object call(Object... args) {
1238
                    WMSLayerNode node = (WMSLayerNode) args[0];
1239
                    if (node.isLeaf() && !selectedLayers.contains(node)) {
1240
                        return true;
1241
                    }
1242
                    return false;
1243
                }
1244
            });
1245

    
1246
            wmsLayerNode.removeEmptyFolders();
1247

    
1248
            fillParametersInTree(wmsLayerNode);
1249

    
1250
        } else {
1251
            wmsLayerNode = serverExplorer.getListAsTree(true);
1252
            wmsLayerNode = findLeaf(wmsLayerNode);
1253
            //FIXME: ?if wmsLayerNode == null?
1254
            fillParametersInUniqueNode(wmsLayerNode);
1255
        }
1256
        if(wmsLayerNode!=null){
1257
            wmsLayerNode.setTitle(txtLayerName.getText());
1258
        }
1259
        return wmsLayerNode;
1260
    }
1261

    
1262
    private WMSLayerNode findLeaf(WMSLayerNode node){
1263
        if(node.isLeaf()){
1264
            return node;
1265
        }
1266
        for (int i=0; i<node.getChildCount(); i++) {
1267
            WMSLayerNode child = (WMSLayerNode) node.getChildAt(i);
1268
            return findLeaf(child);
1269
        }
1270
        return null;
1271
    }
1272

    
1273
    private void fillParametersInTree(WMSLayerNode wmsLayerNode) {
1274
        if(wmsLayerNode.isLeaf()){
1275
            if(selectedLayers.contains(wmsLayerNode)){
1276
                int index = selectedLayers.indexOf(wmsLayerNode);
1277
                WMSRasterProviderParameters parameters = (WMSRasterProviderParameters) wmsLayerNode.getParameters();
1278

    
1279
                parameters.setFormat(format);
1280
                parameters.setInfoFormat(infoFormat);
1281
                parameters.setOverride(chkRefreshCache.isSelected());
1282
                String style = getStyles().get(index);
1283
                List<String> styles = new ArrayList<>();
1284
                styles.add(style);
1285
                parameters.setStyles(styles);
1286
                parameters.setTransparency(chkTransparency.isSelected());
1287
                parameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1288

    
1289
                try {
1290
                    IProjection crs = CRSFactory.getCRS(projection);
1291
                    parameters.setCRS(crs);
1292
                } catch (Exception e) {
1293
                    logger.info("Can't get crs from: '" + projection + "' code", e);
1294
                }
1295

    
1296
            }
1297
        } else {
1298
            for(int i=0; i<wmsLayerNode.getChildCount(); i++){
1299
                fillParametersInTree((WMSLayerNode) wmsLayerNode.getChildAt(i));
1300
            }
1301
        }
1302
    }
1303

    
1304
    private WMSLayerNode fillParametersInUniqueNode(WMSLayerNode node) {
1305

    
1306
        WMSRasterProviderParameters parameters = (WMSRasterProviderParameters) node.getParameters();
1307
        List<String> layers = new ArrayList<String>(selectedLayers.size());
1308
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1309
            String name = ((WMSLayerNode) iterator.next()).getName();
1310
            layers.add(name);
1311
        }
1312

    
1313
        parameters.setLayers(layers);
1314
        parameters.setFormat(format);
1315
        parameters.setInfoFormat(infoFormat);
1316
        parameters.setOverride(chkRefreshCache.isSelected());
1317
        List<String> styles = getStyles();
1318
        parameters.setStyles(styles);
1319
        parameters.setTransparency(chkTransparency.isSelected());
1320
        parameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1321
        try {
1322
            IProjection crs = CRSFactory.getCRS(projection);
1323
            parameters.setCRS(crs);
1324
        } catch (Exception e) {
1325
            logger.info("Can't get crs from: '" + projection + "' code", e);
1326
        }
1327

    
1328
        return node;
1329
    }
1330

    
1331
    @Override
1332
    public boolean isTiled() {
1333
        return chkLocalCache.isSelected();
1334
    }
1335

    
1336
    @Override
1337
    public boolean refreshLocalCache() {
1338
        return chkRefreshLocalCache.isSelected();
1339
    }
1340
}