Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extWMS / src / org / gvsig / wms / gui / panels / WMSParamsPanel.java @ 31496

History | View | Annotate | Download (44.7 KB)

1
/* gvSIG. Sistema de Informaci�n Geogr�fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
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., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib��ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package org.gvsig.wms.gui.panels;
42

    
43
import java.awt.Component;
44
import java.awt.Dimension;
45
import java.awt.event.FocusAdapter;
46
import java.awt.event.FocusEvent;
47
import java.awt.event.FocusListener;
48
import java.awt.event.MouseAdapter;
49
import java.awt.event.MouseEvent;
50
import java.awt.geom.Rectangle2D;
51
import java.net.MalformedURLException;
52
import java.net.URL;
53
import java.util.AbstractCollection;
54
import java.util.ArrayList;
55
import java.util.Hashtable;
56
import java.util.TreeSet;
57
import java.util.Vector;
58
import java.util.prefs.Preferences;
59

    
60
import javax.swing.JCheckBox;
61
import javax.swing.JList;
62
import javax.swing.JOptionPane;
63
import javax.swing.JPanel;
64
import javax.swing.JScrollPane;
65
import javax.swing.JTabbedPane;
66
import javax.swing.JTextField;
67
import javax.swing.tree.TreePath;
68

    
69
import org.cresques.cts.ICoordTrans;
70
import org.cresques.cts.IProjection;
71
import org.gvsig.andami.PluginServices;
72
import org.gvsig.andami.messages.NotificationManager;
73
import org.gvsig.app.gui.WizardPanel;
74
import org.gvsig.app.gui.wizards.FormatListModel;
75
import org.gvsig.app.gui.wizards.WizardListenerSupport;
76
import org.gvsig.fmap.crs.CRSFactory;
77
import org.gvsig.fmap.dal.DataStoreParameters;
78
import org.gvsig.fmap.mapcontext.exceptions.ProjectionLayerException;
79
import org.gvsig.fmap.mapcontext.layers.FLayer;
80
import org.gvsig.fmap.mapcontext.layers.FLayers;
81
import org.gvsig.gui.beans.controls.dnd.JDnDListModel;
82
import org.gvsig.gui.beans.listeners.BeanListener;
83
import org.gvsig.gui.beans.swing.JButton;
84
import org.gvsig.wms.fmap.drivers.wms.FMapWMSDriver;
85
import org.gvsig.wms.fmap.layers.FLyrWMS;
86
import org.gvsig.wms.fmap.layers.IFMapWMSDimension;
87
import org.gvsig.wms.fmap.layers.WMSLayerNode;
88
import org.gvsig.wms.fmap.layers.WMSLayerNode.FMapWMSStyle;
89
import org.gvsig.wms.gui.wizards.LayerTreeModel;
90
import org.gvsig.wms.gui.wizards.SRSListModel;
91
import org.gvsig.wms.gui.wizards.WMSWizardData;
92

    
93

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

    
155
        public static Preferences fPrefs = Preferences.userRoot().node(
156
                        "gvsig.wms-wizard");
157

    
158
        private JCheckBox chkDisagregate = null;
159

    
160
        public WMSParamsPanel() {
161
                super();
162
                initialize();
163
        }
164

    
165
        // TODO: crear nuevo constructor para a�adir los panels que quieras...
166
        public WMSParamsPanel(WMSWizardData data) {
167
                super();
168
                setWizardData(data);
169
                this.setLayout(null);
170
                this.setVisible(false);
171
                this.setBounds(0, 0, 510, 427);
172
                if (jTabbedPane == null) {
173
                        jTabbedPane = new JTabbedPane();
174
                        jTabbedPane.setBounds(4, 4, 502, 415);
175
                        StylesPanel sp = getTabStyle();
176
                        DimensionPanel dp = getTabDimensions();
177

    
178
                        jTabbedPane.addTab(PluginServices.getText(this, "capas"), null,
179
                                        getTabLayers(), null);
180
                        jTabbedPane.addTab(PluginServices.getText(this, "estilos"), null,
181
                                        sp, null);
182
                        stylesTabIndex = jTabbedPane.getTabCount() - 1;
183
                        jTabbedPane.addTab(PluginServices.getText(this, "dimensiones"),
184
                                        null, dp, null);
185
                        dimensionTabIndex = jTabbedPane.getTabCount() - 1;
186
                        jTabbedPane.addTab(PluginServices.getText(this, "formatos"), null,
187
                                        getTabFormats(), null);
188
                        jTabbedPane.setEnabledAt(dimensionTabIndex, false);
189
                        jTabbedPane.setEnabledAt(stylesTabIndex, false);
190
                }
191
                this.add(jTabbedPane, null);
192

    
193
                setListenerSupport(new WizardListenerSupport());
194
        }
195

    
196
        /**
197
         * This method initializes panelPage2
198
         *
199
         * @return Panel
200
         */
201
        private void initialize() {
202
                this.setLayout(null);
203
                this.setVisible(false);
204
                this.setBounds(0, 0, 510, 427);
205
                this.add(getJTabbedPane(), null);
206
        }
207

    
208
        /**
209
         * This method initializes jPanel2
210
         *
211
         * @return Panel
212
         */
213
        private JPanel getJPanel2() {
214
                if (jPanel2 == null) {
215
                        jPanel2 = new JPanel();
216
                        jPanel2.setLayout(null);
217
                        jPanel2.setBounds(5, 59, 485, 328);
218
                        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
219
                                        null, PluginServices.getText(this, "select_layers"),
220
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
221
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
222
                                        null));
223
                        jPanel2.add(getChkExtendedNames(), null);
224

    
225
                        jPanel2.add(getJScrollPane1(), null);
226
                        jPanel2.add(getBtnDel(), null);
227
                        jPanel2.add(getBtnAdd(), null);
228
                        jPanel2.add(getJScrollPane5(), null);
229
                        jPanel2.add(getBtnUp(), null);
230
                        jPanel2.add(getBtnDown(), null);
231
                        jPanel2.add(getChkDisagregate(), null);
232
                }
233

    
234
                return jPanel2;
235
        }
236

    
237
        /**
238
         * This method initializes jPanel4
239
         *
240
         * @return Panel
241
         */
242
        private JPanel getJPanel4() {
243
                if (jPanel4 == null) {
244
                        jPanel4 = new JPanel();
245
                        jPanel4.setLayout(null);
246
                        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
247
                                        null, PluginServices.getText(this, "layer_name"),
248
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
249
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
250
                                        null));
251
                        jPanel4.setBounds(5, 8, 485, 49);
252
                        jPanel4.add(getJTxtNomCapa(), null);
253
                }
254

    
255
                return jPanel4;
256
        }
257

    
258
        /**
259
         * This method initializes jPanel3
260
         *
261
         * @return Panel
262
         */
263
        private JPanel getTabFormats() {
264
                if (tabFormats == null) {
265
                        tabFormats = new JPanel();
266
                        tabFormats.setLayout(null);
267
                        tabFormats.add(getJPanel1(), null);
268
                        tabFormats.add(getJPanel5(), null);
269
                }
270

    
271
                return tabFormats;
272
        }
273

    
274
        /**
275
         * This method initializes jScrollPane1
276
         *
277
         * @return ScrollPane
278
         */
