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

History | View | Annotate | Download (50.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.fmap.dal.OpenDataStoreParameters;
72
import org.gvsig.tools.ToolsLocator;
73
import org.gvsig.tools.dispose.DisposeUtils;
74
import org.gvsig.tools.dynobject.DynObject;
75
import org.gvsig.tools.i18n.I18nManager;
76
import org.gvsig.tools.swing.api.ToolsSwingLocator;
77
import org.gvsig.tools.swing.icontheme.IconTheme;
78
import org.gvsig.tools.util.Invocable;
79
import org.gvsig.wms.provider.WMSLayerNode;
80
import org.gvsig.wms.provider.WMSRasterProviderParameters;
81
import org.gvsig.wms.provider.WMSRasterServerExplorer;
82
import org.gvsig.wms.provider.WMSRasterServerExplorerParameters;
83
import org.gvsig.wms.provider.WMSStyleData;
84
import org.gvsig.wms.swing.api.WMSParametersPanel;
85

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

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

    
112
    private Thread connectionThread;
113

    
114
    /**
115
     *
116
     */
117
    public DefaultWMSParametersPanelController() {
118
        super();
119
        selectedLayers = new ArrayList<>();
120
        initComponents();
121
        translate();
122
    }
123

    
124
    @Override
125
    public void setPreferredProjection(IProjection proj) {
126
        mapCtxProj = proj;
127
    }
128

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

    
136
        // Tab connection
137
        lblServer.setText(i18nManager.getTranslation(lblServer.getText()));
138
        lblServer.setToolTipText(i18nManager.getTranslation(lblServer.getToolTipText()));
139

    
140
        cboServerList.setToolTipText(i18nManager.getTranslation(cboServerList.getToolTipText()));
141

    
142
        lblUser.setText(i18nManager.getTranslation(lblUser.getText()));
143
        lblUser.setToolTipText(i18nManager.getTranslation(lblUser.getToolTipText()));
144

    
145
        txtUser.setToolTipText(i18nManager.getTranslation(txtUser.getToolTipText()));
146

    
147
        lblPassword.setText(i18nManager.getTranslation(lblPassword.getText()));
148
        lblPassword.setToolTipText(i18nManager.getTranslation(lblPassword.getToolTipText()));
149

    
150
        txtPassword.setToolTipText(i18nManager.getTranslation(txtPassword.getToolTipText()));
151

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

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

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

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

    
164
        chkRefreshLocalCache.setText(i18nManager.getTranslation(chkRefreshLocalCache.getText()));
165
        chkRefreshLocalCache.setToolTipText(i18nManager.getTranslation(chkRefreshLocalCache.getToolTipText()));
166

    
167
        chkAxisOrderXY.setText(i18nManager.getTranslation(chkAxisOrderXY.getText()));
168
        chkAxisOrderXY.setToolTipText(i18nManager.getTranslation(chkAxisOrderXY.getToolTipText()));
169

    
170
        lblInformation.setText(i18nManager.getTranslation(lblInformation.getText()));
171
        lblInformation.setToolTipText(i18nManager.getTranslation(lblInformation.getToolTipText()));
172

    
173
        // Tab layers
174
        lblLayerName.setText(i18nManager.getTranslation(lblLayerName.getText()));
175
        lblLayerName.setToolTipText(i18nManager.getTranslation(lblLayerName.getToolTipText()));
176

    
177
        txtLayerName.setToolTipText(i18nManager.getTranslation(txtLayerName.getToolTipText()));
178

    
179
        lblSelectLayers.setText(i18nManager.getTranslation(lblSelectLayers.getText()));
180
        lblSelectLayers.setToolTipText(i18nManager.getTranslation(lblSelectLayers.getToolTipText()));
181

    
182
        treeLayersSelector.setToolTipText(i18nManager.getTranslation(treeLayersSelector.getToolTipText()));
183

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

    
186
        btnAddLayer.setText(""); // btnAddLayer.getText()));
187
        btnAddLayer.setToolTipText(i18nManager.getTranslation(btnAddLayer.getToolTipText()));
188

    
189
        btnRemoveLayer.setText(""); // btnRemoveLayer.getText()));
190
        btnRemoveLayer.setToolTipText(i18nManager.getTranslation(btnRemoveLayer.getToolTipText()));
191

    
192
        btnUpLayer.setText(""); // btnUpLayer.getText()));
193
        btnUpLayer.setToolTipText(i18nManager.getTranslation(btnUpLayer.getToolTipText()));
194

    
195
        btnDownLayer.setText(""); // btnDownLayer.getText()));
196
        btnDownLayer.setToolTipText(i18nManager.getTranslation(btnDownLayer.getToolTipText()));
197

    
198
        chkMaintainLayersStruct.setText(i18nManager.getTranslation(chkMaintainLayersStruct.getText()));
199
        chkMaintainLayersStruct.setToolTipText(i18nManager.getTranslation(chkMaintainLayersStruct.getToolTipText()));
200

    
201
        chkShowLayerNames.setText(i18nManager.getTranslation(chkShowLayerNames.getText()));
202
        chkShowLayerNames.setToolTipText(i18nManager.getTranslation(chkShowLayerNames.getToolTipText()));
203

    
204
        // Tab styles
205
        treeStyles.setToolTipText(i18nManager.getTranslation(treeStyles.getToolTipText()));
206

    
207
        // Tab dimensions
208
        lblSettings.setText(i18nManager.getTranslation(lblSettings.getText()));
209
        lblSettings.setToolTipText(i18nManager.getTranslation(lblSettings.getToolTipText()));
210

    
211
        lstDimensionsSettings.setToolTipText(i18nManager.getTranslation(lstDimensionsSettings.getToolTipText()));
212

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

    
216
        lstDimensions.setToolTipText(i18nManager.getTranslation(lstDimensions.getToolTipText()));
217

    
218
        lblValue.setText(i18nManager.getTranslation(lblValue.getText()));
219
        lblValue.setToolTipText(i18nManager.getTranslation(lblValue.getToolTipText()));
220

    
221
        lblFieldValue.setText("");
222
        lblFieldValue.setToolTipText(i18nManager.getTranslation(lblFieldValue.getToolTipText()));
223

    
224
        sldValues.setToolTipText(i18nManager.getTranslation(sldValues.getToolTipText()));
225

    
226
        btnFirst.setText(""); // btnFirst.getText()));
227
        btnFirst.setToolTipText(i18nManager.getTranslation(btnFirst.getToolTipText()));
228

    
229
        btnPrevious.setText(""); // btnPrevious.getText()));
230
        btnPrevious.setToolTipText(i18nManager.getTranslation(btnPrevious.getToolTipText()));
231

    
232
        txtDimensionNumber.setToolTipText(i18nManager.getTranslation(txtDimensionNumber.getToolTipText()));
233

    
234
        btnNext.setText(""); // btnNext.getText()));
235
        btnNext.setToolTipText(i18nManager.getTranslation(btnNext.getToolTipText()));
236

    
237
        btnLast.setText(""); // btnLast.getText()));
238
        btnLast.setToolTipText(i18nManager.getTranslation(btnLast.getToolTipText()));
239

    
240
        rdbSimpleValue.setText(i18nManager.getTranslation(rdbSimpleValue.getText()));
241
        rdbSimpleValue.setToolTipText(i18nManager.getTranslation(rdbSimpleValue.getToolTipText()));
242

    
243
        rdbMultipleValue.setText(i18nManager.getTranslation(rdbMultipleValue.getText()));
244
        rdbMultipleValue.setToolTipText(i18nManager.getTranslation(rdbMultipleValue.getToolTipText()));
245

    
246
        rdbInterval.setText(i18nManager.getTranslation(rdbInterval.getText()));
247
        rdbInterval.setToolTipText(i18nManager.getTranslation(rdbInterval.getToolTipText()));
248

    
249
        btnAddSetting.setText(i18nManager.getTranslation(btnAddSetting.getText()));
250
        btnAddSetting.setToolTipText(i18nManager.getTranslation(btnAddSetting.getToolTipText()));
251

    
252
        btnClearSetting.setText(i18nManager.getTranslation(btnClearSetting.getText()));
253
        btnClearSetting.setToolTipText(i18nManager.getTranslation(btnClearSetting.getToolTipText()));
254

    
255
        txtSetting.setToolTipText(i18nManager.getTranslation(txtSetting.getToolTipText()));
256

    
257
        btnSet.setText(i18nManager.getTranslation(btnSet.getText()));
258
        btnSet.setToolTipText(i18nManager.getTranslation(btnSet.getToolTipText()));
259

    
260
        // Tab formats
261
        lblFormats.setText(i18nManager.getTranslation(lblFormats.getText()));
262
        lblFormats.setToolTipText(i18nManager.getTranslation(lblFormats.getToolTipText()));
263

    
264
        lstFormats.setToolTipText(i18nManager.getTranslation(lstFormats.getToolTipText()));
265

    
266
        chkTransparency.setText(i18nManager.getTranslation(chkTransparency.getText()));
267
        chkTransparency.setToolTipText(i18nManager.getTranslation(chkTransparency.getToolTipText()));
268

    
269
        lblProjection.setText(i18nManager.getTranslation(lblProjection.getText()));
270
        lblProjection.setToolTipText(i18nManager.getTranslation(lblProjection.getToolTipText()));
271

    
272
        lstProjections.setToolTipText(i18nManager.getTranslation(lstProjections.getToolTipText()));
273

    
274
        lblInfoFormat.setText(i18nManager.getTranslation(lblInfoFormat.getText()));
275
        lblInfoFormat.setToolTipText(i18nManager.getTranslation(lblInfoFormat.getToolTipText()));
276

    
277
        lstInfoFormats.setToolTipText(i18nManager.getTranslation(lstInfoFormats.getToolTipText()));
278

    
279
    }
