Statistics
| Revision:

root / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / wms / WMSWizard.java @ 2183

History | View | Annotate | Download (29.5 KB)

1
/*
2
 * Created on 23-abr-2004
3
 *
4
 * To change the template for this generated file go to
5
 * Window>Preferences>Java>Code Generation>Code and Comments
6
 */
7
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
8
 *
9
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
10
 *
11
 * This program is free software; you can redistribute it and/or
12
 * modify it under the terms of the GNU General Public License
13
 * as published by the Free Software Foundation; either version 2
14
 * of the License, or (at your option) any later version.
15
 *
16
 * This program is distributed in the hope that it will be useful,
17
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
18
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
19
 * GNU General Public License for more details.
20
 *
21
 * You should have received a copy of the GNU General Public License
22
 * along with this program; if not, write to the Free Software
23
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
24
 *
25
 * For more information, contact:
26
 *
27
 *  Generalitat Valenciana
28
 *   Conselleria d'Infraestructures i Transport
29
 *   Av. Blasco Ib??ez, 50
30
 *   46010 VALENCIA
31
 *   SPAIN
32
 *
33
 *      +34 963862235
34
 *   gvsig@gva.es
35
 *      www.gvsig.gva.es
36
 *
37
 *    or
38
 *
39
 *   IVER T.I. S.A
40
 *   Salamanca 50
41
 *   46005 Valencia
42
 *   Spain
43
 *
44
 *   +34 963163400
45
 *   dac@iver.es
46
 */
47
package com.iver.cit.gvsig.gui.wms;
48

    
49
import java.awt.geom.Rectangle2D;
50
import java.net.MalformedURLException;
51
import java.net.URL;
52
import java.util.ArrayList;
53
import java.util.HashSet;
54
import java.util.Iterator;
55
import java.util.TreeSet;
56

    
57
import javax.swing.DefaultComboBoxModel;
58
import javax.swing.DefaultListModel;
59
import javax.swing.JPanel;
60
import javax.swing.JTextField;
61
import javax.swing.tree.TreePath;
62

    
63
import org.apache.log4j.Logger;
64

    
65
import com.iver.andami.PluginServices;
66
import com.iver.cit.gvsig.fmap.layers.FLayer;
67
import com.iver.cit.gvsig.fmap.layers.LayerFactory;
68
import com.iver.cit.gvsig.gui.WMSDataSourceAdapter;
69
import com.iver.cit.gvsig.gui.WizardPanel;
70
import com.iver.utiles.NotExistInXMLEntity;
71
import com.iver.utiles.XMLEntity;
72
import com.iver.utiles.swing.JComboBox;
73

    
74

    
75
/**
76
 * DOCUMENT ME!
77
 *
78
 * @author Fernando Gonz?lez Cort?s
79
 */
