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 @ 8845

History | View | Annotate | Download (51.2 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
        firePropertyChange("all", null, null);
459
    }
460

    
461

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

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

    
477
        tabWMS.setEnabledAt(4, true);
478
        firePropertyChange("all", null, null);
479
    }
480

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

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

    
531

    
532

    
533
    private void updateComponents() {
534

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

    
543
            chkRefreshCache.setEnabled(true);
544
            btnConnect.setEnabled(true);
545
            btnCancel.setEnabled(false);
546

    
547
            chkLocalCache.setEnabled(false);
548
            chkRefreshLocalCache.setEnabled(false);
549
            chkAxisOrderXY.setEnabled(false);
550
            txtInformation.setEnabled(false);
551

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

    
563
            chkRefreshCache.setEnabled(false);
564
            btnConnect.setEnabled(false);
565
            btnCancel.setEnabled(false);
566

    
567
            chkLocalCache.setEnabled(true);
568
            chkRefreshLocalCache.setEnabled(true);
569
            chkAxisOrderXY.setEnabled(true);
570
            txtInformation.setEnabled(true);
571

    
572
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, true);
573
        }
574
    }
575

    
576
    private void fillConnections() {
577
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
578

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

    
590
        this.cboServerList.setModel(model);
591
    }
592

    
593
    private void fillFormats(List<String> formats) {
594
        final DefaultListModel<String> model = new DefaultListModel<>();
595
        for (Iterator<String> iterator = formats.iterator(); iterator.hasNext();) {
596
            model.addElement(iterator.next());
597
        }
598
        lstFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
599
        lstFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
600
            @Override
601
            public void valueChanged(ListSelectionEvent e) {
602
                int index = lstFormats.getSelectedIndex();
603
                if(index>=0 && index<model.getSize()){
604
                    format = model.getElementAt(index);
605
                } else {
606
                    format = null;
607
                }
608
                firePropertyChange("all", null, null);
609
            }
610
        });
611
        lstFormats.setModel(model);
612
    }
613

    
614
    private void fillInfoFormats(List<String> infoFormats) {
615

    
616
        final DefaultListModel<String> model = new DefaultListModel<>();
617
        for (Iterator<String> iterator = infoFormats.iterator(); iterator.hasNext();) {
618
            model.addElement(iterator.next());
619
        }
620
        lstInfoFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
621
        lstInfoFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
622

    
623
            @Override
624
            public void valueChanged(ListSelectionEvent e) {
625
                int index = lstInfoFormats.getSelectedIndex();
626
                if(index>=0 && index<model.getSize()){
627
                    infoFormat = model.getElementAt(index);
628
                } else {
629
                    infoFormat = null;
630
                }
631
                firePropertyChange("all", null, null);
632
            }
633
        });
634
        lstInfoFormats.setModel(model);
635
    }
636

    
637
    private void fillLayers(TreeNode node) {
638
        TreeModel treeModel = new DefaultTreeModel(node, true);
639
        treeLayersSelector.setModel(treeModel);
640
    }
641

    
642
    /**
643
     *
644
     */
645
    private void initializeTreeLayerSelector() {
646
        treeLayersSelector.setCellRenderer(new DefaultTreeCellRenderer() {
647

    
648
            /**
649
             *
650
             */
651
            private static final long serialVersionUID = -6800758982020754819L;
652

    
653
            @Override
654
            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
655
                boolean leaf, int row, boolean hasFocus) {
656
                Component comp = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
657
                String text;
658
                if (value instanceof WMSLayerNode) {
659
                    WMSLayerNode layerNode = (WMSLayerNode) value;
660
                    if (!chkShowLayerNames.isSelected()) {
661
                        text = layerNode.getTitle();
662
                    } else {
663
                        text = layerNode.toString();
664
                    }
665
                    setText(text);
666
                }
667
                return comp;
668
            }
669
        });