280

    
281
    private void initComponents() {
282
        fillConnections();
283

    
284
        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
285

    
286
        this.btnAddLayer.setIcon(iconTheme.get("add-layer-icon"));
287
        this.btnRemoveLayer.setIcon(iconTheme.get("remove-layer-icon"));
288
        this.btnDownLayer.setIcon(iconTheme.get("down-layer-icon"));
289
        this.btnUpLayer.setIcon(iconTheme.get("up-layer-icon"));
290

    
291
        this.btnFirst.setIcon(iconTheme.get("first-value-icon"));
292
        this.btnPrevious.setIcon(iconTheme.get("previous-value-icon"));
293
        this.btnNext.setIcon(iconTheme.get("next-value-icon"));
294
        this.btnLast.setIcon(iconTheme.get("last-value-icon"));
295

    
296
        this.btnConnect.addActionListener(new ActionListener() {
297

    
298
            @Override
299
            public void actionPerformed(ActionEvent e) {
300
                doConnect();
301
            }
302
        });
303

    
304
        this.btnCancel.addActionListener(new ActionListener() {
305

    
306
            @Override
307
            public void actionPerformed(ActionEvent e) {
308
                doCancelConnection();
309
            }
310
        });
311

    
312
        initializeTreeLayerSelector();
313
        initializeLstLayers();
314
        initializeLstProjections();
315
        initializeTreeStyles();
316
//        initializeTblDimensions();
317

    
318
        this.btnAddLayer.setEnabled(false);
319
        this.btnAddLayer.addActionListener(new ActionListener() {
320

    
321
            @Override
322
            public void actionPerformed(ActionEvent e) {
323
                WMSLayerNode node =
324
                    (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
325
                if (node == null) {
326
                    return;
327
                }
328
                if (node.isLeaf()) {
329
                    doSelectLayer(node);
330
                }
331
            }
332
        });
333

    
334
        this.btnRemoveLayer.setEnabled(false);
335
        this.btnRemoveLayer.addActionListener(new ActionListener() {
336

    
337
            @Override
338
            public void actionPerformed(ActionEvent e) {
339
                int index = lstLayers.getSelectedIndex();
340
                doDeselectLayerByIndex(index);
341
                int toSelectIndex = Math.min(index, lstLayers.getModel().getSize() - 1);
342
                lstLayers.getSelectionModel().setSelectionInterval(toSelectIndex, toSelectIndex);
343
            }
344
        });
345

    
346
        this.btnUpLayer.setEnabled(false);
347
        this.btnUpLayer.addActionListener(new ActionListener() {
348

    
349
            @Override
350
            public void actionPerformed(ActionEvent e) {
351
                int toSelectIndex = lstLayers.getSelectedIndex();
352
                if (toSelectIndex > 0) {
353
                    Collections.swap(selectedLayers, toSelectIndex, toSelectIndex - 1);
354
                }
355
                updateLstLayers();
356
                lstLayers.getSelectionModel().setSelectionInterval(toSelectIndex - 1, toSelectIndex - 1);
357
            }
358
        });
359

    
360
        this.btnDownLayer.setEnabled(false);
361
        this.btnDownLayer.addActionListener(new ActionListener() {
362

    
363
            @Override
364
            public void actionPerformed(ActionEvent e) {
365
                int selectedRow = lstLayers.getSelectedIndex();
366
                if (selectedRow < lstLayers.getModel().getSize() - 1) {
367
                    Collections.swap(selectedLayers, selectedRow, selectedRow + 1);
368
                }
369
                updateLstLayers();
370
                lstLayers.getSelectionModel().setSelectionInterval(selectedRow + 1, selectedRow + 1);
371
            }
372
        });
373

    
374
        this.chkShowLayerNames.setSelected(true);
375
        this.chkShowLayerNames.addActionListener(new ActionListener() {
376

    
377
            @Override
378
            public void actionPerformed(ActionEvent e) {
379
                updateLstLayers();
380
            }
381
        });
382

    
383
        this.chkTransparency.setSelected(true);
384

    
385
        updateComponents();
386

    
387
    }
388

    
389
    @Override
390
    public JComponent asJComponent() {
391
        return this;
392
    }
393

    
394
    @Override
395
    public void dispose() {
396
        DisposeUtils.disposeQuietly(explorer);
397
    }
398

    
399
    public void putParameters(DynObject parameters) {
400
        // TODO:
401
    }
402

    
403
    public void fetchParameters(DynObject parameters) {
404

    
405
    }
406

    
407
    private void doConnect() {
408
        final String selectedItem = (String) cboServerList.getSelectedItem();
409
        if (StringUtils.isEmpty(selectedItem)) {
410
            return;
411
        }
412

    
413
        btnConnect.setEnabled(false);
414
        btnCancel.setEnabled(true);
415

    
416
        connectionThread = new Thread(new Runnable() {
417

    
418
            @Override
419
            public void run() {
420
                DataManager manager = DALLocator.getDataManager();
421
                final DataServerExplorerParameters parameters;
422
                try {
423
                    parameters = manager.createServerExplorerParameters("WMS");
424
                    parameters.setDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME, new URL(
425
                        selectedItem)); // "service"
426
                    parameters.setDynValue(WMSRasterServerExplorerParameters.WMS_OVERRIDE_CAPABILITIES_PARAMETER_NAME,
427
                        chkRefreshCache.isSelected()); // "override_capabilities"
428

    
429
                    final WMSRasterServerExplorer serverExplorer =
430
                        (WMSRasterServerExplorer) manager.openServerExplorer("WMS", parameters);
431

    
432
                    // List layers = serverExplorer.list();
433

    
434
                    SwingUtilities.invokeLater(new Runnable() {
435

    
436
                        @Override
437
                        public void run() {
438
//                            if(Thread.interrupted()){
439
//                                return;
440
//                            }
441
                            setServerExplorer(serverExplorer);
442
                            DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
443

    
444
                            pool.add(((URL) parameters
445
                                .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString(),
446
                                serverExplorer.getParameters());
447

    
448
                        }
449
                    });
450
                } catch (Exception e) {
451
                    // FIXME: ?Mostrar di?logo para preguntar si se desea
452
                    // eliminar el servidor del pool de servidores en caso de
453
                    // existir ah??
454
                    setServerExplorer(null);
455
                }
456

    
457
            }
458
        }, "WMSConnection");
459
        connectionThread.start();
460
        try {
461
            Thread.sleep(2);
462
        } catch (InterruptedException e) {
463
        }
464
    }
465

    
466

    
467
    protected void doCancelConnection() {
468
//        if(connectionThread != null && connectionThread.isAlive()){
469
//            connectionThread.interrupt();
470
//        }
471
    }
472

    
473

    
474
    private void setServerExplorer(WMSRasterServerExplorer serverExplorer) {
475
        this.serverExplorer = serverExplorer;
476

    
477
        this.updateComponents();
478

    
479
        List<String> formats = this.serverExplorer.getFormats();
480
        List<String> infoFormats = this.serverExplorer.getInfoFormats();
481

    
482
        WMSLayerNode layerNode = (WMSLayerNode) this.serverExplorer.getListAsTree();
483
        txtLayerName.setText(layerNode.getTitle());
484
        fillLayers(layerNode);
485
        fillFormats(formats);
486
        int formatIndex = -1;
487
        if(!StringUtils.isEmpty(format)){
488
            if(formats.contains(format)){
489
                formatIndex = formats.indexOf(format);
490
            }
491
        } else {
492
            if(formats.size()>0){
493
                formatIndex = 0;
494
                format = formats.get(formatIndex);
495
            }
496
        }
497
        lstFormats.getSelectionModel().setSelectionInterval(formatIndex, formatIndex);
498

    
499
        fillInfoFormats(infoFormats);
500
        int formatInfoIndex = -1;
501
        if(!StringUtils.isEmpty(infoFormat)){
502
            if(infoFormats.contains(infoFormat)){
503
                formatInfoIndex = infoFormats.indexOf(infoFormat);
504
            }
505
        } else {
506
            if(infoFormats.size()>0){
507
                formatInfoIndex = 0;
508
                infoFormat = infoFormats.get(formatInfoIndex);
509
            }
510
        }
511
        lstInfoFormats.getSelectionModel().setSelectionInterval(formatInfoIndex, formatInfoIndex);
512

    
513
        txtInformation.setText(serverExplorer.getInfoString());
514

    
515
        tabWMS.setEnabledAt(4, true);
516
    }
517

    
518

    
519

    
520
    private void updateComponents() {
521

    
522
        if (serverExplorer == null) {
523
            cboServerList.setEnabled(true);
524
            // Authentication of WMS servers is not yet implemented, when implemented, enabling the following two controls.
525
            txtUser.setEnabled(false);
526
            txtPassword.setEnabled(false);
527

    
528
            chkRefreshCache.setEnabled(true);
529
            btnConnect.setEnabled(true);
530
            btnCancel.setEnabled(false);
531

    
532
            chkLocalCache.setEnabled(false);
533
            chkRefreshLocalCache.setEnabled(false);
534
            chkAxisOrderXY.setEnabled(false);
535
            txtInformation.setEnabled(false);
536

    
537
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, false);
538
            tabWMS.setEnabledAt(TAB_STYLES_INDEX, false);
539
            tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, false);
540
            tabWMS.setEnabledAt(TAB_FORMATS_INDEX, false);
541
        } else {
542
            cboServerList.setEnabled(false);
543
            txtUser.setEnabled(false);
544
            txtPassword.setEnabled(false);
545
            chkRefreshCache.setEnabled(false);
546
            btnConnect.setEnabled(false);
547
            btnCancel.setEnabled(false);
548

    
549
            chkLocalCache.setEnabled(true);
550
            chkRefreshLocalCache.setEnabled(true);
551
            chkAxisOrderXY.setEnabled(true);
552
            txtInformation.setEnabled(true);
553

    
554
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, true);
555
            // tabWMS.setEnabledAt(TAB_STYLES_INDEX, true); //habilitar cuando
