Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wms / trunk / org.gvsig.raster.wms / org.gvsig.raster.wms.app / org.gvsig.raster.wms.app.wmsclient / src / main / java / org / gvsig / raster / wms / app / wmsclient / gui / panel / WMSParamsPanel.java @ 483

History | View | Annotate | Download (44.9 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
* 
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
* 
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
* 
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, 
19
* MA  02110-1301, USA.
20
* 
21
*/
22
 
23
package org.gvsig.raster.wms.app.wmsclient.gui.panel;
24

    
25
import java.awt.Component;
26
import java.awt.Dimension;
27
import java.awt.event.FocusAdapter;
28
import java.awt.event.FocusEvent;
29
import java.awt.event.FocusListener;
30
import java.awt.event.MouseAdapter;
31
import java.awt.event.MouseEvent;
32
import java.awt.geom.Rectangle2D;
33
import java.util.AbstractCollection;
34
import java.util.ArrayList;
35
import java.util.Hashtable;
36
import java.util.TreeSet;
37
import java.util.Vector;
38
import java.util.prefs.Preferences;
39

    
40
import javax.swing.JButton;
41
import javax.swing.JCheckBox;
42
import javax.swing.JList;
43
import javax.swing.JOptionPane;
44
import javax.swing.JPanel;
45
import javax.swing.JScrollPane;
46
import javax.swing.JTabbedPane;
47
import javax.swing.JTextField;
48
import javax.swing.tree.TreePath;
49

    
50
import org.cresques.cts.ICoordTrans;
51
import org.cresques.cts.IProjection;
52
import org.gvsig.andami.PluginServices;
53
import org.gvsig.andami.messages.NotificationManager;
54
import org.gvsig.app.gui.WizardPanel;
55
import org.gvsig.app.gui.wizards.FormatListModel;
56
import org.gvsig.app.gui.wizards.WizardListenerSupport;
57
import org.gvsig.fmap.crs.CRSFactory;
58
import org.gvsig.fmap.dal.DataStoreParameters;
59
import org.gvsig.fmap.dal.exception.InitializeException;
60
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
61
import org.gvsig.fmap.mapcontext.exceptions.ProjectionLayerException;
62
import org.gvsig.fmap.mapcontext.layers.FLayer;
63
import org.gvsig.fmap.mapcontext.layers.FLayers;
64
import org.gvsig.gui.beans.controls.dnd.JDnDListModel;
65
import org.gvsig.gui.beans.listeners.BeanListener;
66
import org.gvsig.raster.wms.app.wmsclient.gui.wizard.LayerTreeModel;
67
import org.gvsig.raster.wms.app.wmsclient.gui.wizard.SRSListModel;
68
import org.gvsig.raster.wms.app.wmsclient.layer.FLyrWMS;
69
import org.gvsig.raster.wms.io.RemoteWMSStyle;
70
import org.gvsig.raster.wms.io.WMSDataParameters;
71
import org.gvsig.raster.wms.io.WMSLayerNode;
72
import org.gvsig.raster.wms.io.WMSServerExplorer;
73
import org.gvsig.raster.wms.io.time.RemoteTimeDimension;
74

    
75

    
76
/**
77
 * This class implements the map option panel.
78
 *
79
 * It includes a set of Listeners that implement some control rules which
80
 * refresh the component values that depends on those selected in the other
81
 * components to avoid to choose an invalid set of options. It also includes a
82
 * method (isCorrectlyConfigured()) that checks if the current set of values is
83
 * enough to correctly launch a GetMap request.
84
 *
85
 * The information is obtained from a WMSWizardDataSource object.
86
 *
87
 *
88
 * Esta clase implementa el panel de opciones disponibles sobre el mapa
89
 *
90
 * Incluye una serie de Listeners que implementan unas reglas de control que
91
 * refrescan los valores de componentes cuyos valores dependen de aqu�llos
92
 * seleccionados en otros componentes para evitar que se escoja una combinaci�n
93
 * de opciones err�nea as� como una funci�n (isCorrectlyConfigured()) que
94
 * comprueba si la combinaci�n escogida actualmente es suficiente para lanzar
95
 * una operaci�n GetMap correctamente.
96
 *
97
 * La informaci�n obtiene a partir de un objeto WMSWizardDataSource.
98
 *
99
 * @author jaume - jaume dominguez faus
100
 *
101
 */
102
@SuppressWarnings("unchecked")
103
public class WMSParamsPanel extends WizardPanel {
104
        private static final long serialVersionUID = 1L;
105
        private JScrollPane jScrollPane1 = null;
106
        private JScrollPane jScrollPane2 = null;
107
        private JScrollPane jScrollPane5 = null;
108
        private JButton btnAdd = null;
109
        private JButton btnDel = null;
110
        private JScrollPane jScrollPane6 = null;
111
        private JPanel jPanel2 = null;
112
        private JPanel tabFormats = null;
113
        private JPanel jPanel4 = null;
114
        private JTextField jTxtNomCapa = null;
115
        private LayerList lstSelectedLayers = null;
116
        private ArrayList<TreePath> selectedPaths = new ArrayList<TreePath>();
117
        private JList lstSRSs = null;
118
        private LayerTree treeLayers = null;
119
        private JList lstFormats = null;
120
        private WizardListenerSupport listenerSupport;
121
        private JTabbedPane jTabbedPane = null;
122
        private JPanel tabLayers = null;
123
        private JPanel jPanel1 = null;
124
        private JPanel jPanel5 = null;
125
        private StylesPanel tabStyle = null;
126
        private JCheckBox chkTransparency = null;
127
        private InfoPanel tabInfo = null;
128
        private DimensionPanel tabDimensions = null;
129
        private int dimensionTabIndex;
130
        private int stylesTabIndex;
131
        private String oldSRS = null;
132
        private AbstractCollection oldDimensions = null;
133
        private Dimension sizeFixed;
134
        private JCheckBox chkExtendedNames = null;
135
        private JButton btnUp = null;
136
        private JButton btnDown = null;
137
        protected WMSServerExplorer explorer           = null;
138

    
139
        public static Preferences fPrefs = Preferences.userRoot().node(
140
                        "gvsig.wms-wizard");
141

    
142
        private JCheckBox chkDisagregate = null;
143

    
144
        public WMSParamsPanel() {
145
                super();
146
                initialize();
147
        }
148

    
149
        // TODO: crear nuevo constructor para a�adir los panels que quieras...
150
        public WMSParamsPanel(WMSServerExplorer data) {
151
                super();
152
                setWizardData(data);
153
                this.setLayout(null);
154
                this.setVisible(false);
155
                this.setBounds(0, 0, 510, 427);
156
                if (jTabbedPane == null) {
157
                        jTabbedPane = new JTabbedPane();
158
                        jTabbedPane.setBounds(4, 4, 502, 415);
159
                        StylesPanel sp = getTabStyle();
160
                        DimensionPanel dp = getTabDimensions();
161

    
162
                        jTabbedPane.addTab(PluginServices.getText(this, "capas"), null,
163
                                        getTabLayers(), null);
164
                        jTabbedPane.addTab(PluginServices.getText(this, "estilos"), null,
165
                                        sp, null);
166
                        stylesTabIndex = jTabbedPane.getTabCount() - 1;
167
                        jTabbedPane.addTab(PluginServices.getText(this, "dimensiones"),
168
                                        null, dp, null);
169
                        dimensionTabIndex = jTabbedPane.getTabCount() - 1;
170
                        jTabbedPane.addTab(PluginServices.getText(this, "formatos"), null,
171
                                        getTabFormats(), null);
172
                        jTabbedPane.setEnabledAt(dimensionTabIndex, false);
173
                        jTabbedPane.setEnabledAt(stylesTabIndex, false);
174
                }
175
                this.add(jTabbedPane, null);
176

    
177
                setListenerSupport(new WizardListenerSupport());
178
        }
179

    
180
        /**
181
         * This method initializes panelPage2
182
         *
183
         * @return Panel
184
         */
185
        private void initialize() {
186
                this.setLayout(null);
187
                this.setVisible(false);
188
                this.setBounds(0, 0, 510, 427);
189
                this.add(getJTabbedPane(), null);
190
        }
191

    
192
        /**
193
         * This method initializes jPanel2
194
         *
195
         * @return Panel
196
         */
197
        private JPanel getJPanel2() {
198
                if (jPanel2 == null) {
199
                        jPanel2 = new JPanel();
200
                        jPanel2.setLayout(null);
201
                        jPanel2.setBounds(5, 59, 485, 328);
202
                        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
203
                                        null, PluginServices.getText(this, "select_layers"),
204
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
205
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
206
                                        null));
207
                        jPanel2.add(getChkExtendedNames(), null);
208

    
209
                        jPanel2.add(getJScrollPane1(), null);
210
                        jPanel2.add(getBtnDel(), null);
211
                        jPanel2.add(getBtnAdd(), null);
212
                        jPanel2.add(getJScrollPane5(), null);
213
                        jPanel2.add(getBtnUp(), null);
214
                        jPanel2.add(getBtnDown(), null);
215
                        jPanel2.add(getChkDisagregate(), null);
216
                }
217

    
218
                return jPanel2;
219
        }