279
        private JScrollPane getJScrollPane1() {
280
                if (jScrollPane1 == null) {
281
                        jScrollPane1 = new JScrollPane();
282
                        jScrollPane1.setBounds(11, 22, 460, 123);
283
                        jScrollPane1.setViewportView(getTreeLayers());
284
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(205, 75));
285
                }
286

    
287
                return jScrollPane1;
288
        }
289

    
290
        /**
291
         * This method initializes btnDel
292
         *
293
         * @return Button
294
         */
295
        private JButton getBtnDel() {
296
                if (btnDel == null) {
297
                        btnDel = new JButton();
298
                        // btnDel.setPreferredSize(new java.awt.Dimension(23, 23));
299
                        btnDel.setText(PluginServices.getText(this, "remove"));
300
                        btnDel.setMargin(new java.awt.Insets(2, 0, 2, 0));
301
                        btnDel.setBounds(339, 300, 101, 20);
302
                        btnDel.setEnabled(false);
303
                        btnDel.addActionListener(new java.awt.event.ActionListener() {
304
                                public void actionPerformed(java.awt.event.ActionEvent e) {
305
                                        delLayer();
306
                                }
307
                        });
308
                }
309
                return btnDel;
310
        }
311

    
312
        /**
313
         * This method initializes btnAdd
314
         *
315
         * @return Button
316
         */
317
        private JButton getBtnAdd() {
318
                if (btnAdd == null) {
319
                        btnAdd = new JButton();
320
                        // btnAdd.setPreferredSize(new java.awt.Dimension(23, 23));
321
                        btnAdd.setText(PluginServices.getText(this, "add"));
322
                        btnAdd.setMargin(new java.awt.Insets(2, 0, 2, 0));
323
                        btnAdd.setBounds(236, 300, 101, 20);
324
                        btnAdd.setEnabled(false);
325
                        btnAdd.addActionListener(new java.awt.event.ActionListener() {
326
                                public void actionPerformed(java.awt.event.ActionEvent e) {
327
                                        addLayer();
328
                                }
329
                        });
330
                }
331
                return btnAdd;
332
        }
333

    
334
        /**
335
         * This method initializes jScrollPane5
336
         *
337
         * @return ScrollPane
338
         */
339
        private JScrollPane getJScrollPane5() {
340
                if (jScrollPane5 == null) {
341
                        jScrollPane5 = new JScrollPane();
342
                        jScrollPane5.setBounds(11, 155, 422, 120);
343
                        jScrollPane5.setViewportView(getLstSelectedLayers());
344
                        jScrollPane5.setPreferredSize(new java.awt.Dimension(205, 75));
345
                }
346

    
347
                return jScrollPane5;
348
        }
349

    
350
        /**
351
         * This method initializes jTextField
352
         *
353
         * @return TextField
354
         */
355
        private JTextField getJTxtNomCapa() {
356
                if (jTxtNomCapa == null) {
357
                        jTxtNomCapa = new JTextField();
358
                        jTxtNomCapa.setBounds(10, 19, 460, 20);
359
                        jTxtNomCapa.setText(PluginServices.getText(this, "WMSLayer"));
360
                        jTxtNomCapa.addKeyListener(new java.awt.event.KeyAdapter() {
361
                                public void keyTyped(java.awt.event.KeyEvent e) {
362
                                        fireWizardComplete(isCorrectlyConfigured());
363
                                }
364
                        });
365
                }
366

    
367
                return jTxtNomCapa;
368
        }
369

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

    
383
                return jScrollPane6;
384
        }
385

    
386
        /**
387
         * This method initializes jScrollPane2
388
         *
389
         * @return ScrollPane
390
         */
391
        private JScrollPane getJScrollPane2() {
392
                if (jScrollPane2 == null) {
393
                        jScrollPane2 = new JScrollPane();
394
                        jScrollPane2.setBounds(5, 23, 470, 140);
395
                        jScrollPane2.setViewportView(getLstSRSs());
396
                        jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 200));
397
                }
398

    
399
                return jScrollPane2;
400
        }
401

    
402
        /**
403
         * Gets the available layers in WMS maintaining the tree structure
404
         *
405
         * @return
406
         */
407
        public LayerTree getLayerStructure() {
408
                return treeLayers;
409
        }
410

    
411
        /**
412
         * This method initializes treeLayers
413
         *
414
         * @return Tree
415
         */
416
        private LayerTree getTreeLayers() {
417
                if (treeLayers == null) {
418
                        treeLayers = new LayerTree();
419
                        treeLayers.setRootVisible(true);
420
                        treeLayers.addMouseListener(new java.awt.event.MouseAdapter() {
421
                                public void mouseClicked(java.awt.event.MouseEvent e) {
422
                                        if (e.getClickCount() == 2) {
423
                                                addLayer();
424
                                        }
425
                                }
426
                        });
427
                        treeLayers
428
                                        .addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
429
                                                public void valueChanged(
430
                                                                javax.swing.event.TreeSelectionEvent e) {
431

    
432
                                                        boolean isGetMapable = false; // pffff, jajaja
433
                                                        TreePath[] selecciones = getTreeLayers()
434
                                                                        .getSelectionPaths();
435
                                                        if (selecciones != null) // no entenc perqu�
436
                                                                                                                // peta ac� i li
437
                                                                                                                // arriba null a
438
                                                                                                                // voltes...
439
                                                        {
440
                                                                for (int i = 0; i < selecciones.length
441
                                                                                && !isGetMapable; i++) {
442
                                                                        WMSLayerNode layer = ((WMSLayerNode) selecciones[i]
443
                                                                                        .getLastPathComponent());
444
                                                                        isGetMapable = layer.getChildren().size() == 0
445
                                                                                        || layer.getName() != null;
446
                                                                }
447

    
448
                                                        }
449
                                                        getBtnAdd().setEnabled(isGetMapable);
450
                                                        fireWizardComplete(isCorrectlyConfigured());
451
                                                }
452
                                        });
453
                }
454

    
455
                return treeLayers;
456
        }
457

    
458
        /**
459
         * This method checks for the options selected within the configuration
460
         * dialog are correct and enough to perform a GetMap request.
461
         *
462
         * @return true if you're done, false if not.
463
         */
464
        public boolean isCorrectlyConfigured() {
465

    
466
                boolean b;
467
                this.repaint();
468
                if ((getLstSRSs().getSelectedIndex() != -1)
469
                                && (getLstFormats().getSelectedIndex() != -1)
470
                                && (getLstSelectedLayers().getModel().getSize() > 0)) {
471
                        b = true;
472
                } else {
473
                        b = false;
474
                }
475

    
476
                // Enable or disable del button.
477
                int[] selectedIndices = getLstSelectedLayers().getSelectedIndices();
478

    
479
                getBtnDel().setEnabled(
480
                                selectedIndices != null && selectedIndices.length > 0);
481

    
482
                return b;
483
        }
484

    
485
        public WMSLayerNode[] selectedLayersToArray() {
486
                JDnDListModel modelo = ((JDnDListModel) lstSelectedLayers.getModel());
487
                ArrayList elements = modelo.getElements();
488
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
489
                                .toArray(new WMSLayerNode[0]);
490
                return layers;
491
        }
492

    
493
        /**
494
         * DOCUMENT ME!
495
         */
