Statistics
| Revision:

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

History | View | Annotate | Download (57.9 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.raster.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.JComponent;
39
import javax.swing.JLabel;
40
import javax.swing.JPanel;
41
import javax.swing.JRadioButton;
42
import javax.swing.JTable;
43
import javax.swing.JTextArea;
44
import javax.swing.JTree;
45
import javax.swing.ListSelectionModel;
46
import javax.swing.SwingUtilities;
47
import javax.swing.event.ListSelectionEvent;
48
import javax.swing.event.ListSelectionListener;
49
import javax.swing.event.TableModelEvent;
50
import javax.swing.event.TableModelListener;
51
import javax.swing.event.TreeModelListener;
52
import javax.swing.table.DefaultTableModel;
53
import javax.swing.table.TableCellRenderer;
54
import javax.swing.tree.DefaultTreeCellRenderer;
55
import javax.swing.tree.DefaultTreeModel;
56
import javax.swing.tree.TreeModel;
57
import javax.swing.tree.TreeNode;
58
import javax.swing.tree.TreePath;
59

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

    
65
import org.gvsig.fmap.crs.CRSFactory;
66
import org.gvsig.fmap.dal.DALLocator;
67
import org.gvsig.fmap.dal.DataManager;
68
import org.gvsig.fmap.dal.DataServerExplorerParameters;
69
import org.gvsig.fmap.dal.DataServerExplorerPool;
70
import org.gvsig.fmap.dal.DataServerExplorerPoolEntry;
71
import org.gvsig.fmap.dal.DataStoreParameters;
72
import org.gvsig.fmap.dal.DataStoreProviderFactory;
73
import org.gvsig.raster.wms.provider.LayerNode;
74
import org.gvsig.raster.wms.provider.LayerNode.Style;
75
import org.gvsig.raster.wms.provider.WMSRasterProviderParameters;
76
import org.gvsig.raster.wms.provider.WMSRasterServerExplorer;
77
import org.gvsig.raster.wms.provider.WMSRasterServerExplorerParameters;
78
import org.gvsig.raster.wms.swing.api.WMSParametersPanel;
79
import org.gvsig.tools.ToolsLocator;
80
import org.gvsig.tools.dispose.DisposeUtils;
81
import org.gvsig.tools.dynobject.DynObject;
82
import org.gvsig.tools.i18n.I18nManager;
83
import org.gvsig.tools.swing.api.ToolsSwingLocator;
84
import org.gvsig.tools.swing.icontheme.IconTheme;
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;
107
    private String infoFormat;
108
    private List<LayerNode> selectedLayers;
109
    private String projection = "";
110
    private Thread connectionThread;
111

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

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

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

    
133
        cboServerList.setToolTipText(i18nManager.getTranslation(cboServerList.getToolTipText()));
134

    
135
        lblUser.setText(i18nManager.getTranslation(lblUser.getText()));
136
        lblUser.setToolTipText(i18nManager.getTranslation(lblUser.getToolTipText()));
137

    
138
        txtUser.setToolTipText(i18nManager.getTranslation(txtUser.getToolTipText()));
139

    
140
        lblPassword.setText(i18nManager.getTranslation(lblPassword.getText()));
141
        lblPassword.setToolTipText(i18nManager.getTranslation(lblPassword.getToolTipText()));
142

    
143
        txtPassword.setToolTipText(i18nManager.getTranslation(txtPassword.getToolTipText()));
144

    
145
        chkRefreshCache.setText(i18nManager.getTranslation(chkRefreshCache.getText()));
146
        chkRefreshCache.setToolTipText(i18nManager.getTranslation(chkRefreshCache.getToolTipText()));
147

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

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

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

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

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

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

    
166
        // Tab layers
167
        lblLayerName.setText(i18nManager.getTranslation(lblLayerName.getText()));
168
        lblLayerName.setToolTipText(i18nManager.getTranslation(lblLayerName.getToolTipText()));
169

    
170
        txtLayerName.setToolTipText(i18nManager.getTranslation(txtLayerName.getToolTipText()));
171

    
172
        lblSelectLayers.setText(i18nManager.getTranslation(lblSelectLayers.getText()));
173
        lblSelectLayers.setToolTipText(i18nManager.getTranslation(lblSelectLayers.getToolTipText()));
174

    
175
        treeLayersSelector.setToolTipText(i18nManager.getTranslation(treeLayersSelector.getToolTipText()));
176

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

    
179
        btnAddLayer.setText(""); // btnAddLayer.getText()));
180
        btnAddLayer.setToolTipText(i18nManager.getTranslation(btnAddLayer.getToolTipText()));
181

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

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

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

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

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

    
197
        // Tab styles
198
        treeStyles.setToolTipText(i18nManager.getTranslation(treeStyles.getToolTipText()));
199

    
200
        // Tab dimensions
201
        lblSettings.setText(i18nManager.getTranslation(lblSettings.getText()));
202
        lblSettings.setToolTipText(i18nManager.getTranslation(lblSettings.getToolTipText()));
203

    
204
        tblDimensionsSettings.setToolTipText(i18nManager.getTranslation(tblDimensionsSettings.getToolTipText()));
205

    
206
        lblSettingsEditor.setText(i18nManager.getTranslation(lblSettingsEditor.getText()));
207
        lblSettingsEditor.setToolTipText(i18nManager.getTranslation(lblSettingsEditor.getToolTipText()));
208

    
209
        tblDimensions.setToolTipText(i18nManager.getTranslation(tblDimensions.getToolTipText()));
210

    
211
        lblValue.setText(i18nManager.getTranslation(lblValue.getText()));
212
        lblValue.setToolTipText(i18nManager.getTranslation(lblValue.getToolTipText()));
213

    
214
        lblFieldValue.setText("");
215
        lblFieldValue.setToolTipText(i18nManager.getTranslation(lblFieldValue.getToolTipText()));
216

    
217
        sldValues.setToolTipText(i18nManager.getTranslation(sldValues.getToolTipText()));
218

    
219
        btnFirst.setText(""); // btnFirst.getText()));
220
        btnFirst.setToolTipText(i18nManager.getTranslation(btnFirst.getToolTipText()));
221

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

    
225
        txtDimensionNumber.setToolTipText(i18nManager.getTranslation(txtDimensionNumber.getToolTipText()));
226

    
227
        btnNext.setText(""); // btnNext.getText()));
228
        btnNext.setToolTipText(i18nManager.getTranslation(btnNext.getToolTipText()));
229

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

    
233
        rdbSimpleValue.setText(i18nManager.getTranslation(rdbSimpleValue.getText()));
234
        rdbSimpleValue.setToolTipText(i18nManager.getTranslation(rdbSimpleValue.getToolTipText()));
235

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

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

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

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

    
248
        txtSetting.setToolTipText(i18nManager.getTranslation(txtSetting.getToolTipText()));
249

    
250
        btnSet.setText(i18nManager.getTranslation(btnSet.getText()));
251
        btnSet.setToolTipText(i18nManager.getTranslation(btnSet.getToolTipText()));
252

    
253
        // Tab formats
254
        lblFormats.setText(i18nManager.getTranslation(lblFormats.getText()));
255
        lblFormats.setToolTipText(i18nManager.getTranslation(lblFormats.getToolTipText()));
256

    
257
        tblFormats.setToolTipText(i18nManager.getTranslation(tblFormats.getToolTipText()));
258

    
259
        chkTransparency.setText(i18nManager.getTranslation(chkTransparency.getText()));
260
        chkTransparency.setToolTipText(i18nManager.getTranslation(chkTransparency.getToolTipText()));
261

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

    
265
        tblProjections.setToolTipText(i18nManager.getTranslation(tblProjections.getToolTipText()));
266

    
267
        lblInfoFormat.setText(i18nManager.getTranslation(lblInfoFormat.getText()));
268
        lblInfoFormat.setToolTipText(i18nManager.getTranslation(lblInfoFormat.getToolTipText()));
269

    
270
        tblInfoFormats.setToolTipText(i18nManager.getTranslation(tblInfoFormats.getToolTipText()));
271

    
272
    }
