Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extWMS / src / com / iver / cit / gvsig / gui / panels / WMSParamsPanel.java @ 6434

History | View | Annotate | Download (46.3 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 com.iver.cit.gvsig.gui.panels;
42

    
43

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

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

    
71
import org.cresques.cts.ICoordTrans;
72
import org.cresques.cts.IProjection;
73
import org.cresques.cts.ProjectionPool;
74
import org.gvsig.gui.beans.controls.dnd.JDnDListModel;
75
import org.gvsig.gui.beans.listeners.BeanListener;
76
import org.gvsig.gui.beans.swing.JButton;
77

    
78
import com.iver.andami.PluginServices;
79
import com.iver.andami.messages.NotificationManager;
80
import com.iver.cit.gvsig.fmap.drivers.wms.FMapWMSDriver;
81
import com.iver.cit.gvsig.fmap.exceptions.CannotReprojectException;
82
import com.iver.cit.gvsig.fmap.layers.FLayer;
83
import com.iver.cit.gvsig.fmap.layers.FLayers;
84
import com.iver.cit.gvsig.fmap.layers.FLyrWMS;
85
import com.iver.cit.gvsig.fmap.layers.IFMapWMSDimension;
86
import com.iver.cit.gvsig.fmap.layers.WMSLayerNode;
87
import com.iver.cit.gvsig.fmap.layers.WMSLayerNode.FMapWMSStyle;
88
import com.iver.cit.gvsig.gui.WizardPanel;
89
import com.iver.cit.gvsig.gui.wizards.FormatListModel;
90
import com.iver.cit.gvsig.gui.wizards.LayerTreeModel;
91
import com.iver.cit.gvsig.gui.wizards.SRSListModel;
92
import com.iver.cit.gvsig.gui.wizards.WMSWizardData;
93
import com.iver.cit.gvsig.gui.wizards.WizardListenerSupport;
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

    
122
        private JScrollPane jScrollPane1 = null;
123
        private JScrollPane jScrollPane2 = null;
124
        private JScrollPane jScrollPane5 = null;
125
        private JButton btnAdd = null;
126
        private JButton btnDel = null;
127
        private JScrollPane jScrollPane6 = null;
128
        private JPanel jPanel2 = null;
129
        private JPanel tabFormats = null;
130
        private JPanel jPanel4 = null;
131
        private JTextField jTxtNomCapa = null;
132
        private LayerList lstSelectedLayers = null;
133
        private ArrayList selectedPaths = new ArrayList();
134
        private JList lstSRSs = null;
135
        private LayerTree treeLayers = null;
136
        private JList lstFormats = null;
137
        private WizardListenerSupport listenerSupport;
138
        public WMSWizardData dataSource;
139
        private JTabbedPane jTabbedPane = null;
140
        private JPanel tabLayers = null;
141
        private JPanel jPanel1 = null;
142
        private JPanel jPanel5 = null;
143
        private StylesPanel tabStyle = null;
144
        private JCheckBox chkTransparency = null;
145
    private InfoPanel tabInfo = null;
146
    private DimensionPanel tabDimensions = null;
147
    private int dimensionTabIndex;
148
    private int stylesTabIndex;
149
    private String oldSRS = null;
150
        private AbstractCollection oldDimensions = null;
151
        private Dimension sizeFixed;
152
        private JCheckBox chkExtendedNames = null;
153
        private JButton btnUp = null;
154
        private JButton btnDown = null;
155
        public static Preferences fPrefs = Preferences.userRoot().node( "gvsig.wms-wizard" );
156
        private JCheckBox chkDisagregate = null;
157

    
158
    public WMSParamsPanel(){
159
                super();
160
                initialize();
161
        }
162

    
163
    //TODO: crear nuevo constructor para a?adir los panels que quieras...
164
    public WMSParamsPanel(WMSWizardData data)
165
    {
166
            super();
167
            setWizardData(data);
168
                this.setLayout(null);
169
                this.setVisible(false);
170
                this.setBounds(10, 5, 481, 427);
171

    
172
                if (jTabbedPane == null) {
173
                        jTabbedPane = new JTabbedPane();
174
                        jTabbedPane.setBounds(3, 3, 475, 415);
175

    
176
            StylesPanel sp = getTabStyle();
177
            DimensionPanel dp = getTabDimensions();
178

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

    
190
        setListenerSupport(new WizardListenerSupport());
191
    }
192

    
193

    
194
        /**
195
         * This method initializes panelPage2
196
         *
197
         * @return Panel
198
         */
199
        private void initialize() {
200
                this.setLayout(null);
201
                this.setVisible(false);
202
                this.setBounds(10, 5, 481, 427);
203
                this.add(getJTabbedPane(), null);
204
        }
205
        /**
206
         * This method initializes jPanel2
207
         *
208
         * @return Panel
209
         */
210
        private JPanel getJPanel2() {
211
                if (jPanel2 == null) {
212
                        jPanel2 = new JPanel();
213
                        jPanel2.setLayout(null);
214
                        jPanel2.setBounds(4, 59, 457, 328);
215
                        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
216
                                        null, PluginServices.getText(this, "select_layers"),
217
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
218
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
219
                        jPanel2.add(getChkExtendedNames(), null);
220

    
221
                        jPanel2.add(getJScrollPane1(), null);
222
                        jPanel2.add(getBtnDel(), null);
223
                        jPanel2.add(getBtnAdd(), null);
224
                        jPanel2.add(getJScrollPane5(), null);
225
                        jPanel2.add(getBtnUp(), null);
226
                        jPanel2.add(getBtnDown(), null);
227
                        jPanel2.add(getChkDisagregate(), null);
228
                }
229

    
230
                return jPanel2;
231
        }
232

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

    
250
                return jPanel4;
251
        }
252

    
253
        /**
254
         * This method initializes jPanel3
255
         *
256
         * @return Panel
257
         */
258
        private JPanel getTabFormats() {
259
                if (tabFormats == null) {
260
                        tabFormats = new JPanel();
261
                        tabFormats.setLayout(null);
262
                        tabFormats.add(getJPanel1(), null);
263
                        tabFormats.add(getJPanel5(), null);
264
                }
265

    
266
                return tabFormats;
267
        }
268
        /**
269
         * This method initializes jScrollPane1
270
         *
271
         * @return ScrollPane
272
         */
273
        private JScrollPane getJScrollPane1() {
274
                if (jScrollPane1 == null) {
275
                        jScrollPane1 = new JScrollPane();
276
                        jScrollPane1.setBounds(11, 22, 430, 123);
277
                        jScrollPane1.setViewportView(getTreeLayers());
278
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(205, 75));
279
                }
280

    
281
                return jScrollPane1;
282
        }