670

    
671

    
672
        treeLayersSelector.addMouseListener(new MouseAdapter() {
673

    
674
            @Override
675
            public void mouseClicked(MouseEvent e) {
676
                if (e.getClickCount() == 1) {
677
                    WMSLayerNode node = (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
678
                    btnAddLayer.setEnabled(node != null && node.isLeaf());
679
                } else if (e.getClickCount() == 2) {
680
                    WMSLayerNode node =
681
                        (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
682
                    if (node == null)
683
                        return;
684
                    if (node.isLeaf()) {
685
                        doSelectLayer(node);
686
                    }
687
                    // Cast nodeInfo to your object and do whatever you want
688
                }
689
            }
690
        });
691
    }
692

    
693
    protected void doSelectLayer(Object selected) {
694
        if (selected instanceof WMSLayerNode) {
695
            WMSLayerNode node = (WMSLayerNode) selected;
696
            if (selectedLayers.contains(node)) {
697
                return;
698
            }
699
            selectedLayers.add(node);
700
            updateLstLayers();
701
        }
702
    }
703

    
704
    @SuppressWarnings("unchecked")
705
    private void initializeLstLayers() {
706
        final DefaultListModel<WMSLayerNode> model = new DefaultListModel<>();
707

    
708
        lstLayers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
709

    
710
        model.addListDataListener(new ListDataListener() {
711

    
712
            @Override
713
            public void intervalRemoved(ListDataEvent e) {
714
                updateLstProjections();
715
            }
716

    
717
            @Override
718
            public void intervalAdded(ListDataEvent e) {
719
                updateLstProjections();
720
            }
721

    
722
            @Override
723
            public void contentsChanged(ListDataEvent e) {
724
                updateLstProjections();
725
            }
726
        });
727

    
728
        lstLayers.addMouseListener(new MouseAdapter() {
729

    
730
            @Override
731
            public void mouseClicked(MouseEvent e) {
732
                if (e.getClickCount() == 2) {
733
                    doDeselectLayerByIndex(lstLayers.getSelectedIndex());
734
                }
735
            }
736
        });
737

    
738
        final ListSelectionModel selectionModel = lstLayers.getSelectionModel();
739
        selectionModel.addListSelectionListener(new ListSelectionListener() {
740

    
741
            @Override
742
            public void valueChanged(ListSelectionEvent e) {
743
                btnRemoveLayer.setEnabled(!selectionModel.isSelectionEmpty());
744
                btnUpLayer.setEnabled(!selectionModel.isSelectionEmpty() && selectionModel.getMinSelectionIndex() > 0);
745
                btnDownLayer.setEnabled(!selectionModel.isSelectionEmpty()
746
                    && selectionModel.getMaxSelectionIndex() < model.getSize() - 1);
747
            }
748
        });
749

    
750
        lstLayers.setCellRenderer(new DefaultListCellRenderer() {
751

    
752
            /**
753
             *
754
             */
755
            private static final long serialVersionUID = 1430645485530520129L;
756
            JTextArea comp = new JTextArea();
757

    
758
            @SuppressWarnings("rawtypes")
759
            @Override
760
            public Component getListCellRendererComponent(javax.swing.JList list, Object value, int index,
761
                boolean isSelected, boolean cellHasFocus) {
762

    
763
                if (value instanceof WMSLayerNode) {
764
                    WMSLayerNode node = (WMSLayerNode) value;
765
                    String text = "";
766
                    if (!chkShowLayerNames.isSelected()) {
767
                        text = node.getTitle();
768
                    } else {
769
                        text = node.toString();
770
                    }
771
                    comp.setText(text);
772
                }
773
                if (isSelected) {
774
                    comp.setBackground(list.getSelectionBackground());
775
                    comp.setForeground(list.getSelectionForeground());
776
                } else {
777
                    comp.setBackground(list.getBackground());
778
                    comp.setForeground(list.getForeground());
779
                }
780
                return comp;
781
            }
782
        });
783
        lstLayers.setModel(model);
784
    }
785

    
786
    private void updateLstLayers() {
787
         @SuppressWarnings("unchecked")
788
        DefaultListModel<WMSLayerNode> model = ((DefaultListModel<WMSLayerNode>)lstLayers.getModel());
789
        model.clear();
790
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
791
            model.addElement(iterator.next());
792
        }
793
        updateLstProjections();
794
        updateTreeStyles();
795
//        updateLstDimensions();
796
        firePropertyChange("all", null, null);
797
    }