273

    
274
    private void initComponents() {
275
        fillConnections();
276

    
277
        IconTheme iconTheme = ToolsSwingLocator.getIconThemeManager().getCurrent();
278

    
279
        this.btnAddLayer.setIcon(iconTheme.get("add-layer-icon"));
280
        this.btnRemoveLayer.setIcon(iconTheme.get("remove-layer-icon"));
281
        this.btnDownLayer.setIcon(iconTheme.get("down-layer-icon"));
282
        this.btnUpLayer.setIcon(iconTheme.get("up-layer-icon"));
283

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

    
289
        this.btnConnect.addActionListener(new ActionListener() {
290

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

    
297
        this.btnCancel.addActionListener(new ActionListener() {
298

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

    
305
        tblFormats.setTableHeader(null);
306
        tblInfoFormats.setTableHeader(null);
307

    
308
        initializeTreeLayerSelector();
309
        initializeTblLayers();
310
        initializeTblProjections();
311
        initializeTreeStyles();
312
//        initializeTblDimensions();
313

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

    
317
            @Override
318
            public void actionPerformed(ActionEvent e) {
319
                LayerNode node =
320
                    (LayerNode) treeLayersSelector.getLastSelectedPathComponent();
321
                if (node == null)
322
                    return;
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 selectedRow = tblLayers.getSelectedRow();
335
                doRemoveRow(selectedRow);
336
                int toSelectRow = Math.min(selectedRow, tblLayers.getRowCount() - 1);
337
                tblLayers.getSelectionModel().setSelectionInterval(toSelectRow, toSelectRow);
338
            }
339
        });
340

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

    
344
            @Override
345
            public void actionPerformed(ActionEvent e) {
346
                DefaultTableModel model = (DefaultTableModel) tblLayers.getModel();
347
                int selectedRow = tblLayers.getSelectedRow();
348
                if (selectedRow > 0) {
349
                    Collections.swap(selectedLayers, selectedRow, selectedRow - 1);
350
                }
351
                updateTblLayers();
352
                tblLayers.getSelectionModel().setSelectionInterval(selectedRow - 1, selectedRow - 1);
353
            }
354
        });
355

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

    
359
            @Override
360
            public void actionPerformed(ActionEvent e) {
361
                DefaultTableModel model = (DefaultTableModel) tblLayers.getModel();
362
                int selectedRow = tblLayers.getSelectedRow();
363
                if (selectedRow < tblLayers.getRowCount() - 1) {
364
                    Collections.swap(selectedLayers, selectedRow, selectedRow + 1);
365
                }
366
                updateTblLayers();
367
                tblLayers.getSelectionModel().setSelectionInterval(selectedRow + 1, selectedRow + 1);
368
            }
369
        });