283

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

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

    
328
        /**
329
         * This method initializes jScrollPane5
330
         *
331
         * @return ScrollPane
332
         */
333
        private JScrollPane getJScrollPane5() {
334
                if (jScrollPane5 == null) {
335
                        jScrollPane5 = new JScrollPane();
336
                        jScrollPane5.setBounds(11, 155, 394, 120);
337
                        jScrollPane5.setViewportView(getLstSelectedLayers());
338
                        jScrollPane5.setPreferredSize(new java.awt.Dimension(205, 75));
339
                }
340

    
341
                return jScrollPane5;
342
        }
343

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

    
361
                return jTxtNomCapa;
362
        }
363

    
364

    
365
        /**
366
         * This method initializes jScrollPane6
367
         *
368
         * @return ScrollPane
369
         */
370
        private JScrollPane getJScrollPane6() {
371
                if (jScrollPane6 == null) {
372
                        jScrollPane6 = new JScrollPane();
373
                        jScrollPane6.setBounds(5, 23, 442, 140);
374
                        jScrollPane6.setViewportView(getLstFormats());
375
                        jScrollPane6.setPreferredSize(new java.awt.Dimension(250, 200));
376
                }
377

    
378
                return jScrollPane6;
379
        }
380

    
381
        /**
382
         * This method initializes jScrollPane2
383
         *
384
         * @return ScrollPane
385
         */
386
        private JScrollPane getJScrollPane2() {
387
                if (jScrollPane2 == null) {
388
                        jScrollPane2 = new JScrollPane();
389
                        jScrollPane2.setBounds(5, 23, 442, 141);
390
                        jScrollPane2.setViewportView(getLstSRSs());
391
                        jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 200));
392
                }
393

    
394
                return jScrollPane2;
395
        }
396

    
397
        /**
398
         * Gets the available layers in WMS maintaining the tree structure
399
         * @return
400
         */
401
        public LayerTree getLayerStructure(){
402
                return treeLayers;
403
        }
404

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

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

    
434
                        }
435
                        getBtnAdd().setEnabled(isGetMapable);
436
                            fireWizardComplete(isCorrectlyConfigured());
437
                                        }
438
                                });
439
                }
440

    
441
                return treeLayers;
442
        }
443

    
444

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

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

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

    
465
        getBtnDel().setEnabled(
466
                        selectedIndices != null
467
                && selectedIndices.length>0
468
                );
469

    
470
        return b;
471
        }
472

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

    
480
        /**
481
         * DOCUMENT ME!
482
         */
483
        private void delLayer() {
484
                int[] indices = lstSelectedLayers.getSelectedIndices();
485

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

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

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

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

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

    
539
    }
540

    
541
    /**
542
     * Refreshes the info tab
543
     *
544
     */
545
    public void refreshInfo() {
546
            getTabInfo().refresh(dataSource,
547
                selectedLayersVector(),
548
                getStyleTitles(),
549
                getFormat(),
550
                getSRS(),
551
                getDimensions());
552
    }
553

    
554
    private void refreshDimensions() {
555
            int size = getLstSelectedLayers().getModel().getSize();
556
            boolean enable = false;
557
            for (int i=0; i<size; i++) {
558
                    WMSLayerNode node = (WMSLayerNode) getLstSelectedLayers().getModel().getElementAt(i);
559
                    if (node.getDimensions()==null)
560
                        continue;
561

    
562
            for (int j = 0; j < node.getDimensions().size(); j++) {
563
                    IFMapWMSDimension dim = (IFMapWMSDimension) node.getDimensions().get(j);
564

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

    
576
    }
577

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

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

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

    
597
        getStyleTree().setModel(model);
598
        getStyleTree().expandAll();
599
        getStyleTree().repaint();
600
    }
601

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

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

    
618
    /**
619
     * Gets the currently shown style tree.
620
     * @return
621
     */
622
    private StyleTree getStyleTree() {
623
        return getTabStyle().getStyleTree();
624
    }
625

    
626

    
627

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

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

    
657
                        if (modelo.addElement(0, nodo.clone())) {
658
                                alguno = true;
659
                        }
660
        }
661

    
662
                if (alguno) {
663
                        refreshData();
664
                }
665
        refreshInfo();
666
        }
667

    
668
        /**
669
         * This method initializes lstSelectedLayers
670
         *
671
         * @return List
672
         */
673
        public LayerList getLstSelectedLayers() {
674
                if (lstSelectedLayers == null) {
675
            lstSelectedLayers = new LayerList();
676
                        lstSelectedLayers.setModel(new JDnDListModel());
677
                        lstSelectedLayers.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
678
                        lstSelectedLayers.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
679
                            public void valueChanged(javax.swing.event.ListSelectionEvent e) {
680
                                fireWizardComplete(isCorrectlyConfigured());
681
                            }
682
                        });
