Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extWMS / src / com / iver / cit / gvsig / wms / gui / wmswizard / WizardWMS.java @ 3333

History | View | Annotate | Download (30.7 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.wms.gui.wmswizard;
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.FLyrWMS;
68
import com.iver.cit.gvsig.gui.WMSDataSourceAdapter;
69
import com.iver.cit.gvsig.gui.WizardPanel;
70
import com.iver.cit.gvsig.gui.wizards.FormatListModel;
71
import com.iver.cit.gvsig.gui.wizards.LayerInfo;
72
import com.iver.cit.gvsig.gui.wizards.LayerListModel;
73
import com.iver.cit.gvsig.gui.wizards.LayerTreeModel;
74
import com.iver.cit.gvsig.gui.wizards.WizardData;
75
import com.iver.cit.gvsig.gui.wizards.WizardDataSource;
76
import com.iver.cit.gvsig.gui.wizards.WizardListener;
77
import com.iver.cit.gvsig.gui.wizards.WizardListenerSupport;
78
import com.iver.utiles.NotExistInXMLEntity;
79
import com.iver.utiles.XMLEntity;
80
import com.iver.utiles.swing.JComboBox;
81

    
82

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

    
123
        /**
124
         * This is the default constructor
125
         */
126
        public WizardWMS() {
127
                super();
128
                initialize();
129
        }
130

    
131
        /**
132
         * This method initializes this
133
         */
134
        private void initialize() {
135
                setTabName("WMS");
136
                this.setSize(510, 311);
137
                this.setLayout(null);
138
                this.setPreferredSize(new java.awt.Dimension(750, 320));
139
                this.setVisible(true);
140
                this.add(getPanelPage1(), null);
141
                this.add(getPanelPage2(), null);
142
                this.add(getBtnAnterior(), null);
143
                this.add(getBtnSiguiente(), null);
144
                activarVisualizarBotones();
145
        }
146

    
147
        /**
148
         * DOCUMENT ME!
149
         */
150
        private void actualizarSRS() {
151
                LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
152

    
153
                if (layers.length == 0) {
154
                        lstSRSs.setModel(new DefaultListModel());
155
                } else {
156
                        TreeSet srsSet = new TreeSet();
157
                        srsSet.addAll(layers[0].getSRSs());
158

    
159
                        for (int i = 1; i < layers.length; i++) {
160
                                HashSet nuevo = new HashSet(layers[i].getSRSs());
161
                                Iterator it = srsSet.iterator();
162

    
163
                                while (it.hasNext()) {
164
                                        String srs = (String) it.next();
165

    
166
                                        if (!nuevo.contains(srs)) {
167
                                                srsSet.remove(srs);
168
                                        }
169
                                }
170
                        }
171

    
172
                        DefaultListModel model = new DefaultListModel();
173
                        String[] array = (String[]) srsSet.toArray(new String[0]);
174

    
175
                        for (int i = 0; i < array.length; i++) {
176
                                model.addElement(array[i]);
177
                        }
178

    
179
                        lstSRSs.setModel(model);
180
                }
181
        }
182

    
183
        /**
184
         * DOCUMENT ME!
185
         */
186
        private void addLayer() {
187
                boolean alguno = false;
188

    
189
                TreePath[] selecciones = getTreeLayers1().getSelectionPaths();
190

    
191
                for (int i = 0; i < selecciones.length; i++) {
192
                        LayerInfo nodo = (LayerInfo) selecciones[i].getLastPathComponent();
193

    
194
                        String name = nodo.name;
195
                        String text = nodo.text;
196
                        ArrayList srs = nodo.getSRSs();
197

    
198
                        //Se a?ade a la lista de layers seleccionados
199
                        LayerListModel modelo = (LayerListModel) lstSelectedLayers.getModel();
200

    
201
                        if (modelo.addElement(nodo)) {
202
                                alguno = true;
203
                        }
204
                }
205

    
206
                if (alguno) {
207
                        activarVisualizarBotones();
208
                        actualizarSRS();
209
                }
210
        }
211

    
212
        /**
213
         * DOCUMENT ME!
214
         */
215
        private void delLayer() {
216
                int[] index = lstSelectedLayers.getSelectedIndices();
217

    
218
                ArrayList removeList = new ArrayList();
219
                LayerListModel modelo = (LayerListModel) lstSelectedLayers.getModel();
220
                LayerInfo[] infos = modelo.getElements();
221

    
222
                for (int i = 0; i < index.length; i++) {
223
                        removeList.add(infos[index[i]]);
224
                }
225

    
226
                modelo.delElements(removeList);
227
                lstSelectedLayers.clearSelection();
228

    
229
                activarVisualizarBotones();
230

    
231
                actualizarSRS();
232
        }
233

    
234
        /**
235
         * DOCUMENT ME!
236
         *
237
         * @param host DOCUMENT ME!
238
         */
239
        private void addHost(String host) {
240
                host = host.trim();
241

    
242
                DefaultComboBoxModel model = (DefaultComboBoxModel) getTxtHost()
243
                                                                                                                                .getModel();
244

    
245
                if (model.getIndexOf(host) < 0) {
246
                        model.addElement(host);
247

    
248
                        PluginServices ps = PluginServices.getPluginServices(this);
249
                        XMLEntity xml = ps.getPersistentXML();
250

    
251
                        try {
252
                                String[] servers = xml.getStringArrayProperty("wms-servers");
253
                                String[] newServers = new String[servers.length + 1];
254
                                System.arraycopy(servers, 0, newServers, 0, servers.length);
255
                                newServers[servers.length] = host;
256
                                xml.putProperty("wms-servers", newServers);
257
                        } catch (NotExistInXMLEntity e) {
258
                                xml.putProperty("wms-servers", new String[] { host });
259
                        }
260

    
261
                        ps.setPersistentXML(xml);
262
                }
263
        }
264

    
265
        /**
266
         * DOCUMENT ME!
267
         */
268
        private void rellenarControles() {
269
                try {
270
                        String host = cmbHost.getModel().getSelectedItem().toString();
271

    
272
                        // if (!host.endsWith("?")) {
273
                        //         host += "?";
274
                        // }
275

    
276
                        WizardData data = dataSource.detalles(new URL(host));
277

    
278
                        addHost(host);
279

    
280
                        ((LayerListModel) lstSelectedLayers.getModel()).clear();
281
                        lstSelectedLayers.repaint();
282
                        lblTitle.setText(data.getTitle());
283
                        txtAbstract.setText(data.getAbstract());
284
                        lstFormats1.setModel(new FormatListModel(data.getFormats()));
285
                        treeLayers1.setModel(new LayerTreeModel(data.getLayer()));
286
                        conectado = true;
287
                        activarVisualizarBotones();
288
                } catch (Exception e) {
289
                        listenerSupport.callError(e);
290
                }
291
        }
292

    
293
        /**
294
         * DOCUMENT ME!
295
         */
296
        private void activarVisualizarBotones() {
297
                if (page == 0) {
298
                        getBtnAnterior().setEnabled(false);
299
                        getBtnSiguiente().setVisible(true);
300

    
301
                        if (conectado) {
302
                                getBtnSiguiente().setEnabled(true);
303
                        } else {
304
                                getBtnSiguiente().setEnabled(false);
305
                        }
306
                } else if (page == 1) {
307
                        getBtnAnterior().setEnabled(true);
308
                        getBtnSiguiente().setVisible(false);
309
                        listenerSupport.callStateChanged(true);
310

    
311
                        if ((getLstSRSs().getSelectedIndex() != -1) &&
312
                                        (getLstFormats1().getSelectedIndex() != -1) &&
313
                                        (getLstSelectedLayers().getModel().getSize() > 0)) {
314
                                listenerSupport.callStateChanged(true);
315
                        } else {
316
                                listenerSupport.callStateChanged(false);
317
                        }
318

    
319
                        if (getTreeLayers1().getSelectionCount() > 0) {
320
                                LayerInfo nodo = (LayerInfo) getTreeLayers1().getSelectionPath()
321
                                                                                                 .getLastPathComponent();
322
                                String name = nodo.name;
323

    
324
                                if (name != null) {
325
                                        getBtnAdd().setEnabled(true);
326
                                } else {
327
                                        getBtnAdd().setEnabled(false);
328
                                }
329
                        } else {
330
                                getBtnAdd().setEnabled(false);
331
                        }
332

    
333
                        if (getLstSelectedLayers().getSelectedIndex() != -1) {
334
                                getBtnDel().setEnabled(true);
335
                        } else {
336
                                getBtnDel().setEnabled(false);
337
                        }
338
                }
339
        }
340

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

    
405
        /**
406
         * This method initializes txtHost
407
         *
408
         * @return javax.swing.JTextField
409
         */
410
        private javax.swing.JComboBox getTxtHost() {
411
                if (cmbHost == null) {
412
                        cmbHost = new JComboBox();
413
                        cmbHost.setModel(new DefaultComboBoxModel());
414
                        cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
415
                        cmbHost.setEditable(true);
416

    
417
                        XMLEntity xml = PluginServices.getPluginServices(this)
418
                                                                                  .getPersistentXML();
419
                        if (xml == null)
420
                                xml = new XMLEntity();
421
                        
422
                        if (!xml.contains("wms-servers")) {
423
                                String[] servers = new String[9];
424
                servers[0] = "http://www.idee.es/wms/IDEE-Base/IDEE-Base";
425
                servers[1] = "http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx"; 
426
                servers[2] = "http://wms.jpl.nasa.gov/wms.cgi?";
427
                servers[3] = "http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?";
428
                                servers[4] = "http://demo.deegree.org:8080/deegree/wms";
429
                servers[5] = "http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_patricova";
430
                servers[6] = "http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_parque_fondo_prug";
431
                servers[7] = "http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_pgof";
432
                servers[8] = "http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_urbanismo_tematicos";
433

    
434
                                xml.putProperty("wms-servers", servers);
435
                        }
436

    
437
                        try {
438
                                String[] servers = xml.getStringArrayProperty("wms-servers");
439

    
440
                                for (int i = 0; i < servers.length; i++) {
441
                                        ((DefaultComboBoxModel) cmbHost.getModel()).addElement(servers[i]);
442
                                }
443
                        } catch (NotExistInXMLEntity e) {
444
                        }
445
                }
446

    
447
                return cmbHost;
448
        }
449

    
450
        /**
451
         * This method initializes btnDetalles
452
         *
453
         * @return javax.swing.JButton
454
         */
455
        private javax.swing.JButton getBtnDetalles() {
456
                if (btnDetalles == null) {
457
                        btnDetalles = new javax.swing.JButton();
458
                        btnDetalles.setPreferredSize(new java.awt.Dimension(100, 20));
459
                        btnDetalles.setText(PluginServices.getText(this, "detalles"));
460
                        btnDetalles.addActionListener(new java.awt.event.ActionListener() {
461
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
462
                                                rellenarControles();
463
                                        }
464
                                });
465
                }
466

    
467
                return btnDetalles;
468
        }