370

    
371
        this.chkShowLayerNames.addActionListener(new ActionListener() {
372

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

    
379
        updateComponents();
380

    
381
    }
382

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

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

    
393
    public void putParameters(DynObject parameters) {
394
        // TODO:
395
    }
396

    
397
    public void fetchParameters(DynObject parameters) {
398

    
399
    }
400

    
401
    @Override
402
    public List<WMSParametersEntry> getParametersList() {
403
        parameterList = new ArrayList<WMSParametersEntry>();
404
        if(chkMaintainLayersStruct.isSelected()){
405
            final LayerNode layerNode = (LayerNode) this.serverExplorer.getTreeNode();
406
            if(anyChildrenIsSelected(layerNode)){
407
                final WMSParametersEntry rootEntry = new WMSParametersEntry() {
408
                    @Override
409
                    public WMSParametersEntry getParent() {
410
                        return null;
411
                    }
412
                    @Override
413
                    public DataStoreParameters getParameters() {
414
                        return null;
415
                    }
416
                    @Override
417
                    public String getName() {
418
                        return txtLayerName.getText();
419
                    }
420
                };
421
                if (selectedLayers.contains(layerNode)) {
422
                    WMSParametersEntry layerEntry = new WMSParametersEntry() {
423

    
424
                        @Override
425
                        public WMSParametersEntry getParent() {
426
                            return rootEntry;
427
                        }
428

    
429
                        @Override
430
                        public DataStoreParameters getParameters() {
431
                            WMSRasterProviderParameters parameters = getProviderParameters(layerNode);
432
                            try {
433
                                IProjection crs = CRSFactory.getCRS(projection);
434
                                parameters.setCRS(crs);
435
                            } catch (Exception e) {
436
                                logger.info("Can't get crs from: '" + projection + "' code", e);
437
                            }
438
                            return null;
439
                        }
440

    
441
                        @Override
442
                        public String getName() {
443
                            return layerNode.getName();
444
                        }
445
                    };
446
                    parameterList.add(layerEntry);
447

    
448
                } else {
449
                    addChildrenParametersEntries(layerNode, rootEntry);
450
                }
451

    
452

    
453
//            } else {
454
//                if(selectedLayers.contains(new LayerNode(rootLayer))){
455
//                    WMSParametersEntry layerEntry = new WMSParametersEntry() {
456
//                        @Override
457
//                        public WMSParametersEntry getParent() {
458
//                            return parent;
459
//                        }
460
//                        @Override
461
//                        public DataStoreParameters getParameters() {
462
//                            WMSRasterProviderParameters parameters = getProviderParameters(rootLayer);
463
//                            try{
464
//                                IProjection crs=CRSFactory.getCRS(projection);
465
//                                parameters.setCRS(crs);
466
//                            }catch(Exception e){
467
//                                logger.info("Can't get crs from: '"+projection+"' code", e);
468
//                            }
469
//                            return null;
470
//                        }
471
//                        @Override
472
//                        public String getName() {
473
//                            return rootLayer.getName();
474
//                        }
475
//                    };
476
//                    parameterList.add(layerEntry);
477
//                }
478
            }
479
        } else {
480

    
481
            WMSParametersEntry entry = new WMSParametersEntry() {
482
                @Override
483
                public WMSParametersEntry getParent() {
484
                    return null;
485
                }
486
                @Override
487
                public DataStoreParameters getParameters() {
488
                    WMSRasterProviderParameters parameters = getProviderParameters();
489
                    try{
490
                        IProjection crs=CRSFactory.getCRS(projection);
491
                        parameters.setCRS(crs);
492
                    }catch(Exception e){
493
                        logger.info("Can't get crs from: '"+projection+"' code", e);
494
                    }
495
                    return parameters;
496
                }
497

    
498
                @Override
499
                public String getName() {
500
                    return txtLayerName.getText();
501
                }
502
            };
503
            parameterList.add(entry);
504
        }
505

    
506
        return parameterList;
507
    }
508

    
509
    /**
510
     * @param layerNode
511
     * @param rootEntry
512
     */
513
    private void addChildrenParametersEntries(final LayerNode layerNode, final WMSParametersEntry parent) {
514
        parameterList.add(parent);
515
        WMSParametersEntry folderEntry = new WMSParametersEntry() {
516
            @Override
517
            public WMSParametersEntry getParent() {
518
                return parent;
519
            }
520
            @Override
521
            public DataStoreParameters getParameters() {
522
                return null;
523
            }
524
            @Override
525
            public String getName() {
526
                return layerNode.getName();
527
            }
528
        };
529
        parameterList.add(folderEntry);
530
    }
531

    
532
//    private List<WMSParametersEntry> addChildrenToParent(final WMSParametersEntry parent, List<WMSLayer> children) {
533
//        List<WMSParametersEntry> entries = new ArrayList<WMSParametersEntry>();
534
//        for (Iterator<WMSLayer> iterator = children.iterator(); iterator.hasNext();) {
535
//            final WMSLayer wmsLayer = (WMSLayer) iterator.next();
536
//            ArrayList<WMSLayer> grandchildren = wmsLayer.getChildren();
537
//
538
//            if (grandchildren != null && grandchildren.size() >= 0 && anyChildrenIsSelected(grandchildren)) {
539
//                WMSParametersEntry folderEntry = new WMSParametersEntry() {
540
//
541
//                    @Override
542
//                    public WMSParametersEntry getParent() {
543
//                        return parent;
544
//                    }
545
//
546
//                    @Override
547
//                    public DataStoreParameters getParameters() {
548
//                        return null;
549
//                    }
550
//
551
//                    @Override
552
//                    public String getName() {
553
//                        return wmsLayer.getName();
554
//                    }
555
//                };
556
//                entries.add(folderEntry);
557
//                entries.addAll(addChildrenToParent(parent, grandchildren));
558
//
559
//            } else {
560
//                if (selectedLayers.contains(new LayerNode(wmsLayer))) {
561
//                    WMSParametersEntry layerEntry = new WMSParametersEntry() {
562
//
563
//                        @Override
564
//                        public WMSParametersEntry getParent() {
565
//                            return parent;
566
//                        }
567
//
568
//                        @Override
569
//                        public DataStoreParameters getParameters() {
570
//                            WMSRasterProviderParameters parameters = getProviderParameters(wmsLayer);
571
//                            try {
572
//                                IProjection crs = CRSFactory.getCRS(projection);
573
//                                parameters.setCRS(crs);
574
//                            } catch (Exception e) {
575
//                                logger.info("Can't get crs from: '" + projection + "' code", e);
576
//                            }
577
//                            return null;
578
//                        }
579
//
580
//                        @Override
581
//                        public String getName() {
582
//                            return wmsLayer.getName();
583
//                        }
584
//                    };
585
//                    entries.add(layerEntry);
586
//                }
587
//            }
588
//        }
589
//        return entries;
590
//    }
591

    
592
//    private boolean anyChildrenIsSelected(List<WMSLayer> children){
593
//        if(children.size()==0){
594
//            return false;
595
//        }
596
//        boolean result = false;
597
//        for (Iterator<WMSLayer> iterator = children.iterator(); iterator.hasNext();) {
598
//            WMSLayer wmsLayer = (WMSLayer) iterator.next();
599
//            if(selectedLayers.contains(new LayerNode(wmsLayer))){
600
//                return true;
601
//            }
602
//            ArrayList grandchildren = wmsLayer.getChildren();
603
//            if(grandchildren!=null && grandchildren.size()>0){
604
//                result = result || anyChildrenIsSelected(grandchildren);
605
//                if(result){
606
//                    return true;
607
//                }
608
//            }
609
//        }
610
//        return result;
611
//    }
612

    
613
    private boolean anyChildrenIsSelected(LayerNode node){
614
        if(node.getChildCount()==0){
615
            return false;
616
        }
617
        boolean result = false;
618
        for (int i=0; i<node.getChildCount(); i++){
619
            LayerNode child = (LayerNode) node.getChildAt(i);
620
            if(selectedLayers.contains(child)){
621
                return true;
622
            }
623
            result = result || anyChildrenIsSelected(child);
624
            if(result){
625
                return true;
626
            }
627
        }
628
        return result;
629
    }
630

    
631

    
632
    private void doConnect() {
633
        final String selectedItem = (String) cboServerList.getSelectedItem();
634
        if (StringUtils.isEmpty(selectedItem)) {
635
            return;
636
        }
637

    
638
        btnConnect.setEnabled(false);
639
        btnCancel.setEnabled(true);
640

    
641
        connectionThread = new Thread(new Runnable() {
642

    
643
            @Override
644
            public void run() {
645
                DataManager manager = DALLocator.getDataManager();
646
                final DataServerExplorerParameters parameters;
647
                try {
648
                    parameters = manager.createServerExplorerParameters("WMS");
649
                    parameters.setDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME, new URL(
650
                        selectedItem)); // "service"
651
                    parameters.setDynValue(WMSRasterServerExplorerParameters.WMS_OVERRIDE_CAPABILITIES_PARAMETER_NAME,
652
                        chkRefreshCache.isSelected()); // "override_capabilities"
653

    
654
                    final WMSRasterServerExplorer serverExplorer =
655
                        (WMSRasterServerExplorer) manager.openServerExplorer("WMS", parameters);
656

    
657
                    // List layers = serverExplorer.list();
658

    
659
                    SwingUtilities.invokeLater(new Runnable() {
660

    
661
                        @Override
662
                        public void run() {
663
//                            if(Thread.interrupted()){
664
//                                return;
665
//                            }
666
                            setServerExplorer(serverExplorer);
667
                            DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
668

    
669
                            pool.add(((URL) parameters
670
                                .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString(),
671
                                serverExplorer.getParameters());
672

    
673
                        }
674
                    });
675
                } catch (Exception e) {
676
                    // FIXME: ?Mostrar di?logo para preguntar si se desea
677
                    // eliminar el servidor del pool de servidores en caso de
678
                    // existir ah??
679
                    setServerExplorer(null);
680
                }
681

    
682
            }
683
        }, "WMSConnection");
684
        connectionThread.start();
685
        try {
686
            Thread.sleep(2);
687
        } catch (InterruptedException e) {
688
        }
689
    }
690

    
691

    
692
    protected void doCancelConnection() {
693
//        if(connectionThread != null && connectionThread.isAlive()){
694
//            connectionThread.interrupt();
695
//        }
696
    }
697

    
698

    
699
    private void setServerExplorer(WMSRasterServerExplorer serverExplorer) {
700
        this.serverExplorer = serverExplorer;
701

    
702
        this.updateComponents();
703

    
704
        List<String> formats = this.serverExplorer.getFormats();
705
        List<String> infoFormats = this.serverExplorer.getInfoFormats();
706

    
707
        LayerNode layerNode = (LayerNode) this.serverExplorer.getTreeNode();
708
        txtLayerName.setText(layerNode.getTitle());
709
        fillLayers(layerNode);
710
        fillFormats(formats);
711
        format = "";
712
        fillInfoFormats(infoFormats);
713
        infoFormat = "";
714

    
715
        txtInformation.setText(serverExplorer.getInfoString());
716

    
717
        tabWMS.setEnabledAt(4, true);
718
    }
719

    
720

    
721

    
722
    private void updateComponents() {
723

    
724
        if (serverExplorer == null) {
725
            cboServerList.setEnabled(true);
726
            txtUser.setEnabled(true);
727
            txtPassword.setEnabled(true);
728
            chkRefreshCache.setEnabled(true);
729
            btnConnect.setEnabled(true);
730
            btnCancel.setEnabled(false);
731

    
732
            chkLocalCache.setEnabled(false);
733
            chkAxisOrderXY.setEnabled(false);
734
            txtInformation.setEnabled(false);
735

    
736
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, false);
737
            tabWMS.setEnabledAt(TAB_STYLES_INDEX, false);
738
            tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, false);
739
            tabWMS.setEnabledAt(TAB_FORMATS_INDEX, false);
740
        } else {
741
            cboServerList.setEnabled(false);
742
            txtUser.setEnabled(false);
743
            txtPassword.setEnabled(false);
744
            chkRefreshCache.setEnabled(false);
745
            btnConnect.setEnabled(false);
746
            btnCancel.setEnabled(false);
747

    
748
            chkLocalCache.setEnabled(true);
749
            chkAxisOrderXY.setEnabled(true);
750
            txtInformation.setEnabled(true);
751

    
752
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, true);
753
            // tabWMS.setEnabledAt(TAB_STYLES_INDEX, true); //habilitar cuando