683
                        lstSelectedLayers.addMouseListener(new MouseAdapter(){
684
                                public void mouseReleased(MouseEvent e) {
685
                                        refreshData();
686
                                }
687
                        });
688
                }
689

    
690
                return lstSelectedLayers;
691
        }
692

    
693
        /**
694
         * This method initializes lstSRSs
695
         *
696
         * @return JList
697
         */
698
        public JList getLstSRSs() {
699
                if (lstSRSs == null) {
700
                        lstSRSs = new JList();
701
                        lstSRSs.setModel(new SRSListModel());
702
                        lstSRSs.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
703
                        lstSRSs.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
704
                                public void valueChanged(
705
                                                javax.swing.event.ListSelectionEvent e) {
706
                                        int i = lstSRSs.getSelectedIndex();
707
                                        if (i!=-1)
708
                                                oldSRS = (String) lstSRSs.getModel().getElementAt(i);
709
                                        fireWizardComplete(isCorrectlyConfigured());
710
                                }
711
                        });
712
                }
713

    
714
                return lstSRSs;
715
        }
716

    
717
        /**
718
         * This method initializes lstFormats
719
         *
720
         * @return List
721
         */
722
        public JList getLstFormats() {
723
                if (lstFormats == null) {
724
                        lstFormats = new JList();
725
                        lstFormats.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
726
                        lstFormats.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
727
                                public void valueChanged(javax.swing.event.ListSelectionEvent e) {
728
                                        fireWizardComplete(isCorrectlyConfigured());
729
                                }
730
                        });
731
                }
732

    
733
                return lstFormats;
734
        }
735

    
736
        /**
737
         * Refreshes the SRS list
738
         */
739
        private void refreshSRS() {
740
        ArrayList elements = ((JDnDListModel) lstSelectedLayers.getModel()).getElements();
741
        WMSLayerNode[] layers = (WMSLayerNode[]) elements.toArray(new WMSLayerNode[0]);
742

    
743
                SRSListModel model = new SRSListModel();
744

    
745
                if (layers.length == 0) {
746
                        lstSRSs.setModel(model);//new DefaultListModel());
747
                        sizeFixed = null;
748
                } else {
749
                        TreeSet srsSet = new TreeSet();
750
                        srsSet.addAll(layers[0].getAllSrs());
751
                        model.setAll(srsSet);
752
                        for (int i = 1; i < layers.length; i++) {
753
                                model.setAll(model.intersect(layers[i].getAllSrs()));
754
                        }
755
                        lstSRSs.setModel(model);
756
                }
757
        int srsIndex = getSRSIndex( oldSRS );
758
        if (srsIndex!=-1)
759
            getLstSRSs().setSelectedIndex(srsIndex);
760

    
761
        }
762

    
763
        public void setListenerSupport(WizardListenerSupport support) {
764
                listenerSupport = support;
765
        }
766

    
767
        public void setWizardData(WMSWizardData data) {
768
                this.dataSource = data;
769
                ((JDnDListModel) getLstSelectedLayers().getModel()).clear();
770
                getLstSelectedLayers().repaint();
771

    
772
                getLstFormats().setModel(new FormatListModel(this.dataSource.getFormats()));
773
                getTreeLayers().setModel(new LayerTreeModel(this.dataSource.getLayer()));
774
        refreshInfo();
775
        }
776

    
777
    private Vector getStyleTitles() {
778
        return getTabStyle().getStyleTree().getStyleSelectionTitles();
779
    }
780

    
781
    /**
782
     * @return
783
     */
784
    private Vector selectedLayersVector() {
785
        JDnDListModel mod = (JDnDListModel) getLstSelectedLayers().getModel();
786
        Vector lyrs = new Vector();
787
        for (int i = 0; i < mod.getSize(); i++) {
788
            lyrs.add(mod.getElementAt(i));
789
        }
790
        return lyrs;
791
    }
792

    
793
    public String getFormat() {
794
                return (String) getLstFormats().getSelectedValue();
795
        }
796

    
797
        public String getLayersQuery() {
798
        ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel()).getElements();
799
        WMSLayerNode[] layers = (WMSLayerNode[]) elements.toArray(new WMSLayerNode[0]);
800

    
801
                //Nombre separado por comas de las capas
802
                String layersQuery = layers[layers.length-1].getName();
803

    
804
                for (int i = layers.length-2; i >= 0; i--) {
805
                        layersQuery += ("," + layers[i].getName());
806
                }
807

    
808
                return layersQuery;
809

    
810
        }
811

    
812
        /**
813
         * Returns the current selected SRS.
814
         * @return
815
         */
816
        public String getSRS() {
817
                return (String) getLstSRSs().getSelectedValue();
818
        }
819

    
820
        /**
821
         * Returns the name of the layer that the user has typed-in
822
         * @return
823
         */
824
        public String getLayerName() {
825
                return getJTxtNomCapa().getText();
826
        }
827

    
828
        public void setLayerName(String name) {
829
                getJTxtNomCapa().setText(name);
830
        }
831

    
832
    public Rectangle2D getLayersRectangle() throws CannotReprojectException{
833
        ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel()).getElements();
834
        WMSLayerNode[] layers = (WMSLayerNode[]) elements.toArray(new WMSLayerNode[0]);
835
        String[] layerNames = new String[layers.length];
836
        for (int i = 0; i < layerNames.length; i++) {
837
            layerNames[i] = layers[i].getName();
838
        }
839
        //Boundingbox de todas las capas
840
        //ArrayList rectangulos = new ArrayList();
841

    
842
        Rectangle2D rect;
843
        String latLonID;
844

    
845
        rect = dataSource.getBoundingBox(layerNames, getSRS());