496
        private void delLayer() {
497
                int[] indices = lstSelectedLayers.getSelectedIndices();
498

    
499
                try {
500
                        ArrayList removeList = new ArrayList();
501
                        WMSLayerNode[] infos = selectedLayersToArray();
502
                        JDnDListModel modelo = ((JDnDListModel) lstSelectedLayers
503
                                        .getModel());
504
                        for (int i = 0; i < indices.length; i++) {
505
                                removeList.add(infos[indices[i]]);
506
                        }
507
                        modelo.delIndices(indices);
508
                        lstSelectedLayers.clearSelection();
509
                        fireWizardComplete(isCorrectlyConfigured());
510

    
511
                        // delete from selectedPaths as well
512
                        WMSLayerNode elemento = null;
513
                        WMSLayerNode last = null;
514
                        TreePath path = null;
515
                        for (int i = removeList.size() - 1; i >= 0; i--) {
516
                                elemento = (WMSLayerNode) removeList.get(i);
517
                                for (int j = 0; j < selectedPaths.size(); j++) {
518
                                        path = (TreePath) selectedPaths.get(j);
519
                                        last = (WMSLayerNode) path.getLastPathComponent();
520
                                        if (last.getTitle().compareTo(elemento.getTitle()) == 0) {
521
                                                selectedPaths.remove(path);
522
                                        }
523
                                }
524
                        }
525

    
526
                        refreshData();
527
                        refreshInfo();
528
                } catch (ArrayIndexOutOfBoundsException ex) {
529
                        // if you reach this, please, tell me how you did it.
530
                        ex.printStackTrace();
531
                }
532
        }
533

    
534
        /**
535
         * Fires a notification to this wizard listeners telling them if the
536
         * configuration is fair enough to send a GetMap request.
537
         *
538
         * @param b
539
         */
540
        private void fireWizardComplete(boolean b) {
541
                listenerSupport.callStateChanged(b);
542
                callStateChanged(b);
543
        }
544

    
545
        /**
546
         * Refreshes the content shown by this.
547
         */
548
        public void refreshData() {
549
                refreshSRS();
550
                getLstSelectedLayers().repaint();
551
                refreshStyleTree();
552
                refreshDimensions();
553

    
554
        }
555

    
556
        /**
557
         * Refreshes the info tab
558
         *
559
         */
560
        public void refreshInfo() {
561
                getTabInfo().refresh(dataSource, selectedLayersVector(),
562
                                getStyleTitles(), getFormat(), getSRS(), getDimensions());
563
        }
564

    
565
        private void refreshDimensions() {
566
                int size = getLstSelectedLayers().getModel().getSize();
567
                boolean enable = false;
568
                for (int i = 0; i < size; i++) {
569
                        WMSLayerNode node = (WMSLayerNode) getLstSelectedLayers()
570
                                        .getModel().getElementAt(i);
571
                        if (node.getDimensions() == null) {
572
                                continue;
573
                        }
574

    
575
                        for (int j = 0; j < node.getDimensions().size(); j++) {
576
                                IFMapWMSDimension dim = (IFMapWMSDimension) node
577
                                                .getDimensions().get(j);
578

    
579
                                try {
580
                                        getTabDimensions().addDimension(dim);
581
                                        enable = true;
582
                                } catch (IllegalArgumentException e) {
583
                                        NotificationManager.addWarning(
584
                                                        "Unrecognized dimension expression: "
585
                                                                        + dim.getExpression() + " (for "
586
                                                                        + dim.getName() + " in layer '"
587
                                                                        + node.getName() + "')", null);
588
                                }
589
                        }
590
                }
591
                jTabbedPane.setEnabledAt(dimensionTabIndex, enable);
592

    
593
        }
594

    
595
        /**
596
         *
597
         */
598
        private void refreshStyleTree() {
599

    
600
                int size = getLstSelectedLayers().getModel().getSize();
601
                WMSLayerNode styleRoot = new WMSLayerNode();
602
                styleRoot.setTitle(PluginServices.getText(this, "selected_layers"));
603

    
604
                StyleTreeModel model = new StyleTreeModel(styleRoot);
605
                jTabbedPane.setEnabledAt(stylesTabIndex, false);
606
                for (int i = 0; i < size; i++) {
607
                        WMSLayerNode node = (WMSLayerNode) getLstSelectedLayers()
608
                                        .getModel().getElementAt(i);
609
                        // If any of the layers defines styles, the tab will be enabled.
610
                        if (model.addLayerBranch(node)) {
611
                                jTabbedPane.setEnabledAt(stylesTabIndex, true);
612
                        }
613
                }
614

    
615
                getStyleTree().setModel(model);
616
                getStyleTree().expandAll();
617
                getStyleTree().repaint();
618
        }
619

    
620
        /**
621
         * Takes the array of selected layers and a vector containing the style
622
         * names and set them as selected in the styles panel
623
         *
624
         * @param selectedLayers
625
         * @param styles
626
         */
627
        public void setStyleSelections(Vector styles) {
628

    
629
                WMSLayerNode[] layers = selectedLayersToArray();
630
                int length = layers.length;
631
                for (int i = 0; i < length; i++) {
632
                        String styleName = (String) styles.get(i);
633
                        layers[length - i - 1].setSelectedStyleByName(styleName);
634
                }
635
        }
636

    
637
        /**
638
         * Gets the currently shown style tree.
639
         *
640
         * @return
641
         */
642
        private StyleTree getStyleTree() {
643
                return getTabStyle().getStyleTree();
644
        }
645

    
646
        /**
647
         * Method called when pressing the Add layer button or when double-clicking
648
         * on a layer from the server's layer tree.
649
         */
650
        public void addLayer() {
651
                boolean alguno = false;
652

    
653
                TreePath[] selecciones = getTreeLayers().getSelectionPaths();
654
                if (selecciones == null) {
655
                        return;
656
                }
657
                for (int i = 0; i < selecciones.length; i++) {
658
                        selectedPaths.add(selecciones[i]);
659
                        WMSLayerNode nodo = (WMSLayerNode) selecciones[i]
660
                                        .getLastPathComponent();
661
                        if (nodo.getName() == null || nodo.getName().equals("")) {
662
                                // no es un node que es puga demanar
663
                                continue;
664
                        }
665
                        if (nodo.isSizeFixed()) {
666
                                if (sizeFixed == null) {
667
                                        sizeFixed = nodo.getFixedSize();
668
                                } else if ((sizeFixed.getHeight() != nodo.getFixedSize()
669
                                                .getHeight())
670
                                                || (sizeFixed.getWidth() != nodo.getFixedSize()
671
                                                                .getWidth())) {
672
                                        JOptionPane.showMessageDialog((Component) PluginServices
673
                                                        .getMainFrame(), PluginServices.getText(this,
674
                                                        "server_cant_render_layers"));
675
                                        continue;
676
                                }
677
                        }
678
                        // s'afegeix a la llista de capes seleccionades
679
                        JDnDListModel modelo = (JDnDListModel) lstSelectedLayers.getModel();
680

    
681
                        if (modelo.addElement(0, nodo.clone())) {
682
                                alguno = true;
683
                        }
684
                }
685

    
686
                if (alguno) {
687
                        refreshData();
688
                }
689
                refreshInfo();
690
        }