80
public class WMSWizard extends WizardPanel {
81
        private static Logger logger = Logger.getLogger(WMSWizard.class.getName());
82
        private int page = 0;
83
        private boolean conectado = false;
84
        private javax.swing.JPanel jContentPane = null;
85
        private JComboBox cmbHost = null;
86
        private javax.swing.JButton btnDetalles = null;
87
        private javax.swing.JPanel jPanel = null;
88
        private javax.swing.JLabel jLabel1 = null;
89
        private javax.swing.JLabel lblTitle = null;
90
        private javax.swing.JScrollPane jScrollPane = null;
91
        private javax.swing.JTextArea txtAbstract = null;
92
        private javax.swing.JScrollPane jScrollPane1 = null;
93
        private javax.swing.JTree treeLayers1 = null;
94
        private javax.swing.JScrollPane jScrollPane2 = null;
95
        private javax.swing.JList lstFormats1 = null;
96
        private javax.swing.JPanel panelPage1 = null;
97
        private javax.swing.JPanel panelPage2 = null;
98
        private javax.swing.JScrollPane jScrollPane5 = null;
99
        private javax.swing.JList lstSelectedLayers = null;
100
        private javax.swing.JButton btnAdd = null;
101
        private javax.swing.JButton btnDel = null;
102
        private javax.swing.JScrollPane jScrollPane6 = null;
103
        private javax.swing.JList lstSRSs = null;
104
        private LayerListModel selectedLayersModel = new LayerListModel();
105
        private javax.swing.JButton btnSiguiente = null;
106
        private javax.swing.JButton btnAnterior = null;
107
        private javax.swing.JPanel jPanel1 = null;
108
        private javax.swing.JPanel jPanel2 = null;
109
        private javax.swing.JPanel jPanel3 = null;
110
        private WizardListenerSupport listenerSupport = new WizardListenerSupport();
111
        private WizardDataSource dataSource;
112
        private JPanel jPanel4 = null;
113
        private JTextField jTxtNomCapa = null;
114

    
115
        /**
116
         * This is the default constructor
117
         */
118
        public WMSWizard() {
119
                super();
120
                initialize();
121
        }
122

    
123
        /**
124
         * This method initializes this
125
         */
126
        private void initialize() {
127
                setTabName("WMS");
128
                this.setSize(510, 311);
129
                this.setLayout(null);
130
                this.setPreferredSize(new java.awt.Dimension(750, 320));
131
                this.setVisible(true);
132
                this.add(getPanelPage1(), null);
133
                this.add(getPanelPage2(), null);
134
                this.add(getBtnAnterior(), null);
135
                this.add(getBtnSiguiente(), null);
136
                activarVisualizarBotones();
137
        }
138

    
139
        /**
140
         * DOCUMENT ME!
141
         */
142
        private void actualizarSRS() {
143
                LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
144

    
145
                if (layers.length == 0) {
146
                        lstSRSs.setModel(new DefaultListModel());
147
                } else {
148
                        TreeSet srsSet = new TreeSet();
149
                        srsSet.addAll(layers[0].getSRSs());
150

    
151
                        for (int i = 1; i < layers.length; i++) {
152
                                HashSet nuevo = new HashSet(layers[i].getSRSs());
153
                                Iterator it = srsSet.iterator();
154

    
155
                                while (it.hasNext()) {
156
                                        String srs = (String) it.next();
157

    
158
                                        if (!nuevo.contains(srs)) {
159
                                                srsSet.remove(srs);
160
                                        }
161
                                }
162
                        }
163

    
164
                        DefaultListModel model = new DefaultListModel();
165
                        String[] array = (String[]) srsSet.toArray(new String[0]);
166

    
167
                        for (int i = 0; i < array.length; i++) {
168
                                model.addElement(array[i]);
169
                        }
170

    
171
                        lstSRSs.setModel(model);
172
                }
173
        }
174

    
175
        /**
176
         * DOCUMENT ME!
177
         */
178
        private void addLayer() {
179
                boolean alguno = false;
180

    
181
                TreePath[] selecciones = getTreeLayers1().getSelectionPaths();
182

    
183
                for (int i = 0; i < selecciones.length; i++) {
184
                        LayerInfo nodo = (LayerInfo) selecciones[i].getLastPathComponent();
185

    
186
                        String name = nodo.name;
187
                        String text = nodo.text;
188
                        ArrayList srs = nodo.getSRSs();
189

    
190
                        //Se a?ade a la lista de layers seleccionados
191
                        LayerListModel modelo = (LayerListModel) lstSelectedLayers.getModel();
192

    
193
                        if (modelo.addElement(nodo)) {
194
                                alguno = true;
195
                        }
196
                }
197

    
198
                if (alguno) {
199
                        activarVisualizarBotones();
200
                        actualizarSRS();
201
                }
202
        }
203

    
204
        /**
205
         * DOCUMENT ME!
206
         */
207
        private void delLayer() {
208
                int[] index = lstSelectedLayers.getSelectedIndices();
209

    
210
                ArrayList removeList = new ArrayList();
211
                LayerListModel modelo = (LayerListModel) lstSelectedLayers.getModel();
212
                LayerInfo[] infos = modelo.getElements();
213

    
214
                for (int i = 0; i < index.length; i++) {
215
                        removeList.add(infos[index[i]]);
216
                }
217

    
218
                modelo.delElements(removeList);
219
                lstSelectedLayers.clearSelection();
220

    
221
                activarVisualizarBotones();
222

    
223
                actualizarSRS();
224
        }
225

    
226
        /**
227
         * DOCUMENT ME!
228
         *
229
         * @param host DOCUMENT ME!
230
         */
231
        private void addHost(String host) {
232
                host = host.trim();
233

    
234
                DefaultComboBoxModel model = (DefaultComboBoxModel) getTxtHost()
235
                                                                                                                                .getModel();
236

    
237
                if (model.getIndexOf(host) < 0) {
238
                        model.addElement(host);
239

    
240
                        PluginServices ps = PluginServices.getPluginServices(this);
241
                        XMLEntity xml = ps.getPersistentXML();
242

    
243
                        try {
244
                                String[] servers = xml.getStringArrayProperty("wms-servers");
245
                                String[] newServers = new String[servers.length + 1];
246
                                System.arraycopy(servers, 0, newServers, 0, servers.length);
247
                                newServers[servers.length] = host;
248
                                xml.putProperty("wms-servers", newServers);
249
                        } catch (NotExistInXMLEntity e) {
250
                                xml.putProperty("wms-servers", new String[] { host });
251
                        }
252

    
253
                        ps.setPersistentXML(xml);
254
                }
255
        }
256

    
257
        /**
258
         * DOCUMENT ME!
259
         */
260
        private void rellenarControles() {
261
                try {
262
                        String host = cmbHost.getModel().getSelectedItem().toString();
263

    
264
                        // if (!host.endsWith("?")) {
265
                        //         host += "?";
266
                        // }
267

    
268
                        WizardData data = dataSource.detalles(new URL(host));
269

    
270
                        addHost(host);
271

    
272
                        ((LayerListModel) lstSelectedLayers.getModel()).clear();
273
                        lstSelectedLayers.repaint();
274
                        lblTitle.setText(data.getTitle());
275
                        txtAbstract.setText(data.getAbstract());
276
                        lstFormats1.setModel(new FormatListModel(data.getFormats()));
277
                        treeLayers1.setModel(new LayerTreeModel(data.getLayer()));
278
                        conectado = true;
279
                        activarVisualizarBotones();
280
                } catch (Exception e) {
281
                        listenerSupport.callError(e);
282
                }
283
        }
284

    
285
        /**
286
         * DOCUMENT ME!
287
         */
288
        private void activarVisualizarBotones() {
289
                if (page == 0) {
290
                        getBtnAnterior().setEnabled(false);
291
                        getBtnSiguiente().setVisible(true);
292

    
293
                        if (conectado) {
294
                                getBtnSiguiente().setEnabled(true);
295
                        } else {
296
                                getBtnSiguiente().setEnabled(false);
297
                        }
298
                } else if (page == 1) {
299
                        getBtnAnterior().setEnabled(true);
300
                        getBtnSiguiente().setVisible(false);
301
                        listenerSupport.callStateChanged(true);
302

    
303
                        if ((getLstSRSs().getSelectedIndex() != -1) &&
304
                                        (getLstFormats1().getSelectedIndex() != -1) &&
305
                                        (getLstSelectedLayers().getModel().getSize() > 0)) {
306
                                listenerSupport.callStateChanged(true);
307
                        } else {
308
                                listenerSupport.callStateChanged(false);
309
                        }
310

    
311
                        if (getTreeLayers1().getSelectionCount() > 0) {
312
                                LayerInfo nodo = (LayerInfo) getTreeLayers1().getSelectionPath()
313
                                                                                                 .getLastPathComponent();
314
                                String name = nodo.name;
315

    
316
                                if (name != null) {
317
                                        getBtnAdd().setEnabled(true);
318
                                } else {
319
                                        getBtnAdd().setEnabled(false);
320
                                }
321
                        } else {
322
                                getBtnAdd().setEnabled(false);
323
                        }
324

    
325
                        if (getLstSelectedLayers().getSelectedIndex() != -1) {
326
                                getBtnDel().setEnabled(true);
327
                        } else {
328
                                getBtnDel().setEnabled(false);
329
                        }
330
                }
331
        }
332

    
333
        /*
334
         * DOCUMENT ME!
335
         *
336
                     private void finalizar() {
337
                         LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
338
                         String srs = (String) lstSRSs.getSelectedValue();
339
                         //Nombre separado por comas de las capas
340
                         String layersQuery = layers[0].name;
341
                         for (int i = 1; i < layers.length; i++) {
342
                             layersQuery += ("," + layers[i].name);
343
                         }
344
                         Rectangle2D rect;
345
                         rect = v.getMapControl().getExtent();
346
                         if (rect == null) {
347
                             //Boundingbox de todas las capas
348
                             ArrayList rectangulos = new ArrayList();
349
                             for (int i = 0; i < layers.length; i++) {
350
                                 rect = wms.getBoundingBox(layers[i].name, srs);
351
                                 if (rect != null) {
352
                                     rectangulos.add(rect);
353
                                 }
354
                             }
355
                             rect = Utilities.getRectangle((Rectangle2D.Double[]) rectangulos.toArray(
356
                                         new Rectangle2D.Double[0]));
357
                             if (rect == null) {
358
                                 App.instance.getNm().addInfo("Si no hay un bounding box en la especificaci?n, y tampoco en el FMap.",
359
                                     null);
360
                                 return; //Si no hay un bounding box en la especificaci?n, y tampoco en el FMap.
361
                             }
362
                             logger.debug("(" + rect.getMinX() + ", " + rect.getMinY() + ")-(" +
363
                                 rect.getMaxX() + ", " + rect.getMaxY() + ")");
364
                         }
365
                         if (rect != null) {
366
                             IFLayer lyr = new FLyrWMS(rect,
367
                                     (String) lstFormats1.getSelectedValue(), layersQuery, srs,
368
                                     wms);
369
                             v.getMapControl().getLayers().addLayer(lyr);
370
                             v.getTOC().refresh();
371
                             v.getMapControl().drawMap();
372
                         } else {
373
                         }
374
                         /*MapQuery query = new MapQuery();
375
                            query.setBBOX(rect);
376
                            query.setFormat((String) lstFormats1.getSelectedValue());
377
                            query.setHeight(300);
378
                            query.setLayers(layersQuery);
379
                            query.setSRS(srs);
380
                            query.setStyles("");
381
                            query.setVersion("1.0.0");
382
                            query.setWidth(300);
383
                            byte[] bytes;
384
                            try {
385
                                    bytes = wms.doMapQuery(query);
386
                                    FileOutputStream out;
387
                                    out = new FileOutputStream("res.png");
388
                                    out.write(bytes);
389
                                    out.close();
390
                            } catch (WMSException e1) {
391
                                    e1.printStackTrace();
392
                            } catch (Exception e1) {
393
                                    e1.printStackTrace();
394
                            }
395
                     }*/
396

    
397
        /**
398
         * This method initializes txtHost
399
         *
400
         * @return javax.swing.JTextField
401
         */
402
        private javax.swing.JComboBox getTxtHost() {
403
                if (cmbHost == null) {
404
                        cmbHost = new JComboBox();
405
                        cmbHost.setModel(new DefaultComboBoxModel());
406
                        cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
407
                        cmbHost.setEditable(true);
408

    
409
                        XMLEntity xml = PluginServices.getPluginServices(this)
410
                                                                                  .getPersistentXML();
411
                        if (xml == null)
412
                                xml = new XMLEntity();
413
                        
414
                        if (!xml.contains("wms-servers")) {
415
                                String[] servers = new String[2];
416
                                servers[0] = "http://demo.deegree.org:8080/deegree/wms";
417
                                servers[1] = "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?";
418

    
419
                                xml.putProperty("wms-servers", servers);
420
                        }
421

    
422
                        try {
423
                                String[] servers = xml.getStringArrayProperty("wms-servers");
424

    
425
                                for (int i = 0; i < servers.length; i++) {
426
                                        ((DefaultComboBoxModel) cmbHost.getModel()).addElement(servers[i]);
427
                                }
428
                        } catch (NotExistInXMLEntity e) {
429
                        }
430
                }
431

    
432
                return cmbHost;
433
        }
434

    
435
        /**
436
         * This method initializes btnDetalles
437
         *
438
         * @return javax.swing.JButton
439
         */
440
        private javax.swing.JButton getBtnDetalles() {
441
                if (btnDetalles == null) {
442
                        btnDetalles = new javax.swing.JButton();
443
                        btnDetalles.setPreferredSize(new java.awt.Dimension(100, 20));
444
                        btnDetalles.setText(PluginServices.getText(this, "detalles"));
445
                        btnDetalles.addActionListener(new java.awt.event.ActionListener() {
446
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
447
                                                rellenarControles();
448
                                        }
449
                                });
450
                }
451

    
452
                return btnDetalles;
453
        }