798

    
799
    @SuppressWarnings("unchecked")
800
    private void initializeLstProjections() {
801

    
802
        final DefaultListModel<String> model = new DefaultListModel<>();
803

    
804
        lstProjections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
805

    
806
        ListSelectionModel selectionModel = lstProjections.getSelectionModel();
807
        selectionModel.addListSelectionListener(new ListSelectionListener() {
808
            @Override
809
            public void valueChanged(ListSelectionEvent e) {
810
                int selectedRow = lstProjections.getSelectedIndex();
811
                if (selectedRow >= 0 && selectedRow < model.getSize()) {
812
                    projection = model.getElementAt(selectedRow);
813
                }
814
                firePropertyChange("all", null, null);
815
            }
816
        });
817

    
818
        lstProjections.setModel(model);
819
    }
820

    
821
    private void updateLstProjections() {
822

    
823
        WMSRasterProviderParameters providerParameters = getProviderParameters();
824

    
825
        List<String> srss = serverExplorer.getSrss(providerParameters);
826
        @SuppressWarnings("unchecked")
827
        DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
828
        model.clear();
829
        for (Iterator<String> iterator = srss.iterator(); iterator.hasNext();) {
830
            model.addElement(iterator.next());
831
        }
832
        selectProjection();
833
    }
834

    
835
    @SuppressWarnings("unchecked")
836
    private void selectProjection() {
837
        if(!StringUtils.isEmpty(projection)){
838
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
839
            for (int i=0; i<model.size(); i++) {
840
                if(projection.equals(model.elementAt(i))){
841
                    lstProjections.setSelectedIndex(i);
842
                    return;
843
                }
844
            }
845
        } else if(mapCtxProj != null){
846
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
847
            for (int i=0; i<model.size(); i++) {
848

    
849
                String srs = model.elementAt(i);
850
                try{
851
                    IProjection crs=CRSFactory.getCRS(model.elementAt(i));
852
                    if(crs!=null && crs.equals(mapCtxProj)){
853
                        lstProjections.setSelectedIndex(i);
854
                        return;
855
                    }
856
                }catch(Exception e){
857
                    logger.info("Can't get crs from: '"+srs+"' code", e);
858
                }
859
            }
860
        };
861
        if(lstProjections.getModel().getSize()>0){
862
            lstProjections.setSelectedIndex(0);
863
        }
864
    }
865

    
866
    /**
867
    *
868
    */
869
    private void initializeTreeStyles() {
870
        treeStyles.setToggleClickCount(1);
871
        treeStyles.setRowHeight(22);
872

    
873
        treeStyles.setCellRenderer(new DefaultTreeCellRenderer() {
874

    
875
            /**
876
             *
877
             */
878
            private static final long serialVersionUID = 4821777811489883864L;
879

    
880
            @Override
881
            public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
882
                boolean expanded, boolean leaf, int row, boolean hasFocus) {
883
                if (leaf) {
884
                    JPanel leafComponent = new JPanel();
885
                    leafComponent.setBackground(Color.WHITE);
886
                    JRadioButton leafRadioButton =
887
                        new JRadioButton("", ((StyleTreeModel) treeStyles.getModel()).isSelected((WMSStyleData) value));
888

    
889
                    leafRadioButton.setBackground(Color.WHITE);
890
                    leafComponent.add(leafRadioButton);
891
                    leafComponent.add(new JLabel(((WMSStyleData) value).getTitle()));
892
                    return leafComponent;
893
                } else {
894
                    super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
895
                    if (value instanceof WMSLayerNode) {
896
                        WMSLayerNode layerNode = (WMSLayerNode) value;
897
                        String text = "";
898
                        if (layerNode != null) {
899
                            if (!chkShowLayerNames.isSelected()) {
900
                                text = layerNode.getTitle();
901
                            } else {
902
                                text = layerNode.toString();
903
                            }
904
                        }
905
                        setText(text);
906
                    } else if (value instanceof String) {
907
                        setText((String)value);
908
                    }
909
                    return this;
910
                }
911
            }
912
        });