846
        if(rect == null) {
847
                latLonID = "EPSG:4326";
848
                rect = dataSource.getBoundingBox(layerNames, latLonID);
849
                if (rect == null) {
850
                        rect = dataSource.getBoundingBox(layerNames, "CRS:84");
851
                }
852

    
853
                   IProjection reqProj = ProjectionPool.get(getSRS());
854
                IProjection latLonProj = ProjectionPool.get(latLonID);
855
                if ((reqProj != null) && (latLonProj != null)) {
856
                    ICoordTrans ct = latLonProj.getCT(reqProj);
857
                    Rectangle2D reprojectedRect;
858
                    reprojectedRect = ct.convert(rect);
859
                    rect = reprojectedRect;
860
                } else {
861
                        throw new CannotReprojectException(PluginServices.getText(this, "cannotReproject") + " " + getSRS() + " -> " + latLonID);
862
                }
863
        }
864

    
865
        return rect;
866
    }
867

    
868
        public TreePath[] getSelectedLayers() {
869
                return getTreeLayers().getSelectionPaths();
870
        }
871

    
872
        public Hashtable getOnlineResources() {
873
                return dataSource.getOnlineResources();
874
        }
875

    
876
    /**
877
     * The piece of the GetMap request that has the layer names.
878
     * @return
879
     */
880
        public String getQueryableLayerQuery() {
881
        ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel()).getElements();
882
        WMSLayerNode[] layers = (WMSLayerNode[]) elements.toArray(new WMSLayerNode[0]);
883
        //Nombre separado por comas de las capas
884
                String layersQuery = "";
885
                int i;
886

    
887
                for (i = 0; i < layers.length; i++) {
888
                        if (layers[i].isQueryable()) {
889
                                layersQuery = layers[i].getName();
890

    
891
                                break;
892
                        }
893
                }
894

    
895
                for (int j = i + 1; j < layers.length; j++) {
896
                        if (layers[j].isQueryable()) {
897
                                layersQuery += ("," + layers[j].getName());
898
                        }
899
                }
900

    
901
                return layersQuery;
902
        }
903

    
904
        /**
905
         * Returns the index of the CRS within the CRS list.
906
         *
907
         * Devuelve la posicion que ocupa el CRS en la lista de CRS
908
         *
909
         * @param crs
910
         * @return The CRS's index if it exists, -1 if it not exists.
911
         */
912
        public int getSRSIndex(String crs) {
913
                for (int i=0; i<getLstSRSs().getModel().getSize(); i++){
914
                        if (crs!=null && crs.equals(getLstSRSs().getModel().getElementAt(i)))
915
                                return i;
916
                }
917
                return -1;
918
        }
919

    
920
        /**
921
         * Returns the index of the format within the formats list.
922
         *
923
         * Devuelve la posicion que ocupa el formato en la lista de formatos
924
         * @param format
925
         *
926
         * @return The format's index if it exists, -1 if it not exists.
927
         */
928
        public int getFormatIndex(String format) {
929
                for (int i=0; i<getLstFormats().getModel().getSize(); i++){
930
                        if (format!=null && format.equals(getLstFormats().getModel().getElementAt(i)))
931
                                return i;
932
                }
933
                return -1;
934
        }
935

    
936
        /**
937
         * This method initializes jTabbedPane
938
         *
939
         * @return TabbedPane
940
         */
941
        public JTabbedPane getJTabbedPane() {
942
                if (jTabbedPane == null) {
943
                        jTabbedPane = new JTabbedPane();
944
                        jTabbedPane.setBounds(3, 3, 475, 415);
945
            InfoPanel ip = getTabInfo();
946
            ip.addFocusListener(new FocusListener(){
947
                public void focusGained(FocusEvent e) {
948
                    refreshInfo();
949
                }
950
                public void focusLost(FocusEvent e) {
951
                }
952
            });
953

    
954
            StylesPanel sp = getTabStyle();
955
            DimensionPanel dp = getTabDimensions();
956

    
957

    
958
                        jTabbedPane.addTab(PluginServices.getText(this, "info"), null, ip, null);
959
                        jTabbedPane.addTab(PluginServices.getText(this, "capas"), null, getTabLayers(), null);
960
                        jTabbedPane.addTab(PluginServices.getText(this, "estilos"), null, sp, null);
961
            stylesTabIndex = jTabbedPane.getTabCount()-1;
962
            jTabbedPane.addTab(PluginServices.getText(this, "dimensiones"), null, dp, null);
963
            dimensionTabIndex = jTabbedPane.getTabCount()-1;
964
            jTabbedPane.addTab(PluginServices.getText(this, "formatos"), null, getTabFormats(), null);
965
            jTabbedPane.setEnabledAt(dimensionTabIndex, false);
966
            jTabbedPane.setEnabledAt(stylesTabIndex, false);
967
                }
968
                return jTabbedPane;
969
        }
970

    
971
        /**
972
         * This method initializes jPanel
973
         *
974
         * @return Panel
975
         */
976
        private JPanel getTabLayers() {
977
                if (tabLayers == null) {
978
                        tabLayers = new JPanel();
979
                        tabLayers.setLayout(null);
980
                        tabLayers.add(getJPanel4(), null);
981
                        tabLayers.add(getJPanel2(), null);
982
                }
983
                return tabLayers;
984
        }
985

    
986
        /**
987
         * This method initializes jPanel1
988
         *
989
         * @return Panel
990
         */
991
        private JPanel getJPanel1() {
992
                if (jPanel1 == null) {
993
                        jPanel1 = new JPanel();
994
                        jPanel1.setLayout(null);
995
            jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
996
                    null, PluginServices.getText(this, "select_formats"),
997
                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
998
                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
999
                        jPanel1.setBounds(7, 10, 453, 194);
1000
                        jPanel1.add(getJScrollPane6(), null);
1001
                        jPanel1.add(getChkTransparency(), null);
1002
                }
1003
                return jPanel1;
1004
        }