454

    
455
        /**
456
         * This method initializes jPanel
457
         *
458
         * @return javax.swing.JPanel
459
         */
460
        private javax.swing.JPanel getJPanel() {
461
                if (jPanel == null) {
462
                        jPanel = new javax.swing.JPanel();
463
                        jPanel.setLayout(null);
464
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
465
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
466
                                        null, PluginServices.getText(this, "descripcion"),
467
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
468
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
469
                        jPanel.setBounds(2, 67, 477, 197);
470
                        jPanel.add(getJLabel1(), null);
471
                        jPanel.add(getLblTitle(), null);
472
                        jPanel.add(getJScrollPane(), null);
473
                }
474

    
475
                return jPanel;
476
        }
477

    
478
        /**
479
         * This method initializes jLabel1
480
         *
481
         * @return javax.swing.JLabel
482
         */
483
        private javax.swing.JLabel getJLabel1() {
484
                if (jLabel1 == null) {
485
                        jLabel1 = new javax.swing.JLabel();
486
                        jLabel1.setText(PluginServices.getText(this, "nombre") + ":");
487
                        jLabel1.setBounds(37, 26, 40, 15);
488
                }
489

    
490
                return jLabel1;
491
        }
492

    
493
        /**
494
         * This method initializes lblTitle
495
         *
496
         * @return javax.swing.JLabel
497
         */