913

    
914
        treeStyles.addMouseListener(new java.awt.event.MouseAdapter() {
915
            @Override
916
            public void mouseClicked(java.awt.event.MouseEvent e) {
917
                ((StyleTreeModel) treeStyles.getModel()).setSelectedLeaf(treeStyles.getSelectionPath());
918
                treeStyles.clearSelection();
919
                repaint();
920
                firePropertyChange("all", null, null);
921
            }
922
        });
923
    }
924

    
925
    private void updateTreeStyles() {
926

    
927
        int size = selectedLayers.size();
928
        tabWMS.setEnabledAt(TAB_STYLES_INDEX, size > 0);
929

    
930
        StyleTreeModel model = new StyleTreeModel(selectedLayers);
931

    
932
        treeStyles.setModel(model);
933
        expandAllNodes(treeStyles);
934
    }
935

    
936
    private void expandAllNodes(JTree tree) {
937
        int j = tree.getRowCount();
938
        int i = 0;
939
        while (i < j) {
940
            tree.expandRow(i);
941
            i += 1;
942
            j = tree.getRowCount();
943
        }
944
    }
945

    
946
    class StyleTreeModel implements TreeModel {
947

    
948
        List<WMSLayerNode> layerNodes;
949

    
950
        public StyleTreeModel(List<WMSLayerNode> layerNodes) {
951
            this.layerNodes = layerNodes;
952
        }
953

    
954
        /**
955
         * Will return true if this style is selected.
956
         *
957
         * @param WMSStyle
958
         * @return true if this style is selected.
959
         */
960
        public boolean isSelected(WMSStyleData WMSStyle) {
961
            Iterator<WMSLayerNode> it = layerNodes.iterator();
962
            while (it.hasNext()) {
963
                WMSLayerNode node = it.next();
964
                if (node.getSelectedStyle().equals(WMSStyle)) {
965
                    return true;
966
                }
967
            }
968
            return false;
969
        }
970

    
971
        /**
972
         * Gets the names of the selected styles into a List using the same
973
         * order as they was represented in the StylesTree.
974
         *
975
         * @return the names of the selected styles into a List using the same
976
         * order as they was represented in the StylesTree.
977
         */
978
        public List<String> getStyleSelectionTitles() {
979
            List<String> styles = new ArrayList<String>();
980
            for (WMSLayerNode layerNode : layerNodes) {
981
                WMSStyleData sty = layerNode.getSelectedStyle();
982
                if (sty == null) {
983
                    styles.add("");
984
                } else {
985
                    styles.add(sty.getTitle());
986
                }
987
            }
988
            return styles;
989
        }
990

    
991
        /**
992
         * Sets the selected styles in the StylesTree. The argument styleNames
993
         * is a Vector with exactly the same amount of strings than the amount of
994
         * themes (layers) contained by the tree. A blank or null string will
995
         * leave the default style for that layer, but this element <b>must exist</b>
996
         * in the array in any case.
997
         *
998
         * @param styleNames
999
         *            , Vector containing the style names.
1000
         *            The styles order <b>must match</b> with the layer order.
1001
         */
1002
        public void setStylesSelection(List<String> styleNames) {
1003
            for (int i = 0; i < layerNodes.size(); i++) {
1004
                WMSLayerNode layerNode = layerNodes.get(i);
1005
                List<WMSStyleData> styles = layerNode.getStyles();
1006
                for (int j = 0; j < styles.size(); j++) {
1007
                    WMSStyleData sty = styles.get(j);
1008
                    if (sty.getName().equals(styleNames.get(i))) {
1009
                        layerNode.setSelectedStyleIndex(j);
1010
                        break;
1011
                    }
1012
                }
1013
            }
1014
        }
1015

    
1016
        /**
1017
         * Sets a leaf (an style) selected.
1018
         *
1019
         * @param selectionPath
1020
         *            to this leaf.
1021
         */
1022
        protected void setSelectedLeaf(TreePath selectionPath) {
1023
            if (selectionPath != null) {
1024
                Object[] objects = selectionPath.getPath();
1025
                Object item = objects[objects.length - 1];
1026
                if (isLeaf(item)) {
1027
                    WMSStyleData style = (WMSStyleData) item;
1028
                    WMSLayerNode layerNode = (WMSLayerNode) selectionPath.getParentPath().getLastPathComponent();
1029
                    List<WMSStyleData> styles = layerNode.getStyles();
1030
                    for (int i = 0; i < styles.size(); i++) {
1031
                        WMSStyleData sty = styles.get(i);
1032
                        if (sty.getName().equals(style.getName())) {
1033
                            layerNode.setSelectedStyleIndex(i);
1034
                            return;
1035
                        }
1036
                    }
1037
                }
1038
            }
1039
        }
1040

    
1041
        @Override
1042
        public Object getRoot() {
1043
            return ToolsLocator.getI18nManager().getTranslation("_selected_layers");
1044
        }
1045

    
1046
        @Override
1047
        public int getChildCount(Object parent) {
1048
            int count = 0;
1049

    
1050
            if (parent.equals(getRoot())) {
1051
                count = layerNodes.size();
1052
            } else {
1053
                count = ((WMSLayerNode) parent).getStyles().size();
1054
            }
1055
            return count;
1056
        }
1057

    
1058
        @Override
1059
        public boolean isLeaf(Object node) {
1060
            return (node instanceof WMSStyleData);
1061
        }
1062

    
1063
        @Override
1064
        public Object getChild(Object parent, int index) {
1065
            if (parent instanceof WMSStyleData)
1066
                return null;
1067
            if (parent.equals(getRoot()))
1068
                return layerNodes.get(index);
1069

    
1070
            return ((WMSLayerNode) parent).getStyles().get(index);
1071
        }
1072

    
1073
        @Override
1074
        public int getIndexOfChild(Object parent, Object child) {
1075
            if (parent instanceof WMSStyleData) {
1076
                return -1;
1077
            }
1078

    
1079
            if (parent.equals(getRoot())) {
1080
                for (int i = 0; i < layerNodes.size(); i++) {
1081
                    if (layerNodes.get(i).equals(child)) {
1082
                        return i;
1083
                    }
1084
                }
1085
            } else {
1086
                WMSLayerNode node = (WMSLayerNode)parent;
1087
                for (int i = 0; i < node.getStyles().size(); i++) {
1088
                    if (node.getStyles().get(i).equals(child)) {
1089
                        return i;
1090
                    }
1091
                }
1092
            }
1093
            return -1; //
1094
        }
1095

    
1096
        @Override
1097
        public void addTreeModelListener(TreeModelListener l) {
1098
            // TODO Auto-generated method stub
1099

    
1100
        }
1101

    
1102
        @Override
1103
        public void removeTreeModelListener(TreeModelListener l) {
1104
            // TODO Auto-generated method stub
1105

    
1106
        }
1107

    
1108
        @Override
1109
        public void valueForPathChanged(TreePath path, Object newValue) {
1110
            // TODO Auto-generated method stub
1111

    
1112
        }
1113
    }