1005

    
1006
        /**
1007
         * This method initializes jPanel5
1008
         *
1009
         * @return Panel
1010
         */
1011
        private JPanel getJPanel5() {
1012
                if (jPanel5 == null) {
1013
                        jPanel5 = new JPanel();
1014
                        jPanel5.setLayout(null);
1015
            jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(
1016
                    null, PluginServices.getText(this, "seleccionar_srs"),
1017
                    javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
1018
                    javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
1019
                        jPanel5.setBounds(7, 210, 453, 168);
1020
                        jPanel5.add(getJScrollPane2(), null);
1021
                }
1022
                return jPanel5;
1023
        }
1024

    
1025
        /**
1026
         * This method initializes jPanel6
1027
         *
1028
         * @return Panel
1029
         */
1030
        private StylesPanel getTabStyle() {
1031
                if (tabStyle == null) {
1032
                        tabStyle = new StylesPanel(this);
1033
            tabStyle.setEnabled(false);
1034
            tabStyle.addListener(new BeanListener(){
1035
                    public void beanValueChanged(Object value) {
1036
                        fireWizardComplete(isCorrectlyConfigured());
1037
                    };
1038
            });
1039
            tabStyle.addFocusListener(new FocusAdapter() {
1040
                    public void focusGained(FocusEvent e) {
1041
                            refreshStyleTree();
1042
                    }
1043
            });
1044
                }
1045
                return tabStyle;
1046
        }
1047

    
1048
        /**
1049
         * Sets the focus to the tab next to the current one.
1050
         *
1051
         * Enfoca a la solapa siguiente a la actualmente enfocada del TabbedPane
1052
         *
1053
         */
1054
        public void avanzaTab(){
1055
                int currentPage = currentPage();
1056
                int nPages = getNumTabs();
1057
                if (nPages -1 > currentPage){
1058
                        getJTabbedPane().setSelectedIndex(nextEnabledPage());
1059
                }
1060
        }
1061

    
1062
        /**
1063
         * Sets the focus to the tab previous to the current one.
1064
         *
1065
         * Enfoca a la solapa anterior a la actualmente enfocada del TabbedPane
1066
         *
1067
         */
1068
        public void retrocedeTab(){
1069
                this.getJTabbedPane().setSelectedIndex(previousEnabledPage());
1070

    
1071
        }
1072
    /**
1073
     * Returns the index of the current tab.
1074
     *
1075
     * Devuelve el ?ndice de la p?gina actual del wizard.
1076
     *
1077
     * @return
1078
     */
1079
    public int currentPage(){
1080
        return getJTabbedPane().getSelectedIndex();
1081
    }
1082

    
1083
        /**
1084
         * Returns the tab amount that the WMSParamsPanel currently have
1085
         *
1086
         * Devuelve el n?mero de solapas que tiene actualmente el WMSParamsPanel
1087
         *
1088
         * @return int
1089
         */
1090
        public int getNumTabs(){
1091
                return getJTabbedPane().getTabCount();
1092
        }
1093

    
1094
        /**
1095
     * <p>
1096
     * Returns the index of the previous enabled tab.
1097
     * </p>
1098
     * <p>
1099
     * Devuelve el ?ndice de la anterior p?gina habilitada del wizard o -1 si no hay
1100
     * ninguna.
1101
     * </p>
1102
    * @return The index, or -1 if there is no one.
1103
     */
1104
    public int previousEnabledPage(){
1105
        int currentPage = currentPage();
1106
        int j=0;
1107
        if (currentPage == 0)
1108
            j= -1;
1109
        for (int i = currentPage-1; i>-1; i--){
1110
            if (getJTabbedPane().isEnabledAt(i)){
1111
                j= i;
1112
                    break;
1113
            }
1114
        }
1115
        return j;
1116
    }
1117

    
1118
    /**
1119
     * <p>
1120
     * Returns the previous of the previous enabled tab.
1121
     * </p>
1122
     * <p>
1123
     * Devuelve el ?ndice de la siguiente p?gina habilitada del wizard o -1 si no hay
1124
     * ninguna.
1125
     * </p>
1126
     * @return The index, or -1 if there is no one.
1127
     */
1128
    public int nextEnabledPage() {
1129
        int currentPage = currentPage();
1130
        int nPages = getNumTabs();
1131
        if (currentPage == nPages)
1132
                return -1;
1133
        for (int i=currentPage+1; i<nPages; i++){
1134
            if (getJTabbedPane().isEnabledAt(i)){
1135
                return i;
1136
            }
1137
        }
1138
        return -1;
1139
    }
1140

    
1141
    /**
1142
     * Selects/deselects the transparency checkbox.
1143
     * @param b
1144
     */
1145
    public void setTransparent(boolean b) {
1146
            getChkTransparency().setSelected(b);
1147
    }
1148
    /**
1149
     * This method initializes chkTrasparency
1150
     *
1151
     * @return CheckBox
1152
     */
1153
    private JCheckBox getChkTransparency() {
1154
            if (chkTransparency == null) {
1155
                    chkTransparency = new JCheckBox();
1156
            chkTransparency.setText(PluginServices.getText(this, "wms_transparency"));
1157
            chkTransparency.setSelected(true);
1158
            chkTransparency.addItemListener(new java.awt.event.ItemListener() {
1159
                    public void itemStateChanged(java.awt.event.ItemEvent e) {
1160
                            fireWizardComplete(isCorrectlyConfigured());
1161
                    }
1162
            });
1163
                    chkTransparency.setBounds(5, 168, 441, 21);
1164

    
1165
            }
1166
            return chkTransparency;
1167
    }
1168

    
1169
    /**
1170
     * Returns a vector of strings containing the styles selected for the
1171
     * layers. A blank style is correct and means that default style will
1172
     * be used.
1173
     *
1174
     * @return Vector
1175
     */
1176
    public Vector getStyles() {
1177
            Vector v = new Vector();
1178
            WMSLayerNode[] layers = selectedLayersToArray();
1179
            for (int i = 0; i < layers.length; i++) {
1180
                        FMapWMSStyle sty = layers[i].getSelectedStyle();
1181
                        String s = (sty!=null)? sty.name : "";
1182
                        v.add(s);
1183
                }
1184
            return v;
1185
    }
1186

    
1187
    public Vector getLayerStyle(String layerName)
1188
    {
1189
            Vector v = new Vector();
1190
            WMSLayerNode[] layers = selectedLayersToArray();
1191
            for (int i = 0; i < layers.length; i++) {
1192
                    if (layers[i].getName().equalsIgnoreCase( layerName))
1193
                    {
1194
                            FMapWMSStyle sty = layers[i].getSelectedStyle();
1195
                            String s = (sty!=null)? sty.name : "";
1196
                            v.add(s);
1197
                            return v;
1198
                    }
1199
                }
1200
            return v;
1201
    }
1202

    
1203
    /**
1204
     * This method initializes tabInfo
1205
     *
1206
     * @return Panel
1207
     */
1208
    private InfoPanel getTabInfo() {
1209
            if (tabInfo == null) {
1210
                    tabInfo = new InfoPanel();
1211

    
1212
            }
1213
            return tabInfo;
1214
    }
1215

    
1216
    public void setDimensions(Vector dimensions) {
1217
            for (int i = 0; i < dimensions.size(); i++) {
1218
                    String st = (String) dimensions.get(i);
1219
                    if (st.split("=").length == 2) {
1220
                            String[] s = st.split("=");
1221
                            getTabDimensions().setDimensionValue(s[0], s[1]);
1222
                    }
1223
                }
1224

    
1225
    }
1226

    
1227
    /**
1228
     * This method initializes tabDimension
1229
     *
1230
     * @return Panel
1231
     */
1232
    private DimensionPanel getTabDimensions() {
1233
            if (tabDimensions == null) {
1234
                    tabDimensions = new DimensionPanel();
1235
            tabDimensions.setEnabled(false);
1236
            tabDimensions.addListener(new BeanListener(){
1237
                    public void beanValueChanged(Object value) {
1238
                            Vector myDimensions = (Vector) value;
1239
                            if (value!=null && (  oldDimensions == null ||
1240
                                                        !(oldDimensions.size() == myDimensions.size()
1241
                                                       && oldDimensions.containsAll(myDimensions)))
1242
                                                       ){
1243
                                    oldDimensions = myDimensions;
1244
                                }
1245
                            fireWizardComplete(isCorrectlyConfigured());
1246
                    }
1247
            });
1248

    
1249
            }
1250
            return tabDimensions;
1251
    }
1252

    
1253
    /**
1254
     * @return
1255
     */
1256
    public boolean getTransparency() {
1257
        return getChkTransparency().isSelected();
1258
    }
1259

    
1260
    /**
1261
     * @return
1262
     */
1263
    public Vector getDimensions() {
1264
        return getTabDimensions().getDimensions();
1265
    }
1266

    
1267
        public void initWizard() {}
1268
        public void execute() {        }
1269

    
1270
        
1271
        //Gets all the layers available in the WMS Server
1272
        protected FLayer getAllSubTree(WMSLayerNode node)
1273
        {
1274
                if (node.getChildren().size() > 0)
1275
                {
1276
                        FLayers l = null;
1277
                        if (this.getMapCtrl() == null){
1278
                                com.iver.cit.gvsig.gui.View v = (com.iver.cit.gvsig.gui.View) PluginServices.getMDIManager().getActiveView();
1279
                                l = new FLayers(v.getMapControl().getMapContext(), null);
1280
                        }else{
1281
                                l = new FLayers(this.getMapCtrl().getMapContext(), null);
1282
                        }
1283

    
1284
                l.setName(node.getTitle());
1285
                l.setVisible( false );
1286
                        for(int i = 0; i < node.getChildren().size(); i++ ){
1287
                                FLayer lyr = getAllSubTree((WMSLayerNode)node.getChildren().get(i));
1288
                                if(lyr != null){
1289
                                        l.addLayer(lyr);
1290
                                }
1291
                        }
1292
                        return l;
1293
                }
1294
                else{
1295
                        FLyrWMS layer = new FLyrWMS();
1296
                        try {
1297
                                layer.setHost(new URL(dataSource.getHost()));
1298
                                layer.setFullExtent(getLayersRectangle());
1299
                        } catch (CannotReprojectException e) {
1300
                                e.printStackTrace();
1301
                                return null;
1302
                        } catch (MalformedURLException e) {
1303
                                e.printStackTrace();
1304
                                return null;
1305
                        }
1306
                        layer.setFormat(getFormat());
1307
                        layer.setLayerQuery(node.getName());
1308
                layer.setInfoLayerQuery(getQueryableLayerQuery());
1309
                layer.setSRS(getSRS());
1310
                layer.setName(node.getTitle());
1311
                layer.setWmsTransparency(getTransparency());
1312
                layer.setStyles(getLayerStyle(node.getName()));
1313
                layer.setDimensions(getDimensions());
1314
                layer.setDriver(getDriver());
1315
                layer.setOnlineResources(getOnlineResources());
1316
                layer.setFixedSize(getFixedSize());
1317
                layer.setQueryable(dataSource.isQueryable());
1318
                layer.setVisible(false);
1319
                return layer;
1320
                }
1321
        }
1322
        
1323
        //Gets all the layers available in the WMS Server        
1324
        public FLayer getAllLayers(){
1325
        LayerTree layerTree = getLayerStructure();
1326
        return getAllSubTree((WMSLayerNode)layerTree.getModel().getRoot());
1327
        }
1328
        
1329
        //changed by Laura:
1330
        //To delegate getLayer to ParamsPanel from WMSWizard and WMSProps
1331
        //public FLayer getLayer() {        return null; }
1332
        public FLayer getLayer(){
1333
                if(getDisagregatedLayers()){
1334
                        return getLayerTree();
1335
                }else{
1336
                        return getLayerPlain();
1337
                }
1338
        }
1339
        /**
1340
         * If user does not select the chekbox Disagregate layers, will get the layer tree in WMS
1341
         * @return
1342
         */
1343
    protected FLayer getLayerTree() {
1344
        LayerTree layerTree = getLayerStructure();
1345
                TreePath[] selection = (TreePath[])getSelectedPaths().toArray(new TreePath[0]);//layerTree.getSelectionPaths();
1346
                if (selection!=null){
1347
                        return getSubTree((WMSLayerNode)layerTree.getModel().getRoot(), selection);
1348
                }
1349
                return null;
1350
    }
1351

    
1352
    protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node){
1353
                for (int i = 0; i < selection.length; i++) {
1354
                        Object[] components = selection[i].getPath();
1355
                        for (int j=0; j < components.length ; j++)
1356
                        {
1357
                                if (components[j] instanceof WMSLayerNode){
1358
                                        if (((WMSLayerNode)components[j]).getTitle().compareTo(node.getTitle()) == 0){
1359
                                                return true;
1360
                                        }
1361
                                }
1362
                        }
1363
                }
1364
                return false;
1365
    }