469

    
470
        /**
471
         * This method initializes jPanel
472
         *
473
         * @return javax.swing.JPanel
474
         */
475
        private javax.swing.JPanel getJPanel() {
476
                if (jPanel == null) {
477
                        jPanel = new javax.swing.JPanel();
478
                        jPanel.setLayout(null);
479
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
480
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
481
                                        null, PluginServices.getText(this, "descripcion"),
482
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
483
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
484
                        jPanel.setBounds(2, 67, 477, 197);
485
                        jPanel.add(getJLabel1(), null);
486
                        jPanel.add(getLblTitle(), null);
487
                        jPanel.add(getJScrollPane(), null);
488
                }
489

    
490
                return jPanel;
491
        }
492

    
493
        /**
494
         * This method initializes jLabel1
495
         *
496
         * @return javax.swing.JLabel
497
         */
498
        private javax.swing.JLabel getJLabel1() {
499
                if (jLabel1 == null) {
500
                        jLabel1 = new javax.swing.JLabel();
501
                        jLabel1.setText(PluginServices.getText(this, "nombre") + ":");
502
                        jLabel1.setBounds(37, 26, 40, 15);
503
                }
504

    
505
                return jLabel1;
506
        }
507

    
508
        /**
509
         * This method initializes lblTitle
510
         *
511
         * @return javax.swing.JLabel
512
         */