220

    
221
        /**
222
         * This method initializes jPanel4
223
         *
224
         * @return Panel
225
         */
226
        private JPanel getJPanel4() {
227
                if (jPanel4 == null) {
228
                        jPanel4 = new JPanel();
229
                        jPanel4.setLayout(null);
230
                        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
231
                                        null, PluginServices.getText(this, "layer_name"),
232
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
233
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
234
                                        null));
235
                        jPanel4.setBounds(5, 8, 485, 49);
236
                        jPanel4.add(getJTxtNomCapa(), null);
237
                }
238

    
239
                return jPanel4;
240
        }
241

    
242
        /**
243
         * This method initializes jPanel3
244
         *
245
         * @return Panel
246
         */
247
        private JPanel getTabFormats() {
248
                if (tabFormats == null) {
249
                        tabFormats = new JPanel();
250
                        tabFormats.setLayout(null);
251
                        tabFormats.add(getJPanel1(), null);
252
                        tabFormats.add(getJPanel5(), null);
253
                }
254

    
255
                return tabFormats;
256
        }
257

    
258
        /**
259
         * This method initializes jScrollPane1
260
         *
261
         * @return ScrollPane
262
         */
263
        private JScrollPane getJScrollPane1() {
264
                if (jScrollPane1 == null) {
265
                        jScrollPane1 = new JScrollPane();
266
                        jScrollPane1.setBounds(11, 22, 460, 123);
267
                        jScrollPane1.setViewportView(getTreeLayers());
268
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(205, 75));
269
                }
270

    
271
                return jScrollPane1;
272
        }
273

    
274
        /**
275
         * This method initializes btnDel
276
         *
277
         * @return Button
278
         */
279
        private JButton getBtnDel() {
280
                if (btnDel == null) {
281
                        btnDel = new JButton();
282
                        // btnDel.setPreferredSize(new java.awt.Dimension(23, 23));
283
                        btnDel.setText(PluginServices.getText(this, "remove"));
284
                        btnDel.setMargin(new java.awt.Insets(2, 0, 2, 0));
285
                        btnDel.setBounds(339, 300, 101, 20);
286
                        btnDel.setEnabled(false);
287
                        btnDel.addActionListener(new java.awt.event.ActionListener() {
288
                                public void actionPerformed(java.awt.event.ActionEvent e) {
289
                                        delLayer();
290
                                }
291
                        });
292
                }
293
                return btnDel;
294
        }
295

    
296
        /**
297
         * This method initializes btnAdd
298
         *
299
         * @return Button
300
         */
301
        private JButton getBtnAdd() {
302
                if (btnAdd == null) {
303
                        btnAdd = new JButton();
304
                        // btnAdd.setPreferredSize(new java.awt.Dimension(23, 23));
305
                        btnAdd.setText(PluginServices.getText(this, "add"));
306
                        btnAdd.setMargin(new java.awt.Insets(2, 0, 2, 0));
307
                        btnAdd.setBounds(236, 300, 101, 20);
308
                        btnAdd.setEnabled(false);
309
                        btnAdd.addActionListener(new java.awt.event.ActionListener() {
310
                                public void actionPerformed(java.awt.event.ActionEvent e) {
311
                                        addLayer();
312
                                }
313
                        });
314
                }
315
                return btnAdd;
316
        }
317

    
318
        /**
319
         * This method initializes jScrollPane5
320
         *
321
         * @return ScrollPane
322
         */
323
        private JScrollPane getJScrollPane5() {
324
                if (jScrollPane5 == null) {
325
                        jScrollPane5 = new JScrollPane();
326
                        jScrollPane5.setBounds(11, 155, 422, 120);
327
                        jScrollPane5.setViewportView(getLstSelectedLayers());
328
                        jScrollPane5.setPreferredSize(new java.awt.Dimension(205, 75));
329
                }
330

    
331
                return jScrollPane5;
332
        }
333

    
334
        /**
335
         * This method initializes jTextField
336
         *
337
         * @return TextField
338
         */
339
        private JTextField getJTxtNomCapa() {
340
                if (jTxtNomCapa == null) {
341
                        jTxtNomCapa = new JTextField();
342
                        jTxtNomCapa.setBounds(10, 19, 460, 20);
343
                        jTxtNomCapa.setText(PluginServices.getText(this, "WMSLayer"));
344
                        jTxtNomCapa.addKeyListener(new java.awt.event.KeyAdapter() {
345
                                public void keyTyped(java.awt.event.KeyEvent e) {
346
                                        fireWizardComplete(isCorrectlyConfigured());
347
                                }
348
                        });
349
                }
350

    
351
                return jTxtNomCapa;
352
        }
353

    
354
        /**
355
         * This method initializes jScrollPane6
356
         *
357
         * @return ScrollPane
358
         */
359
        private JScrollPane getJScrollPane6() {
360
                if (jScrollPane6 == null) {
361
                        jScrollPane6 = new JScrollPane();
362
                        jScrollPane6.setBounds(5, 23, 470, 140);
363
                        jScrollPane6.setViewportView(getLstFormats());
364
                        jScrollPane6.setPreferredSize(new java.awt.Dimension(250, 200));
365
                }
366

    
367
                return jScrollPane6;
368
        }
369

    
370
        /**
371
         * This method initializes jScrollPane2
372
         *
373
         * @return ScrollPane
374
         */
375
        private JScrollPane getJScrollPane2() {
376
                if (jScrollPane2 == null) {
377
                        jScrollPane2 = new JScrollPane();
378
                        jScrollPane2.setBounds(5, 23, 470, 140);
379
                        jScrollPane2.setViewportView(getLstSRSs());
380
                        jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 200));
381
                }
382

    
383
                return jScrollPane2;
384
        }
385

    
386
        /**
387
         * Gets the available layers in WMS maintaining the tree structure
388
         *
389
         * @return
390
         */
391
        public LayerTree getLayerStructure() {
392
                return treeLayers;
393
        }
394

    
395
        /**
396
         * This method initializes treeLayers
397
         *
398
         * @return Tree
399
         */