1366

    
1367
        protected FLayer getSubTree(WMSLayerNode node, TreePath[] selection)
1368
        {
1369
                if (node.getChildren().size() > 0)
1370
                {
1371
                        FLayers l = null;
1372
                        if (this.getMapCtrl() == null){
1373
                                com.iver.cit.gvsig.gui.View v = (com.iver.cit.gvsig.gui.View) PluginServices.getMDIManager().getActiveView();
1374
                                l = new FLayers(v.getMapControl().getMapContext(), null);
1375
                        }else{
1376
                                l = new FLayers(this.getMapCtrl().getMapContext(), null);
1377
                        }
1378

    
1379
                l.setName(node.getTitle());
1380
                        for(int i = 0; i < node.getChildren().size(); i++ ){
1381
                                if (nodeSelected(selection, (WMSLayerNode)(node.getChildren().get(i))))
1382
                                {
1383
                                        FLayer lyr = getSubTree((WMSLayerNode)node.getChildren().get(i), selection);
1384
                                        if(lyr != null){
1385
                                                l.addLayer(lyr);
1386
                                        }
1387
                                }
1388
                        }
1389
                        return l;
1390
                }
1391
                else{
1392
                        if (nodeSelected(selection, node))
1393
                        {
1394
                                FLyrWMS layer = new FLyrWMS();
1395
                                //layer.setHost(getHost());
1396
                                try {
1397
                                        layer.setHost(new URL(dataSource.getHost()));
1398
                                        layer.setFullExtent(getLayersRectangle());
1399
                                } catch (CannotReprojectException e) {
1400
                                        e.printStackTrace();
1401
                                        return null;
1402
                                } catch (MalformedURLException e) {
1403
                                        e.printStackTrace();
1404
                                        return null;
1405
                                }
1406
                                layer.setFormat(getFormat());
1407
                                layer.setLayerQuery(node.getName());
1408
                        layer.setInfoLayerQuery(getQueryableLayerQuery());
1409
                        layer.setSRS(getSRS());
1410
                        layer.setName(node.getTitle());
1411
                        layer.setWmsTransparency(getTransparency());
1412
                        layer.setStyles(getLayerStyle(node.getName()));
1413
                        layer.setDimensions(getDimensions());
1414
                        layer.setDriver(getDriver());
1415
                        layer.setOnlineResources(getOnlineResources());
1416
                        layer.setFixedSize(getFixedSize());
1417
                        //layer.setQueryable(isQueryable());
1418
                        layer.setQueryable(dataSource.isQueryable());
1419
                        return layer;
1420

    
1421
                        }else{
1422
                                return null;
1423
                        }
1424
                }
1425
        }