754
            // tengamos capas seleccionadas
755
            // tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, false); //habilitar
756
            // cuando el servidor proporcione dimensiones
757
            // tabWMS.setEnabledAt(TAB_FORMATS_INDEX, true); //habilitar cuando
758
            // tengamos capas seleccionadas
759
        }
760

    
761
    }
762

    
763
    // /**
764
    // *
765
    // */
766
    // private void disableControlsWhileConnecting(boolean disable) {
767
    // btnConnect.setEnabled(disable);
768
    // btnCancel.setEnabled(!disable);
769
    // chkLocalCache.setEnabled(disable);
770
    // chkRefreshCache.setEnabled(disable);
771
    // chkAxisOrderXY.setEnabled(disable);
772
    // tabWMS.setEnabledAt(1, disable);
773
    // tabWMS.setEnabledAt(2, disable);
774
    // tabWMS.setEnabledAt(3, disable);
775
    // tabWMS.setEnabledAt(4, disable);
776
    // }
777

    
778
    private void fillConnections() {
779
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
780

    
781
        DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
782
        Iterator it = pool.iterator();
783
        while (it.hasNext()) {
784
            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
785
            DataServerExplorerParameters parameters = entry.getExplorerParameters();
786
            if (parameters instanceof WMSRasterServerExplorerParameters) {
787
                model.addElement(((URL) parameters
788
                    .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString());
789
            }
790
        }
791

    
792
        this.cboServerList.setModel(model);
793
    }
794

    
795
    private void fillFormats(List<String> formats) {
796
        I18nManager i18nManager = ToolsLocator.getI18nManager();
797

    
798
        final DefaultTableModel model = new DefaultTableModel() {
799

    
800
            /**
801
             *
802
             */
803
            private static final long serialVersionUID = -2273311852914196497L;
804

    
805
            @Override
806
            public boolean isCellEditable(int row, int column) {
807
                return false;
808
            }
809
        };
810
        model.addColumn(i18nManager.getTranslation("_format"));
811
        for (Iterator<String> iterator = formats.iterator(); iterator.hasNext();) {
812
            String row[] = { iterator.next() };
813
            model.addRow(row);
814
        }
815
        tblFormats.setRowSelectionAllowed(true);
816
        tblFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
817
        tblFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
818
            @Override
819
            public void valueChanged(ListSelectionEvent e) {
820
                int index = tblFormats.getSelectedRow();
821
                format = (String) model.getValueAt(index, 0);
822
            }
823
        });
824
        tblFormats.setModel(model);
825
    }