513
        private javax.swing.JLabel getLblTitle() {
514
                if (lblTitle == null) {
515
                        lblTitle = new javax.swing.JLabel();
516
                        lblTitle.setText("-");
517
                        lblTitle.setPreferredSize(new java.awt.Dimension(350, 16));
518
                        lblTitle.setBounds(82, 26, 350, 16);
519
                }
520

    
521
                return lblTitle;
522
        }
523

    
524
        /**
525
         * This method initializes jScrollPane
526
         *
527
         * @return javax.swing.JScrollPane
528
         */
529
        private javax.swing.JScrollPane getJScrollPane() {
530
                if (jScrollPane == null) {
531
                        jScrollPane = new javax.swing.JScrollPane();
532
                        jScrollPane.setViewportView(getTxtAbstract());
533
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
534
                        jScrollPane.setBounds(10, 47, 450, 137);
535
                }
536

    
537
                return jScrollPane;
538
        }
539

    
540
        /**
541
         * This method initializes txtAbstract
542
         *
543
         * @return javax.swing.JTextArea
544
         */
545
        private javax.swing.JTextArea getTxtAbstract() {
546
                if (txtAbstract == null) {
547
                        txtAbstract = new javax.swing.JTextArea();
548
                        txtAbstract.setWrapStyleWord(true);
549
                        txtAbstract.setColumns(30);
550
                        txtAbstract.setLineWrap(true);
551
                }
552

    
553
                return txtAbstract;
554
        }