400
        private LayerTree getTreeLayers() {
401
                if (treeLayers == null) {
402
                        treeLayers = new LayerTree();
403
                        treeLayers.setRootVisible(true);
404
                        treeLayers.addMouseListener(new java.awt.event.MouseAdapter() {
405
                                public void mouseClicked(java.awt.event.MouseEvent e) {
406
                                        if (e.getClickCount() == 2) {
407
                                                addLayer();
408
                                        }
409
                                }
410
                        });
411
                        treeLayers
412
                                        .addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
413
                                                public void valueChanged(
414
                                                                javax.swing.event.TreeSelectionEvent e) {
415

    
416
                                                        boolean isGetMapable = false; // pffff, jajaja
417
                                                        TreePath[] selecciones = getTreeLayers()
418
                                                                        .getSelectionPaths();
419
                                                        if (selecciones != null) // no entenc perqu�
420
                                                                                                                // peta ac� i li
421
                                                                                                                // arriba null a
422
                                                                                                                // voltes...
423
                                                        {
424
                                                                for (int i = 0; i < selecciones.length
425
                                                                                && !isGetMapable; i++) {
426
                                                                        WMSLayerNode layer = ((WMSLayerNode) selecciones[i]
427
                                                                                        .getLastPathComponent());
428
                                                                        isGetMapable = layer.getChildren().size() == 0
429
                                                                                        || layer.getName() != null;
430
                                                                }
431

    
432
                                                        }
433
                                                        getBtnAdd().setEnabled(isGetMapable);
434
                                                        fireWizardComplete(isCorrectlyConfigured());
435
                                                }
436
                                        });
437
                }
438

    
439
                return treeLayers;
440
        }
441

    
442
        /**
443
         * This method checks for the options selected within the configuration
444
         * dialog are correct and enough to perform a GetMap request.
445
         *
446
         * @return true if you're done, false if not.
447
         */
448
        public boolean isCorrectlyConfigured() {
449

    
450
                boolean b;
451
                this.repaint();
452
                if ((getLstSRSs().getSelectedIndex() != -1)
453
                                && (getLstFormats().getSelectedIndex() != -1)
454
                                && (getLstSelectedLayers().getModel().getSize() > 0)) {
455
                        b = true;
456
                } else {
457
                        b = false;
458
                }
459

    
460
                // Enable or disable del button.
461
                int[] selectedIndices = getLstSelectedLayers().getSelectedIndices();
462

    
463
                getBtnDel().setEnabled(
464
                                selectedIndices != null && selectedIndices.length > 0);
465

    
466
                return b;
467
        }
468

    
469
        public WMSLayerNode[] selectedLayersToArray() {
470
                JDnDListModel modelo = ((JDnDListModel) lstSelectedLayers.getModel());
471
                ArrayList elements = modelo.getElements();
472
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
473
                                .toArray(new WMSLayerNode[0]);
474
                return layers;
475
        }
476

    
477
        /**
478
         * DOCUMENT ME!
479
         */
480
        private void delLayer() {
481
                int[] indices = lstSelectedLayers.getSelectedIndices();
482

    
483
                try {
484
                        ArrayList removeList = new ArrayList();
485
                        WMSLayerNode[] infos = selectedLayersToArray();
486
                        JDnDListModel modelo = ((JDnDListModel) lstSelectedLayers
487
                                        .getModel());
488
                        for (int i = 0; i < indices.length; i++) {
489
                                removeList.add(infos[indices[i]]);
490
                        }
491
                        modelo.delIndices(indices);
492
                        lstSelectedLayers.clearSelection();
493
                        fireWizardComplete(isCorrectlyConfigured());
494

    
495
                        // delete from selectedPaths as well
496
                        WMSLayerNode elemento = null;
497
                        WMSLayerNode last = null;
498
                        TreePath path = null;
499
                        for (int i = removeList.size() - 1; i >= 0; i--) {
500
                                elemento = (WMSLayerNode) removeList.get(i);
501
                                for (int j = 0; j < selectedPaths.size(); j++) {
502
                                        path = (TreePath) selectedPaths.get(j);
503
                                        last = (WMSLayerNode) path.getLastPathComponent();
504
                                        if (last.getTitle().compareTo(elemento.getTitle()) == 0) {
505
                                                selectedPaths.remove(path);
506
                                        }
507
                                }
508
                        }
509

    
510
                        refreshData();
511
                        refreshInfo();
512
                } catch (ArrayIndexOutOfBoundsException ex) {
513
                        // if you reach this, please, tell me how you did it.
514
                        ex.printStackTrace();
515
                }
516
        }
517

    
518
        /**
519
         * Fires a notification to this wizard listeners telling them if the
520
         * configuration is fair enough to send a GetMap request.
521
         *
522
         * @param b
523
         */
524
        private void fireWizardComplete(boolean b) {
525
                listenerSupport.callStateChanged(b);
526
                callStateChanged(b);
527
        }
528

    
529
        /**
530
         * Refreshes the content shown by this.
531
         */
532
        public void refreshData() {
533
                refreshSRS();
534
                getLstSelectedLayers().repaint();
535
                refreshStyleTree();
536
                refreshDimensions();
537

    
538
        }
539

    
540
        /**
541
         * Refreshes the info tab
542
         *
543
         */
544
        public void refreshInfo() {
545
                getTabInfo().refresh(explorer, selectedLayersVector(),
546
                                getStyleTitles(), getFormat(), getSRS(), getDimensions());
547
        }
548

    
549
        private void refreshDimensions() {
550
                int size = getLstSelectedLayers().getModel().getSize();
551
                boolean enable = false;
552
                for (int i = 0; i < size; i++) {
553
                        WMSLayerNode node = (WMSLayerNode) getLstSelectedLayers()
554
                                        .getModel().getElementAt(i);
555
                        if (node.getDimensions() == null) {
556
                                continue;
557
                        }
558

    
559
                        for (int j = 0; j < node.getDimensions().size(); j++) {
560
                                RemoteTimeDimension dim = (RemoteTimeDimension) node
561
                                                .getDimensions().get(j);
562

    
563
                                try {
564
                                        getTabDimensions().addDimension(dim);
565
                                        enable = true;
566
                                } catch (IllegalArgumentException e) {
567
                                        NotificationManager.addWarning(
568
                                                        "Unrecognized dimension expression: "
569
                                                                        + dim.getExpression() + " (for "
570
                                                                        + dim.getName() + " in layer '"
571
                                                                        + node.getName() + "')", null);
572
                                }
573
                        }
574
                }
575
                jTabbedPane.setEnabledAt(dimensionTabIndex, enable);
576

    
577
        }
578

    
579
        /**
580
         *
581
         */
582
        private void refreshStyleTree() {
583

    
584
                int size = getLstSelectedLayers().getModel().getSize();
585
                WMSLayerNode styleRoot = new WMSLayerNode();
586
                styleRoot.setTitle(PluginServices.getText(this, "selected_layers"));
587

    
588
                StyleTreeModel model = new StyleTreeModel(styleRoot);
589
                jTabbedPane.setEnabledAt(stylesTabIndex, false);
590
                for (int i = 0; i < size; i++) {
591
                        WMSLayerNode node = (WMSLayerNode) getLstSelectedLayers()
592
                                        .getModel().getElementAt(i);
593
                        // If any of the layers defines styles, the tab will be enabled.
594
                        if (model.addLayerBranch(node)) {
595
                                jTabbedPane.setEnabledAt(stylesTabIndex, true);
596
                        }
597
                }
598

    
599
                getStyleTree().setModel(model);
600
                getStyleTree().expandAll();
601
                getStyleTree().repaint();
602
        }
603

    
604
        /**
605
         * Takes the array of selected layers and a vector containing the style
606
         * names and set them as selected in the styles panel
607
         *
608
         * @param selectedLayers
609
         * @param styles
610
         */