826

    
827
    private void fillInfoFormats(List<String> infoFormats) {
828
        I18nManager i18nManager = ToolsLocator.getI18nManager();
829

    
830
        final DefaultTableModel model = new DefaultTableModel() {
831

    
832
            @Override
833
            public boolean isCellEditable(int row, int column) {
834
                return false;
835
            }
836
        };
837
        model.addColumn(i18nManager.getTranslation("_format"));
838
        for (Iterator<String> iterator = infoFormats.iterator(); iterator.hasNext();) {
839
            String row[] = { iterator.next() };
840
            model.addRow(row);
841
        }
842
        tblInfoFormats.setRowSelectionAllowed(true);
843
        tblInfoFormats.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
844
        tblInfoFormats.getSelectionModel().addListSelectionListener(new ListSelectionListener() {
845

    
846
            @Override
847
            public void valueChanged(ListSelectionEvent e) {
848
                // int index = e.getFirstIndex();
849
                int index = tblInfoFormats.getSelectedRow();
850
                infoFormat = (String) model.getValueAt(index, 0);
851
            }
852
        });
853
        tblInfoFormats.setModel(model);
854
    }
855

    
856
//    private void fillLayers(WMSLayer rootLayer) {
857
//
858
//        DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootLayer);
859
//        TreeModel treeModel = new DefaultTreeModel(root, true);
860
//
861
//        addChildrenToParent(root, rootLayer.getChildren());
862
//
863
//        treeLayersSelector.setModel(treeModel);
864
//    }
865

    
866
    private void fillLayers(TreeNode node) {
867
        TreeModel treeModel = new DefaultTreeModel(node, true);
868
        treeLayersSelector.setModel(treeModel);
869
    }
870

    
871
    /**
872
     *
873
     */
874
    private void initializeTreeLayerSelector() {
875
        treeLayersSelector.setCellRenderer(new DefaultTreeCellRenderer() {
876

    
877
            /**
878
             *
879
             */
880
            private static final long serialVersionUID = -6800758982020754819L;
881

    
882
            @Override
883
            public Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected, boolean expanded,
884
                boolean leaf, int row, boolean hasFocus) {
885
                Component comp = super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
886
                String text;
887
                if (value instanceof LayerNode) {
888
                    LayerNode layerNode = (LayerNode) value;
889
                    if (!chkShowLayerNames.isSelected()) {
890
                        text = layerNode.getTitle();
891
                    } else {
892
                        text = layerNode.toString();
893
                    }
894
                    setText(text);
895
                }
896
                return comp;
897
            }
898
        });
899

    
900

    
901
        treeLayersSelector.addMouseListener(new MouseAdapter() {
902

    
903
            public void mouseClicked(MouseEvent e) {
904
                if (e.getClickCount() == 1) {
905
                    LayerNode node = (LayerNode) treeLayersSelector.getLastSelectedPathComponent();
906
                    btnAddLayer.setEnabled(node != null && node.isLeaf());
907
                } else if (e.getClickCount() == 2) {
908
                    LayerNode node =
909
                        (LayerNode) treeLayersSelector.getLastSelectedPathComponent();
910
                    if (node == null)
911
                        return;
912
                    if (node.isLeaf()) {
913
                        doSelectLayer(node);
914
                    }
915
                    // Cast nodeInfo to your object and do whatever you want
916
                }
917
            }
918
        });
919
    }
920

    
921
    protected void doSelectLayer(Object selected) {
922
        if (selected instanceof LayerNode) {
923
            LayerNode node = (LayerNode) selected;
924
            if (selectedLayers.contains(node)) {
925
                return;
926
            }
927
            selectedLayers.add(node);
928
            updateTblLayers();
929
        }
930
    }
931

    
932
    private void initializeTblLayers() {
933
        I18nManager i18nManager = ToolsLocator.getI18nManager();
934

    
935
        final DefaultTableModel model = new DefaultTableModel() {
936
            /**
937
             *
938
             */
939
            private static final long serialVersionUID = 5394714242469903391L;
940

    
941
            @Override
942
            public boolean isCellEditable(int row, int column) {
943
                return false;
944
            }
945
        };
946

    
947
        model.addColumn(i18nManager.getTranslation("_layers"));
948
        tblLayers.setRowSelectionAllowed(true);
949
        tblLayers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
950

    
951
        model.addTableModelListener(new TableModelListener() {
952
            @Override
953
            public void tableChanged(TableModelEvent e) {
954
                updateTblProjections();
955
            }
956
        });
957

    
958
        tblLayers.addMouseListener(new MouseAdapter() {
959
            public void mouseClicked(MouseEvent e) {
960
                if (e.getClickCount() == 2) {
961
                    doRemoveRow(tblLayers.getSelectedRow());
962
                }
963
            }
964
        });
965

    
966
        final ListSelectionModel selectionModel = tblLayers.getSelectionModel();
967
        selectionModel.addListSelectionListener(new ListSelectionListener() {
968
            @Override
969
            public void valueChanged(ListSelectionEvent e) {
970
                btnRemoveLayer.setEnabled(!selectionModel.isSelectionEmpty());
971
                btnUpLayer.setEnabled(!selectionModel.isSelectionEmpty() && selectionModel.getMinSelectionIndex() > 0);
972
                btnDownLayer.setEnabled(!selectionModel.isSelectionEmpty()
973
                    && selectionModel.getMaxSelectionIndex() < tblLayers.getRowCount() - 1);
974
            }
975
        });
976

    
977
        tblLayers.setDefaultRenderer(Object.class, new TableCellRenderer() {
978

    
979
            JTextArea comp = new JTextArea();
980

    
981
            @Override
982
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
983
                boolean hasFocus, int row, int column) {
984

    
985
                if (value instanceof LayerNode) {
986
                    LayerNode node = (LayerNode) value;
987
                    String text = "";
988
                    if (!chkShowLayerNames.isSelected()) {
989
                        text = node.getTitle();
990
                    } else {
991
                        text = node.toString();
992
                    }
993
                    comp.setText(text);
994
                }
995
                if (isSelected) {
996
                    comp.setBackground(table.getSelectionBackground());
997
                    comp.setForeground(table.getSelectionForeground());
998
                } else {
999
                    comp.setBackground(table.getBackground());
1000
                    comp.setForeground(table.getForeground());
1001
                }
1002
                return comp;
1003
            }
1004
        });
1005
        tblLayers.setModel(model);
1006
    }