555

    
556
        /**
557
         * This method initializes jScrollPane1
558
         *
559
         * @return javax.swing.JScrollPane
560
         */
561
        private javax.swing.JScrollPane getJScrollPane1() {
562
                if (jScrollPane1 == null) {
563
                        jScrollPane1 = new javax.swing.JScrollPane();
564
                        jScrollPane1.setViewportView(getTreeLayers1());
565
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(205, 75));
566
                }
567

    
568
                return jScrollPane1;
569
        }
570

    
571
        /**
572
         * This method initializes treeLayers1
573
         *
574
         * @return javax.swing.JTree
575
         */
576
        private javax.swing.JTree getTreeLayers1() {
577
                if (treeLayers1 == null) {
578
                        treeLayers1 = new javax.swing.JTree();
579
                        treeLayers1.setRootVisible(true);
580
                        treeLayers1.addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
581
                                        public void valueChanged(
582
                                                javax.swing.event.TreeSelectionEvent e) {
583
                                                activarVisualizarBotones();
584
                                        }
585
                                });
586
                }
587

    
588
                return treeLayers1;
589
        }
590

    
591
        /**
592
         * This method initializes jScrollPane2
593
         *
594
         * @return javax.swing.JScrollPane
595
         */
596
        private javax.swing.JScrollPane getJScrollPane2() {
597
                if (jScrollPane2 == null) {
598
                        jScrollPane2 = new javax.swing.JScrollPane();
599
                        jScrollPane2.setViewportView(getLstFormats1());
600
                        jScrollPane2.setPreferredSize(new java.awt.Dimension(100, 200));
601
                        jScrollPane2.setBounds(297, 26, 183, 66);
602
                }
603

    
604
                return jScrollPane2;
605
        }
606

    
607
        /**
608
         * This method initializes lstFormats1
609
         *
610
         * @return javax.swing.JList
611
         */
612
        private javax.swing.JList getLstFormats1() {
613
                if (lstFormats1 == null) {
614
                        lstFormats1 = new javax.swing.JList();
615
                        lstFormats1.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
616
                        lstFormats1.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
617
                                        public void valueChanged(
618
                                                javax.swing.event.ListSelectionEvent e) {
619
                                                activarVisualizarBotones();
620
                                        }
621
                                });
622
                }
623

    
624
                return lstFormats1;
625
        }
626

    
627
        /**
628
         * This method initializes panelPage1
629
         *
630
         * @return javax.swing.JPanel
631
         */