611
        public void setStyleSelections(Vector<RemoteWMSStyle> styles) {
612

    
613
                WMSLayerNode[] layers = selectedLayersToArray();
614
                int length = layers.length;
615
                for (int i = 0; i < length; i++) {
616
                        String styleName = styles.get(i).getName();
617
                        layers[length - i - 1].setSelectedStyleByName(styleName);
618
                }
619
        }
620

    
621
        /**
622
         * Gets the currently shown style tree.
623
         *
624
         * @return
625
         */
626
        private StyleTree getStyleTree() {
627
                return getTabStyle().getStyleTree();
628
        }
629

    
630
        /**
631
         * Method called when pressing the Add layer button or when double-clicking
632
         * on a layer from the server's layer tree.
633
         */
634
        public void addLayer() {
635
                boolean alguno = false;
636

    
637
                TreePath[] selecciones = getTreeLayers().getSelectionPaths();
638
                if (selecciones == null) {
639
                        return;
640
                }
641
                for (int i = 0; i < selecciones.length; i++) {
642
                        selectedPaths.add(selecciones[i]);
643
                        WMSLayerNode nodo = (WMSLayerNode) selecciones[i]
644
                                        .getLastPathComponent();
645
                        if (nodo.getName() == null || nodo.getName().equals("")) {
646
                                continue;
647
                        }
648
                        if (nodo.isSizeFixed()) {
649
                                if (sizeFixed == null) {
650
                                        sizeFixed = nodo.getFixedSize();
651
                                } else if ((sizeFixed.getHeight() != nodo.getFixedSize()
652
                                                .getHeight())
653
                                                || (sizeFixed.getWidth() != nodo.getFixedSize()
654
                                                                .getWidth())) {
655
                                        JOptionPane.showMessageDialog((Component) PluginServices
656
                                                        .getMainFrame(), PluginServices.getText(this,
657
                                                        "server_cant_render_layers"));
658
                                        continue;
659
                                }
660
                        }
661
                        // s'afegeix a la llista de capes seleccionades
662
                        JDnDListModel modelo = (JDnDListModel) lstSelectedLayers.getModel();
663

    
664
                        try {
665
                                if (modelo.addElement(0, nodo.clone())) {
666
                                        alguno = true;
667
                                }
668
                        } catch (CloneNotSupportedException e) {
669
                        }
670
                }
671

    
672
                if (alguno) {
673
                        refreshData();
674
                }
675
                refreshInfo();
676
        }
677

    
678
        /**
679
         * This method initializes lstSelectedLayers
680
         *
681
         * @return List
682
         */
683
        public LayerList getLstSelectedLayers() {
684
                if (lstSelectedLayers == null) {
685
                        lstSelectedLayers = new LayerList();
686
                        lstSelectedLayers.setModel(new JDnDListModel());
687
                        lstSelectedLayers
688
                                        .setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
689
                        lstSelectedLayers
690
                                        .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
691
                                                public void valueChanged(
692
                                                                javax.swing.event.ListSelectionEvent e) {
693
                                                        fireWizardComplete(isCorrectlyConfigured());
694
                                                }
695
                                        });
696
                        lstSelectedLayers.addMouseListener(new MouseAdapter() {
697
                                public void mouseReleased(MouseEvent e) {
698
                                        refreshData();
699
                                }
700
                        });
701
                }
702

    
703
                return lstSelectedLayers;
704
        }
705

    
706
        /**
707
         * This method initializes lstSRSs
708
         *
709
         * @return JList
710
         */
711
        public JList getLstSRSs() {
712
                if (lstSRSs == null) {
713
                        lstSRSs = new JList();
714
                        lstSRSs.setModel(new SRSListModel());
715
                        lstSRSs
716
                                        .setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
717
                        lstSRSs
718
                                        .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
719
                                                public void valueChanged(
720
                                                                javax.swing.event.ListSelectionEvent e) {
721
                                                        int i = lstSRSs.getSelectedIndex();
722
                                                        if (i != -1) {
723
                                                                oldSRS = (String) lstSRSs.getModel()
724
                                                                                .getElementAt(i);
725
                                                        }
726
                                                        fireWizardComplete(isCorrectlyConfigured());
727
                                                }
728
                                        });
729
                }
730

    
731
                return lstSRSs;
732
        }
733

    
734
        /**
735
         * This method initializes lstFormats
736
         *
737
         * @return List
738
         */
739
        public JList getLstFormats() {
740
                if (lstFormats == null) {
741
                        lstFormats = new JList();
742
                        lstFormats
743
                                        .setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
744
                        lstFormats
745
                                        .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
746
                                                public void valueChanged(
747
                                                                javax.swing.event.ListSelectionEvent e) {
748
                                                        fireWizardComplete(isCorrectlyConfigured());
749
                                                }
750
                                        });
751
                }
752

    
753
                return lstFormats;
754
        }
755

    
756
        /**
757
         * Refreshes the SRS list
758
         */
759
        private void refreshSRS() {
760
                ArrayList elements = ((JDnDListModel) lstSelectedLayers.getModel())
761
                                .getElements();
762
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
763
                                .toArray(new WMSLayerNode[0]);
764

    
765
                SRSListModel model = new SRSListModel();
766

    
767
                if (layers.length == 0) {
768
                        lstSRSs.setModel(model);// new DefaultListModel());
769
                        sizeFixed = null;
770
                } else {
771
                        TreeSet srsSet = new TreeSet();
772
                        srsSet.addAll(layers[0].getAllSrs());
773
                        model.setAll(srsSet);
774
                        for (int i = 1; i < layers.length; i++) {
775
                                model.setAll(model.intersect(layers[i].getAllSrs()));
776
                        }
777
                        lstSRSs.setModel(model);
778
                }
779
                int srsIndex = getSRSIndex(oldSRS);
780
                if (srsIndex != -1) {
781
                        getLstSRSs().setSelectedIndex(srsIndex);
782
                }
783

    
784
        }
785

    
786
        public void setListenerSupport(WizardListenerSupport support) {
787
                listenerSupport = support;
788
        }
789

    
790
        public void setWizardData(WMSServerExplorer data) {
791
                this.explorer = data;
792
                ((JDnDListModel) getLstSelectedLayers().getModel()).clear();
793
                getLstSelectedLayers().repaint();
794

    
795
                getLstFormats().setModel(
796
                                new FormatListModel(this.explorer.getFormats()));
797
                getTreeLayers()
798
                                .setModel(new LayerTreeModel(this.explorer.getLayerTree()));
799
                refreshInfo();
800
        }
801

    
802
        private Vector getStyleTitles() {
803
                return getTabStyle().getStyleTree().getStyleSelectionTitles();
804
        }
805

    
806
        /**
807
         * @return
808
         */
809
        private Vector selectedLayersVector() {
810
                JDnDListModel mod = (JDnDListModel) getLstSelectedLayers().getModel();
811
                Vector lyrs = new Vector();
812
                for (int i = 0; i < mod.getSize(); i++) {
813
                        lyrs.add(mod.getElementAt(i));
814
                }
815
                return lyrs;
816
        }
817

    
818
        public String getFormat() {
819
                return (String) getLstFormats().getSelectedValue();
820
        }
821

    
822
        public String getLayersQuery() {
823
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
824
                                .getElements();
825
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
826
                                .toArray(new WMSLayerNode[0]);
827

    
828
                // Nombre separado por comas de las capas
829
                String layersQuery = layers[layers.length - 1].getName();
830

    
831
                for (int i = layers.length - 2; i >= 0; i--) {
832
                        layersQuery += ("," + layers[i].getName());
833
                }
834

    
835
                return layersQuery;
836

    
837
        }
838

    
839
        /**
840
         * Returns the current selected SRS.
841
         *
842
         * @return
843
         */
844
        public String getSRS() {
845
                return (String) getLstSRSs().getSelectedValue();
846
        }