1007

    
1008
    private void updateTblLayers() {
1009
        DefaultTableModel model = (DefaultTableModel) tblLayers.getModel();
1010
        model.setRowCount(0);
1011
        for (Iterator<LayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1012
            LayerNode row[] = { iterator.next() }; // .getLayer()};
1013
            model.addRow(row);
1014
        }
1015
        updateTblProjections();
1016
        updateTreeStyles();
1017
//        updateTblDimensions();
1018
    }
1019

    
1020
//    private void addChildrenToParent(DefaultMutableTreeNode root, List<Object> children) {
1021
//        if (children != null && children.size() > 0) {
1022
//            for (Object sourceChild : children) {
1023
//                boolean isFolder = false;
1024
//                List<Object> grandChildren = null;
1025
//                if (sourceChild instanceof WMSLayer) {
1026
//                    grandChildren = ((WMSLayer) sourceChild).getChildren();
1027
//                    isFolder = grandChildren.size() > 0;
1028
//                }
1029
//                DefaultMutableTreeNode child = new DefaultMutableTreeNode(sourceChild, isFolder);
1030
//                root.add(child);
1031
//                if (isFolder) {
1032
//                    addChildrenToParent(child, grandChildren);
1033
//                }
1034
//            }
1035
//        }
1036
//    }
1037

    
1038
    private void initializeTblProjections() {
1039
        I18nManager i18nManager = ToolsLocator.getI18nManager();
1040

    
1041
        final DefaultTableModel model = new DefaultTableModel() {
1042

    
1043
            /**
1044
             *
1045
             */
1046
            private static final long serialVersionUID = -5717754330064587085L;
1047
            @Override
1048
            public boolean isCellEditable(int row, int column) {
1049
                return false;
1050
            }
1051
        };
1052

    
1053
        model.addColumn(i18nManager.getTranslation("_projections"));
1054

    
1055
        tblProjections.setTableHeader(null);
1056
        tblProjections.setRowSelectionAllowed(true);
1057
        tblProjections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
1058

    
1059
        model.addTableModelListener(new TableModelListener() {
1060
            @Override
1061
            public void tableChanged(TableModelEvent e) {
1062
                boolean found = false;
1063
                for(int row=0; row<tblProjections.getRowCount(); row++){
1064
                    if(projection.equals((String) model.getValueAt(row, 0))){
1065
                        tblProjections.getSelectionModel().setSelectionInterval(row, row);
1066
                        found = true;
1067
                        break;
1068
                    }
1069
                }
1070
                if(!found){
1071
                    projection = "";
1072
                }
1073
            }
1074
        });
1075

    
1076
        ListSelectionModel selectionModel = tblProjections.getSelectionModel();
1077
        selectionModel.addListSelectionListener(new ListSelectionListener() {
1078
            @Override
1079
            public void valueChanged(ListSelectionEvent e) {
1080
                int selectedRow = tblProjections.getSelectedRow();
1081
                if (selectedRow < 0 || selectedRow > tblProjections.getRowCount()) {
1082
                    projection = "";
1083
                } else {
1084
                    projection = (String) model.getValueAt(selectedRow, 0);
1085
                }
1086
            }
1087
        });
1088

    
1089
        tblProjections.setModel(model);
1090
    }
1091

    
1092
    private void updateTblProjections() {
1093

    
1094
        WMSRasterProviderParameters providerParameters = getProviderParameters();
1095
        DataManager manager = DALLocator.getDataManager();
1096
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1097

    
1098
        List<String> srss = serverExplorer.getSrss(providerParameters);
1099
        DefaultTableModel model = (DefaultTableModel) tblProjections.getModel();
1100
        model.setRowCount(0);
1101
        int index = 0;
1102
        for (Iterator<String> iterator = srss.iterator(); iterator.hasNext();) {
1103
            String row[] = { iterator.next() };
1104
            model.addRow(row);
1105
            index++;
1106
        }
1107
    }
1108

    
1109
    /**
1110
    *
1111
    */
1112
    private void initializeTreeStyles() {
1113
        treeStyles.setToggleClickCount(1);
1114
        treeStyles.setRowHeight(22);
1115

    
1116
        treeStyles.setCellRenderer(new DefaultTreeCellRenderer() {
1117

    
1118
            /**
1119
             *
1120
             */
1121
            private static final long serialVersionUID = 4821777811489883864L;
1122

    
1123
            public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
1124
                boolean expanded, boolean leaf, int row, boolean hasFocus) {
1125
                if (leaf) {
1126
                    JPanel leafComponent = new JPanel();
1127
                    leafComponent.setBackground(Color.WHITE);
1128
                    JRadioButton leafRadioButton =
1129
                        new JRadioButton("", ((StyleTreeModel) treeStyles.getModel()).isSelected((Style) value));
1130

    
1131
                    leafRadioButton.setBackground(Color.WHITE);
1132
                    leafComponent.add(leafRadioButton);
1133
                    leafComponent.add(new JLabel(((Style) value).getTitle()));
1134
                    return leafComponent;
1135
                } else {
1136
                    super.getTreeCellRendererComponent(tree, value, selected, expanded, leaf, row, hasFocus);
1137
                    if (value instanceof LayerNode) {
1138
                        LayerNode layerNode = (LayerNode) value;
1139
                        String text = "";
1140
                        if (layerNode != null) {
1141
                            if (!chkShowLayerNames.isSelected()) {
1142
                                text = layerNode.getTitle();
1143
                            } else {
1144
                                text = layerNode.toString();
1145
                            }
1146
                        }
1147
                        setText(text);
1148
                    } else if (value instanceof String) {
1149
                        setText((String)value);
1150
                    }
1151
                    return this;
1152
                }
1153
            }
1154
        });
1155

    
1156
        treeStyles.addMouseListener(new java.awt.event.MouseAdapter() {
1157
            public void mouseClicked(java.awt.event.MouseEvent e) {
1158
                ((StyleTreeModel) treeStyles.getModel()).setSelectedLeaf(treeStyles.getSelectionPath());
1159
                treeStyles.clearSelection();
1160
                repaint();
1161
            }
1162
        });
1163
    }
1164

    
1165
    private void updateTreeStyles() {
1166

    
1167
        int size = selectedLayers.size();
1168
        tabWMS.setEnabledAt(TAB_STYLES_INDEX, size > 0);
1169

    
1170
        StyleTreeModel model = new StyleTreeModel(selectedLayers);
1171
        Iterator<LayerNode> it = selectedLayers.iterator();
1172

    
1173
        treeStyles.setModel(model);
1174
        expandAllNodes(treeStyles);
1175
    }