632
        private javax.swing.JPanel getPanelPage1() {
633
                if (panelPage1 == null) {
634
                        panelPage1 = new javax.swing.JPanel();
635
                        panelPage1.setLayout(null);
636
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
637
                        panelPage1.setVisible(true);
638
                        panelPage1.setBounds(15, 5, 480, 262);
639
                        panelPage1.add(getJPanel1(), null);
640
                        panelPage1.add(getJPanel(), null);
641
                }
642

    
643
                return panelPage1;
644
        }
645

    
646
        /**
647
         * This method initializes panelPage2
648
         *
649
         * @return javax.swing.JPanel
650
         */
651
        private javax.swing.JPanel getPanelPage2() {
652
                if (panelPage2 == null) {
653
                        panelPage2 = new javax.swing.JPanel();
654
                        panelPage2.setLayout(null);
655
                        panelPage2.setPreferredSize(new java.awt.Dimension(490, 300));
656
                        panelPage2.setVisible(false);
657
                        panelPage2.setBounds(10, 5, 490, 276);
658
                        panelPage2.add(getJPanel2(), null);
659
                        panelPage2.add(getJPanel3(), null);
660
                        panelPage2.add(getJPanel4(), null);
661
                }
662

    
663
                return panelPage2;
664
        }
665

    
666
        /**
667
         * This method initializes jScrollPane5
668
         *
669
         * @return javax.swing.JScrollPane
670
         */
671
        private javax.swing.JScrollPane getJScrollPane5() {
672
                if (jScrollPane5 == null) {
673
                        jScrollPane5 = new javax.swing.JScrollPane();
674
                        jScrollPane5.setViewportView(getLstSelectedLayers());
675
                        jScrollPane5.setPreferredSize(new java.awt.Dimension(205, 75));
676
                }
677

    
678
                return jScrollPane5;
679
        }
680

    
681
        /**
682
         * This method initializes lstSelectedLayers
683
         *
684
         * @return javax.swing.JList
685
         */
686
        private javax.swing.JList getLstSelectedLayers() {
687
                if (lstSelectedLayers == null) {
688
                        lstSelectedLayers = new javax.swing.JList();
689
                        lstSelectedLayers.setModel(selectedLayersModel);
690
                        lstSelectedLayers.setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
691
                        lstSelectedLayers.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
692
                                        public void valueChanged(
693
                                                javax.swing.event.ListSelectionEvent e) {
694
                                                activarVisualizarBotones();
695
                                        }
696
                                });
697
                }
698

    
699
                return lstSelectedLayers;
700
        }
701

    
702
        /**
703
         * This method initializes btnAdd
704
         *
705
         * @return javax.swing.JButton
706
         */
707
        private javax.swing.JButton getBtnAdd() {
708
                if (btnAdd == null) {
709
                        btnAdd = new javax.swing.JButton();
710
                        btnAdd.setPreferredSize(new java.awt.Dimension(23, 23));
711
                        btnAdd.setText(">");
712
                        btnAdd.setMargin(new java.awt.Insets(2, 0, 2, 0));
713
                        btnAdd.setEnabled(false);
714
                        btnAdd.addActionListener(new java.awt.event.ActionListener() {
715
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
716
                                                addLayer();
717
                                        }
718
                                });
719
                }
720

    
721
                return btnAdd;
722
        }
723

    
724
        /**
725
         * This method initializes btnDel
726
         *
727
         * @return javax.swing.JButton
728
         */
729
        private javax.swing.JButton getBtnDel() {
730
                if (btnDel == null) {
731
                        btnDel = new javax.swing.JButton();
732
                        btnDel.setPreferredSize(new java.awt.Dimension(23, 23));
733
                        btnDel.setText("<");
734
                        btnDel.setMargin(new java.awt.Insets(2, 0, 2, 0));
735
                        btnDel.setEnabled(false);
736
                        btnDel.addActionListener(new java.awt.event.ActionListener() {
737
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
738
                                                delLayer();
739
                                        }
740
                                });
741
                }
742

    
743
                return btnDel;
744
        }
745

    
746
        /**
747
         * This method initializes jScrollPane6
748
         *
749
         * @return javax.swing.JScrollPane
750
         */
