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

History | View | Annotate | Download (58.4 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.DefaultWMSLayerNode;
74
import org.gvsig.raster.wms.provider.DefaultWMSRasterServerExplorer;
75
import org.gvsig.raster.wms.provider.WMSLayerNode;
76
import org.gvsig.raster.wms.provider.WMSRasterProviderParameters;
77
import org.gvsig.raster.wms.provider.WMSRasterServerExplorerParameters;
78
import org.gvsig.raster.wms.provider.WMSStyleData;
79
import org.gvsig.raster.wms.swing.api.WMSParametersPanel;
80
import org.gvsig.tools.ToolsLocator;
81
import org.gvsig.tools.dispose.DisposeUtils;
82
import org.gvsig.tools.dynobject.DynObject;
83
import org.gvsig.tools.i18n.I18nManager;
84
import org.gvsig.tools.swing.api.ToolsSwingLocator;
85
import org.gvsig.tools.swing.icontheme.IconTheme;
86

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
273
    }
274

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

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

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

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

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

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

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

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

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

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

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

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

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

    
333
            @Override
334
            public void actionPerformed(ActionEvent e) {
335
                int selectedRow = tblLayers.getSelectedRow();
336
                doRemoveRow(selectedRow);
337
                int toSelectRow = Math.min(selectedRow, tblLayers.getRowCount() - 1);
338
                tblLayers.getSelectionModel().setSelectionInterval(toSelectRow, toSelectRow);
339
            }
340
        });
341

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

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

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

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

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

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

    
380
        updateComponents();
381

    
382
    }
383

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

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

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

    
398
    public void fetchParameters(DynObject parameters) {
399

    
400
    }
401

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

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

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

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

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

    
453

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

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

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

    
507
        return parameterList;
508
    }
509

    
510
    /**
511
     * @param layerNode
512
     * @param rootEntry
513
     */
514
    private void addChildrenParametersEntries(final WMSLayerNode layerNode, final WMSParametersEntry parent) {
515
        parameterList.add(parent);
516
        WMSParametersEntry folderEntry = new WMSParametersEntry() {
517
            @Override
518
            public WMSParametersEntry getParent() {
519
                return parent;
520
            }
521
            @Override
522
            public DataStoreParameters getParameters() {
523
                return null;
524
            }
525
            @Override
526
            public String getName() {
527
                return layerNode.getName();
528
            }
529
        };
530
        parameterList.add(folderEntry);
531
        for(int i=0; i<layerNode.getChildCount(); i++){
532
            WMSLayerNode child = (WMSLayerNode) layerNode.getChildAt(i);
533

    
534
        }
535
    }
536

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

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

    
618
    private boolean anyChildrenIsSelected(WMSLayerNode node){
619
        if(node.getChildCount()==0){
620
            return false;
621
        }
622
        boolean result = false;
623
        for (int i=0; i<node.getChildCount(); i++){
624
            WMSLayerNode child = (WMSLayerNode) node.getChildAt(i);
625
            if(selectedLayers.contains(child)){
626
                return true;
627
            }
628
            result = result || anyChildrenIsSelected(child);
629
            if(result){
630
                return true;
631
            }
632
        }
633
        return result;
634
    }
635

    
636

    
637
    private void doConnect() {
638
        final String selectedItem = (String) cboServerList.getSelectedItem();
639
        if (StringUtils.isEmpty(selectedItem)) {
640
            return;
641
        }
642

    
643
        btnConnect.setEnabled(false);
644
        btnCancel.setEnabled(true);
645

    
646
        connectionThread = new Thread(new Runnable() {
647

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

    
659
                    final DefaultWMSRasterServerExplorer serverExplorer =
660
                        (DefaultWMSRasterServerExplorer) manager.openServerExplorer("WMS", parameters);
661

    
662
                    // List layers = serverExplorer.list();
663

    
664
                    SwingUtilities.invokeLater(new Runnable() {
665

    
666
                        @Override
667
                        public void run() {
668
//                            if(Thread.interrupted()){
669
//                                return;
670
//                            }
671
                            setServerExplorer(serverExplorer);
672
                            DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
673

    
674
                            pool.add(((URL) parameters
675
                                .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString(),
676
                                serverExplorer.getParameters());
677

    
678
                        }
679
                    });
680
                } catch (Exception e) {
681
                    // FIXME: ?Mostrar di?logo para preguntar si se desea
682
                    // eliminar el servidor del pool de servidores en caso de
683
                    // existir ah??
684
                    setServerExplorer(null);
685
                }
686

    
687
            }
688
        }, "WMSConnection");