498
        private javax.swing.JLabel getLblTitle() {
499
                if (lblTitle == null) {
500
                        lblTitle = new javax.swing.JLabel();
501
                        lblTitle.setText("-");
502
                        lblTitle.setPreferredSize(new java.awt.Dimension(350, 16));
503
                        lblTitle.setBounds(82, 26, 350, 16);
504
                }
505

    
506
                return lblTitle;
507
        }
508

    
509
        /**
510
         * This method initializes jScrollPane
511
         *
512
         * @return javax.swing.JScrollPane
513
         */
514
        private javax.swing.JScrollPane getJScrollPane() {
515
                if (jScrollPane == null) {
516
                        jScrollPane = new javax.swing.JScrollPane();
517
                        jScrollPane.setViewportView(getTxtAbstract());
518
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
519
                        jScrollPane.setBounds(10, 47, 450, 137);
520
                }
521

    
522
                return jScrollPane;
523
        }
524

    
525
        /**
526
         * This method initializes txtAbstract
527
         *
528
         * @return javax.swing.JTextArea
529
         */
530
        private javax.swing.JTextArea getTxtAbstract() {
531
                if (txtAbstract == null) {
532
                        txtAbstract = new javax.swing.JTextArea();
533
                        txtAbstract.setWrapStyleWord(true);
534
                        txtAbstract.setColumns(30);
535
                        txtAbstract.setLineWrap(true);
536
                }
537

    
538
                return txtAbstract;
539
        }