751
        private javax.swing.JScrollPane getJScrollPane6() {
752
                if (jScrollPane6 == null) {
753
                        jScrollPane6 = new javax.swing.JScrollPane();
754
                        jScrollPane6.setViewportView(getLstSRSs());
755
                        jScrollPane6.setPreferredSize(new java.awt.Dimension(250, 200));
756
                        jScrollPane6.setBounds(10, 26, 272, 68);
757
                }
758

    
759
                return jScrollPane6;
760
        }
761

    
762
        /**
763
         * This method initializes lstSRSs
764
         *
765
         * @return javax.swing.JList
766
         */
767
        private javax.swing.JList getLstSRSs() {
768
                if (lstSRSs == null) {
769
                        lstSRSs = new javax.swing.JList();
770
                        lstSRSs.setModel(new SRSListModel());
771
                        lstSRSs.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
772
                        lstSRSs.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
773
                                        public void valueChanged(
774
                                                javax.swing.event.ListSelectionEvent e) {
775
                                                activarVisualizarBotones();
776
                                        }
777
                                });
778
                }
779

    
780
                return lstSRSs;
781
        }
782

    
783
        /**
784
         * This method initializes btnSiguiente
785
         *
786
         * @return javax.swing.JButton
787
         */
788
        private javax.swing.JButton getBtnSiguiente() {
789
                if (btnSiguiente == null) {
790
                        btnSiguiente = new javax.swing.JButton();
791
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
792
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
793
                        btnSiguiente.setBounds(205, 282, 100, 21);
794
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
795
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
796
                                                page++;
797
                                                getPanelPage1().setVisible(false);
798
                                                getPanelPage2().setVisible(true);
799
                                                activarVisualizarBotones();
800
                                        }
801
                                });
802
                }
803

    
804
                return btnSiguiente;
805
        }
806

    
807
        /**
808
         * This method initializes btnAnterior
809
         *
810
         * @return javax.swing.JButton
811
         */
812
        private javax.swing.JButton getBtnAnterior() {
813
                if (btnAnterior == null) {
814
                        btnAnterior = new javax.swing.JButton();
815
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
816
                        btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
817
                        btnAnterior.setBounds(100, 282, 100, 21);
818
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
819
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
820
                                                page--;
821
                                                getPanelPage1().setVisible(true);
822
                                                getPanelPage2().setVisible(false);
823
                                                activarVisualizarBotones();
824
                                        }
825
                                });
826
                }
827

    
828
                return btnAnterior;
829
        }
830

    
831
        /**
832
         * This method initializes jPanel1
833
         *
834
         * @return javax.swing.JPanel
835
         */
836
        private javax.swing.JPanel getJPanel1() {
837
                if (jPanel1 == null) {
838
                        jPanel1 = new javax.swing.JPanel();
839
                        jPanel1.add(getTxtHost(), null);
840
                        jPanel1.add(getBtnDetalles(), null);
841
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
842
                                        null, PluginServices.getText(this, "servidor"),
843
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
844
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
845
                        jPanel1.setBounds(2, 5, 477, 57);
846
                }
847

    
848
                return jPanel1;
849
        }
850

    
851
        /**
852
         * This method initializes jPanel2
853
         *
854
         * @return javax.swing.JPanel
855
         */
856
        private javax.swing.JPanel getJPanel2() {
857
                if (jPanel2 == null) {
858
                        jPanel2 = new javax.swing.JPanel();
859
                        jPanel2.add(getJScrollPane1(), null);
860
                        jPanel2.add(getBtnDel(), null);
861
                        jPanel2.add(getBtnAdd(), null);
862
                        jPanel2.add(getJScrollPane5(), null);
863
                        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
864
                                        null, PluginServices.getText(this, "seleccionar_capas"),
865
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
866
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
867
                        jPanel2.setBounds(-1, 5, 493, 112);
868
                }
869

    
870
                return jPanel2;
871
        }
872

    
873
        /**
874
         * This method initializes jPanel3
875
         *
876
         * @return javax.swing.JPanel
877
         */