556
            // tengamos capas seleccionadas
557
            // tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, false); //habilitar
558
            // cuando el servidor proporcione dimensiones
559
            // tabWMS.setEnabledAt(TAB_FORMATS_INDEX, true); //habilitar cuando
560
            // tengamos capas seleccionadas
561
        }
562

    
563
    }
564

    
565
    private void fillConnections() {
566
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
567

    
568
        DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
569
        Iterator it = pool.iterator();
570
        while (it.hasNext()) {
571
            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
572
            DataServerExplorerParameters parameters = entry.getExplorerParameters();
573
            if (parameters instanceof WMSRasterServerExplorerParameters) {
574
                model.addElement(((URL) parameters
575
                    .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString());
576
            }
577
        }
578

    
579
        this.cboServerList.setModel(model);
580
    }
581

    
582
    private void fillFormats(List<String> formats) {
583
        final DefaultListModel<String> model = new DefaultListModel<>();
584
        for (Iterator<String> iterator = formats.iterator(); iterator.hasNext();) {
585
            model.addElement(iterator.next());
586
        }
587
        lstFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
588
        lstFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
589
            @Override
590
            public void valueChanged(ListSelectionEvent e) {
591
                int index = lstFormats.getSelectedIndex();
592
                format = model.getElementAt(index);
593
            }
594
        });