1114

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

    
1176
//    private void updateLstDimensions() {
1177
//
1178
//        tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, true);
1179
//        boolean hasAnyDimension = false;
1180
//        DefaultTableModel model = (DefaultTableModel) lstDimensions.getModel();
1181
//        model.setRowCount(0);
1182
//        for (Iterator<LayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1183
//            LayerNode node = iterator.next();
1184
//            WMSLayer layer = node.getLayer();
1185
//            // List<WMSDimension> dimensionsLayer =
1186
//            // (ArrayList<WMSDimension>)(layer.getDimensions());
1187
//            for (Iterator iterator2 = layer.getDimensions().iterator(); iterator2.hasNext();) {
1188
//                WMSDimension dimension = (WMSDimension) iterator2.next();
1189
//                WMSDimension row[] = { dimension };
1190
//                model.addRow(row);
1191
//                hasAnyDimension = true;
1192
//            }
1193
//        }
1194
//        tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, hasAnyDimension);
1195
//    }
1196

    
1197
    private WMSRasterProviderParameters getProviderParameters() {
1198
        DataManager manager = DALLocator.getDataManager();
1199
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1200
        WMSRasterProviderParameters providerParameters = (WMSRasterProviderParameters) factory.createParameters();
1201
        List<String> layers = new ArrayList<String>(selectedLayers.size());
1202
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1203
            WMSLayerNode layer = iterator.next();
1204
            layers.add(layer.getName());
1205
        }