540

    
541
        /**
542
         * This method initializes jScrollPane1
543
         *
544
         * @return javax.swing.JScrollPane
545
         */
546
        private javax.swing.JScrollPane getJScrollPane1() {
547
                if (jScrollPane1 == null) {
548
                        jScrollPane1 = new javax.swing.JScrollPane();
549
                        jScrollPane1.setViewportView(getTreeLayers1());
550
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(205, 75));
551
                }
552

    
553
                return jScrollPane1;
554
        }
555

    
556
        /**
557
         * This method initializes treeLayers1
558
         *
559
         * @return javax.swing.JTree
560
         */
561
        private javax.swing.JTree getTreeLayers1() {
562
                if (treeLayers1 == null) {
563
                        treeLayers1 = new javax.swing.JTree();
564
                        treeLayers1.setRootVisible(true);
565
                        treeLayers1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
566
                                        public void valueChanged(
567
                                                javax.swing.event.TreeSelectionEvent e) {
568
                                                activarVisualizarBotones();
569
                                        }
570
                                });
571
                }
572

    
573
                return treeLayers1;
574
        }
575

    
576
        /**
577
         * This method initializes jScrollPane2
578
         *
579
         * @return javax.swing.JScrollPane
580
         */
581
        private javax.swing.JScrollPane getJScrollPane2() {
582
                if (jScrollPane2 == null) {
583
                        jScrollPane2 = new javax.swing.JScrollPane();
584
                        jScrollPane2.setViewportView(getLstFormats1());
585
                        jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 200));
586
                        jScrollPane2.setBounds(297, 26, 183, 66);
587
                }
588

    
589
                return jScrollPane2;
590
        }
591

    
592
        /**
593
         * This method initializes lstFormats1
594
         *
595
         * @return javax.swing.JList
596
         */
597
        private javax.swing.JList getLstFormats1() {
598
                if (lstFormats1 == null) {
599
                        lstFormats1 = new javax.swing.JList();
600
                        lstFormats1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
601
                        lstFormats1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
602
                                        public void valueChanged(
603
                                                javax.swing.event.ListSelectionEvent e) {
604
                                                activarVisualizarBotones();
605
                                        }
606
                                });
607
                }
608

    
609
                return lstFormats1;
610
        }
611

    
612
        /**
613
         * This method initializes panelPage1
614
         *
615
         * @return javax.swing.JPanel
616
         */
617
        private javax.swing.JPanel getPanelPage1() {
618
                if (panelPage1 == null) {
619
                        panelPage1 = new javax.swing.JPanel();
620
                        panelPage1.setLayout(null);
621
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
622
                        panelPage1.setVisible(true);
623
                        panelPage1.setBounds(15, 5, 480, 262);
624
                        panelPage1.add(getJPanel1(), null);
625
                        panelPage1.add(getJPanel(), null);
626
                }
627

    
628
                return panelPage1;
629
        }
630

    
631
        /**
632
         * This method initializes panelPage2
633
         *
634
         * @return javax.swing.JPanel
635
         */
636
        private javax.swing.JPanel getPanelPage2() {
637
                if (panelPage2 == null) {
638
                        panelPage2 = new javax.swing.JPanel();
639
                        panelPage2.setLayout(null);
640
                        panelPage2.setPreferredSize(new java.awt.Dimension(490, 300));
641
                        panelPage2.setVisible(false);
642
                        panelPage2.setBounds(10, 5, 490, 276);
643
                        panelPage2.add(getJPanel2(), null);
644
                        panelPage2.add(getJPanel3(), null);
645
                        panelPage2.add(getJPanel4(), null);
646
                }
647

    
648
                return panelPage2;
649
        }
650

    
651
        /**
652
         * This method initializes jScrollPane5
653
         *
654
         * @return javax.swing.JScrollPane
655
         */
656
        private javax.swing.JScrollPane getJScrollPane5() {
657
                if (jScrollPane5 == null) {
658
                        jScrollPane5 = new javax.swing.JScrollPane();
659
                        jScrollPane5.setViewportView(getLstSelectedLayers());
660
                        jScrollPane5.setPreferredSize(new java.awt.Dimension(205, 75));
661
                }
662

    
663
                return jScrollPane5;
664
        }
665

    
666
        /**
667
         * This method initializes lstSelectedLayers
668
         *
669
         * @return javax.swing.JList
670
         */