691

    
692
        /**
693
         * This method initializes lstSelectedLayers
694
         *
695
         * @return List
696
         */
697
        public LayerList getLstSelectedLayers() {
698
                if (lstSelectedLayers == null) {
699
                        lstSelectedLayers = new LayerList();
700
                        lstSelectedLayers.setModel(new JDnDListModel());
701
                        lstSelectedLayers
702
                                        .setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
703
                        lstSelectedLayers
704
                                        .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
705
                                                public void valueChanged(
706
                                                                javax.swing.event.ListSelectionEvent e) {
707
                                                        fireWizardComplete(isCorrectlyConfigured());
708
                                                }
709
                                        });
710
                        lstSelectedLayers.addMouseListener(new MouseAdapter() {
711
                                public void mouseReleased(MouseEvent e) {
712
                                        refreshData();
713
                                }
714
                        });
715
                }
716

    
717
                return lstSelectedLayers;
718
        }
719

    
720
        /**
721
         * This method initializes lstSRSs
722
         *
723
         * @return JList
724
         */
725
        public JList getLstSRSs() {
726
                if (lstSRSs == null) {
727
                        lstSRSs = new JList();
728
                        lstSRSs.setModel(new SRSListModel());
729
                        lstSRSs
730
                                        .setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
731
                        lstSRSs
732
                                        .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
733
                                                public void valueChanged(
734
                                                                javax.swing.event.ListSelectionEvent e) {
735
                                                        int i = lstSRSs.getSelectedIndex();
736
                                                        if (i != -1) {
737
                                                                oldSRS = (String) lstSRSs.getModel()
738
                                                                                .getElementAt(i);
739
                                                        }
740
                                                        fireWizardComplete(isCorrectlyConfigured());
741
                                                }
742
                                        });
743
                }
744

    
745
                return lstSRSs;
746
        }
747

    
748
        /**
749
         * This method initializes lstFormats
750
         *
751
         * @return List
752
         */
753
        public JList getLstFormats() {
754
                if (lstFormats == null) {
755
                        lstFormats = new JList();
756
                        lstFormats
757
                                        .setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
758
                        lstFormats
759
                                        .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
760
                                                public void valueChanged(
761
                                                                javax.swing.event.ListSelectionEvent e) {
762
                                                        fireWizardComplete(isCorrectlyConfigured());
763
                                                }
764
                                        });
765
                }
766

    
767
                return lstFormats;
768
        }
769

    
770
        /**
771
         * Refreshes the SRS list
772
         */
773
        private void refreshSRS() {
774
                ArrayList elements = ((JDnDListModel) lstSelectedLayers.getModel())
775
                                .getElements();
776
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
777
                                .toArray(new WMSLayerNode[0]);
778

    
779
                SRSListModel model = new SRSListModel();
780

    
781
                if (layers.length == 0) {
782
                        lstSRSs.setModel(model);// new DefaultListModel());
783
                        sizeFixed = null;
784
                } else {
785
                        TreeSet srsSet = new TreeSet();
786
                        srsSet.addAll(layers[0].getAllSrs());
787
                        model.setAll(srsSet);
788
                        for (int i = 1; i < layers.length; i++) {
789
                                model.setAll(model.intersect(layers[i].getAllSrs()));
790
                        }
791
                        lstSRSs.setModel(model);
792
                }
793
                int srsIndex = getSRSIndex(oldSRS);
794
                if (srsIndex != -1) {
795
                        getLstSRSs().setSelectedIndex(srsIndex);
796
                }
797

    
798
        }
799

    
800
        public void setListenerSupport(WizardListenerSupport support) {
801
                listenerSupport = support;
802
        }
803

    
804
        public void setWizardData(WMSWizardData data) {
805
                this.dataSource = data;
806
                ((JDnDListModel) getLstSelectedLayers().getModel()).clear();
807
                getLstSelectedLayers().repaint();
808

    
809
                getLstFormats().setModel(
810
                                new FormatListModel(this.dataSource.getFormats()));
811
                getTreeLayers()
812
                                .setModel(new LayerTreeModel(this.dataSource.getLayer()));
813
                refreshInfo();
814
        }
815

    
816
        private Vector getStyleTitles() {
817
                return getTabStyle().getStyleTree().getStyleSelectionTitles();
818
        }
819

    
820
        /**
821
         * @return
822
         */
823
        private Vector selectedLayersVector() {
824
                JDnDListModel mod = (JDnDListModel) getLstSelectedLayers().getModel();
825
                Vector lyrs = new Vector();
826
                for (int i = 0; i < mod.getSize(); i++) {
827
                        lyrs.add(mod.getElementAt(i));
828
                }
829
                return lyrs;
830
        }
831

    
832
        public String getFormat() {
833
                return (String) getLstFormats().getSelectedValue();
834
        }
835

    
836
        public String getLayersQuery() {
837
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
838
                                .getElements();
839
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
840
                                .toArray(new WMSLayerNode[0]);
841

    
842
                // Nombre separado por comas de las capas
843
                String layersQuery = layers[layers.length - 1].getName();
844

    
845
                for (int i = layers.length - 2; i >= 0; i--) {
846
                        layersQuery += ("," + layers[i].getName());
847
                }
848

    
849
                return layersQuery;
850

    
851
        }
852

    
853
        /**
854
         * Returns the current selected SRS.
855
         *
856
         * @return
857
         */
858
        public String getSRS() {
859
                return (String) getLstSRSs().getSelectedValue();
860
        }
861

    
862
        /**
863
         * Returns the name of the layer that the user has typed-in
864
         *
865
         * @return
866
         */
867
        public String getLayerName() {
868
                return getJTxtNomCapa().getText();
869
        }
870

    
871
        public void setLayerName(String name) {
872
                getJTxtNomCapa().setText(name);
873
        }
874

    
875
        public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
876
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
877
                                .getElements();
878
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
879
                                .toArray(new WMSLayerNode[0]);
880
                String[] layerNames = new String[layers.length];
881
                for (int i = 0; i < layerNames.length; i++) {
882
                        layerNames[i] = layers[i].getName();
883
                }
884
                // Boundingbox de todas las capas
885
                // ArrayList rectangulos = new ArrayList();
886

    
887
                Rectangle2D rect;
888
                String latLonID;
889

    
890
                rect = dataSource.getBoundingBox(layerNames, getSRS());
891
                if (rect == null) {
892
                        latLonID = "EPSG:4326";
893
                        rect = dataSource.getBoundingBox(layerNames, latLonID);
894
                        if (rect == null) {
895
                                rect = dataSource.getBoundingBox(layerNames, "CRS:84");
896
                        }
897

    
898
                        IProjection reqProj = CRSFactory.getCRS(getSRS());
899
                        IProjection latLonProj = CRSFactory.getCRS(latLonID);
900
                        if ((reqProj != null) && (latLonProj != null)) {
901
                                ICoordTrans ct = latLonProj.getCT(reqProj);
902
                                Rectangle2D reprojectedRect;
903
                                reprojectedRect = ct.convert(rect);
904
                                rect = reprojectedRect;
905
                        } else {
906
//                                throw new ProjectionLayerException(PluginServices.getText(this,
907
//                                                "cannotReproject")
908
//                                                + " " + getSRS() + " -> " + latLonID);
909
                                throw new ProjectionLayerException(getName(),null);
910
                        }
911
                }