1426

    
1427
        /**
1428
         * If user selects the chekbox Disagregate layers, will get the selected layers rendered in one
1429
         * the tree structure in WMS will be lost.
1430
         * @return
1431
         */
1432
    protected FLayer getLayerPlain(){
1433
        FLyrWMS layer = new FLyrWMS();
1434
        //layer.setHost(getHost());
1435
        try{
1436
                layer.setFullExtent(getLayersRectangle());
1437
                layer.setHost(new URL(dataSource.getHost()));
1438
        }catch(CannotReprojectException ex){
1439
                ex.printStackTrace();
1440
                JOptionPane.showMessageDialog((Component)PluginServices.getMainFrame(), ex.getMessage());
1441
                return null;
1442
        } catch (MalformedURLException e) {
1443
                        e.printStackTrace();
1444
                        return null;
1445
                }
1446
        layer.setFormat(getFormat());
1447
        layer.setLayerQuery(getLayersQuery());
1448
        layer.setInfoLayerQuery(getQueryableLayerQuery());
1449
        layer.setSRS(getSRS());
1450
        layer.setName(getLayerName());
1451
        layer.setWmsTransparency(getTransparency());
1452
        layer.setStyles(getStyles());
1453
        layer.setDimensions(getDimensions());
1454
        layer.setDriver(getDriver());
1455
        layer.setOnlineResources(getOnlineResources());
1456
        layer.setFixedSize(getFixedSize());
1457
        //layer.setQueryable(isQueryable());
1458
        layer.setQueryable(dataSource.isQueryable());
1459
        return layer;
1460
    }