671
        private javax.swing.JList getLstSelectedLayers() {
672
                if (lstSelectedLayers == null) {
673
                        lstSelectedLayers = new javax.swing.JList();
674
                        lstSelectedLayers.setModel(selectedLayersModel);
675
                        lstSelectedLayers.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
676
                        lstSelectedLayers.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
677
                                        public void valueChanged(
678
                                                javax.swing.event.ListSelectionEvent e) {
679
                                                activarVisualizarBotones();
680
                                        }
681
                                });
682
                }
683

    
684
                return lstSelectedLayers;
685
        }
686

    
687
        /**
688
         * This method initializes btnAdd
689
         *
690
         * @return javax.swing.JButton
691
         */
692
        private javax.swing.JButton getBtnAdd() {
693
                if (btnAdd == null) {
694
                        btnAdd = new javax.swing.JButton();
695
                        btnAdd.setPreferredSize(new java.awt.Dimension(23, 23));
696
                        btnAdd.setText(">");
697
                        btnAdd.setMargin(new java.awt.Insets(2, 0, 2, 0));
698
                        btnAdd.setEnabled(false);
699
                        btnAdd.addActionListener(new java.awt.event.ActionListener() {
700
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
701
                                                addLayer();
702
                                        }
703
                                });
704
                }
705

    
706
                return btnAdd;
707
        }
708

    
709
        /**
710
         * This method initializes btnDel
711
         *
712
         * @return javax.swing.JButton
713
         */
714
        private javax.swing.JButton getBtnDel() {
715
                if (btnDel == null) {
716
                        btnDel = new javax.swing.JButton();
717
                        btnDel.setPreferredSize(new java.awt.Dimension(23, 23));
718
                        btnDel.setText("<");
719
                        btnDel.setMargin(new java.awt.Insets(2, 0, 2, 0));
720
                        btnDel.setEnabled(false);
721
                        btnDel.addActionListener(new java.awt.event.ActionListener() {
722
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
723
                                                delLayer();
724
                                        }
725
                                });
726
                }
727

    
728
                return btnDel;
729
        }
730

    
731
        /**
732
         * This method initializes jScrollPane6
733
         *
734
         * @return javax.swing.JScrollPane
735
         */
736
        private javax.swing.JScrollPane getJScrollPane6() {
737
                if (jScrollPane6 == null) {
738
                        jScrollPane6 = new javax.swing.JScrollPane();
739
                        jScrollPane6.setViewportView(getLstSRSs());
740
                        jScrollPane6.setPreferredSize(new java.awt.Dimension(250, 200));
741
                        jScrollPane6.setBounds(10, 26, 272, 68);
742
                }
743

    
744
                return jScrollPane6;
745
        }
746

    
747
        /**
748
         * This method initializes lstSRSs
749
         *
750
         * @return javax.swing.JList
751
         */
752
        private javax.swing.JList getLstSRSs() {
753
                if (lstSRSs == null) {
754
                        lstSRSs = new javax.swing.JList();
755
                        lstSRSs.setModel(new SRSListModel());
756
                        lstSRSs.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
757
                        lstSRSs.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
758
                                        public void valueChanged(
759
                                                javax.swing.event.ListSelectionEvent e) {
760
                                                activarVisualizarBotones();
761
                                        }
762
                                });
763
                }
764

    
765
                return lstSRSs;
766
        }
767

    
768
        /**
769
         * This method initializes btnSiguiente
770
         *
771
         * @return javax.swing.JButton
772
         */
773
        private javax.swing.JButton getBtnSiguiente() {
774
                if (btnSiguiente == null) {
775
                        btnSiguiente = new javax.swing.JButton();
776
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
777
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
778
                        btnSiguiente.setBounds(205, 282, 100, 21);
779
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
780
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
781
                                                page++;
782
                                                getPanelPage1().setVisible(false);
783
                                                getPanelPage2().setVisible(true);
784
                                                activarVisualizarBotones();
785
                                        }
786
                                });
787
                }
788

    
789
                return btnSiguiente;
790
        }
791

    
792
        /**
793
         * This method initializes btnAnterior
794
         *
795
         * @return javax.swing.JButton
796
         */
797
        private javax.swing.JButton getBtnAnterior() {
798
                if (btnAnterior == null) {
799
                        btnAnterior = new javax.swing.JButton();
800
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
801
                        btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
802
                        btnAnterior.setBounds(100, 282, 100, 21);
803
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
804
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
805
                                                page--;
806
                                                getPanelPage1().setVisible(true);
807
                                                getPanelPage2().setVisible(false);
808
                                                activarVisualizarBotones();
809
                                        }
810
                                });
811
                }
812

    
813
                return btnAnterior;
814
        }
815

    
816
        /**
817
         * This method initializes jPanel1
818
         *
819
         * @return javax.swing.JPanel
820
         */