912

    
913
                return rect;
914
        }
915

    
916
        public TreePath[] getSelectedLayers() {
917
                return getTreeLayers().getSelectionPaths();
918
        }
919

    
920
        public Hashtable getOnlineResources() {
921
                return dataSource.getOnlineResources();
922
        }
923

    
924
        /**
925
         * The piece of the GetMap request that has the layer names.
926
         *
927
         * @return
928
         */
929
        public String getQueryableLayerQuery() {
930
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
931
                                .getElements();
932
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
933
                                .toArray(new WMSLayerNode[0]);
934
                // Nombre separado por comas de las capas
935
                String layersQuery = "";
936
                int i;
937

    
938
                for (i = 0; i < layers.length; i++) {
939
                        if (layers[i].isQueryable()) {
940
                                layersQuery = layers[i].getName();
941

    
942
                                break;
943
                        }
944
                }
945

    
946
                for (int j = i + 1; j < layers.length; j++) {
947
                        if (layers[j].isQueryable()) {
948
                                layersQuery += ("," + layers[j].getName());
949
                        }
950
                }
951

    
952
                return layersQuery;
953
        }
954

    
955
        /**
956
         * Returns the index of the CRS within the CRS list.
957
         *
958
         * Devuelve la posicion que ocupa el CRS en la lista de CRS
959
         *
960
         * @param crs
961
         * @return The CRS's index if it exists, -1 if it not exists.
962
         */
963
        public int getSRSIndex(String crs) {
964
                for (int i = 0; i < getLstSRSs().getModel().getSize(); i++) {
965
                        if (crs != null
966
                                        && crs.equals(getLstSRSs().getModel().getElementAt(i))) {
967
                                return i;
968
                        }
969
                }
970
                return -1;
971
        }
972

    
973
        /**
974
         * Returns the index of the format within the formats list.
975
         *
976
         * Devuelve la posicion que ocupa el formato en la lista de formatos
977
         *
978
         * @param format
979
         *
980
         * @return The format's index if it exists, -1 if it not exists.
981
         */
982
        public int getFormatIndex(String format) {
983
                for (int i = 0; i < getLstFormats().getModel().getSize(); i++) {
984
                        if (format != null
985
                                        && format
986
                                                        .equals(getLstFormats().getModel().getElementAt(i))) {
987
                                return i;
988
                        }
989
                }
990
                return -1;
991
        }
992

    
993
        /**
994
         * This method initializes jTabbedPane
995
         *
996
         * @return TabbedPane
997
         */
998
        public JTabbedPane getJTabbedPane() {
999
                if (jTabbedPane == null) {
1000
                        jTabbedPane = new JTabbedPane();
1001
                        jTabbedPane.setBounds(4, 4, 502, 415);
1002
                        InfoPanel ip = getTabInfo();
1003
                        ip.addFocusListener(new FocusListener() {
1004
                                public void focusGained(FocusEvent e) {
1005
                                        refreshInfo();
1006
                                }
1007

    
1008
                                public void focusLost(FocusEvent e) {
1009
                                }
1010
                        });
1011

    
1012
                        StylesPanel sp = getTabStyle();
1013
                        DimensionPanel dp = getTabDimensions();
1014

    
1015
                        jTabbedPane.addTab(PluginServices.getText(this, "info"), null, ip,
1016
                                        null);
1017
                        jTabbedPane.addTab(PluginServices.getText(this, "capas"), null,
1018
                                        getTabLayers(), null);
1019
                        jTabbedPane.addTab(PluginServices.getText(this, "estilos"), null,
1020
                                        sp, null);
1021
                        stylesTabIndex = jTabbedPane.getTabCount() - 1;
1022
                        jTabbedPane.addTab(PluginServices.getText(this, "dimensiones"),
1023
                                        null, dp, null);
1024
                        dimensionTabIndex = jTabbedPane.getTabCount() - 1;
1025
                        jTabbedPane.addTab(PluginServices.getText(this, "formatos"), null,
1026
                                        getTabFormats(), null);
1027
                        jTabbedPane.setEnabledAt(dimensionTabIndex, false);
1028
                        jTabbedPane.setEnabledAt(stylesTabIndex, false);
1029
                }
1030
                return jTabbedPane;
1031
        }
1032

    
1033
        /**
1034
         * This method initializes jPanel
1035
         *
1036
         * @return Panel
1037
         */
1038
        private JPanel getTabLayers() {
1039
                if (tabLayers == null) {
1040
                        tabLayers = new JPanel();
1041
                        tabLayers.setLayout(null);
1042
                        tabLayers.add(getJPanel4(), null);
1043
                        tabLayers.add(getJPanel2(), null);
1044
                }
1045
                return tabLayers;
1046
        }
1047

    
1048
        /**
1049
         * This method initializes jPanel1
1050
         *
1051
         * @return Panel
1052
         */
1053
        private JPanel getJPanel1() {
1054
                if (jPanel1 == null) {
1055
                        jPanel1 = new JPanel();
1056
                        jPanel1.setLayout(null);
1057
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
1058
                                        null, PluginServices.getText(this, "select_formats"),
1059
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
1060
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
1061
                                        null));
1062
                        jPanel1.setBounds(5, 10, 485, 194);
1063
                        jPanel1.add(getJScrollPane6(), null);
1064
                        jPanel1.add(getChkTransparency(), null);
1065
                }
1066
                return jPanel1;
1067
        }
1068

    
1069
        /**
1070
         * This method initializes jPanel5
1071
         *
1072
         * @return Panel
1073
         */
1074
        private JPanel getJPanel5() {
1075
                if (jPanel5 == null) {
1076
                        jPanel5 = new JPanel();
1077
                        jPanel5.setLayout(null);
1078
                        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(
1079
                                        null, PluginServices.getText(this, "seleccionar_srs"),
1080
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
1081
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
1082
                                        null));
1083
                        jPanel5.setBounds(5, 205, 485, 173);
1084
                        jPanel5.add(getJScrollPane2(), null);
1085
                }
1086
                return jPanel5;
1087
        }
1088

    
1089
        /**
1090
         * This method initializes jPanel6
1091
         *
1092
         * @return Panel
1093
         */
1094
        private StylesPanel getTabStyle() {
1095
                if (tabStyle == null) {
1096
                        tabStyle = new StylesPanel(this);
1097
                        tabStyle.setEnabled(false);
1098
                        tabStyle.addListener(new BeanListener() {
1099
                                public void beanValueChanged(Object value) {
1100
                                        fireWizardComplete(isCorrectlyConfigured());
1101
                                };
1102
                        });
1103
                        tabStyle.addFocusListener(new FocusAdapter() {
1104
                                public void focusGained(FocusEvent e) {
1105
                                        refreshStyleTree();
1106
                                }
1107
                        });
1108
                }
1109
                return tabStyle;
1110
        }
1111

    
1112
        /**
1113
         * Sets the focus to the tab next to the current one.
1114
         *
1115
         * Enfoca a la solapa siguiente a la actualmente enfocada del TabbedPane
1116
         *
1117
         */