1461
//---------------------
1462

    
1463
        public FMapWMSDriver getDriver() {
1464
                return dataSource.getDriver();
1465
        }
1466

    
1467
        public Dimension getFixedSize() {
1468
                return sizeFixed;
1469
        }
1470

    
1471
        /**
1472
         * This method initializes chkExtendedNames
1473
         *
1474
         * @return CheckBox
1475
         */
1476
        private JCheckBox getChkExtendedNames() {
1477
                if (chkExtendedNames == null) {
1478
                        chkExtendedNames = new JCheckBox();
1479
                        chkExtendedNames.setText(PluginServices.getText(this, "show_layer_names"));
1480
                        chkExtendedNames.addItemListener(new java.awt.event.ItemListener() {
1481
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1482
                                        boolean b = chkExtendedNames.isSelected();
1483
                                        getTreeLayers().showLayerNames = b;
1484
                                        getTreeLayers().repaint();
1485
                                        getLstSelectedLayers().showLayerNames = b;
1486
                                        getLstSelectedLayers().repaint();
1487
                                        getStyleTree().showLayerNames = b;
1488
                                }
1489
                        });
1490
                        chkExtendedNames.addActionListener(new java.awt.event.ActionListener() {
1491
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1492
                                        fPrefs.putBoolean("show_layer_names", chkExtendedNames.isSelected());
1493
                                }
1494
                        });
1495
                        chkExtendedNames.setBounds(46, 300, 150, 20);
1496
                        chkExtendedNames.setSelected(fPrefs.getBoolean("show_layer_names", false));
1497

    
1498
                }
1499
                return chkExtendedNames;
1500
        }
1501

    
1502
        /**
1503
         * This method initializes btnUp
1504
         *
1505
         * @return Button
1506
         */
1507
        private JButton getBtnUp() {
1508
                if (btnUp == null) {
1509
                        btnUp = new JButton();
1510
                        btnUp.setBounds(410, 184, 30, 30);
1511
                        btnUp.setToolTipText(PluginServices.getText(this, "move_layer_up"));
1512
                        btnUp.addActionListener(new java.awt.event.ActionListener() {
1513
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1514
                                        LayerList list = getLstSelectedLayers();
1515
                                        int[] selectedIndices = list.getSelectedIndices();
1516
                                        int index = list.getSelectedIndex();
1517
                                        if (selectedIndices != null && selectedIndices.length==1 && index > 0 ) {
1518
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1519
                                                m.itemsMoved(index - 1, new int[] {index});
1520
                                                list.setSelectedIndex(index - 1);
1521
                                        }
1522
                                }
1523
                        });
1524
                        btnUp.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/up-arrow.png")));
1525
                }
1526
                return btnUp;
1527
        }
1528

    
1529

    
1530
        /**
1531
         * This method initializes btnDown
1532
         *
1533
         * @return Button
1534
         */
1535
        private JButton getBtnDown() {
1536
                if (btnDown == null) {
1537
                        btnDown = new JButton();
1538
                        btnDown.setBounds(410, 215, 30, 30);
1539
                        btnDown.setToolTipText(PluginServices.getText(this, "move_layer_down"));
1540
                        btnDown.addActionListener(new java.awt.event.ActionListener() {
1541
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1542
                                        LayerList list = getLstSelectedLayers();
1543
                                        int[] selectedIndices = list.getSelectedIndices();
1544
                                        int index = list.getSelectedIndex();
1545
                                        if (selectedIndices != null && selectedIndices.length == 1 && index < getLstSelectedLayers().getModel().getSize()-1) {
1546
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1547
                                                m.itemsMoved(index + 1, new int[] {index});
1548
                                                list.setSelectedIndex( index + 1);
1549
                                        }
1550
                                }
1551
                        });
1552
                        btnDown.setIcon(new ImageIcon(getClass().getClassLoader().getResource("images/down-arrow.png")));
1553
                }
1554
                return btnDown;
1555
        }
1556

    
1557
        public void setFixedSize(Dimension sz) {
1558
                sizeFixed = sz;
1559
        }
1560

    
1561
        public ArrayList getSelectedPaths(){
1562
                return selectedPaths;
1563
        }
1564

    
1565
        public LayerTree getJustTreeLayer(){
1566
                return treeLayers;
1567
        }
1568

    
1569

    
1570
        /**
1571
         * This method initializes chkDisagregate
1572
         *
1573
         * @return CheckBox
1574
         */
1575
        private JCheckBox getChkDisagregate() {
1576
                if (chkDisagregate == null) {
1577

    
1578
                        chkDisagregate = new JCheckBox();
1579
                        chkDisagregate.setBounds(new java.awt.Rectangle(46,276,247,20));
1580
                        chkDisagregate.setText(PluginServices.getText(this, "disagregate_layers"));
1581

    
1582
                        chkDisagregate.addActionListener(new java.awt.event.ActionListener() {
1583
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1584
                                        fPrefs.putBoolean("disagregate_layers", chkDisagregate.isSelected());
1585
                                }
1586
                        });
1587
                        chkDisagregate.setSelected(fPrefs.getBoolean("disagregate_layers", false));
1588

    
1589
                }
1590
                return chkDisagregate;
1591
        }
1592

    
1593
        public boolean getDisagregatedLayers(){
1594
                return chkDisagregate.isSelected();
1595
        }
1596
        public void disableDisagregatedLayers(){
1597
                chkDisagregate.setEnabled(false);
1598
        }
1599
}  //  @jve:decl-index=0:visual-constraint="10,10"