595
        lstFormats.setModel(model);
596
    }
597

    
598
    private void fillInfoFormats(List<String> infoFormats) {
599

    
600
        final DefaultListModel<String> model = new DefaultListModel<>();
601
        for (Iterator<String> iterator = infoFormats.iterator(); iterator.hasNext();) {
602
            model.addElement(iterator.next());
603
        }
604
        lstInfoFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
605
        lstInfoFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
606

    
607
            @Override
608
            public void valueChanged(ListSelectionEvent e) {
609
                // int index = e.getFirstIndex();
610
                int index = lstInfoFormats.getSelectedIndex();
611
                infoFormat = model.getElementAt(index);
612
            }
613
        });
614
        lstInfoFormats.setModel(model);
615
    }
616

    
617
    private void fillLayers(TreeNode node) {
618
        TreeModel treeModel = new DefaultTreeModel(node, true);
619
        treeLayersSelector.setModel(treeModel);
620
    }
621

    
622
    /**
623
     *
624
     */
625
    private void initializeTreeLayerSelector() {
626
        treeLayersSelector.setCellRenderer(new DefaultTreeCellRenderer() {
627

    
628
            /**
629
             *
630
             */
631
            private static final long serialVersionUID = -6800758982020754819L;
632

    
633
            @Override
634
            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
635
                boolean leaf, int row, boolean hasFocus) {
636
                Component comp = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
637
                String text;
638
                if (value instanceof WMSLayerNode) {
639
                    WMSLayerNode layerNode = (WMSLayerNode) value;
640
                    if (!chkShowLayerNames.isSelected()) {
641
                        text = layerNode.getTitle();
642
                    } else {
643
                        text = layerNode.toString();
644
                    }
645
                    setText(text);
646
                }
647
                return comp;
648
            }
649
        });