847

    
848
        /**
849
         * Returns the name of the layer that the user has typed-in
850
         *
851
         * @return
852
         */
853
        public String getLayerName() {
854
                return getJTxtNomCapa().getText();
855
        }
856

    
857
        public void setLayerName(String name) {
858
                getJTxtNomCapa().setText(name);
859
        }
860

    
861
        public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
862
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
863
                                .getElements();
864
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
865
                                .toArray(new WMSLayerNode[0]);
866
                String[] layerNames = new String[layers.length];
867
                for (int i = 0; i < layerNames.length; i++) {
868
                        layerNames[i] = layers[i].getName();
869
                }
870
                // Boundingbox de todas las capas
871
                // ArrayList rectangulos = new ArrayList();
872

    
873
                Rectangle2D rect;
874
                String latLonID;
875

    
876
                rect = explorer.getBoundingBox(layerNames, getSRS());
877
                if (rect == null) {
878
                        latLonID = "EPSG:4326";
879
                        rect = explorer.getBoundingBox(layerNames, latLonID);
880
                        if (rect == null) {
881
                                rect = explorer.getBoundingBox(layerNames, "CRS:84");
882
                        }
883

    
884
                        IProjection reqProj = CRSFactory.getCRS(getSRS());
885
                        IProjection latLonProj = CRSFactory.getCRS(latLonID);
886
                        if ((reqProj != null) && (latLonProj != null)) {
887
                                ICoordTrans ct = latLonProj.getCT(reqProj);
888
                                Rectangle2D reprojectedRect;
889
                                reprojectedRect = ct.convert(rect);
890
                                rect = reprojectedRect;
891
                        } else {
892
//                                throw new ProjectionLayerException(PluginServices.getText(this,
893
//                                                "cannotReproject")
894
//                                                + " " + getSRS() + " -> " + latLonID);
895
                                throw new ProjectionLayerException(getName(),null);
896
                        }
897
                }
898

    
899
                return rect;
900
        }
901

    
902
        public TreePath[] getSelectedLayers() {
903
                return getTreeLayers().getSelectionPaths();
904
        }
905

    
906
        public Hashtable getOnlineResources() {
907
                return explorer.getOnlineResources();
908
        }
909

    
910
        /**
911
         * The piece of the GetMap request that has the layer names.
912
         *
913
         * @return
914
         */
915
        public String getQueryableLayerQuery() {
916
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
917
                                .getElements();
918
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
919
                                .toArray(new WMSLayerNode[0]);
920
                // Nombre separado por comas de las capas
921
                String layersQuery = "";
922
                int i;
923

    
924
                for (i = 0; i < layers.length; i++) {
925
                        if (layers[i].isQueryable()) {
926
                                layersQuery = layers[i].getName();
927

    
928
                                break;
929
                        }
930
                }
931

    
932
                for (int j = i + 1; j < layers.length; j++) {
933
                        if (layers[j].isQueryable()) {
934
                                layersQuery += ("," + layers[j].getName());
935
                        }
936
                }
937

    
938
                return layersQuery;
939
        }
940

    
941
        /**
942
         * Returns the index of the CRS within the CRS list.
943
         *
944
         * Devuelve la posicion que ocupa el CRS en la lista de CRS
945
         *
946
         * @param crs
947
         * @return The CRS's index if it exists, -1 if it not exists.
948
         */
949
        public int getSRSIndex(String crs) {
950
                for (int i = 0; i < getLstSRSs().getModel().getSize(); i++) {
951
                        if (crs != null
952
                                        && crs.equals(getLstSRSs().getModel().getElementAt(i))) {
953
                                return i;
954
                        }
955
                }
956
                return -1;
957
        }
958

    
959
        /**
960
         * Returns the index of the format within the formats list.
961
         *
962
         * Devuelve la posicion que ocupa el formato en la lista de formatos
963
         *
964
         * @param format
965
         *
966
         * @return The format's index if it exists, -1 if it not exists.
967
         */
968
        public int getFormatIndex(String format) {
969
                for (int i = 0; i < getLstFormats().getModel().getSize(); i++) {
970
                        if (format != null
971
                                        && format
972
                                                        .equals(getLstFormats().getModel().getElementAt(i))) {
973
                                return i;
974
                        }
975
                }
976
                return -1;
977
        }
978

    
979
        /**
980
         * This method initializes jTabbedPane
981
         *
982
         * @return TabbedPane
983
         */
984
        public JTabbedPane getJTabbedPane() {
985
                if (jTabbedPane == null) {
986
                        jTabbedPane = new JTabbedPane();
987
                        jTabbedPane.setBounds(4, 4, 502, 415);
988
                        InfoPanel ip = getTabInfo();
989
                        ip.addFocusListener(new FocusListener() {
990
                                public void focusGained(FocusEvent e) {
991
                                        refreshInfo();
992
                                }
993

    
994
                                public void focusLost(FocusEvent e) {
995
                                }
996
                        });
997

    
998
                        StylesPanel sp = getTabStyle();
999
                        DimensionPanel dp = getTabDimensions();
1000

    
1001
                        jTabbedPane.addTab(PluginServices.getText(this, "info"), null, ip,
1002
                                        null);
1003
                        jTabbedPane.addTab(PluginServices.getText(this, "capas"), null,
1004
                                        getTabLayers(), null);
1005
                        jTabbedPane.addTab(PluginServices.getText(this, "estilos"), null,
1006
                                        sp, null);
1007
                        stylesTabIndex = jTabbedPane.getTabCount() - 1;
1008
                        jTabbedPane.addTab(PluginServices.getText(this, "dimensiones"),
1009
                                        null, dp, null);
1010
                        dimensionTabIndex = jTabbedPane.getTabCount() - 1;
1011
                        jTabbedPane.addTab(PluginServices.getText(this, "formatos"), null,
1012
                                        getTabFormats(), null);
1013
                        jTabbedPane.setEnabledAt(dimensionTabIndex, false);
1014
                        jTabbedPane.setEnabledAt(stylesTabIndex, false);
1015
                }
1016
                return jTabbedPane;
1017
        }
1018

    
1019
        /**
1020
         * This method initializes jPanel
1021
         *
1022
         * @return Panel
1023
         */
1024
        private JPanel getTabLayers() {
1025
                if (tabLayers == null) {
1026
                        tabLayers = new JPanel();
1027
                        tabLayers.setLayout(null);
1028
                        tabLayers.add(getJPanel4(), null);
1029
                        tabLayers.add(getJPanel2(), null);
1030
                }
1031
                return tabLayers;
1032
        }
1033

    
1034
        /**
1035
         * This method initializes jPanel1
1036
         *
1037
         * @return Panel
1038
         */
1039
        private JPanel getJPanel1() {
1040
                if (jPanel1 == null) {
1041
                        jPanel1 = new JPanel();
1042
                        jPanel1.setLayout(null);
1043
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
1044
                                        null, PluginServices.getText(this, "select_formats"),
1045
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
1046
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
1047
                                        null));
1048
                        jPanel1.setBounds(5, 10, 485, 194);
1049
                        jPanel1.add(getJScrollPane6(), null);
1050
                        jPanel1.add(getChkTransparency(), null);
1051
                }
1052
                return jPanel1;
1053
        }
1054

    
1055
        /**
1056
         * This method initializes jPanel5
1057
         *
1058
         * @return Panel
1059
         */
1060
        private JPanel getJPanel5() {
1061
                if (jPanel5 == null) {
1062
                        jPanel5 = new JPanel();
1063
                        jPanel5.setLayout(null);
1064
                        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(
1065
                                        null, PluginServices.getText(this, "seleccionar_srs"),
1066
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
1067
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
1068
                                        null));
1069
                        jPanel5.setBounds(5, 205, 485, 173);
1070
                        jPanel5.add(getJScrollPane2(), null);
1071
                }