1118
        public void avanzaTab() {
1119
                int currentPage = currentPage();
1120
                int nPages = getNumTabs();
1121
                if (nPages - 1 > currentPage) {
1122
                        getJTabbedPane().setSelectedIndex(nextEnabledPage());
1123
                }
1124
        }
1125

    
1126
        /**
1127
         * Sets the focus to the tab previous to the current one.
1128
         *
1129
         * Enfoca a la solapa anterior a la actualmente enfocada del TabbedPane
1130
         *
1131
         */
1132
        public void retrocedeTab() {
1133
                this.getJTabbedPane().setSelectedIndex(previousEnabledPage());
1134

    
1135
        }
1136

    
1137
        /**
1138
         * Returns the index of the current tab.
1139
         *
1140
         * Devuelve el �ndice de la p�gina actual del wizard.
1141
         *
1142
         * @return
1143
         */
1144
        public int currentPage() {
1145
                return getJTabbedPane().getSelectedIndex();
1146
        }
1147

    
1148
        /**
1149
         * Returns the tab amount that the WMSParamsPanel currently have
1150
         *
1151
         * Devuelve el n�mero de solapas que tiene actualmente el WMSParamsPanel
1152
         *
1153
         * @return int
1154
         */
1155
        public int getNumTabs() {
1156
                return getJTabbedPane().getTabCount();
1157
        }
1158

    
1159
        /**
1160
         * <p>
1161
         * Returns the index of the previous enabled tab.
1162
         * </p>
1163
         * <p>
1164
         * Devuelve el �ndice de la anterior p�gina habilitada del wizard o -1
1165
         * si no hay ninguna.
1166
         * </p>
1167
         *
1168
         * @return The index, or -1 if there is no one.
1169
         */
1170
        public int previousEnabledPage() {
1171
                int currentPage = currentPage();
1172
                int j = 0;
1173
                if (currentPage == 0) {
1174
                        j = -1;
1175
                }
1176
                for (int i = currentPage - 1; i > -1; i--) {
1177
                        if (getJTabbedPane().isEnabledAt(i)) {
1178
                                j = i;
1179
                                break;
1180
                        }
1181
                }
1182
                return j;
1183
        }
1184

    
1185
        /**
1186
         * <p>
1187
         * Returns the previous of the previous enabled tab.
1188
         * </p>
1189
         * <p>
1190
         * Devuelve el �ndice de la siguiente p�gina habilitada del wizard o -1
1191
         * si no hay ninguna.
1192
         * </p>
1193
         *
1194
         * @return The index, or -1 if there is no one.
1195
         */
1196
        public int nextEnabledPage() {
1197
                int currentPage = currentPage();
1198
                int nPages = getNumTabs();
1199
                if (currentPage == nPages) {
1200
                        return -1;
1201
                }
1202
                for (int i = currentPage + 1; i < nPages; i++) {
1203
                        if (getJTabbedPane().isEnabledAt(i)) {
1204
                                return i;
1205
                        }
1206
                }
1207
                return -1;
1208
        }
1209

    
1210
        /**
1211
         * Selects/deselects the transparency checkbox.
1212
         *
1213
         * @param b
1214
         */
1215
        public void setTransparent(boolean b) {
1216
                getChkTransparency().setSelected(b);
1217
        }
1218

    
1219
        /**
1220
         * This method initializes chkTrasparency
1221
         *
1222
         * @return CheckBox
1223
         */
1224
        private JCheckBox getChkTransparency() {
1225
                if (chkTransparency == null) {
1226
                        chkTransparency = new JCheckBox();
1227
                        chkTransparency.setText(PluginServices.getText(this,
1228
                                        "wms_transparency"));
1229
                        chkTransparency.setSelected(true);
1230
                        chkTransparency.addItemListener(new java.awt.event.ItemListener() {
1231
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1232
                                        fireWizardComplete(isCorrectlyConfigured());
1233
                                }
1234
                        });
1235
                        chkTransparency.setBounds(5, 168, 441, 21);
1236

    
1237
                }
1238
                return chkTransparency;
1239
        }
1240

    
1241
        /**
1242
         * Returns a vector of strings containing the styles selected for the
1243
         * layers. A blank style is correct and means that default style will be
1244
         * used.
1245
         *
1246
         * @return Vector
1247
         */
1248
        public Vector getStyles() {
1249
                Vector v = new Vector();
1250
                WMSLayerNode[] layers = selectedLayersToArray();
1251
                for (int i = 0; i < layers.length; i++) {
1252
                        FMapWMSStyle sty = layers[i].getSelectedStyle();
1253
                        String s = (sty != null) ? sty.name : "";
1254
                        v.add(0,s);
1255
                }
1256
                return v;
1257
        }
1258

    
1259
        public Vector getLayerStyle(String layerName) {
1260
                Vector v = new Vector();
1261
                WMSLayerNode[] layers = selectedLayersToArray();
1262
                for (int i = 0; i < layers.length; i++) {
1263
                        if (layers[i].getName().equalsIgnoreCase(layerName)) {
1264
                                FMapWMSStyle sty = layers[i].getSelectedStyle();
1265
//                                String s = (sty != null) ? sty.name : "";
1266
                                v.add(sty);
1267
                                return v;
1268
                        }
1269
                }
1270
                return v;
1271
        }
1272

    
1273
        /**
1274
         * This method initializes tabInfo
1275
         *
1276
         * @return Panel
1277
         */
1278
        private InfoPanel getTabInfo() {
1279
                if (tabInfo == null) {
1280
                        tabInfo = new InfoPanel();
1281

    
1282
                }
1283
                return tabInfo;
1284
        }
1285

    
1286
        public void setDimensions(Vector dimensions) {
1287
                for (int i = 0; i < dimensions.size(); i++) {
1288
                        String st = (String) dimensions.get(i);
1289
                        if (st.split("=").length == 2) {
1290
                                String[] s = st.split("=");
1291
                                getTabDimensions().setDimensionValue(s[0], s[1]);
1292
                        }
1293
                }
1294

    
1295
        }
1296

    
1297
        /**
1298
         * This method initializes tabDimension
1299
         *
1300
         * @return Panel
1301
         */
1302
        private DimensionPanel getTabDimensions() {
1303
                if (tabDimensions == null) {
1304
                        tabDimensions = new DimensionPanel();
1305
                        tabDimensions.setEnabled(false);
1306
                        tabDimensions.addListener(new BeanListener() {
1307
                                public void beanValueChanged(Object value) {
1308
                                        Vector myDimensions = (Vector) value;
1309
                                        if (value != null
1310
                                                        && (oldDimensions == null || !(oldDimensions.size() == myDimensions
1311
                                                                        .size() && oldDimensions
1312
                                                                        .containsAll(myDimensions)))) {
1313
                                                oldDimensions = myDimensions;
1314
                                        }
1315
                                        fireWizardComplete(isCorrectlyConfigured());
1316
                                }
1317
                        });
1318

    
1319
                }
1320
                return tabDimensions;
1321
        }
1322

    
1323
        /**
1324
         * @return
1325
         */
1326
        public boolean getTransparency() {
1327
                return getChkTransparency().isSelected();
1328
        }
1329

    
1330
        /**
1331
         * @return
1332
         */
1333
        public Vector getDimensions() {
1334
                return getTabDimensions().getDimensions();
1335
        }
1336

    
1337
        public void initWizard() {
1338
        }