821
        private javax.swing.JPanel getJPanel1() {
822
                if (jPanel1 == null) {
823
                        jPanel1 = new javax.swing.JPanel();
824
                        jPanel1.add(getTxtHost(), null);
825
                        jPanel1.add(getBtnDetalles(), null);
826
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
827
                                        null, PluginServices.getText(this, "servidor"),
828
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
829
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
830
                        jPanel1.setBounds(2, 5, 477, 57);
831
                }
832

    
833
                return jPanel1;
834
        }
835

    
836
        /**
837
         * This method initializes jPanel2
838
         *
839
         * @return javax.swing.JPanel
840
         */
841
        private javax.swing.JPanel getJPanel2() {
842
                if (jPanel2 == null) {
843
                        jPanel2 = new javax.swing.JPanel();
844
                        jPanel2.add(getJScrollPane1(), null);
845
                        jPanel2.add(getBtnDel(), null);
846
                        jPanel2.add(getBtnAdd(), null);
847
                        jPanel2.add(getJScrollPane5(), null);
848
                        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
849
                                        null, PluginServices.getText(this, "seleccionar_capas"),
850
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
851
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
852
                        jPanel2.setBounds(-1, 5, 493, 112);
853
                }
854

    
855
                return jPanel2;
856
        }
857

    
858
        /**
859
         * This method initializes jPanel3
860
         *
861
         * @return javax.swing.JPanel
862
         */