1072
                return jPanel5;
1073
        }
1074

    
1075
        /**
1076
         * This method initializes jPanel6
1077
         *
1078
         * @return Panel
1079
         */
1080
        private StylesPanel getTabStyle() {
1081
                if (tabStyle == null) {
1082
                        tabStyle = new StylesPanel(this);
1083
                        tabStyle.setEnabled(false);
1084
                        tabStyle.addListener(new BeanListener() {
1085
                                public void beanValueChanged(Object value) {
1086
                                        fireWizardComplete(isCorrectlyConfigured());
1087
                                };
1088
                        });
1089
                        tabStyle.addFocusListener(new FocusAdapter() {
1090
                                public void focusGained(FocusEvent e) {
1091
                                        refreshStyleTree();
1092
                                }
1093
                        });
1094
                }
1095
                return tabStyle;
1096
        }
1097

    
1098
        /**
1099
         * Sets the focus to the tab next to the current one.
1100
         *
1101
         * Enfoca a la solapa siguiente a la actualmente enfocada del TabbedPane
1102
         *
1103
         */
1104
        public void avanzaTab() {
1105
                int currentPage = currentPage();
1106
                int nPages = getNumTabs();
1107
                if (nPages - 1 > currentPage) {
1108
                        getJTabbedPane().setSelectedIndex(nextEnabledPage());
1109
                }
1110
        }
1111

    
1112
        /**
1113
         * Sets the focus to the tab previous to the current one.
1114
         *
1115
         * Enfoca a la solapa anterior a la actualmente enfocada del TabbedPane
1116
         *
1117
         */
1118
        public void retrocedeTab() {
1119
                this.getJTabbedPane().setSelectedIndex(previousEnabledPage());
1120

    
1121
        }
1122

    
1123
        /**
1124
         * Returns the index of the current tab.
1125
         *
1126
         * Devuelve el �ndice de la p�gina actual del wizard.
1127
         *
1128
         * @return
1129
         */
1130
        public int currentPage() {
1131
                return getJTabbedPane().getSelectedIndex();
1132
        }
1133

    
1134
        /**
1135
         * Returns the tab amount that the WMSParamsPanel currently have
1136
         *
1137
         * Devuelve el n�mero de solapas que tiene actualmente el WMSParamsPanel
1138
         *
1139
         * @return int
1140
         */
1141
        public int getNumTabs() {
1142
                return getJTabbedPane().getTabCount();
1143
        }
1144

    
1145
        /**
1146
         * <p>
1147
         * Returns the index of the previous enabled tab.
1148
         * </p>
1149
         * <p>
1150
         * Devuelve el �ndice de la anterior p�gina habilitada del wizard o -1
1151
         * si no hay ninguna.
1152
         * </p>
1153
         *
1154
         * @return The index, or -1 if there is no one.
1155
         */
1156
        public int previousEnabledPage() {
1157
                int currentPage = currentPage();
1158
                int j = 0;
1159
                if (currentPage == 0) {
1160
                        j = -1;
1161
                }
1162
                for (int i = currentPage - 1; i > -1; i--) {
1163
                        if (getJTabbedPane().isEnabledAt(i)) {
1164
                                j = i;
1165
                                break;
1166
                        }
1167
                }
1168
                return j;
1169
        }
1170

    
1171
        /**
1172
         * <p>
1173
         * Returns the previous of the previous enabled tab.
1174
         * </p>
1175
         * <p>
1176
         * Devuelve el �ndice de la siguiente p�gina habilitada del wizard o -1
1177
         * si no hay ninguna.
1178
         * </p>
1179
         *
1180
         * @return The index, or -1 if there is no one.
1181
         */
1182
        public int nextEnabledPage() {
1183
                int currentPage = currentPage();
1184
                int nPages = getNumTabs();
1185
                if (currentPage == nPages) {
1186
                        return -1;
1187
                }
1188
                for (int i = currentPage + 1; i < nPages; i++) {
1189
                        if (getJTabbedPane().isEnabledAt(i)) {
1190
                                return i;
1191
                        }
1192
                }
1193
                return -1;
1194
        }
1195

    
1196
        /**
1197
         * Selects/deselects the transparency checkbox.
1198
         *
1199
         * @param b
1200
         */
1201
        public void setTransparent(boolean b) {
1202
                getChkTransparency().setSelected(b);
1203
        }
1204

    
1205
        /**
1206
         * This method initializes chkTrasparency
1207
         *
1208
         * @return CheckBox
1209
         */
1210
        private JCheckBox getChkTransparency() {
1211
                if (chkTransparency == null) {
1212
                        chkTransparency = new JCheckBox();
1213
                        chkTransparency.setText(PluginServices.getText(this,
1214
                                        "wms_transparency"));
1215
                        chkTransparency.setSelected(true);
1216
                        chkTransparency.addItemListener(new java.awt.event.ItemListener() {
1217
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1218
                                        fireWizardComplete(isCorrectlyConfigured());
1219
                                }
1220
                        });
1221
                        chkTransparency.setBounds(5, 168, 441, 21);
1222

    
1223
                }
1224
                return chkTransparency;
1225
        }
1226

    
1227
        /**
1228
         * Returns a vector of strings containing the styles selected for the
1229
         * layers. A blank style is correct and means that default style will be
1230
         * used.
1231
         *
1232
         * @return Vector
1233
         */
1234
        public Vector<RemoteWMSStyle> getStyles() {
1235
                Vector<RemoteWMSStyle> v = new Vector<RemoteWMSStyle>();
1236
                WMSLayerNode[] layers = selectedLayersToArray();
1237
                for (int i = 0; i < layers.length; i++) {
1238
                        RemoteWMSStyle sty = layers[i].getSelectedStyle();
1239
                        if(sty != null)
1240
                                v.add(0, sty);
1241
                }
1242
                return v;
1243
        }
1244

    
1245
        public Vector<RemoteWMSStyle> getLayerStyle(String layerName) {
1246
                Vector<RemoteWMSStyle> v = new Vector<RemoteWMSStyle>();
1247
                WMSLayerNode[] layers = selectedLayersToArray();
1248
                for (int i = 0; i < layers.length; i++) {
1249
                        if (layers[i].getName().equalsIgnoreCase(layerName)) {
1250
                                RemoteWMSStyle sty = layers[i].getSelectedStyle();
1251
                                v.add(sty);
1252
                                return v;
1253
                        }
1254
                }
1255
                return v;
1256
        }
1257

    
1258
        /**
1259
         * This method initializes tabInfo
1260
         *
1261
         * @return Panel
1262
         */
1263
        private InfoPanel getTabInfo() {
1264
                if (tabInfo == null) {
1265
                        tabInfo = new InfoPanel();
1266

    
1267
                }
1268
                return tabInfo;
1269
        }
1270

    
1271
        public void setDimensions(Vector dimensions) {
1272
                for (int i = 0; i < dimensions.size(); i++) {
1273
                        String st = (String) dimensions.get(i);
1274
                        if (st.split("=").length == 2) {
1275
                                String[] s = st.split("=");
1276
                                getTabDimensions().setDimensionValue(s[0], s[1]);
1277
                        }
1278
                }
1279

    
1280
        }
1281

    
1282
        /**
1283
         * This method initializes tabDimension
1284
         *
1285
         * @return Panel
1286
         */
1287
        private DimensionPanel getTabDimensions() {
1288
                if (tabDimensions == null) {
1289
                        tabDimensions = new DimensionPanel();
1290
                        tabDimensions.setEnabled(false);
1291
                        tabDimensions.addListener(new BeanListener() {
1292
                                public void beanValueChanged(Object value) {
1293
                                        Vector myDimensions = (Vector) value;
1294
                                        if (value != null
1295
                                                        && (oldDimensions == null || !(oldDimensions.size() == myDimensions
1296
                                                                        .size() && oldDimensions
1297
                                                                        .containsAll(myDimensions)))) {
1298
                                                oldDimensions = myDimensions;
1299
                                        }
1300
                                        fireWizardComplete(isCorrectlyConfigured());
1301
                                }
1302
                        });
1303

    
1304
                }
1305
                return tabDimensions;
1306
        }