1176

    
1177
    private void expandAllNodes(JTree tree) {
1178
        int j = tree.getRowCount();
1179
        int i = 0;
1180
        while (i < j) {
1181
            tree.expandRow(i);
1182
            i += 1;
1183
            j = tree.getRowCount();
1184
        }
1185
    }
1186

    
1187
    class StyleTreeModel implements TreeModel {
1188

    
1189
        List<LayerNode> layerNodes;
1190

    
1191
        public StyleTreeModel(List<LayerNode> layerNodes) {
1192
            this.layerNodes = layerNodes;
1193
        }
1194

    
1195
        /**
1196
         * Will return true if this style is selected.
1197
         *
1198
         * @param style
1199
         * @return
1200
         */
1201
        public boolean isSelected(Style style) {
1202
            Iterator<LayerNode> it = layerNodes.iterator();
1203
            while (it.hasNext()) {
1204
                LayerNode node = (LayerNode) it.next();
1205
                if (node.getSelectedStyle().equals(style)) {
1206
                    return true;
1207
                }
1208
            }
1209
            return false;
1210
        }
1211

    
1212
        /**
1213
         * Gets the names of the selected styles into a Vector using the same
1214
         * order
1215
         * as they was represented in the StylesTree.
1216
         *
1217
         * @return
1218
         */
1219
        public List<String> getStyleSelectionTitles() {
1220
            List<String> styles = new ArrayList<String>();
1221
            for (LayerNode layerNode : layerNodes) {
1222
                Style sty = layerNode.getSelectedStyle();
1223
                if (sty == null) {
1224
                    styles.add("");
1225
                } else {
1226
                    styles.add(sty.getTitle());
1227
                }
1228
            }
1229
            return styles;
1230
        }
1231

    
1232
        /**
1233
         * Sets the selected styles in the StylesTree. The argument styleNames
1234
         * is a Vector with exactly the same amount of strings than the amount of
1235
         * themes (layers) contained by the tree. A blank or null string will
1236
         * leave the default style for that layer, but this element <b>must exist</b>
1237
         * in the array in any case.
1238
         *
1239
         * @param styleNames
1240
         *            , Vector containing the style names.
1241
         *            The styles order <b>must match</b> with the layer order.
1242
         */
1243
        public void setStylesSelection(List<String> styleNames) {
1244
            for (int i = 0; i < layerNodes.size(); i++) {
1245
                LayerNode layerNode = (LayerNode) layerNodes.get(i);
1246
                List<Style> styles = layerNode.getStyles();
1247
                for (int j = 0; j < styles.size(); j++) {
1248
                    Style sty = (Style) styles.get(j);
1249
                    if (sty.getName().equals((String) styleNames.get(i))) {
1250
                        layerNode.setSelectedStyleIndex(j);
1251
                        break;
1252
                    }
1253
                }
1254
            }
1255
        }
1256

    
1257
        /**
1258
         * Sets a leaf (an style) selected.
1259
         *
1260
         * @param selectionPath
1261
         *            to this leaf.
1262
         */
1263
        protected void setSelectedLeaf(TreePath selectionPath) {
1264
            if (selectionPath != null) {
1265
                Object[] objects = selectionPath.getPath();
1266
                Object item = objects[objects.length - 1];
1267
                if (isLeaf(item)) {
1268
                    Style style = (Style) item;
1269
                    LayerNode layerNode = (LayerNode) selectionPath.getParentPath().getLastPathComponent();
1270
                    List<Style> styles = layerNode.getStyles();
1271
                    for (int i = 0; i < styles.size(); i++) {
1272
                        Style sty = (Style) styles.get(i);
1273
                        if (sty.getName().equals(style.getName())) {
1274
                            layerNode.setSelectedStyleIndex(i);
1275
                            return;
1276
                        }
1277
                    }
1278
                }
1279
            }
1280
        }
1281

    
1282
        /*
1283
         * (non-Javadoc)
1284
         *
1285
         * @see javax.swing.tree.TreeModel#getRoot()
1286
         */
1287
        public Object getRoot() {
1288
            return ToolsLocator.getI18nManager().getTranslation("_selected_layers");
1289
        }
1290

    
1291
        /*
1292
         * (non-Javadoc)
1293
         *
1294
         * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object)
1295
         */
1296
        public int getChildCount(Object parent) {
1297
            int count = 0;
1298

    
1299
            if (parent.equals(getRoot())) {
1300
                count = layerNodes.size();
1301
            } else {
1302
                count = ((LayerNode) parent).getStyles().size();
1303
            }
1304
            return count;
1305
        }
1306

    
1307
        /*
1308
         * (non-Javadoc)
1309
         *
1310
         * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object)
1311
         */
1312
        public boolean isLeaf(Object node) {
1313
            return (node instanceof Style);
1314
        }
1315

    
1316
        /*
1317
         * (non-Javadoc)
1318
         *
1319
         * @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int)
1320
         */
1321
        public Object getChild(Object parent, int index) {
1322
            if (parent instanceof Style)
1323
                return null;
1324
            if (parent.equals(getRoot()))
1325
                return layerNodes.get(index);
1326

    
1327
            return ((LayerNode) parent).getStyles().get(index);
1328
        }
1329

    
1330
        /*
1331
         * (non-Javadoc)
1332
         *
1333
         * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object,
1334
         * java.lang.Object)
1335
         */
1336
        public int getIndexOfChild(Object parent, Object child) {
1337
            if (parent instanceof Style) {
1338
                return -1;
1339
            }
1340

    
1341
            if (parent.equals(getRoot())) {
1342
                for (int i = 0; i < layerNodes.size(); i++) {
1343
                    if (layerNodes.get(i).equals(child)) {
1344
                        return i;
1345
                    }
1346
                }
1347
            } else {
1348
                LayerNode node = (LayerNode)parent;
1349
                for (int i = 0; i < node.getStyles().size(); i++) {
1350
                    if (node.getStyles().get(i).equals(child)) {
1351
                        return i;
1352
                    }
1353
                }
1354
            }
1355
            return -1; //
1356
        }
1357

    
1358
        @Override
1359
        public void addTreeModelListener(TreeModelListener l) {
1360
            // TODO Auto-generated method stub
1361

    
1362
        }
1363

    
1364
        @Override
1365
        public void removeTreeModelListener(TreeModelListener l) {
1366
            // TODO Auto-generated method stub
1367

    
1368
        }
1369

    
1370
        @Override
1371
        public void valueForPathChanged(TreePath path, Object newValue) {
1372
            // TODO Auto-generated method stub
1373

    
1374
        }
1375
    }