650

    
651

    
652
        treeLayersSelector.addMouseListener(new MouseAdapter() {
653

    
654
            @Override
655
            public void mouseClicked(MouseEvent e) {
656
                if (e.getClickCount() == 1) {
657
                    WMSLayerNode node = (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
658
                    btnAddLayer.setEnabled(node != null && node.isLeaf());
659
                } else if (e.getClickCount() == 2) {
660
                    WMSLayerNode node =
661
                        (WMSLayerNode) treeLayersSelector.getLastSelectedPathComponent();
662
                    if (node == null)
663
                        return;
664
                    if (node.isLeaf()) {
665
                        doSelectLayer(node);
666
                    }
667
                    // Cast nodeInfo to your object and do whatever you want
668
                }
669
            }
670
        });
671
    }
672

    
673
    protected void doSelectLayer(Object selected) {
674
        if (selected instanceof WMSLayerNode) {
675
            WMSLayerNode node = (WMSLayerNode) selected;
676
            if (selectedLayers.contains(node)) {
677
                return;
678
            }
679
            selectedLayers.add(node);
680
            updateLstLayers();
681
        }
682
    }
683

    
684
    @SuppressWarnings("unchecked")
685
    private void initializeLstLayers() {
686
        final DefaultListModel<WMSLayerNode> model = new DefaultListModel<>();
687

    
688
        lstLayers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
689

    
690
        model.addListDataListener(new ListDataListener() {
691

    
692
            @Override
693
            public void intervalRemoved(ListDataEvent e) {
694
                updateLstProjections();
695
            }
696

    
697
            @Override
698
            public void intervalAdded(ListDataEvent e) {
699
                updateLstProjections();
700
            }
701

    
702
            @Override
703
            public void contentsChanged(ListDataEvent e) {
704
                updateLstProjections();
705
            }
706
        });
707

    
708
        lstLayers.addMouseListener(new MouseAdapter() {
709

    
710
            @Override
711
            public void mouseClicked(MouseEvent e) {
712
                if (e.getClickCount() == 2) {
713
                    doDeselectLayerByIndex(lstLayers.getSelectedIndex());
714
                }
715
            }
716
        });
717

    
718
        final ListSelectionModel selectionModel = lstLayers.getSelectionModel();
719
        selectionModel.addListSelectionListener(new ListSelectionListener() {
720

    
721
            @Override
722
            public void valueChanged(ListSelectionEvent e) {
723
                btnRemoveLayer.setEnabled(!selectionModel.isSelectionEmpty());
724
                btnUpLayer.setEnabled(!selectionModel.isSelectionEmpty() && selectionModel.getMinSelectionIndex() > 0);
725
                btnDownLayer.setEnabled(!selectionModel.isSelectionEmpty()
726
                    && selectionModel.getMaxSelectionIndex() < model.getSize() - 1);
727
            }
728
        });
729

    
730
        lstLayers.setCellRenderer(new DefaultListCellRenderer() {
731

    
732
            /**
733
             *
734
             */
735
            private static final long serialVersionUID = 1430645485530520129L;
736
            JTextArea comp = new JTextArea();
737

    
738
            @SuppressWarnings("rawtypes")
739
            @Override
740
            public Component getListCellRendererComponent(javax.swing.JList list, Object value, int index,
741
                boolean isSelected, boolean cellHasFocus) {
742

    
743
                if (value instanceof WMSLayerNode) {
744
                    WMSLayerNode node = (WMSLayerNode) value;
745
                    String text = "";
746
                    if (!chkShowLayerNames.isSelected()) {
747
                        text = node.getTitle();
748
                    } else {
749
                        text = node.toString();
750
                    }
751
                    comp.setText(text);
752
                }
753
                if (isSelected) {
754
                    comp.setBackground(list.getSelectionBackground());
755
                    comp.setForeground(list.getSelectionForeground());
756
                } else {
757
                    comp.setBackground(list.getBackground());
758
                    comp.setForeground(list.getForeground());
759
                }
760
                return comp;
761
            }
762
        });
763
        lstLayers.setModel(model);
764
    }