1307

    
1308
        /**
1309
         * @return
1310
         */
1311
        public boolean getTransparency() {
1312
                return getChkTransparency().isSelected();
1313
        }
1314

    
1315
        /**
1316
         * @return
1317
         */
1318
        public Vector getDimensions() {
1319
                return getTabDimensions().getDimensions();
1320
        }
1321

    
1322
        public void initWizard() {
1323
        }
1324

    
1325
        public void execute() {
1326
        }
1327

    
1328
        // Gets all the layers available in the WMS Server
1329
        protected FLayer getAllSubTree(WMSLayerNode node) throws LoadLayerException {
1330
                if (node.getChildren().size() > 0) {
1331
                        FLayers l = null;
1332
                        if (this.getMapCtrl() == null) {
1333
                                org.gvsig.app.project.documents.view.gui.DefaultViewPanel v = (org.gvsig.app.project.documents.view.gui.DefaultViewPanel) PluginServices
1334
                                                .getMDIManager().getActiveWindow();
1335
                                l = new FLayers();
1336
                                l.setMapContext(v.getMapControl().getMapContext());
1337
                        } else {
1338
                                l = new FLayers();
1339
                                l.setMapContext(this.getMapCtrl().getMapContext());
1340
                        }
1341

    
1342
                        l.setName(node.getTitle());
1343
                        l.setVisible(false);
1344
                        for (int i = 0; i < node.getChildren().size(); i++) {
1345
                                FLayer lyr = getAllSubTree((WMSLayerNode) node.getChildren()
1346
                                                .get(i));
1347
                                if (lyr != null) {
1348
                                        l.addLayer(lyr);
1349
                                }
1350
                        }
1351
                        return l;
1352
                } else {
1353
                        DataStoreParameters parameters = explorer.getStoreParameters();
1354
                        WMSDataParameters par = null;
1355
                        if(parameters instanceof WMSDataParameters) {
1356
                                par = (WMSDataParameters) parameters;
1357
                        }
1358
                        par.setFormat(getFormat());
1359
                        par.setLayerQuery(node.getName());
1360
                        par.setInfoLayerQuery(getQueryableLayerQuery());
1361
                        par.setSRS(getSRS());
1362
                        par.setWmsTransparency(getTransparency());
1363
                        par.setStyles(getLayerStyle(node.getName()));
1364
                        par.setDimensions(getDimensions());
1365
                        par.setOnlineResources(getOnlineResources());
1366
                        par.setFixedSize(getFixedSize());
1367
                        par.setQueryable(explorer.isQueryable());
1368
                        par.setName(node.getTitle());
1369
                        par.setURI(explorer.getHost());
1370
                        
1371
                        FLyrWMS layer = new FLyrWMS();
1372
                        try {
1373
                                layer.setParameters(par);
1374
                                layer.setExplorer(explorer);
1375
                                layer.setFullExtent(getLayersRectangle());
1376
                        } catch (InitializeException e) {
1377
                                throw new LoadLayerException("Error initializating layer", e);
1378
                        }
1379
                        layer.setVisible(false);
1380
                        return layer;
1381
                }
1382
        }
1383

    
1384
        // Gets all the layers available in the WMS Server
1385
        public FLayer getAllLayers() throws LoadLayerException {
1386
                LayerTree layerTree = getLayerStructure();
1387
                return getAllSubTree((WMSLayerNode) layerTree.getModel().getRoot());
1388
        }
1389

    
1390
        // changed by Laura:
1391
        // To delegate getLayer to ParamsPanel from WMSWizard and WMSProps
1392
        // public FLayer getLayer() { return null; }
1393
        public FLayer getLayer() throws LoadLayerException {
1394
                if (getDisagregatedLayers()) {
1395
                        return getLayerTree();
1396
                } else {
1397
                        return getLayerPlain();
1398
                }
1399
        }
1400

    
1401
        /**
1402
         * If user does not select the chekbox Disagregate layers, will get the
1403
         * layer tree in WMS
1404
         *
1405
         * @return
1406
         * @throws LoadLayerException 
1407
         */
1408
        protected FLayer getLayerTree() throws LoadLayerException {
1409
                LayerTree layerTree = getLayerStructure();
1410
                TreePath[] selection = (TreePath[]) getSelectedPaths().toArray(new TreePath[0]);
1411
                if (selection != null) {
1412
                        return getSubTree((WMSLayerNode) layerTree.getModel().getRoot(), selection);
1413
                }
1414
                return null;
1415
        }
1416

    
1417
        protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node) {
1418
                for (int i = 0; i < selection.length; i++) {
1419
                        Object[] components = selection[i].getPath();
1420
                        for (int j = 0; j < components.length; j++) {
1421
                                if (components[j] instanceof WMSLayerNode) {
1422
                                        if (((WMSLayerNode) components[j]).getTitle().compareTo(
1423
                                                        node.getTitle()) == 0) {
1424
                                                return true;
1425
                                        }
1426
                                }
1427
                        }
1428
                }
1429
                return false;
1430
        }
1431

    
1432
        protected FLayer getSubTree(WMSLayerNode node, TreePath[] selection) throws LoadLayerException {
1433
                if (node.getChildren().size() > 0) {
1434
                        FLayers l = null;
1435
                        if (this.getMapCtrl() == null) {
1436
                                org.gvsig.app.project.documents.view.gui.DefaultViewPanel v = (org.gvsig.app.project.documents.view.gui.DefaultViewPanel) PluginServices
1437
                                                .getMDIManager().getActiveWindow();
1438
                                l = new FLayers();
1439
                                l.setMapContext(v.getMapControl().getMapContext());
1440
                        } else {
1441
                                l = new FLayers();
1442
                                l.setMapContext(this.getMapCtrl().getMapContext());
1443
                        }
1444

    
1445
                        l.setName(node.getTitle());
1446
                        for (int i = 0; i < node.getChildren().size(); i++) {
1447
                                if (nodeSelected(selection, (WMSLayerNode) (node.getChildren()
1448
                                                .get(i)))) {
1449
                                        FLayer lyr = getSubTree((WMSLayerNode) node.getChildren()
1450
                                                        .get(i), selection);
1451
                                        if (lyr != null) {
1452
                                                l.addLayer(lyr);
1453
                                        }
1454
                                }
1455
                        }
1456
                        return l;
1457
                } else {
1458
                        if (nodeSelected(selection, node)) {
1459
                                
1460
                                DataStoreParameters parameters = explorer.getStoreParameters();
1461
                                WMSDataParameters par = null;
1462
                                if(parameters instanceof WMSDataParameters) {
1463
                                        par = (WMSDataParameters) parameters;
1464
                                }
1465
                                par.setFormat(getFormat());
1466
                                par.setLayerQuery(node.getName());
1467
                                par.setInfoLayerQuery(getQueryableLayerQuery());
1468
                                par.setSRS(getSRS());
1469
                                par.setWmsTransparency(getTransparency());
1470
                                par.setStyles(getLayerStyle(node.getName()));
1471
                                par.setDimensions(getDimensions());
1472
                                par.setOnlineResources(explorer.getOnlineResources());
1473
                                par.setFixedSize(getFixedSize());
1474
                                par.setQueryable(node.isQueryable());
1475
                                par.setName(node.getTitle());
1476
                                par.setURI(explorer.getHost());
1477
                                
1478
                                FLyrWMS layer = new FLyrWMS();
1479
                                try {
1480
                                        layer.setParameters(par);
1481
                                        layer.setExplorer(explorer);
1482
                                        layer.setFullExtent(getLayersRectangle());
1483
                                } catch (InitializeException e) {
1484
                                        throw new LoadLayerException("Error initializating layer", e);
1485
                                }
1486
                                return layer;
1487

    
1488
                        } else {
1489
                                return null;
1490
                        }
1491
                }
1492
        }