1206

    
1207
        providerParameters.setLayers(layers);
1208
        providerParameters.setFormat(format);
1209
        providerParameters.setInfoFormat(infoFormat);
1210
        providerParameters.setOverride(chkRefreshCache.isSelected());
1211
        providerParameters.setService((URL) serverExplorer.getParameters().getDynValue(
1212
            WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME));
1213
        List<String> styles = getStyles();
1214
        providerParameters.setStyles(styles);
1215
        providerParameters.setTransparency(chkTransparency.isSelected());
1216
        providerParameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1217

    
1218
        return providerParameters;
1219
    }
1220

    
1221
    private List<String> getStyles() {
1222
        List<String> styles = new ArrayList<>();
1223
        Iterator<WMSLayerNode> it = selectedLayers.iterator();
1224
        while (it.hasNext()) {
1225
            WMSLayerNode layerNode = it.next();
1226
            WMSStyleData selectedStyle = layerNode.getSelectedStyle();
1227
            if(selectedStyle==null){
1228
                styles.add("");
1229
            } else {
1230
                styles.add(selectedStyle.getName());
1231
            }
1232
        }
1233
        return styles;
1234
    }
1235

    
1236
    /**
1237
     * @param index
1238
     */
1239
    private void doDeselectLayerByIndex(int index) {
1240
        WMSLayerNode layerNode = selectedLayers.get(index);
1241
        selectedLayers.remove(layerNode);
1242
        updateLstLayers();
1243
    }
1244

    
1245
    @Override
1246
    public WMSLayerNode getParameters() {
1247
        WMSLayerNode wmsLayerNode = null;
1248
        if (chkMaintainLayersStruct.isSelected()) {
1249
            wmsLayerNode = serverExplorer.getListAsTree(true);
1250
            wmsLayerNode.removeChildren(new Invocable() {
1251

    
1252
                @Override
1253
                public Object call(Object... args) {
1254
                    WMSLayerNode node = (WMSLayerNode) args[0];
1255
                    if (node.isLeaf() && !selectedLayers.contains(node)) {
1256
                        return true;
1257
                    }
1258
                    return false;
1259
                }
1260
            });
1261

    
1262
            wmsLayerNode.removeEmptyFolders();
1263

    
1264
            fillParametersInTree(wmsLayerNode);
1265

    
1266
        } else {
1267
            wmsLayerNode = serverExplorer.getListAsTree(true);
1268
            wmsLayerNode = findLeaf(wmsLayerNode);
1269
            //FIXME: ?if wmsLayerNode == null?
1270
            fillParametersInUniqueNode(wmsLayerNode);
1271
        }
1272
        if(wmsLayerNode!=null){
1273
            wmsLayerNode.setTitle(txtLayerName.getText());
1274
        }
1275
        return wmsLayerNode;
1276
    }