1339

    
1340
        public void execute() {
1341
        }
1342

    
1343
        // Gets all the layers available in the WMS Server
1344
        protected FLayer getAllSubTree(WMSLayerNode node) {
1345
                if (node.getChildren().size() > 0) {
1346
                        FLayers l = null;
1347
                        if (this.getMapCtrl() == null) {
1348
                                org.gvsig.app.project.documents.view.gui.DefaultViewPanel v = (org.gvsig.app.project.documents.view.gui.DefaultViewPanel) PluginServices
1349
                                                .getMDIManager().getActiveWindow();
1350
                                l = new FLayers();
1351
                                l.setMapContext(v.getMapControl().getMapContext());
1352
                        } else {
1353
                                l = new FLayers();
1354
                                l.setMapContext(this.getMapCtrl().getMapContext());
1355
                        }
1356

    
1357
                        l.setName(node.getTitle());
1358
                        l.setVisible(false);
1359
                        for (int i = 0; i < node.getChildren().size(); i++) {
1360
                                FLayer lyr = getAllSubTree((WMSLayerNode) node.getChildren()
1361
                                                .get(i));
1362
                                if (lyr != null) {
1363
                                        l.addLayer(lyr);
1364
                                }
1365
                        }
1366
                        return l;
1367
                } else {
1368
                        FLyrWMS layer = new FLyrWMS();
1369
                        try {
1370
                                layer.setHost(new URL(dataSource.getHost()));
1371
                                layer.setFullExtent(getLayersRectangle());
1372
                        } catch (ProjectionLayerException e) {
1373
                                e.printStackTrace();
1374
                                return null;
1375
                        } catch (MalformedURLException e) {
1376
                                e.printStackTrace();
1377
                                return null;
1378
                        }
1379
                        layer.setFormat(getFormat());
1380
                        layer.setLayerQuery(node.getName());
1381
                        layer.setInfoLayerQuery(getQueryableLayerQuery());
1382
                        layer.setSRS(getSRS());
1383
                        layer.setName(node.getTitle());
1384
                        layer.setWmsTransparency(getTransparency());
1385
                        layer.setStyles(getLayerStyle(node.getName()));
1386
                        layer.setDimensions(getDimensions());
1387
                        layer.setDriver(getDriver());
1388
                        layer.setOnlineResources(getOnlineResources());
1389
                        layer.setFixedSize(getFixedSize());
1390
                        layer.setQueryable(dataSource.isQueryable());
1391
                        layer.setVisible(false);
1392
                        return layer;
1393
                }
1394
        }
1395

    
1396
        // Gets all the layers available in the WMS Server
1397
        public FLayer getAllLayers() {
1398
                LayerTree layerTree = getLayerStructure();
1399
                return getAllSubTree((WMSLayerNode) layerTree.getModel().getRoot());
1400
        }
1401

    
1402
        // changed by Laura:
1403
        // To delegate getLayer to ParamsPanel from WMSWizard and WMSProps
1404
        // public FLayer getLayer() { return null; }
1405
        public FLayer getLayer() {
1406
                if (getDisagregatedLayers()) {
1407
                        return getLayerTree();
1408
                } else {
1409
                        return getLayerPlain();
1410
                }
1411
        }
1412

    
1413
        /**
1414
         * If user does not select the chekbox Disagregate layers, will get the
1415
         * layer tree in WMS
1416
         *
1417
         * @return
1418
         */
1419
        protected FLayer getLayerTree() {
1420
                LayerTree layerTree = getLayerStructure();
1421
                TreePath[] selection = (TreePath[]) getSelectedPaths().toArray(
1422
                                new TreePath[0]);// layerTree.getSelectionPaths();
1423
                if (selection != null) {
1424
                        return getSubTree((WMSLayerNode) layerTree.getModel().getRoot(),
1425
                                        selection);
1426
                }
1427
                return null;
1428
        }
1429

    
1430
        protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node) {
1431
                for (int i = 0; i < selection.length; i++) {
1432
                        Object[] components = selection[i].getPath();
1433
                        for (int j = 0; j < components.length; j++) {
1434
                                if (components[j] instanceof WMSLayerNode) {
1435
                                        if (((WMSLayerNode) components[j]).getTitle().compareTo(
1436
                                                        node.getTitle()) == 0) {
1437
                                                return true;
1438
                                        }
1439
                                }
1440
                        }
1441
                }
1442
                return false;
1443
        }
1444

    
1445
        protected FLayer getSubTree(WMSLayerNode node, TreePath[] selection) {
1446
                if (node.getChildren().size() > 0) {
1447
                        FLayers l = null;
1448
                        if (this.getMapCtrl() == null) {
1449
                                org.gvsig.app.project.documents.view.gui.DefaultViewPanel v = (org.gvsig.app.project.documents.view.gui.DefaultViewPanel) PluginServices
1450
                                                .getMDIManager().getActiveWindow();
1451
                                l = new FLayers();
1452
                                l.setMapContext(v.getMapControl().getMapContext());
1453
                        } else {
1454
                                l = new FLayers();
1455
                                l.setMapContext(this.getMapCtrl().getMapContext());
1456
                        }
1457

    
1458
                        l.setName(node.getTitle());
1459
                        for (int i = 0; i < node.getChildren().size(); i++) {
1460
                                if (nodeSelected(selection, (WMSLayerNode) (node.getChildren()
1461
                                                .get(i)))) {
1462
                                        FLayer lyr = getSubTree((WMSLayerNode) node.getChildren()
1463
                                                        .get(i), selection);
1464
                                        if (lyr != null) {
1465
                                                l.addLayer(lyr);
1466
                                        }
1467
                                }
1468
                        }
1469
                        return l;
1470
                } else {
1471
                        if (nodeSelected(selection, node)) {
1472
                                FLyrWMS layer = new FLyrWMS();
1473
                                // layer.setHost(getHost());
1474
                                try {
1475
                                        layer.setHost(new URL(dataSource.getHost()));
1476
                                        layer.setFullExtent(getLayersRectangle());
1477
                                } catch (ProjectionLayerException e) {
1478
                                        e.printStackTrace();
1479
                                        return null;
1480
                                } catch (MalformedURLException e) {
1481
                                        e.printStackTrace();
1482
                                        return null;
1483
                                }
1484
                                layer.setFormat(getFormat());
1485
                                layer.setLayerQuery(node.getName());
1486
                                layer.setInfoLayerQuery(getQueryableLayerQuery());
1487
                                layer.setSRS(getSRS());
1488
                                layer.setName(node.getTitle());
1489
                                layer.setWmsTransparency(getTransparency());
1490
                                layer.setStyles(getLayerStyle(node.getName()));
1491
                                layer.setDimensions(getDimensions());
1492
                                layer.setDriver(getDriver());
1493
                                layer.setOnlineResources(getDriver().getOnlineResources());
1494
                                layer.setFixedSize(getFixedSize());
1495
                                layer.setQueryable(node.isQueryable());
1496
                                //layer.setQueryable(dataSource.isQueryable());
1497
                                return layer;
1498

    
1499
                        } else {
1500
                                return null;
1501
                        }
1502
                }
1503
        }
1504

    
1505
        /**
1506
         * If user selects the chekbox Disagregate layers, will get the selected
1507
         * layers rendered in one the tree structure in WMS will be lost.
1508
         *
1509
         * @return
1510
         */