1493

    
1494
        /**
1495
         * If user selects the chekbox Disagregate layers, will get the selected
1496
         * layers rendered in one the tree structure in WMS will be lost.
1497
         *
1498
         * @return
1499
         */
1500
        protected FLayer getLayerPlain() throws LoadLayerException {
1501
                DataStoreParameters parameters = explorer.getStoreParameters();
1502
                WMSDataParameters par = null;
1503
                if(parameters instanceof WMSDataParameters) {
1504
                        par = (WMSDataParameters) parameters;
1505
                }
1506
                par.setFormat(getFormat());
1507
                par.setLayerQuery(getLayersQuery());
1508
                par.setInfoLayerQuery(getQueryableLayerQuery());
1509
                par.setSRS(getSRS());
1510
                par.setWmsTransparency(getTransparency());
1511
                par.setStyles(getStyles());
1512
                par.setDimensions(getDimensions());
1513
                par.setOnlineResources(explorer.getOnlineResources());
1514
                par.setFixedSize(getFixedSize());
1515
                par.setQueryable(explorer.isQueryable());
1516
                par.setName(getLayerName());
1517
                par.setURI(explorer.getHost());
1518
                
1519
                FLyrWMS layer = new FLyrWMS();
1520
                try {
1521
                        layer.setParameters(par);
1522
                        layer.setExplorer(explorer);
1523
                        layer.setFullExtent(getLayersRectangle());
1524
                } catch (InitializeException e) {
1525
                        throw new LoadLayerException("Error initializating layer", e);
1526
                }
1527
                return layer;
1528
        }
1529

    
1530
        // ---------------------
1531

    
1532
        public Dimension getFixedSize() {
1533
                return sizeFixed;
1534
        }
1535

    
1536
        /**
1537
         * This method initializes chkExtendedNames
1538
         *
1539
         * @return CheckBox
1540
         */
1541
        private JCheckBox getChkExtendedNames() {
1542
                if (chkExtendedNames == null) {
1543
                        chkExtendedNames = new JCheckBox();
1544
                        chkExtendedNames.setText(PluginServices.getText(this,
1545
                                        "show_layer_names"));
1546
                        chkExtendedNames.addItemListener(new java.awt.event.ItemListener() {
1547
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1548
                                        boolean b = chkExtendedNames.isSelected();
1549
                                        getTreeLayers().showLayerNames = b;
1550
                                        getTreeLayers().repaint();
1551
                                        getLstSelectedLayers().showLayerNames = b;
1552
                                        getLstSelectedLayers().repaint();
1553
                                        getStyleTree().showLayerNames = b;
1554
                                }
1555
                        });
1556
                        chkExtendedNames
1557
                                        .addActionListener(new java.awt.event.ActionListener() {
1558
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
1559
                                                        fPrefs.putBoolean("show_layer_names",
1560
                                                                        chkExtendedNames.isSelected());
1561
                                                }
1562
                                        });
1563
                        chkExtendedNames.setBounds(19, 300, 212, 20);
1564
                        chkExtendedNames.setSelected(fPrefs.getBoolean("show_layer_names",
1565
                                        false));
1566

    
1567
                }
1568
                return chkExtendedNames;
1569
        }
1570

    
1571
        /**
1572
         * This method initializes btnUp
1573
         *
1574
         * @return Button
1575
         */
1576
        private JButton getBtnUp() {
1577
                if (btnUp == null) {
1578
                        btnUp = new JButton();
1579
                        btnUp.setBounds(438, 184, 30, 30);
1580
                        btnUp.setToolTipText(PluginServices.getText(this, "move_layer_up"));
1581
                        btnUp.addActionListener(new java.awt.event.ActionListener() {
1582
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1583
                                        LayerList list = getLstSelectedLayers();
1584
                                        int[] selectedIndices = list.getSelectedIndices();
1585
                                        int index = list.getSelectedIndex();
1586
                                        if (selectedIndices != null && selectedIndices.length == 1
1587
                                                        && index > 0) {
1588
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1589
                                                m.itemsMoved(index - 1, new int[] { index });
1590
                                                list.setSelectedIndex(index - 1);
1591
                                        }
1592
                                }
1593
                        });
1594
                        btnUp.setIcon(PluginServices.getIconTheme().get("aplication-preferences-uparrow"));
1595
                }
1596
                return btnUp;
1597
        }
1598

    
1599
        /**
1600
         * This method initializes btnDown
1601
         *
1602
         * @return Button
1603
         */
1604
        private JButton getBtnDown() {
1605
                if (btnDown == null) {
1606
                        btnDown = new JButton();
1607
                        btnDown.setBounds(438, 215, 30, 30);
1608
                        btnDown.setToolTipText(PluginServices.getText(this,
1609
                                        "move_layer_down"));
1610
                        btnDown.addActionListener(new java.awt.event.ActionListener() {
1611
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1612
                                        LayerList list = getLstSelectedLayers();
1613
                                        int[] selectedIndices = list.getSelectedIndices();
1614
                                        int index = list.getSelectedIndex();
1615
                                        if (selectedIndices != null
1616
                                                        && selectedIndices.length == 1
1617
                                                        && index < getLstSelectedLayers().getModel()
1618
                                                                        .getSize() - 1) {
1619
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1620
                                                m.itemsMoved(index + 1, new int[] { index });
1621
                                                list.setSelectedIndex(index + 1);
1622
                                        }
1623
                                }
1624
                        });
1625
                        btnDown.setIcon(PluginServices.getIconTheme()
1626
                                        .get("aplication-preferences-downarrow"));
1627
                }
1628
                return btnDown;
1629
        }
1630

    
1631
        public void setFixedSize(Dimension sz) {
1632
                sizeFixed = sz;
1633
        }
1634

    
1635
        public ArrayList getSelectedPaths() {
1636
                return selectedPaths;
1637
        }
1638

    
1639
        public LayerTree getJustTreeLayer() {
1640
                return treeLayers;
1641
        }
1642

    
1643
        /**
1644
         * This method initializes chkDisagregate
1645
         *
1646
         * @return CheckBox
1647
         */
1648
        private JCheckBox getChkDisagregate() {
1649
                if (chkDisagregate == null) {
1650

    
1651
                        chkDisagregate = new JCheckBox();
1652
                        chkDisagregate.setBounds(new java.awt.Rectangle(19,276,269,20));
1653
                        chkDisagregate.setText(PluginServices.getText(this,
1654
                                        "disagregate_layers"));
1655
                        chkDisagregate.setSelected(false);
1656

    
1657
                }
1658
                return chkDisagregate;
1659
        }
1660

    
1661
        public boolean getDisagregatedLayers() {
1662
                return chkDisagregate.isSelected();
1663
        }
1664

    
1665
        public void disableDisagregatedLayers() {
1666
                chkDisagregate.setEnabled(false);
1667
        }
1668

    
1669
        @Override
1670
        public DataStoreParameters[] getParameters() {
1671
                // TODO Auto-generated method stub
1672
                return null;
1673
        }
1674

    
1675
        @Override
1676
        public void close() {
1677
                // Nothing to do
1678
        }
1679
        
1680
        public WMSServerExplorer getExplorer() {
1681
                return explorer;
1682
        }
1683
} // @jve:decl-index=0:visual-constraint="10,10"