765

    
766
    private void updateLstLayers() {
767
         @SuppressWarnings("unchecked")
768
        DefaultListModel<WMSLayerNode> model = ((DefaultListModel<WMSLayerNode>)lstLayers.getModel());
769
        model.clear();
770
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
771
            model.addElement(iterator.next());
772
        }
773
        updateLstProjections();
774
        updateTreeStyles();
775
//        updateLstDimensions();
776
    }
777

    
778
    @SuppressWarnings("unchecked")
779
    private void initializeLstProjections() {
780

    
781
        final DefaultListModel<String> model = new DefaultListModel<>();
782

    
783
        lstProjections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
784

    
785
        ListSelectionModel selectionModel = lstProjections.getSelectionModel();
786
        selectionModel.addListSelectionListener(new ListSelectionListener() {
787
            @Override
788
            public void valueChanged(ListSelectionEvent e) {
789
                int selectedRow = lstProjections.getSelectedIndex();
790
                if (selectedRow >= 0 && selectedRow < model.getSize()) {
791
                    projection = model.getElementAt(selectedRow);
792
                }
793
            }
794
        });
795

    
796
        lstProjections.setModel(model);
797
    }
798

    
799
    private void updateLstProjections() {
800

    
801
        WMSRasterProviderParameters providerParameters = getProviderParameters();
802

    
803
        List<String> srss = serverExplorer.getSrss(providerParameters);
804
        @SuppressWarnings("unchecked")
805
        DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
806
        model.clear();
807
        for (Iterator<String> iterator = srss.iterator(); iterator.hasNext();) {
808
            model.addElement(iterator.next());
809
        }
810
        selectProjection();
811
    }
812

    
813
    @SuppressWarnings("unchecked")
814
    private void selectProjection() {
815
        if(!StringUtils.isEmpty(projection)){
816
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
817
            for (int i=0; i<model.size(); i++) {
818
                if(projection.equals(model.elementAt(i))){
819
                    lstProjections.setSelectedIndex(i);
820
                    return;
821
                }
822
            }
823
        } else if(mapCtxProj != null){
824
            DefaultListModel<String> model = (DefaultListModel<String>) lstProjections.getModel();
825
            for (int i=0; i<model.size(); i++) {
826

    
827
                String srs = model.elementAt(i);
828
                try{
829
                    IProjection crs=CRSFactory.getCRS(model.elementAt(i));
830
                    if(crs!=null && crs.equals(mapCtxProj)){
831
                        lstProjections.setSelectedIndex(i);
832
                        return;
833
                    }
834
                }catch(Exception e){
835
                    logger.info("Can't get crs from: '"+srs+"' code", e);
836
                }
837
            }
838
        };
839
        if(lstProjections.getModel().getSize()>0){
840
            lstProjections.setSelectedIndex(0);
841
        }
842
    }
843

    
844
    /**
845
    *
846
    */