1511
        protected FLayer getLayerPlain() {
1512
                FLyrWMS layer = new FLyrWMS();
1513
                // layer.setHost(getHost());
1514
                try {
1515
                        layer.setFullExtent(getLayersRectangle());
1516
                        layer.setHost(new URL(dataSource.getHost()));
1517
                } catch (ProjectionLayerException ex) {
1518
                        ex.printStackTrace();
1519
                        JOptionPane.showMessageDialog((Component) PluginServices
1520
                                        .getMainFrame(), ex.getMessage());
1521
                        return null;
1522
                } catch (MalformedURLException e) {
1523
                        e.printStackTrace();
1524
                        return null;
1525
                }
1526
                layer.setFormat(getFormat());
1527
                layer.setLayerQuery(getLayersQuery());
1528
                layer.setInfoLayerQuery(getQueryableLayerQuery());
1529
                layer.setSRS(getSRS());
1530
                layer.setName(getLayerName());
1531
                layer.setWmsTransparency(getTransparency());
1532
                layer.setStyles(getStyles());
1533
                layer.setDimensions(getDimensions());
1534
                layer.setDriver(getDriver());
1535
                layer.setOnlineResources(getDriver().getOnlineResources());
1536
                layer.setFixedSize(getFixedSize());
1537

    
1538
                //layer.setQueryable(node.isQueryable());
1539
                layer.setQueryable(dataSource.isQueryable());
1540
                return layer;
1541
        }
1542

    
1543
        // ---------------------
1544

    
1545
        public FMapWMSDriver getDriver() {
1546
                return dataSource.getDriver();
1547
        }
1548

    
1549
        public Dimension getFixedSize() {
1550
                return sizeFixed;
1551
        }
1552

    
1553
        /**
1554
         * This method initializes chkExtendedNames
1555
         *
1556
         * @return CheckBox
1557
         */
1558
        private JCheckBox getChkExtendedNames() {
1559
                if (chkExtendedNames == null) {
1560
                        chkExtendedNames = new JCheckBox();
1561
                        chkExtendedNames.setText(PluginServices.getText(this,
1562
                                        "show_layer_names"));
1563
                        chkExtendedNames.addItemListener(new java.awt.event.ItemListener() {
1564
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1565
                                        boolean b = chkExtendedNames.isSelected();
1566
                                        getTreeLayers().showLayerNames = b;
1567
                                        getTreeLayers().repaint();
1568
                                        getLstSelectedLayers().showLayerNames = b;
1569
                                        getLstSelectedLayers().repaint();
1570
                                        getStyleTree().showLayerNames = b;
1571
                                }
1572
                        });
1573
                        chkExtendedNames
1574
                                        .addActionListener(new java.awt.event.ActionListener() {
1575
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
1576
                                                        fPrefs.putBoolean("show_layer_names",
1577
                                                                        chkExtendedNames.isSelected());
1578
                                                }
1579
                                        });
1580
                        chkExtendedNames.setBounds(19, 300, 212, 20);
1581
                        chkExtendedNames.setSelected(fPrefs.getBoolean("show_layer_names",
1582
                                        false));
1583

    
1584
                }
1585
                return chkExtendedNames;
1586
        }
1587

    
1588
        /**
1589
         * This method initializes btnUp
1590
         *
1591
         * @return Button
1592
         */
1593
        private JButton getBtnUp() {
1594
                if (btnUp == null) {
1595
                        btnUp = new JButton();
1596
                        btnUp.setBounds(438, 184, 30, 30);
1597
                        btnUp.setToolTipText(PluginServices.getText(this, "move_layer_up"));
1598
                        btnUp.addActionListener(new java.awt.event.ActionListener() {
1599
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1600
                                        LayerList list = getLstSelectedLayers();
1601
                                        int[] selectedIndices = list.getSelectedIndices();
1602
                                        int index = list.getSelectedIndex();
1603
                                        if (selectedIndices != null && selectedIndices.length == 1
1604
                                                        && index > 0) {
1605
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1606
                                                m.itemsMoved(index - 1, new int[] { index });
1607
                                                list.setSelectedIndex(index - 1);
1608
                                        }
1609
                                }
1610
                        });
1611
                        btnUp.setIcon(PluginServices.getIconTheme().get("aplication-preferences-uparrow"));
1612
                }
1613
                return btnUp;
1614
        }
1615

    
1616
        /**
1617
         * This method initializes btnDown
1618
         *
1619
         * @return Button
1620
         */
1621
        private JButton getBtnDown() {
1622
                if (btnDown == null) {
1623
                        btnDown = new JButton();
1624
                        btnDown.setBounds(438, 215, 30, 30);
1625
                        btnDown.setToolTipText(PluginServices.getText(this,
1626
                                        "move_layer_down"));
1627
                        btnDown.addActionListener(new java.awt.event.ActionListener() {
1628
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1629
                                        LayerList list = getLstSelectedLayers();
1630
                                        int[] selectedIndices = list.getSelectedIndices();
1631
                                        int index = list.getSelectedIndex();
1632
                                        if (selectedIndices != null
1633
                                                        && selectedIndices.length == 1
1634
                                                        && index < getLstSelectedLayers().getModel()
1635
                                                                        .getSize() - 1) {
1636
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1637
                                                m.itemsMoved(index + 1, new int[] { index });
1638
                                                list.setSelectedIndex(index + 1);
1639
                                        }
1640
                                }
1641
                        });
1642
                        btnDown.setIcon(PluginServices.getIconTheme()
1643
                                        .get("aplication-preferences-downarrow"));
1644
                }
1645
                return btnDown;
1646
        }
1647

    
1648
        public void setFixedSize(Dimension sz) {
1649
                sizeFixed = sz;
1650
        }
1651

    
1652
        public ArrayList getSelectedPaths() {
1653
                return selectedPaths;
1654
        }
1655

    
1656
        public LayerTree getJustTreeLayer() {
1657
                return treeLayers;
1658
        }
1659

    
1660
        /**
1661
         * This method initializes chkDisagregate
1662
         *
1663
         * @return CheckBox
1664
         */
1665
        private JCheckBox getChkDisagregate() {
1666
                if (chkDisagregate == null) {
1667

    
1668
                        chkDisagregate = new JCheckBox();
1669
                        chkDisagregate.setBounds(new java.awt.Rectangle(19,276,269,20));
1670
                        chkDisagregate.setText(PluginServices.getText(this,
1671
                                        "disagregate_layers"));
1672
                        chkDisagregate.setSelected(false);
1673

    
1674
                }
1675
                return chkDisagregate;
1676
        }
1677

    
1678
        public boolean getDisagregatedLayers() {
1679
                return chkDisagregate.isSelected();
1680
        }
1681

    
1682
        public void disableDisagregatedLayers() {
1683
                chkDisagregate.setEnabled(false);
1684
        }
1685

    
1686
        @Override
1687
        public DataStoreParameters[] getParameters() {
1688
                // TODO Auto-generated method stub
1689
                return null;
1690
        }
1691

    
1692
        @Override
1693
        public void close() {
1694
                // Nothing to do
1695
        }
1696
} // @jve:decl-index=0:visual-constraint="10,10"