1277

    
1278
    private WMSLayerNode findLeaf(WMSLayerNode node){
1279
        if(node.isLeaf()){
1280
            return node;
1281
        }
1282
        for (int i=0; i<node.getChildCount(); i++) {
1283
            WMSLayerNode child = (WMSLayerNode) node.getChildAt(i);
1284
            return findLeaf(child);
1285
        }
1286
        return null;
1287
    }
1288

    
1289
    private void fillParametersInTree(WMSLayerNode wmsLayerNode) {
1290
        if(wmsLayerNode.isLeaf()){
1291
            if(selectedLayers.contains(wmsLayerNode)){
1292
                int index = selectedLayers.indexOf(wmsLayerNode);
1293
                WMSRasterProviderParameters parameters = (WMSRasterProviderParameters) wmsLayerNode.getParameters();
1294

    
1295
                parameters.setFormat(format);
1296
                parameters.setInfoFormat(infoFormat);
1297
                parameters.setOverride(chkRefreshCache.isSelected());
1298
                String style = getStyles().get(index);
1299
                List<String> styles = new ArrayList<>();
1300
                styles.add(style);
1301
                parameters.setStyles(styles);
1302
                parameters.setTransparency(chkTransparency.isSelected());
1303
                parameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1304

    
1305
                try {
1306
                    IProjection crs = CRSFactory.getCRS(projection);
1307
                    parameters.setCRS(crs);
1308
                } catch (Exception e) {
1309
                    logger.info("Can't get crs from: '" + projection + "' code", e);
1310
                }
1311

    
1312
            }
1313
        } else {
1314
            for(int i=0; i<wmsLayerNode.getChildCount(); i++){
1315
                fillParametersInTree((WMSLayerNode) wmsLayerNode.getChildAt(i));
1316
            }
1317
        }
1318
    }
1319

    
1320
    private WMSLayerNode fillParametersInUniqueNode(WMSLayerNode node) {
1321

    
1322
        WMSRasterProviderParameters parameters = (WMSRasterProviderParameters) node.getParameters();
1323
        List<String> layers = new ArrayList<String>(selectedLayers.size());
1324
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1325
            String name = ((WMSLayerNode) iterator.next()).getName();
1326
            layers.add(name);
1327
        }
1328

    
1329
        parameters.setLayers(layers);
1330
        parameters.setFormat(format);
1331
        parameters.setInfoFormat(infoFormat);
1332
        parameters.setOverride(chkRefreshCache.isSelected());
1333
        List<String> styles = getStyles();
1334
        parameters.setStyles(styles);
1335
        parameters.setTransparency(chkTransparency.isSelected());
1336
        parameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1337
        try {
1338
            IProjection crs = CRSFactory.getCRS(projection);
1339
            parameters.setCRS(crs);
1340
        } catch (Exception e) {
1341
            logger.info("Can't get crs from: '" + projection + "' code", e);
1342
        }
1343

    
1344
        return node;
1345
    }
1346

    
1347
    @Override
1348
    public boolean isTiled() {
1349
        return chkLocalCache.isSelected();
1350
    }
1351

    
1352
    @Override
1353
    public boolean refreshLocalCache() {
1354
        return chkRefreshLocalCache.isSelected();
1355
    }
1356

    
1357
    @Override
1358
    public boolean areSettingsValid() {
1359
        return serverExplorer!=null && format!=null && infoFormat!=null && selectedLayers!=null && !selectedLayers.isEmpty() && projection!=null;
1360
    }
1361
}