863
        private javax.swing.JPanel getJPanel3() {
864
                if (jPanel3 == null) {
865
                        jPanel3 = new javax.swing.JPanel();
866
                        jPanel3.setLayout(null);
867
                        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(
868
                                        null, PluginServices.getText(this, "seleccionar_formato"),
869
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
870
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
871
                        jPanel3.setPreferredSize(new java.awt.Dimension(493, 300));
872
                        jPanel3.setLocation(-1, 122);
873
                        jPanel3.setSize(493, 101);
874
                        jPanel3.add(getJScrollPane6(), null);
875
                        jPanel3.add(getJScrollPane2(), null);
876
                }
877

    
878
                return jPanel3;
879
        }
880

    
881
        /**
882
         * DOCUMENT ME!
883
         *
884
         * @param listener
885
         */
886
        public void addWizardListener(WizardListener listener) {
887
                listenerSupport.addWizardListener(listener);
888
        }
889

    
890
        /**
891
         * DOCUMENT ME!
892
         *
893
         * @param listener
894
         */
895
        public void removeWizardListener(WizardListener listener) {
896
                listenerSupport.removeWizardListener(listener);
897
        }
898

    
899
        /**
900
         * DOCUMENT ME!
901
         *
902
         * @return
903
         */
904
        public WizardDataSource getDataSource() {
905
                return dataSource;
906
        }
907

    
908
        /**
909
         * DOCUMENT ME!
910
         *
911
         * @param source
912
         */
913
        public void setDataSource(WizardDataSource source) {
914
                dataSource = source;
915
        }
916

    
917
        /**
918
         * DOCUMENT ME!
919
         *
920
         * @return DOCUMENT ME!
921
         */
922
        public String getLayersQuery() {
923
                LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
924

    
925
                //Nombre separado por comas de las capas
926
                String layersQuery = layers[0].name;
927

    
928
                for (int i = 1; i < layers.length; i++) {
929
                        layersQuery += ("," + layers[i].name);
930
                }
931

    
932
                return layersQuery;
933
        }
934

    
935
        /**
936
         * DOCUMENT ME!
937
         *
938
         * @return DOCUMENT ME!
939
         */
940
        public String getQueryableLayerQuery() {
941
                LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
942

    
943
                //Nombre separado por comas de las capas
944
                String layersQuery = "";
945
                int i;
946

    
947
                for (i = 0; i < layers.length; i++) {
948
                        if (layers[i].queryable) {
949
                                layersQuery = layers[i].name;
950

    
951
                                break;
952
                        }
953
                }
954

    
955
                for (int j = i + 1; j < layers.length; j++) {
956
                        if (layers[j].queryable) {
957
                                layersQuery += ("," + layers[j].name);
958
                        }
959
                }
960

    
961
                return layersQuery;
962
        }
963

    
964
        /**
965
         * DOCUMENT ME!
966
         *
967
         * @return DOCUMENT ME!
968
         */
969
        public String getSRS() {
970
                return (String) lstSRSs.getSelectedValue();
971
        }
972

    
973
        /**
974
         * DOCUMENT ME!
975
         *
976
         * @return DOCUMENT ME!
977
         */
978
        public String getFormat() {
979
                return (String) lstFormats1.getSelectedValue();
980
        }
981

    
982
        /**
983
         * DOCUMENT ME!
984
         *
985
         * @return DOCUMENT ME!
986
         */
987
        public TreePath[] getSelectedLayers() {
988
                return getTreeLayers1().getSelectionPaths();
989
        }
990

    
991
        /**
992
         * DOCUMENT ME!
993
         *
994
         * @return DOCUMENT ME!
995
         */
996
        public Rectangle2D getLayersRectangle() {
997
                TreePath[] layers = getSelectedLayers();
998

    
999
                //Boundingbox de todas las capas
1000
                ArrayList rectangulos = new ArrayList();
1001

    
1002
                Rectangle2D rect;
1003

    
1004
                for (int i = 0; i < layers.length; i++) {
1005
                        String[] rutaCapa = new String[layers[i].getPathCount()];
1006

    
1007
                        for (int j = 0; j < layers[i].getPathCount(); j++) {
1008
                                rutaCapa[j] = ((LayerInfo) layers[i].getPathComponent(j)).text;
1009
                        }
1010

    
1011
                        rect = dataSource.getBoundingBox(rutaCapa, getSRS());
1012

    
1013
                        if (rect != null) {
1014
                                rectangulos.add(rect);
1015
                        }
1016
                }
1017

    
1018
                rect = getRectangle((Rectangle2D.Double[]) rectangulos.toArray(
1019
                                        new Rectangle2D.Double[0]));
1020

    
1021
                return rect;
1022
        }
1023

    
1024
        /**
1025
         * Obtiene el rect?ngulo que contiene a todos los otros
1026
         *
1027
         * @param rects rectangulos
1028
         *
1029
         * @return Rectangulo que contiene a todos los demas
1030
         */
1031
        public static Rectangle2D getRectangle(Rectangle2D[] rects) {
1032
                Rectangle2D ret = rects[0];
1033

    
1034
                for (int i = 1; i < rects.length; i++) {
1035
                        ret.add(rects[i]);
1036
                }
1037

    
1038
                return ret;
1039
        }
1040

    
1041
        /**
1042
         * Devuelve el host que est? escrito en el cuadro de texto del host o null
1043
         * en caso de que no haya nada escrito o est? mal escrito
1044
         *
1045
         * @return URL del host
1046
         */
1047
        public URL getHost() {
1048
                try {
1049
                        return new URL(cmbHost.getModel().getSelectedItem().toString());
1050
                } catch (MalformedURLException e) {
1051
                        return null;
1052
                }
1053
        }
1054

    
1055
        /**
1056
         * DOCUMENT ME!
1057
         *
1058
         * @return Nombre de la capa que aparece en el TOC.
1059
         */
1060
        public String getLayerName() {
1061
                return jTxtNomCapa.getText();
1062
        }
1063

    
1064
        /**
1065
         * This method initializes jPanel4
1066
         *
1067
         * @return javax.swing.JPanel
1068
         */
1069
        private JPanel getJPanel4() {
1070
                if (jPanel4 == null) {
1071
                        jPanel4 = new JPanel();
1072
                        jPanel4.setLayout(null);
1073
                        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
1074
                                        null, PluginServices.getText(this, "nombre_capa"),
1075
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
1076
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
1077
                        jPanel4.setBounds(-1, 223, 493, 48);
1078
                        jPanel4.add(getJTxtNomCapa(), null);
1079
                }
1080

    
1081
                return jPanel4;
1082
        }
1083

    
1084
        /**
1085
         * This method initializes jTextField
1086
         *
1087
         * @return javax.swing.JTextField
1088
         */
1089
        private JTextField getJTxtNomCapa() {
1090
                if (jTxtNomCapa == null) {
1091
                        jTxtNomCapa = new JTextField();
1092
                        jTxtNomCapa.setBounds(10, 19, 474, 20);
1093
                        jTxtNomCapa.setText(PluginServices.getText(this, "capaWMS"));
1094
                }
1095

    
1096
                return jTxtNomCapa;
1097
        }
1098

    
1099
        /* (non-Javadoc)
1100
         * @see com.iver.cit.gvsig.gui.WizardPanel#initWizard()
1101
         */
1102
        public void initWizard() {
1103
                setDataSource(new WMSDataSourceAdapter()); 
1104
        }
1105

    
1106
        /* (non-Javadoc)
1107
         * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
1108
         */
1109
        public void execute() {
1110
        }
1111

    
1112
        /* (non-Javadoc)
1113
         * @see com.iver.cit.gvsig.gui.WizardPanel#getLayer()
1114
         */
1115
        public FLayer getLayer() {
1116
                WMSWizard wms = this;
1117
                return LayerFactory.createLayer(wms.getLayerName(),
1118
                                wms.getLayersRectangle(), wms.getHost(),
1119
                                wms.getFormat(), wms.getLayersQuery(),
1120
                                wms.getQueryableLayerQuery(), wms.getSRS());
1121
        }
1122
}
1123

    
1124
//  @jve:decl-index=0:visual-constraint="10,10"
1125
//  @jve:visual-info  decl-index=0 visual-constraint="16,10"
1126
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"
1127
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"
1128
//        @jve:visual-info  decl-index=0 visual-constraint="10,10"