878
        private javax.swing.JPanel getJPanel3() {
879
                if (jPanel3 == null) {
880
                        jPanel3 = new javax.swing.JPanel();
881
                        jPanel3.setLayout(null);
882
                        jPanel3.setBorder(javax.swing.BorderFactory.createTitledBorder(
883
                                        null, PluginServices.getText(this, "seleccionar_formato"),
884
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
885
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
886
                        jPanel3.setPreferredSize(new java.awt.Dimension(493, 300));
887
                        jPanel3.setLocation(-1, 122);
888
                        jPanel3.setSize(493, 101);
889
                        jPanel3.add(getJScrollPane6(), null);
890
                        jPanel3.add(getJScrollPane2(), null);
891
                }
892

    
893
                return jPanel3;
894
        }
895

    
896
        /**
897
         * DOCUMENT ME!
898
         *
899
         * @param listener
900
         */
901
        public void addWizardListener(WizardListener listener) {
902
                listenerSupport.addWizardListener(listener);
903
        }
904

    
905
        /**
906
         * DOCUMENT ME!
907
         *
908
         * @param listener
909
         */
910
        public void removeWizardListener(WizardListener listener) {
911
                listenerSupport.removeWizardListener(listener);
912
        }
913

    
914
        /**
915
         * DOCUMENT ME!
916
         *
917
         * @return
918
         */
919
        public WizardDataSource getDataSource() {
920
                return dataSource;
921
        }
922

    
923
        /**
924
         * DOCUMENT ME!
925
         *
926
         * @param source
927
         */
928
        public void setDataSource(WizardDataSource source) {
929
                dataSource = source;
930
        }
931

    
932
        /**
933
         * DOCUMENT ME!
934
         *
935
         * @return DOCUMENT ME!
936
         */
937
        public String getLayersQuery() {
938
                LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
939

    
940
                //Nombre separado por comas de las capas
941
                String layersQuery = layers[0].name;
942

    
943
                for (int i = 1; i < layers.length; i++) {
944
                        layersQuery += ("," + layers[i].name);
945
                }
946

    
947
                return layersQuery;
948
        }
949

    
950
        /**
951
         * DOCUMENT ME!
952
         *
953
         * @return DOCUMENT ME!
954
         */
955
        public String getQueryableLayerQuery() {
956
                LayerInfo[] layers = ((LayerListModel) lstSelectedLayers.getModel()).getElements();
957

    
958
                //Nombre separado por comas de las capas
959
                String layersQuery = "";
960
                int i;
961

    
962
                for (i = 0; i < layers.length; i++) {
963
                        if (layers[i].queryable) {
964
                                layersQuery = layers[i].name;
965

    
966
                                break;
967
                        }
968
                }
969

    
970
                for (int j = i + 1; j < layers.length; j++) {
971
                        if (layers[j].queryable) {
972
                                layersQuery += ("," + layers[j].name);
973
                        }
974
                }
975

    
976
                return layersQuery;
977
        }
978

    
979
        /**
980
         * DOCUMENT ME!
981
         *
982
         * @return DOCUMENT ME!
983
         */
984
        public String getSRS() {
985
                return (String) lstSRSs.getSelectedValue();
986
        }
987

    
988
        /**
989
         * DOCUMENT ME!
990
         *
991
         * @return DOCUMENT ME!
992
         */
993
        public String getFormat() {
994
                return (String) lstFormats1.getSelectedValue();
995
        }
996

    
997
        /**
998
         * DOCUMENT ME!
999
         *
1000
         * @return DOCUMENT ME!
1001
         */
1002
        public TreePath[] getSelectedLayers() {
1003
                return getTreeLayers1().getSelectionPaths();
1004
        }
1005

    
1006
        /**
1007
         * DOCUMENT ME!
1008
         *
1009
         * @return DOCUMENT ME!
1010
         */
1011
        public Rectangle2D getLayersRectangle() {
1012
                TreePath[] layers = getSelectedLayers();
1013

    
1014
                //Boundingbox de todas las capas
1015
                ArrayList rectangulos = new ArrayList();
1016

    
1017
                Rectangle2D rect;
1018

    
1019
                for (int i = 0; i < layers.length; i++) {
1020
                        String[] rutaCapa = new String[layers[i].getPathCount()];
1021

    
1022
                        for (int j = 0; j < layers[i].getPathCount(); j++) {
1023
                                rutaCapa[j] = ((LayerInfo) layers[i].getPathComponent(j)).text;
1024
                        }
1025

    
1026
                        rect = dataSource.getBoundingBox(rutaCapa, getSRS());
1027

    
1028
                        if (rect != null) {
1029
                                rectangulos.add(rect);
1030
                        }
1031
                }
1032

    
1033
                rect = getRectangle((Rectangle2D.Double[]) rectangulos.toArray(
1034
                                        new Rectangle2D.Double[0]));
1035

    
1036
                return rect;
1037
        }
1038

    
1039
        /**
1040
         * Obtiene el rect?ngulo que contiene a todos los otros
1041
         *
1042
         * @param rects rectangulos
1043
         *
1044
         * @return Rectangulo que contiene a todos los demas
1045
         */
1046
        public static Rectangle2D getRectangle(Rectangle2D[] rects) {
1047
                Rectangle2D ret = rects[0];
1048

    
1049
                for (int i = 1; i < rects.length; i++) {
1050
                        ret.add(rects[i]);
1051
                }
1052

    
1053
                return ret;
1054
        }
1055

    
1056
        /**
1057
         * Devuelve el host que est? escrito en el cuadro de texto del host o null
1058
         * en caso de que no haya nada escrito o est? mal escrito
1059
         *
1060
         * @return URL del host
1061
         */
1062
        public URL getHost() {
1063
                try {
1064
                        return new URL(cmbHost.getModel().getSelectedItem().toString());
1065
                } catch (MalformedURLException e) {
1066
                        return null;
1067
                }
1068
        }
1069

    
1070
        /**
1071
         * DOCUMENT ME!
1072
         *
1073
         * @return Nombre de la capa que aparece en el TOC.
1074
         */
1075
        public String getLayerName() {
1076
                return jTxtNomCapa.getText();
1077
        }
1078

    
1079
        /**
1080
         * This method initializes jPanel4
1081
         *
1082
         * @return javax.swing.JPanel
1083
         */
1084
        private JPanel getJPanel4() {
1085
                if (jPanel4 == null) {
1086
                        jPanel4 = new JPanel();
1087
                        jPanel4.setLayout(null);
1088
                        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
1089
                                        null, PluginServices.getText(this, "nombre_capa"),
1090
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
1091
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
1092
                        jPanel4.setBounds(-1, 223, 493, 48);
1093
                        jPanel4.add(getJTxtNomCapa(), null);
1094
                }
1095

    
1096
                return jPanel4;
1097
        }
1098

    
1099
        /**
1100
         * This method initializes jTextField
1101
         *
1102
         * @return javax.swing.JTextField
1103
         */
1104
        private JTextField getJTxtNomCapa() {
1105
                if (jTxtNomCapa == null) {
1106
                        jTxtNomCapa = new JTextField();
1107
                        jTxtNomCapa.setBounds(10, 19, 474, 20);
1108
                        jTxtNomCapa.setText(PluginServices.getText(this, "capaWMS"));
1109
                }
1110

    
1111
                return jTxtNomCapa;
1112
        }
1113

    
1114
        /* (non-Javadoc)
1115
         * @see com.iver.cit.gvsig.gui.WizardPanel#initWizard()
1116
         */
1117
        public void initWizard() {
1118
                setDataSource(new WMSDataSourceAdapter()); 
1119
        }
1120

    
1121
        /* (non-Javadoc)
1122
         * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
1123
         */
1124
        public void execute() {
1125
        }
1126

    
1127
        /* (non-Javadoc)
1128
         * @see com.iver.cit.gvsig.gui.WizardPanel#getLayer()
1129
         */
1130
        public FLayer getLayer() {
1131
                WizardWMS wms = this;
1132
                FLyrWMS layer = new FLyrWMS();
1133
                layer.init(wms.getLayerName(), wms.getLayersRectangle(), wms.getHost(),
1134
                        wms.getFormat(), wms.getLayersQuery(),wms.getQueryableLayerQuery(),
1135
                        wms.getSRS());
1136
                return layer;
1137
        }
1138
        
1139
}
1140

    
1141
//  @jve:decl-index=0:visual-constraint="10,10"
1142
//  @jve:visual-info  decl-index=0 visual-constraint="16,10"
1143
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"
1144
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"
1145
//        @jve:visual-info  decl-index=0 visual-constraint="10,10"