1376

    
1377
//    private void initializeTblDimensions() {
1378
//
1379
//        final DefaultTableModel model = new DefaultTableModel() {
1380
//
1381
//            /**
1382
//         *
1383
//         */
1384
//            private static final long serialVersionUID = 5253505785616286765L;
1385
//
1386
//            @Override
1387
//            public boolean isCellEditable(int row, int column) {
1388
//                return false;
1389
//            }
1390
//        };
1391
//
1392
//        I18nManager i18nManager = ToolsLocator.getI18nManager();
1393
//        model.addColumn(i18nManager.getTranslation("_dimensions"));
1394
//
1395
//        tblDimensions.setTableHeader(null);
1396
//
1397
//        tblDimensions.setRowSelectionAllowed(true);
1398
//        tblDimensions.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
1399
//
1400
//        tblDimensions.setModel(model);
1401
//
1402
//        tblDimensions.setDefaultRenderer(Object.class, new TableCellRenderer() {
1403
//
1404
//            JTextArea comp = new JTextArea();
1405
//
1406
//            @Override
1407
//            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
1408
//                boolean hasFocus, int row, int column) {
1409
//
1410
//                if (value instanceof WMSDimension) {
1411
//                    WMSDimension dimension = (WMSDimension) value;
1412
//                    comp.setText(dimension.getName());
1413
//                }
1414
//                if (isSelected) {
1415
//                    comp.setBackground(table.getSelectionBackground());
1416
//                    comp.setForeground(table.getSelectionForeground());
1417
//                } else {
1418
//                    comp.setBackground(table.getBackground());
1419
//                    comp.setForeground(table.getForeground());
1420
//                }
1421
//                return comp;
1422
//            }
1423
//        });
1424
//
1425
//        ListSelectionModel selectionModel = tblDimensions.getSelectionModel();
1426
//        selectionModel.addListSelectionListener(new ListSelectionListener() {
1427
//
1428
//            @Override
1429
//            public void valueChanged(ListSelectionEvent e) {
1430
//                WMSDimension dimension = (WMSDimension) model.getValueAt(tblDimensions.getSelectedRow(), 0);
1431
//                String expr = dimension.getDimensionExpression();
1432
//
1433
//            }
1434
//        });
1435
//
1436
//    }
1437

    
1438
//    private void updateTblDimensions() {
1439
//
1440
//        tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, true);
1441
//        boolean hasAnyDimension = false;
1442
//        DefaultTableModel model = (DefaultTableModel) tblDimensions.getModel();
1443
//        model.setRowCount(0);
1444
//        for (Iterator<LayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1445
//            LayerNode node = iterator.next();
1446
//            WMSLayer layer = node.getLayer();
1447
//            // List<WMSDimension> dimensionsLayer =
1448
//            // (ArrayList<WMSDimension>)(layer.getDimensions());
1449
//            for (Iterator iterator2 = layer.getDimensions().iterator(); iterator2.hasNext();) {
1450
//                WMSDimension dimension = (WMSDimension) iterator2.next();
1451
//                WMSDimension row[] = { dimension };
1452
//                model.addRow(row);
1453
//                hasAnyDimension = true;
1454
//            }
1455
//        }
1456
//        tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, hasAnyDimension);
1457
//    }
1458

    
1459
    private WMSRasterProviderParameters getProviderParameters() {
1460
        DataManager manager = DALLocator.getDataManager();
1461
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1462
        WMSRasterProviderParameters providerParameters = (WMSRasterProviderParameters) factory.createParameters();
1463
        List<String> layers = new ArrayList(selectedLayers.size());
1464
        for (Iterator<LayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1465
            LayerNode layer = iterator.next();
1466
            layers.add(layer.getName());
1467
        }
1468

    
1469
        providerParameters.setLayers(layers);
1470
        providerParameters.setFormat(format);
1471
        providerParameters.setInfoFormat(infoFormat);
1472
        providerParameters.setOverride(chkRefreshCache.isSelected());
1473
        providerParameters.setService((URL) serverExplorer.getParameters().getDynValue(
1474
            WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME));
1475
        List<String> styles = getStyles();
1476
        providerParameters.setStyles(styles);
1477
        providerParameters.setTransparency(chkTransparency.isSelected());
1478
        providerParameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1479

    
1480
        return providerParameters;
1481
    }
1482

    
1483

    
1484
    private WMSRasterProviderParameters getProviderParameters(LayerNode layer) {
1485
        DataManager manager = DALLocator.getDataManager();
1486
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1487
        WMSRasterProviderParameters providerParameters = (WMSRasterProviderParameters) factory.createParameters();
1488
        List<String> layers = new ArrayList(selectedLayers.size());
1489
        layers.add(layer.getName());
1490

    
1491
        providerParameters.setLayers(layers);
1492
        providerParameters.setFormat(format);
1493
        providerParameters.setInfoFormat(infoFormat);
1494
        providerParameters.setOverride(chkRefreshCache.isSelected());
1495
        providerParameters.setService((URL) serverExplorer.getParameters().getDynValue(
1496
            WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME));
1497
        List<String> styles = getStyles();
1498
        providerParameters.setStyles(styles);
1499
        providerParameters.setTransparency(chkTransparency.isSelected());
1500
        providerParameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1501

    
1502
        return providerParameters;
1503
    }
1504

    
1505
    private List<String> getStyles() {
1506
        List<String> styles = new ArrayList<>();
1507
        Iterator<LayerNode> it = selectedLayers.iterator();
1508
        while (it.hasNext()) {
1509
            LayerNode layerNode = (LayerNode) it.next();
1510
            Style selectedStyle = layerNode.getSelectedStyle();
1511
            if(selectedStyle==null){
1512
                styles.add("");
1513
            } else {
1514
                styles.add(selectedStyle.getName());
1515
            }
1516
        }
1517
        return styles;
1518
    }
1519

    
1520
    /**
1521
     * @param model
1522
     * @param selectedRow
1523
     */
1524
    private void doRemoveRow(int selectedRow) {
1525
        DefaultTableModel model = (DefaultTableModel) tblLayers.getModel();
1526
        // WMSLayer layer = (WMSLayer)model.getValueAt(selectedRow, 0);
1527
        LayerNode layerNode = selectedLayers.get(selectedRow);
1528
        selectedLayers.remove(layerNode); // new LayerNode(layer));
1529
        updateTblLayers();
1530
    }
1531
}