689
        connectionThread.start();
690
        try {
691
            Thread.sleep(2);
692
        } catch (InterruptedException e) {
693
        }
694
    }
695

    
696

    
697
    protected void doCancelConnection() {
698
//        if(connectionThread != null && connectionThread.isAlive()){
699
//            connectionThread.interrupt();
700
//        }
701
    }
702

    
703

    
704
    private void setServerExplorer(DefaultWMSRasterServerExplorer serverExplorer) {
705
        this.serverExplorer = serverExplorer;
706

    
707
        this.updateComponents();
708

    
709
        List<String> formats = this.serverExplorer.getFormats();
710
        List<String> infoFormats = this.serverExplorer.getInfoFormats();
711

    
712
        WMSLayerNode layerNode = (WMSLayerNode) this.serverExplorer.getTreeNode();
713
        txtLayerName.setText(layerNode.getTitle());
714
        fillLayers(layerNode);
715
        fillFormats(formats);
716
        format = "";
717
        fillInfoFormats(infoFormats);
718
        infoFormat = "";
719

    
720
        txtInformation.setText(serverExplorer.getInfoString());
721

    
722
        tabWMS.setEnabledAt(4, true);
723
    }
724

    
725

    
726

    
727
    private void updateComponents() {
728

    
729
        if (serverExplorer == null) {
730
            cboServerList.setEnabled(true);
731
            txtUser.setEnabled(true);
732
            txtPassword.setEnabled(true);
733
            chkRefreshCache.setEnabled(true);
734
            btnConnect.setEnabled(true);
735
            btnCancel.setEnabled(false);
736

    
737
            chkLocalCache.setEnabled(false);
738
            chkAxisOrderXY.setEnabled(false);
739
            txtInformation.setEnabled(false);
740

    
741
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, false);
742
            tabWMS.setEnabledAt(TAB_STYLES_INDEX, false);
743
            tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, false);
744
            tabWMS.setEnabledAt(TAB_FORMATS_INDEX, false);
745
        } else {
746
            cboServerList.setEnabled(false);
747
            txtUser.setEnabled(false);
748
            txtPassword.setEnabled(false);
749
            chkRefreshCache.setEnabled(false);
750
            btnConnect.setEnabled(false);
751
            btnCancel.setEnabled(false);
752

    
753
            chkLocalCache.setEnabled(true);
754
            chkAxisOrderXY.setEnabled(true);
755
            txtInformation.setEnabled(true);
756

    
757
            tabWMS.setEnabledAt(TAB_LAYERS_INDEX, true);
758
            // tabWMS.setEnabledAt(TAB_STYLES_INDEX, true); //habilitar cuando
759
            // tengamos capas seleccionadas
760
            // tabWMS.setEnabledAt(TAB_DIMENSIONS_INDEX, false); //habilitar
761
            // cuando el servidor proporcione dimensiones
762
            // tabWMS.setEnabledAt(TAB_FORMATS_INDEX, true); //habilitar cuando
763
            // tengamos capas seleccionadas
764
        }
765

    
766
    }
767

    
768
    // /**
769
    // *
770
    // */
771
    // private void disableControlsWhileConnecting(boolean disable) {
772
    // btnConnect.setEnabled(disable);
773
    // btnCancel.setEnabled(!disable);
774
    // chkLocalCache.setEnabled(disable);
775
    // chkRefreshCache.setEnabled(disable);
776
    // chkAxisOrderXY.setEnabled(disable);
777
    // tabWMS.setEnabledAt(1, disable);
778
    // tabWMS.setEnabledAt(2, disable);