847
    private void initializeTreeStyles() {
848
        treeStyles.setToggleClickCount(1);
849
        treeStyles.setRowHeight(22);
850

    
851
        treeStyles.setCellRenderer(new DefaultTreeCellRenderer() {
852

    
853
            /**
854
             *
855
             */
856
            private static final long serialVersionUID = 4821777811489883864L;
857

    
858
            @Override
859
            public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
860
                boolean expanded, boolean leaf, int row, boolean hasFocus) {
861
                if (leaf) {
862
                    JPanel leafComponent = new JPanel();
863
                    leafComponent.setBackground(Color.WHITE);
864
                    JRadioButton leafRadioButton =
865
                        new JRadioButton("", ((StyleTreeModel) treeStyles.getModel()).isSelected((WMSStyleData) value));
866

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

    
892
        treeStyles.addMouseListener(new java.awt.event.MouseAdapter() {
893
            @Override
894
            public void mouseClicked(java.awt.event.MouseEvent e) {
895
                ((StyleTreeModel) treeStyles.getModel()).setSelectedLeaf(treeStyles.getSelectionPath());
896
                treeStyles.clearSelection();
897
                repaint();
898
            }
899
        });
900
    }
901

    
902
    private void updateTreeStyles() {
903

    
904
        int size = selectedLayers.size();
905
        tabWMS.setEnabledAt(TAB_STYLES_INDEX, size > 0);
906

    
907
        StyleTreeModel model = new StyleTreeModel(selectedLayers);
908

    
909
        treeStyles.setModel(model);
910
        expandAllNodes(treeStyles);
911
    }
912

    
913
    private void expandAllNodes(JTree tree) {
914
        int j = tree.getRowCount();
915
        int i = 0;
916
        while (i < j) {
917
            tree.expandRow(i);
918
            i += 1;
919
            j = tree.getRowCount();
920
        }
921
    }
922

    
923
    class StyleTreeModel implements TreeModel {
924

    
925
        List<WMSLayerNode> layerNodes;
926

    
927
        public StyleTreeModel(List<WMSLayerNode> layerNodes) {
928
            this.layerNodes = layerNodes;
929
        }
930

    
931
        /**
932
         * Will return true if this style is selected.
933
         *
934
         * @param WMSStyle
935
         * @return true if this style is selected.
936
         */
937
        public boolean isSelected(WMSStyleData WMSStyle) {
938
            Iterator<WMSLayerNode> it = layerNodes.iterator();
939
            while (it.hasNext()) {
940
                WMSLayerNode node = it.next();
941
                if (node.getSelectedStyle().equals(WMSStyle)) {
942
                    return true;
943
                }
944
            }
945
            return false;
946
        }
947

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

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

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

    
1018
        @Override
1019
        public Object getRoot() {
1020
            return ToolsLocator.getI18nManager().getTranslation("_selected_layers");
1021
        }
1022

    
1023
        @Override
1024
        public int getChildCount(Object parent) {
1025
            int count = 0;
1026

    
1027
            if (parent.equals(getRoot())) {
1028
                count = layerNodes.size();
1029
            } else {
1030
                count = ((WMSLayerNode) parent).getStyles().size();
1031
            }
1032
            return count;
1033
        }
1034

    
1035
        @Override
1036
        public boolean isLeaf(Object node) {
1037
            return (node instanceof WMSStyleData);
1038
        }
1039

    
1040
        @Override
1041
        public Object getChild(Object parent, int index) {
1042
            if (parent instanceof WMSStyleData)
1043
                return null;
1044
            if (parent.equals(getRoot()))
1045
                return layerNodes.get(index);
1046

    
1047
            return ((WMSLayerNode) parent).getStyles().get(index);
1048
        }
1049

    
1050
        @Override
1051
        public int getIndexOfChild(Object parent, Object child) {
1052
            if (parent instanceof WMSStyleData) {
1053
                return -1;
1054
            }
1055

    
1056
            if (parent.equals(getRoot())) {
1057
                for (int i = 0; i < layerNodes.size(); i++) {
1058
                    if (layerNodes.get(i).equals(child)) {
1059
                        return i;
1060
                    }
1061
                }
1062
            } else {
1063
                WMSLayerNode node = (WMSLayerNode)parent;
1064
                for (int i = 0; i < node.getStyles().size(); i++) {
1065
                    if (node.getStyles().get(i).equals(child)) {
1066
                        return i;
1067
                    }
1068
                }
1069
            }
1070
            return -1; //
1071
        }
1072

    
1073
        @Override
1074
        public void addTreeModelListener(TreeModelListener l) {
1075
            // TODO Auto-generated method stub
1076

    
1077
        }
1078

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

    
1083
        }
1084

    
1085
        @Override
1086
        public void valueForPathChanged(TreePath path, Object newValue) {
1087
            // TODO Auto-generated method stub
1088

    
1089
        }
1090
    }
1091

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

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

    
1174
    private WMSRasterProviderParameters getProviderParameters() {
1175
        DataManager manager = DALLocator.getDataManager();
1176
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1177
        WMSRasterProviderParameters providerParameters = (WMSRasterProviderParameters) factory.createParameters();
1178
        List<String> layers = new ArrayList<String>(selectedLayers.size());
1179
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1180
            WMSLayerNode layer = iterator.next();
1181
            layers.add(layer.getName());
1182
        }
1183

    
1184
        providerParameters.setLayers(layers);
1185
        providerParameters.setFormat(format);
1186
        providerParameters.setInfoFormat(infoFormat);
1187
        providerParameters.setOverride(chkRefreshCache.isSelected());
1188
        providerParameters.setService((URL) serverExplorer.getParameters().getDynValue(
1189
            WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME));
1190
        List<String> styles = getStyles();
1191
        providerParameters.setStyles(styles);
1192
        providerParameters.setTransparency(chkTransparency.isSelected());
1193
        providerParameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1194

    
1195
        return providerParameters;
1196
    }
1197

    
1198
    private List<String> getStyles() {
1199
        List<String> styles = new ArrayList<>();
1200
        Iterator<WMSLayerNode> it = selectedLayers.iterator();
1201
        while (it.hasNext()) {
1202
            WMSLayerNode layerNode = it.next();
1203
            WMSStyleData selectedStyle = layerNode.getSelectedStyle();
1204
            if(selectedStyle==null){
1205
                styles.add("");
1206
            } else {
1207
                styles.add(selectedStyle.getName());
1208
            }
1209
        }
1210
        return styles;
1211
    }
1212

    
1213
    /**
1214
     * @param index
1215
     */
1216
    private void doDeselectLayerByIndex(int index) {
1217
        WMSLayerNode layerNode = selectedLayers.get(index);
1218
        selectedLayers.remove(layerNode);
1219
        updateLstLayers();
1220
    }
1221

    
1222
    @Override
1223
    public WMSLayerNode getParameters() {
1224
        WMSLayerNode wmsLayerNode = null;
1225
        if (chkMaintainLayersStruct.isSelected()) {
1226
            wmsLayerNode = serverExplorer.getListAsTree(true);
1227
            wmsLayerNode.removeChildren(new Invocable() {
1228

    
1229
                @Override
1230
                public Object call(Object... args) {
1231
                    WMSLayerNode node = (WMSLayerNode) args[0];
1232
                    if (node.isLeaf() && !selectedLayers.contains(node)) {
1233
                        return true;
1234
                    }
1235
                    return false;
1236
                }
1237
            });
1238

    
1239
            wmsLayerNode.removeEmptyFolders();
1240

    
1241
            fillParametersInTree(wmsLayerNode);
1242

    
1243
        } else {
1244
            wmsLayerNode = serverExplorer.getListAsTree(true);
1245
            wmsLayerNode = findLeaf(wmsLayerNode);
1246
            //FIXME: ?if wmsLayerNode == null?
1247
            fillParametersInUniqueNode(wmsLayerNode);
1248
        }
1249
        if(wmsLayerNode!=null){
1250
            wmsLayerNode.setTitle(txtLayerName.getText());
1251
        }
1252
        return wmsLayerNode;
1253
    }
1254

    
1255
    private WMSLayerNode findLeaf(WMSLayerNode node){
1256
        if(node.isLeaf()){
1257
            return node;
1258
        }
1259
        for (int i=0; i<node.getChildCount(); i++) {
1260
            WMSLayerNode child = (WMSLayerNode) node.getChildAt(i);
1261
            return findLeaf(child);
1262
        }
1263
        return null;
1264
    }
1265

    
1266
    private void fillParametersInTree(WMSLayerNode wmsLayerNode) {
1267
        if(wmsLayerNode.isLeaf()){
1268
            if(selectedLayers.contains(wmsLayerNode)){
1269
                int index = selectedLayers.indexOf(wmsLayerNode);
1270
                WMSRasterProviderParameters parameters = (WMSRasterProviderParameters) wmsLayerNode.getParameters();
1271

    
1272
                parameters.setFormat(format);
1273
                parameters.setInfoFormat(infoFormat);
1274
                parameters.setOverride(chkRefreshCache.isSelected());
1275
                String style = getStyles().get(index);
1276
                List<String> styles = new ArrayList<>();
1277
                styles.add(style);
1278
                parameters.setStyles(styles);
1279
                parameters.setTransparency(chkTransparency.isSelected());
1280
                parameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1281

    
1282
                try {
1283
                    IProjection crs = CRSFactory.getCRS(projection);
1284
                    parameters.setCRS(crs);
1285
                } catch (Exception e) {
1286
                    logger.info("Can't get crs from: '" + projection + "' code", e);
1287
                }
1288

    
1289
            }
1290
        } else {
1291
            for(int i=0; i<wmsLayerNode.getChildCount(); i++){
1292
                fillParametersInTree((WMSLayerNode) wmsLayerNode.getChildAt(i));
1293
            }
1294
        }
1295
    }
1296

    
1297
    private WMSLayerNode fillParametersInUniqueNode(WMSLayerNode node) {
1298

    
1299
        WMSRasterProviderParameters parameters = (WMSRasterProviderParameters) node.getParameters();
1300
        List<String> layers = new ArrayList<String>(selectedLayers.size());
1301
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1302
            String name = ((WMSLayerNode) iterator.next()).getName();
1303
            layers.add(name);
1304
        }
1305

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

    
1321
        return node;
1322
    }
1323

    
1324
    @Override
1325
    public boolean isTiled() {
1326
        return chkLocalCache.isSelected();
1327
    }
1328

    
1329
    @Override
1330
    public boolean refreshLocalCache() {
1331
        return chkRefreshLocalCache.isSelected();
1332
    }
1333
}