779
    // tabWMS.setEnabledAt(3, disable);
780
    // tabWMS.setEnabledAt(4, disable);
781
    // }
782

    
783
    private void fillConnections() {
784
        DefaultComboBoxModel<String> model = new DefaultComboBoxModel<>();
785

    
786
        DataServerExplorerPool pool = DALLocator.getDataManager().getDataServerExplorerPool();
787
        Iterator it = pool.iterator();
788
        while (it.hasNext()) {
789
            DataServerExplorerPoolEntry entry = (DataServerExplorerPoolEntry) it.next();
790
            DataServerExplorerParameters parameters = entry.getExplorerParameters();
791
            if (parameters instanceof WMSRasterServerExplorerParameters) {
792
                model.addElement(((URL) parameters
793
                    .getDynValue(WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME)).toString());
794
            }
795
        }
796

    
797
        this.cboServerList.setModel(model);
798
    }
799

    
800
    private void fillFormats(List<String> formats) {
801
        I18nManager i18nManager = ToolsLocator.getI18nManager();
802

    
803
        final DefaultTableModel model = new DefaultTableModel() {
804

    
805
            /**
806
             *
807
             */
808
            private static final long serialVersionUID = -2273311852914196497L;
809

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

    
832
    private void fillInfoFormats(List<String> infoFormats) {
833
        I18nManager i18nManager = ToolsLocator.getI18nManager();
834

    
835
        final DefaultTableModel model = new DefaultTableModel() {
836

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

    
851
            @Override
852
            public void valueChanged(ListSelectionEvent e) {
853
                // int index = e.getFirstIndex();
854
                int index = tblInfoFormats.getSelectedRow();
855
                infoFormat = (String) model.getValueAt(index, 0);
856
            }
857
        });
858
        tblInfoFormats.setModel(model);
859
    }
860

    
861
//    private void fillLayers(WMSLayer rootLayer) {
862
//
863
//        DefaultMutableTreeNode root = new DefaultMutableTreeNode(rootLayer);
864
//        TreeModel treeModel = new DefaultTreeModel(root, true);
865
//
866
//        addChildrenToParent(root, rootLayer.getChildren());
867
//
868
//        treeLayersSelector.setModel(treeModel);
869
//    }
870

    
871
    private void fillLayers(TreeNode node) {
872
        TreeModel treeModel = new DefaultTreeModel(node, true);
873
        treeLayersSelector.setModel(treeModel);
874
    }
875

    
876
    /**
877
     *
878
     */
879
    private void initializeTreeLayerSelector() {
880
        treeLayersSelector.setCellRenderer(new DefaultTreeCellRenderer() {
881

    
882
            /**
883
             *
884
             */
885
            private static final long serialVersionUID = -6800758982020754819L;
886

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

    
905

    
906
        treeLayersSelector.addMouseListener(new MouseAdapter() {
907

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

    
926
    protected void doSelectLayer(Object selected) {
927
        if (selected instanceof WMSLayerNode) {
928
            WMSLayerNode node = (WMSLayerNode) selected;
929
            if (selectedLayers.contains(node)) {
930
                return;
931
            }
932
            selectedLayers.add(node);
933
            updateTblLayers();
934
        }
935
    }
936

    
937
    private void initializeTblLayers() {
938
        I18nManager i18nManager = ToolsLocator.getI18nManager();
939

    
940
        final DefaultTableModel model = new DefaultTableModel() {
941
            /**
942
             *
943
             */
944
            private static final long serialVersionUID = 5394714242469903391L;
945

    
946
            @Override
947
            public boolean isCellEditable(int row, int column) {
948
                return false;
949
            }
950
        };
951

    
952
        model.addColumn(i18nManager.getTranslation("_layers"));
953
        tblLayers.setRowSelectionAllowed(true);
954
        tblLayers.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
955

    
956
        model.addTableModelListener(new TableModelListener() {
957
            @Override
958
            public void tableChanged(TableModelEvent e) {
959
                updateTblProjections();
960
            }
961
        });
962

    
963
        tblLayers.addMouseListener(new MouseAdapter() {
964
            public void mouseClicked(MouseEvent e) {
965
                if (e.getClickCount() == 2) {
966
                    doRemoveRow(tblLayers.getSelectedRow());
967
                }
968
            }
969
        });
970

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

    
982
        tblLayers.setDefaultRenderer(Object.class, new TableCellRenderer() {
983

    
984
            JTextArea comp = new JTextArea();
985

    
986
            @Override
987
            public Component getTableCellRendererComponent(JTable table, Object value, boolean isSelected,
988
                boolean hasFocus, int row, int column) {
989

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

    
1013
    private void updateTblLayers() {
1014
        DefaultTableModel model = (DefaultTableModel) tblLayers.getModel();
1015
        model.setRowCount(0);
1016
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1017
            WMSLayerNode row[] = { iterator.next() }; // .getLayer()};
1018
            model.addRow(row);
1019
        }
1020
        updateTblProjections();
1021
        updateTreeStyles();
1022
//        updateTblDimensions();
1023
    }
1024

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

    
1043
    private void initializeTblProjections() {
1044
        I18nManager i18nManager = ToolsLocator.getI18nManager();
1045

    
1046
        final DefaultTableModel model = new DefaultTableModel() {
1047

    
1048
            /**
1049
             *
1050
             */
1051
            private static final long serialVersionUID = -5717754330064587085L;
1052
            @Override
1053
            public boolean isCellEditable(int row, int column) {
1054
                return false;
1055
            }
1056
        };
1057

    
1058
        model.addColumn(i18nManager.getTranslation("_projections"));
1059

    
1060
        tblProjections.setTableHeader(null);
1061
        tblProjections.setRowSelectionAllowed(true);
1062
        tblProjections.setSelectionMode(ListSelectionModel.SINGLE_SELECTION);
1063

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

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

    
1094
        tblProjections.setModel(model);
1095
    }
1096

    
1097
    private void updateTblProjections() {
1098

    
1099
        WMSRasterProviderParameters providerParameters = getProviderParameters();
1100
        DataManager manager = DALLocator.getDataManager();
1101
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1102

    
1103
        List<String> srss = serverExplorer.getSrss(providerParameters);
1104
        DefaultTableModel model = (DefaultTableModel) tblProjections.getModel();
1105
        model.setRowCount(0);
1106
        int index = 0;
1107
        for (Iterator<String> iterator = srss.iterator(); iterator.hasNext();) {
1108
            String row[] = { iterator.next() };
1109
            model.addRow(row);
1110
            index++;
1111
        }
1112
    }
1113

    
1114
    /**
1115
    *
1116
    */
1117
    private void initializeTreeStyles() {
1118
        treeStyles.setToggleClickCount(1);
1119
        treeStyles.setRowHeight(22);
1120

    
1121
        treeStyles.setCellRenderer(new DefaultTreeCellRenderer() {
1122

    
1123
            /**
1124
             *
1125
             */
1126
            private static final long serialVersionUID = 4821777811489883864L;
1127

    
1128
            public java.awt.Component getTreeCellRendererComponent(JTree tree, Object value, boolean selected,
1129
                boolean expanded, boolean leaf, int row, boolean hasFocus) {
1130
                if (leaf) {
1131
                    JPanel leafComponent = new JPanel();
1132
                    leafComponent.setBackground(Color.WHITE);
1133
                    JRadioButton leafRadioButton =
1134
                        new JRadioButton("", ((StyleTreeModel) treeStyles.getModel()).isSelected((WMSStyleData) value));
1135

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

    
1161
        treeStyles.addMouseListener(new java.awt.event.MouseAdapter() {
1162
            public void mouseClicked(java.awt.event.MouseEvent e) {
1163
                ((StyleTreeModel) treeStyles.getModel()).setSelectedLeaf(treeStyles.getSelectionPath());
1164
                treeStyles.clearSelection();
1165
                repaint();
1166
            }
1167
        });
1168
    }
1169

    
1170
    private void updateTreeStyles() {
1171

    
1172
        int size = selectedLayers.size();
1173
        tabWMS.setEnabledAt(TAB_STYLES_INDEX, size > 0);
1174

    
1175
        StyleTreeModel model = new StyleTreeModel(selectedLayers);
1176
        Iterator<WMSLayerNode> it = selectedLayers.iterator();
1177

    
1178
        treeStyles.setModel(model);
1179
        expandAllNodes(treeStyles);
1180
    }
1181

    
1182
    private void expandAllNodes(JTree tree) {
1183
        int j = tree.getRowCount();
1184
        int i = 0;
1185
        while (i < j) {
1186
            tree.expandRow(i);
1187
            i += 1;
1188
            j = tree.getRowCount();
1189
        }
1190
    }
1191

    
1192
    class StyleTreeModel implements TreeModel {
1193

    
1194
        List<WMSLayerNode> layerNodes;
1195

    
1196
        public StyleTreeModel(List<WMSLayerNode> layerNodes) {
1197
            this.layerNodes = layerNodes;
1198
        }
1199

    
1200
        /**
1201
         * Will return true if this style is selected.
1202
         *
1203
         * @param WMSStyle
1204
         * @return
1205
         */
1206
        public boolean isSelected(WMSStyleData WMSStyle) {
1207
            Iterator<WMSLayerNode> it = layerNodes.iterator();
1208
            while (it.hasNext()) {
1209
                WMSLayerNode node = (WMSLayerNode) it.next();
1210
                if (node.getSelectedStyle().equals(WMSStyle)) {
1211
                    return true;
1212
                }
1213
            }
1214
            return false;
1215
        }
1216

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

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

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

    
1287
        /*
1288
         * (non-Javadoc)
1289
         *
1290
         * @see javax.swing.tree.TreeModel#getRoot()
1291
         */
1292
        public Object getRoot() {
1293
            return ToolsLocator.getI18nManager().getTranslation("_selected_layers");
1294
        }
1295

    
1296
        /*
1297
         * (non-Javadoc)
1298
         *
1299
         * @see javax.swing.tree.TreeModel#getChildCount(java.lang.Object)
1300
         */
1301
        public int getChildCount(Object parent) {
1302
            int count = 0;
1303

    
1304
            if (parent.equals(getRoot())) {
1305
                count = layerNodes.size();
1306
            } else {
1307
                count = ((WMSLayerNode) parent).getStyles().size();
1308
            }
1309
            return count;
1310
        }
1311

    
1312
        /*
1313
         * (non-Javadoc)
1314
         *
1315
         * @see javax.swing.tree.TreeModel#isLeaf(java.lang.Object)
1316
         */
1317
        public boolean isLeaf(Object node) {
1318
            return (node instanceof WMSStyleData);
1319
        }
1320

    
1321
        /*
1322
         * (non-Javadoc)
1323
         *
1324
         * @see javax.swing.tree.TreeModel#getChild(java.lang.Object, int)
1325
         */
1326
        public Object getChild(Object parent, int index) {
1327
            if (parent instanceof WMSStyleData)
1328
                return null;
1329
            if (parent.equals(getRoot()))
1330
                return layerNodes.get(index);
1331

    
1332
            return ((WMSLayerNode) parent).getStyles().get(index);
1333
        }
1334

    
1335
        /*
1336
         * (non-Javadoc)
1337
         *
1338
         * @see javax.swing.tree.TreeModel#getIndexOfChild(java.lang.Object,
1339
         * java.lang.Object)
1340
         */
1341
        public int getIndexOfChild(Object parent, Object child) {
1342
            if (parent instanceof WMSStyleData) {
1343
                return -1;
1344
            }
1345

    
1346
            if (parent.equals(getRoot())) {
1347
                for (int i = 0; i < layerNodes.size(); i++) {
1348
                    if (layerNodes.get(i).equals(child)) {
1349
                        return i;
1350
                    }
1351
                }
1352
            } else {
1353
                WMSLayerNode node = (WMSLayerNode)parent;
1354
                for (int i = 0; i < node.getStyles().size(); i++) {
1355
                    if (node.getStyles().get(i).equals(child)) {
1356
                        return i;
1357
                    }
1358
                }
1359
            }
1360
            return -1; //
1361
        }
1362

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

    
1367
        }
1368

    
1369
        @Override
1370
        public void removeTreeModelListener(TreeModelListener l) {
1371
            // TODO Auto-generated method stub
1372

    
1373
        }
1374

    
1375
        @Override
1376
        public void valueForPathChanged(TreePath path, Object newValue) {
1377
            // TODO Auto-generated method stub
1378

    
1379
        }
1380
    }
1381

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

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

    
1464
    private WMSRasterProviderParameters getProviderParameters() {
1465
        DataManager manager = DALLocator.getDataManager();
1466
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1467
        WMSRasterProviderParameters providerParameters = (WMSRasterProviderParameters) factory.createParameters();
1468
        List<String> layers = new ArrayList(selectedLayers.size());
1469
        for (Iterator<WMSLayerNode> iterator = selectedLayers.iterator(); iterator.hasNext();) {
1470
            WMSLayerNode layer = iterator.next();
1471
            layers.add(layer.getName());
1472
        }
1473

    
1474
        providerParameters.setLayers(layers);
1475
        providerParameters.setFormat(format);
1476
        providerParameters.setInfoFormat(infoFormat);
1477
        providerParameters.setOverride(chkRefreshCache.isSelected());
1478
        providerParameters.setService((URL) serverExplorer.getParameters().getDynValue(
1479
            WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME));
1480
        List<String> styles = getStyles();
1481
        providerParameters.setStyles(styles);
1482
        providerParameters.setTransparency(chkTransparency.isSelected());
1483
        providerParameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1484

    
1485
        return providerParameters;
1486
    }
1487

    
1488

    
1489
    private WMSRasterProviderParameters getProviderParameters(WMSLayerNode layer) {
1490
        DataManager manager = DALLocator.getDataManager();
1491
        DataStoreProviderFactory factory = manager.getStoreProviderFactory("WMS");
1492
        WMSRasterProviderParameters providerParameters = (WMSRasterProviderParameters) factory.createParameters();
1493
        List<String> layers = new ArrayList(selectedLayers.size());
1494
        layers.add(layer.getName());
1495

    
1496
        providerParameters.setLayers(layers);
1497
        providerParameters.setFormat(format);
1498
        providerParameters.setInfoFormat(infoFormat);
1499
        providerParameters.setOverride(chkRefreshCache.isSelected());
1500
        providerParameters.setService((URL) serverExplorer.getParameters().getDynValue(
1501
            WMSRasterServerExplorerParameters.WMS_SERVICE_PARAMETER_NAME));
1502
        List<String> styles = getStyles();
1503
        providerParameters.setStyles(styles);
1504
        providerParameters.setTransparency(chkTransparency.isSelected());
1505
        providerParameters.setXYAxisOrder(chkAxisOrderXY.isSelected());
1506

    
1507
        return providerParameters;
1508
    }
1509

    
1510
    private List<String> getStyles() {
1511
        List<String> styles = new ArrayList<>();
1512
        Iterator<WMSLayerNode> it = selectedLayers.iterator();
1513
        while (it.hasNext()) {
1514
            WMSLayerNode layerNode = (WMSLayerNode) it.next();
1515
            WMSStyleData selectedStyle = layerNode.getSelectedStyle();
1516
            if(selectedStyle==null){
1517
                styles.add("");
1518
            } else {
1519
                styles.add(selectedStyle.getName());
1520
            }
1521
        }
1522
        return styles;
1523
    }
1524

    
1525
    /**
1526
     * @param model
1527
     * @param selectedRow
1528
     */
1529
    private void doRemoveRow(int selectedRow) {
1530
        DefaultTableModel model = (DefaultTableModel) tblLayers.getModel();
1531
        // WMSLayer layer = (WMSLayer)model.getValueAt(selectedRow, 0);
1532
        WMSLayerNode layerNode = selectedLayers.get(selectedRow);
1533
        selectedLayers.remove(layerNode); // new LayerNode(layer));
1534
        updateTblLayers();
1535
    }
1536
}