Statistics
| Revision:

svn-gvsig-desktop / tags / v2_0_0_Build_2065 / extensions / extWFS2 / src / org / gvsig / wfs / gui / wizards / WFSWizard.java @ 40276

History | View | Annotate | Download (30.8 KB)

1
package org.gvsig.wfs.gui.wizards;
2

    
3
import java.awt.FlowLayout;
4
import java.awt.event.KeyAdapter;
5
import java.awt.event.KeyEvent;
6
import java.awt.geom.Rectangle2D;
7
import java.net.MalformedURLException;
8
import java.net.URL;
9
import java.util.ArrayList;
10
import java.util.Iterator;
11
import java.util.List;
12
import java.util.prefs.Preferences;
13

    
14
import javax.swing.DefaultComboBoxModel;
15
import javax.swing.JCheckBox;
16
import javax.swing.JComboBox;
17
import javax.swing.JLabel;
18
import javax.swing.JOptionPane;
19
import javax.swing.JPanel;
20
import javax.swing.JTabbedPane;
21
import javax.swing.event.ChangeEvent;
22
import javax.swing.event.ChangeListener;
23

    
24
import org.slf4j.Logger;
25
import org.slf4j.LoggerFactory;
26

    
27
import org.gvsig.andami.PluginServices;
28
import org.gvsig.andami.messages.NotificationManager;
29
import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
30
import org.gvsig.app.gui.WizardPanel;
31
import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
32
import org.gvsig.fmap.dal.DALLocator;
33
import org.gvsig.fmap.dal.DataManager;
34
import org.gvsig.fmap.dal.DataStoreParameters;
35
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorer;
36
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorerParameters;
37
import org.gvsig.fmap.dal.store.wfs.WFSStoreParameters;
38
import org.gvsig.gui.beans.Messages;
39
import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
40
import org.gvsig.gui.beans.swing.JButton;
41
import org.gvsig.remoteclient.wfs.WFSProtocolHandlerFactory;
42
import org.gvsig.tools.exception.BaseException;
43
import org.gvsig.utils.NotExistInXMLEntity;
44
import org.gvsig.utils.XMLEntity;
45
import org.gvsig.utils.swing.jcomboServer.JComboServer;
46
import org.gvsig.utils.swing.jcomboServer.ServerData;
47
import org.gvsig.wfs.gui.panels.WFSParamsPanel;
48

    
49
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
50
 *
51
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
52
 *
53
 * This program is free software; you can redistribute it and/or
54
 * modify it under the terms of the GNU General Public License
55
 * as published by the Free Software Foundation; either version 2
56
 * of the License, or (at your option) any later version.
57
 *
58
 * This program is distributed in the hope that it will be useful,
59
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
60
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
61
 * GNU General Public License for more details.
62
 *
63
 * You should have received a copy of the GNU General Public License
64
 * along with this program; if not, write to the Free Software
65
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
66
 *
67
 * For more information, contact:
68
 *
69
 *  Generalitat Valenciana
70
 *   Conselleria d'Infraestructures i Transport
71
 *   Av. Blasco Ib??ez, 50
72
 *   46010 VALENCIA
73
 *   SPAIN
74
 *
75
 *      +34 963862235
76
 *   gvsig@gva.es
77
 *      www.gvsig.gva.es
78
 *
79
 *    or
80
 *
81
 *   IVER T.I. S.A
82
 *   Salamanca 50
83
 *   46005 Valencia
84
 *   Spain
85
 *
86
 *   +34 963163400
87
 *   dac@iver.es
88
 */
89

    
90
/**
91
 * <p>
92
 * Wizard that allows add a new WFS layer.
93
 * </p>
94
 * 
95
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
96
 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
97
 */
98
public class WFSWizard extends WizardPanel {
99

    
100
    private static Logger logger = LoggerFactory.getLogger(WFSWizard.class);
101
    private int page;
102
    private boolean connected = false;
103
    private JComboServer cmbHost = null;
104
    private JButton btnConnect = null;
105
    private javax.swing.JPanel jPanel = null;
106
    private javax.swing.JLabel jLabel1 = null;
107
    private javax.swing.JLabel lblTitle = null;
108
    private javax.swing.JScrollPane jScrollPane = null;
109
    private javax.swing.JTextArea txtAbstract = null;
110
    private javax.swing.JPanel panelPage1 = null;
111
    private javax.swing.JPanel pnlName = null;
112
    private JButton btnSiguiente = null;
113
    private JButton btnAnterior = null;
114
    
115
    private JLabel serverVersionLabel = null;
116
    private JComboBox serverVersionCmb = null;
117
    
118
    private JLabel cacheFeatLabel = null;
119
    private JComboBox cacheFeatCombo = null;
120
    
121
    private javax.swing.JPanel jPanel1 = null;
122
    private WFSParamsPanel wfsParamsPanel = null;
123
    private WFSWizard thisWFSPanel = null;
124
    private WFSServerExplorer serverExplorer = null;
125
    
126
    
127
    private JCheckBox chkCaching = null;
128
    private static Preferences fPrefs = Preferences.userRoot().node(
129
        "gvsig.wfs-wizard");
130
    private boolean refreshing = fPrefs.getBoolean("refresh_capabilities",
131
        false);
132
    private final String wfs_properties_extensionpoint_name =
133
        "WFSPropertiesDialog";
134

    
135
    /**
136
     * This is the default constructor
137
     */
138
    public WFSWizard() {
139
        super();
140
        initialize();
141
    }
142

    
143
    /**
144
     * This method initializes this
145
     */
146
    private void initialize() {
147
        setTabName(PluginServices.getText(this, "WFS"));
148

    
149
        serverVersionLabel = new JLabel();
150
        serverVersionLabel.setBounds(30, 425, 100, 21);
151
        serverVersionLabel.setText(PluginServices.getText(this, "_Server_version") + ":");
152
        
153
        serverVersionCmb = new JComboBox();
154
        serverVersionCmb.setBounds(135, 425, 90, 21);
155

    
156
        cacheFeatLabel = new JLabel();
157
        cacheFeatLabel.setBounds(30, 450, 100, 21);
158
        cacheFeatLabel.setText(PluginServices.getText(this, "_Feature_cache") + ":");
159

    
160
        cacheFeatCombo = new JComboBox();
161
        cacheFeatCombo.addItem(PluginServices.getText(this, "none"));
162
        cacheFeatCombo.setEnabled(false);
163
        cacheFeatCombo.setBounds(135, 450, 90, 21);
164

    
165
        this.setLayout(null);
166
        this.setVisible(true);
167

    
168
        this.add(getPanelPage1(), null);
169
        page = 0;
170
        this.add(getPanelPage2(), null);
171

    
172
        this.add(getBtnAnterior(), null);
173
        this.add(getBtnSiguiente(), null);
174

    
175
        this.add(serverVersionLabel, null);
176
        this.add(serverVersionCmb, null);
177
        this.add(cacheFeatLabel, null);
178
        this.add(cacheFeatCombo, null);
179

    
180
        uptateNavigatingButtons();
181
        
182
        thisWFSPanel = this;
183
    }
184

    
185
    /**
186
     * Adds the host addres to a persistent data storage.
187
     * 
188
     * @param host
189
     *            the host of the server
190
     */
191
    private void addHost(String host) {
192
        host = host.trim();
193
        ServerDataPersistence persistence =
194
            new ServerDataPersistence(this, ServerData.SERVER_TYPE_WFS);
195
        persistence.addServerData(new ServerData(host,
196
            ServerData.SERVER_TYPE_WFS));
197
    }
198

    
199
    /**
200
     * Fills up the initial WCSWizard controls.
201
     * 
202
     * jaume
203
     */
204
    private void rellenarControles() throws Exception {
205
        try {
206
            String url = cmbHost.getModel().getSelectedItem().toString();
207

    
208
            DataManager dataManager = DALLocator.getDataManager();
209
            // Create the server explorer parameters
210
            WFSServerExplorerParameters parameters =
211
                (WFSServerExplorerParameters) dataManager
212
                    .createServerExplorerParameters(WFSServerExplorer.NAME);
213
            parameters.setUrl(url);
214
            addHost(url);
215
            // Create the server explorer
216
            serverExplorer =
217
                (WFSServerExplorer) dataManager
218
                    .createServerExplorer(parameters);
219

    
220
            // Update the forms
221
            getLblTitle().setText(serverExplorer.getTitle());
222
            getTxtAbstract().setText(serverExplorer.getAbstract());
223
            
224
            serverVersionCmb.removeAll();
225
            List sel_ver =
226
                WFSProtocolHandlerFactory.getRequestableVersions(url);
227
            for (int i=0; i<sel_ver.size(); i++) {
228
                serverVersionCmb.addItem(sel_ver.get(i).toString().trim());
229
            }
230
            serverVersionCmb.repaint();
231

    
232
            List cacheProviders = dataManager.getFeatureCacheProviders();
233
            Iterator<String> iter = cacheProviders.iterator();
234

    
235
            while (iter.hasNext()) {
236
                String featureCacheProvider = (String) iter.next();
237
                cacheFeatCombo.addItem(featureCacheProvider);
238
            }
239

    
240
            if (!serverExplorer.getServerType().toLowerCase()
241
                .startsWith("wfs 1.0")) {
242
                cacheFeatCombo.setEnabled(true);
243
            } else {
244
                cacheFeatCombo.setEnabled(false);
245
            }
246
            wfsParamsPanel.setServerExplorer(serverExplorer);
247
            connected = true;
248
        } catch (Exception e) {
249
            throw e;
250
        }
251
    }
252

    
253
    /**
254
     * Enables or disables the Next and Previous buttons according with the
255
     * current
256
     * page and the enabled pages.
257
     */
258
    private void uptateNavigatingButtons() {
259
        if (page == 0) {
260
            getBtnAnterior().setEnabled(false);
261
            getBtnSiguiente().setVisible(true);
262
            getBtnSiguiente().setEnabled(false);
263
        } else {
264
            short tabIndex = (short) wfsParamsPanel.getSelectedIndex();
265

    
266
            getBtnAnterior().setEnabled(true);
267
            if (wfsParamsPanel.nextPageEnabled() == -1) {
268
                getBtnSiguiente().setEnabled(false);
269

    
270
                if (tabIndex == (wfsParamsPanel.getPanelInGUICount() - 1))
271
                    getBtnSiguiente().setVisible(false);
272
            } else {
273
                getBtnSiguiente().setVisible(true);
274
                getBtnSiguiente().setEnabled(true);
275
            }
276
        }
277
    }
278

    
279
    /**
280
     * This method initializes txtHost from the persistent data storage
281
     * 
282
     * @return javax.swing.JTextField
283
     */
284
    private javax.swing.JComboBox getTxtHost() {
285
        if (cmbHost == null) {
286
            cmbHost = new JComboServer();
287
            cmbHost.setModel(new DefaultComboBoxModel());
288
            cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
289
            cmbHost.setBounds(11, 26, 454, 20);
290
            cmbHost.setEditable(true);
291

    
292
            ServerDataPersistence persistence =
293
                new ServerDataPersistence(this, ServerData.SERVER_TYPE_WFS);
294
            ServerData[] servers = persistence.getArrayOfServerData();
295

    
296
            if (servers.length == 0) {
297
                PluginServices ps = PluginServices.getPluginServices(this);
298
                XMLEntity xml = ps.getPersistentXML();
299
                try {
300
                    String[] oldServers =
301
                        xml.getStringArrayProperty("wfs-servers");
302
                    servers = new ServerData[oldServers.length];
303
                    for (int i = 0; i < oldServers.length; i++) {
304
                        servers[i] =
305
                            new ServerData(oldServers[i],
306
                                ServerData.SERVER_TYPE_WMS);
307
                    }
308
                    xml.remove("wfs-servers");
309
                    ps.setPersistentXML(xml);
310
                } catch (NotExistInXMLEntity e) {
311
                    // Old servers doesn't exist
312
                    servers = new ServerData[2];
313
                    /*
314
                     * These WFS are version 1.1.0 but provide
315
                     * projected CRS (not EPSG:4326) so they work
316
                     * also if client does not support the new
317
                     * coordinate axis order 
318
                     */
319
                    servers[0] =
320
                        new ServerData(
321
                            "http://siu.vivienda.es/geoserver/wfs?",
322
                            ServerData.SERVER_TYPE_WFS);
323
                    servers[1] =
324
                        new ServerData(
325
                            "http://sd1878-2.sivit.org/geoserver/wfs",
326
                            ServerData.SERVER_TYPE_WFS);
327
                }
328

    
329
                for (int i = 0; i < servers.length; i++) {
330
                    persistence.addServerData(servers[i]);
331
                }
332
                persistence.setPersistent();
333
            }
334

    
335
            cmbHost.setServerList(servers);
336

    
337
            // Allows that user can start the connection to the written server
338
            // pressing the 'Enter' key
339
            cmbHost.getEditor().getEditorComponent()
340
                .addKeyListener(new KeyAdapter() {
341

    
342
                    /*
343
                     * (non-Javadoc)
344
                     * 
345
                     * @see
346
                     * java.awt.event.KeyAdapter#keyReleased(java.awt.event.
347
                     * KeyEvent)
348
                     */
349
                    public void keyReleased(KeyEvent e) {
350
                        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
351
                            getBtnConnect().doClick();
352
                        }
353
                    }
354
                });
355
        }
356
        return cmbHost;
357
    }
358

    
359
    /**
360
     * This method initializes btnDetalles
361
     * 
362
     * @return JButton
363
     */
364
    private JButton getBtnConnect() {
365
        if (btnConnect == null) {
366
            btnConnect = new JButton();
367
            btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
368
            btnConnect.setBounds(366, 50, 100, 20);
369
            btnConnect.setText(PluginServices.getText(this, "connect"));
370
            btnConnect.addActionListener(new java.awt.event.ActionListener() {
371

    
372
                public void actionPerformed(java.awt.event.ActionEvent e) {
373
                    
374
                    /*
375
                     * Check if there is a suspicious parameter in URL
376
                     * The user should approve it
377
                     */
378
                    if (!checkServerUrl()) {
379
                        return;
380
                    }
381
                    
382
                    btnConnect.setEnabled(false); // This avoids multiple
383
                                                  // contiguous actions
384
                    
385
                    try {
386
                        rellenarControles();
387
                        wfsParamsPanel.refreshCapabilitiesInfo();
388
                        wfsParamsPanel.refreshWFSSelectFeaturePanel();
389
                        wfsParamsPanel.enableDefaultTabs(false);
390
                        btnConnect.setEnabled(true); // This avoids multiple
391
                                                     // contiguous actions
392

    
393
                        getBtnSiguiente().setEnabled(true);
394
                        getBtnSiguiente().requestFocus(); // Sets focus to the
395
                                                          // 'next' button
396
                    } catch (Exception e1) {
397
                        NotificationManager.showMessageWarning(
398
                            Messages.getText("invalid_url"), e1);
399
                        btnConnect.setEnabled(true);
400
                    }
401
                    
402
                    /**
403
                     * Force panel not valid because connect button
404
                     * has been pressed
405
                     */
406
                    thisWFSPanel.callStateChanged(false);
407
                }
408

    
409

    
410
            });
411

    
412
            // If user press the 'Enter' key -> advance
413
            btnConnect.addKeyListener(new KeyAdapter() {
414

    
415
                /*
416
                 * (non-Javadoc)
417
                 * 
418
                 * @see
419
                 * java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent
420
                 * )
421
                 */
422
                public void keyReleased(KeyEvent e) {
423
                    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
424
                        btnConnect.doClick();
425
                    }
426
                }
427
            });
428
        }
429

    
430
        return btnConnect;
431
    }
432

    
433
    /**
434
     * This method initializes jPanel
435
     * 
436
     * @return javax.swing.JPanel
437
     */
438
    private javax.swing.JPanel getJPanel() {
439
        if (jPanel == null) {
440
            jPanel = new javax.swing.JPanel();
441
            jPanel.setLayout(null);
442
            jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
443
            jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
444
                PluginServices.getText(this, "descripcion"),
445
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
446
                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
447
            jPanel.setBounds(2, 96, 477, 304);
448
            jPanel.add(getJScrollPane(), null);
449
            jPanel.add(getPnlName(), null);
450
        }
451

    
452
        return jPanel;
453
    }
454

    
455
    /**
456
     * This method initializes pnlName
457
     * 
458
     * @return javax.swing.JPanel
459
     */
460
    private JPanel getPnlName() {
461
        if (pnlName == null) {
462
            pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
463
            pnlName.setBounds(new java.awt.Rectangle(9, 19, 452, 24));
464
            pnlName.add(getJLabel1(), null);
465
            pnlName.add(getLblTitle(), null);
466
        }
467
        return pnlName;
468
    }
469

    
470
    /**
471
     * This method initializes jLabel1
472
     * 
473
     * @return javax.swing.JLabel
474
     */
475
    private javax.swing.JLabel getJLabel1() {
476
        if (jLabel1 == null) {
477
            jLabel1 = new javax.swing.JLabel();
478
            jLabel1.setText(PluginServices.getText(this, "nombre") + ":");
479
            jLabel1.setBounds(15, 26, 65, 15);
480
        }
481

    
482
        return jLabel1;
483
    }
484

    
485
    /**
486
     * This method initializes lblTitle
487
     * 
488
     * @return javax.swing.JLabel
489
     */
490
    private javax.swing.JLabel getLblTitle() {
491
        if (lblTitle == null) {
492
            lblTitle = new javax.swing.JLabel();
493
            lblTitle.setText("-");
494
            lblTitle.setPreferredSize(new java.awt.Dimension(350, 16));
495
            lblTitle.setBounds(82, 26, 350, 16);
496
        }
497

    
498
        return lblTitle;
499
    }
500

    
501
    /**
502
     * This method initializes jScrollPane
503
     * 
504
     * @return javax.swing.JScrollPane
505
     */
506
    private javax.swing.JScrollPane getJScrollPane() {
507
        if (jScrollPane == null) {
508
            jScrollPane = new javax.swing.JScrollPane();
509
            jScrollPane.setViewportView(getTxtAbstract());
510
            jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
511
            jScrollPane.setBounds(10, 47, 457, 247);
512
        }
513

    
514
        return jScrollPane;
515
    }
516

    
517
    /**
518
     * This method initializes txtAbstract
519
     * 
520
     * @return javax.swing.JTextArea
521
     */
522
    private javax.swing.JTextArea getTxtAbstract() {
523
        if (txtAbstract == null) {
524
            txtAbstract = new javax.swing.JTextArea();
525
            txtAbstract.setWrapStyleWord(true);
526
            txtAbstract.setColumns(30);
527
            txtAbstract.setLineWrap(true);
528
        }
529

    
530
        return txtAbstract;
531
    }
532

    
533
    /**
534
     * This method initializes panelPage1
535
     * 
536
     * @return javax.swing.JPanel
537
     */
538
    private javax.swing.JPanel getPanelPage1() {
539
        if (panelPage1 == null) {
540
            panelPage1 = new javax.swing.JPanel();
541
            panelPage1.setLayout(null);
542
            panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
543
            panelPage1.setVisible(true);
544
            panelPage1.setBounds(15, 5, 480, 407);
545
            panelPage1.add(getJPanel1(), null);
546
            panelPage1.add(getJPanel(), null);
547
        }
548

    
549
        return panelPage1;
550
    }
551

    
552
    /**
553
     * This method initializes panelPage2
554
     * 
555
     * @return javax.swing.JPanel
556
     */
557
    private javax.swing.JPanel getPanelPage2() {
558
        if (wfsParamsPanel == null) {
559

    
560
            try {
561
                PanelGroupManager manager = PanelGroupManager.getManager();
562
                manager.registerPanelGroup(WFSParamsPanel.class);
563
                manager.setDefaultType(WFSParamsPanel.class);
564

    
565
                // Initially there is no layer
566
                wfsParamsPanel = (WFSParamsPanel) manager.getPanelGroup(null);
567
                wfsParamsPanel.setBounds(4, 9, 502, 393);
568
                wfsParamsPanel
569
                    .loadPanels(new PanelGroupLoaderFromExtensionPoint(
570
                        wfs_properties_extensionpoint_name));
571
                wfsParamsPanel.addChangeListener(new ChangeListener() {
572

    
573
                    // This method is called whenever the selected tab changes
574
                    public void stateChanged(ChangeEvent evt) {
575
                        JTabbedPane pane = (JTabbedPane) evt.getSource();
576

    
577
                        // Update the navigation buttons
578
                        uptateNavigatingButtons();
579
                    }
580
                });
581
            } catch (BaseException bE) {
582
                NotificationManager.showMessageError(
583
                    bE.getLocalizedMessageStack(), bE);
584
            } catch (Exception e) {
585
                NotificationManager
586
                    .showMessageError(e.getLocalizedMessage(), e);
587
            }
588
        }
589

    
590
        return wfsParamsPanel;
591
    }
592

    
593
    /**
594
     * This method initializes btnSiguiente
595
     * 
596
     * @return JButton
597
     */
598
    private JButton getBtnSiguiente() {
599
        if (btnSiguiente == null) {
600
            btnSiguiente = new JButton();
601
            btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
602
            btnSiguiente.setBounds(395, 444, 100, 20);
603
            btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
604
            btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
605

    
606
                public void actionPerformed(java.awt.event.ActionEvent e) {
607
                    if (page == 0) {
608
                        page = 1;
609
                        getPanelPage1().setVisible(false);
610
                        getPanelPage2().setVisible(true);
611
                    } else {
612
                        wfsParamsPanel.goToNextTab();
613
                    }
614

    
615
                    uptateNavigatingButtons();
616
                }
617
            });
618
        }
619
        return btnSiguiente;
620
    }
621

    
622
    /**
623
     * This method initializes btnAnterior
624
     * 
625
     * @return JButton
626
     */
627
    private JButton getBtnAnterior() {
628
        if (btnAnterior == null) {
629
            btnAnterior = new JButton();
630
            btnAnterior.setBounds(292, 444, 100, 20);
631
            btnAnterior.setText(PluginServices.getText(this, "anterior"));
632
            btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
633
            btnAnterior.addActionListener(new java.awt.event.ActionListener() {
634

    
635
                public void actionPerformed(java.awt.event.ActionEvent e) {
636
                    int tabIndex = wfsParamsPanel.getSelectedIndex();
637

    
638
                    if (page == 1) {
639
                        if (tabIndex == 0) {
640
                            page = 0;
641
                            connected = false;
642

    
643
                            wfsParamsPanel.enableDefaultTabs(false);
644
                            getLblTitle().setText("-");
645
                            getTxtAbstract().setText("");
646

    
647
                            getPanelPage2().setVisible(false);
648
                            getPanelPage1().setVisible(true);
649
                        } else {
650
                            wfsParamsPanel.goToPreviousTab();
651
                        }
652
                    } else {
653

    
654
                    }
655

    
656
                    uptateNavigatingButtons();
657
                }
658
            });
659
        }
660
        return btnAnterior;
661
    }
662

    
663
    /**
664
     * This method initializes jPanel1
665
     * 
666
     * @return javax.swing.JPanel
667
     */
668
    private javax.swing.JPanel getJPanel1() {
669
        if (jPanel1 == null) {
670
            jPanel1 = new javax.swing.JPanel();
671
            jPanel1.setLayout(null);
672
            jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
673
                null, PluginServices.getText(this, "server"),
674
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
675
                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
676
            jPanel1.setBounds(2, 5, 477, 85);
677
            jPanel1.add(getTxtHost(), null);
678
            jPanel1.add(getBtnConnect(), null);
679
            jPanel1.add(getChkCaching(), null);
680
        }
681

    
682
        return jPanel1;
683
    }
684

    
685
    /**
686
     * Returns the wizard's data source
687
     * 
688
     * @return the wizard's data source
689
     */
690
    public WFSServerExplorer getServerExplorer() {
691
        return serverExplorer;
692
    }
693
    
694

    
695

    
696
    /**
697
     * Returns the rectangle that contains all the others
698
     * 
699
     * @param rects
700
     *            [] rectangles with its positions and dimensions
701
     * 
702
     * @return Rectangle2D the rectangle that contains all the others
703
     */
704
    public static Rectangle2D getRectangle(Rectangle2D[] rects) {
705
        Rectangle2D ret = rects[0];
706

    
707
        for (int i = 1; i < rects.length; i++) {
708
            ret.add(rects[i]);
709
        }
710

    
711
        return ret;
712
    }
713

    
714
    /**
715
     * Returns the host typed in the host text field or null if nothing is typed
716
     * or it is not a valid URL.
717
     * 
718
     * @return URL del host
719
     */
720
    public URL getHost() {
721
        try {
722
            return new URL(cmbHost.getModel().getSelectedItem().toString());
723
        } catch (MalformedURLException e) {
724
            return null;
725
        }
726
    }
727

    
728
    /*
729
     * (non-Javadoc)
730
     * 
731
     * @see com.iver.cit.gvsig.gui.WizardPanel#initWizard()
732
     */
733
    public void initWizard() {
734
        // setServerExplorer(new WFSWizardData());
735
    }
736

    
737
    /*
738
     * (non-Javadoc)
739
     * 
740
     * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
741
     */
742
    public void execute() {
743
        wfsParamsPanel.setSelectedCache(cacheFeatCombo.getSelectedItem().toString());
744
        String layerName = wfsParamsPanel.getFeaturesPanel().getLayerName();
745
        WFSStoreParameters parameters;
746
        try {
747
            //
748
            // TODO: La proyeccion deberia ir en los parametros ?? !!!!!!!!!
749
            // 
750
            parameters = wfsParamsPanel.getDataStoreParameters();
751
            
752
            /*
753
             * Set the version selected in the combo box
754
             */
755
            if (this.serverVersionCmb != null &&
756
                this.serverVersionCmb.getSelectedItem() != null) {
757
                
758
                String v = this.serverVersionCmb.getSelectedItem().toString();
759
                parameters.setVersion(v);
760
            }
761
            
762
        } catch (Exception e) {
763
            logger.warn("Can't make the parameters of the wfs layer", e);
764
            JOptionPane.showMessageDialog(null,
765
                PluginServices.getText(this, "_cant_create_wfslayer"),
766
                "addLayer", JOptionPane.WARNING_MESSAGE
767
                    + JOptionPane.OK_OPTION);
768
            return;
769
        }
770
        doAddLayer(getMapCtrl(), layerName, parameters);
771
    }
772

    
773
    /**
774
     * This method initializes chkCaching
775
     * 
776
     * @return javax.swing.JCheckBox
777
     */
778
    private JCheckBox getChkCaching() {
779
        if (chkCaching == null) {
780
            chkCaching = new JCheckBox();
781
            chkCaching.setBounds(7, 51, 349, 20);
782
            chkCaching.setText(PluginServices.getText(this,
783
                "refresh_capabilities"));
784
            chkCaching.setToolTipText(PluginServices.getText(this,
785
                "refresh_capabilities_tooltip"));
786
            chkCaching.setSelected(refreshing);
787
            chkCaching.addItemListener(new java.awt.event.ItemListener() {
788

    
789
                public void itemStateChanged(java.awt.event.ItemEvent e) {
790
                    refreshing = chkCaching.isSelected();
791
                }
792
            });
793
            chkCaching.addActionListener(new java.awt.event.ActionListener() {
794

    
795
                public void actionPerformed(java.awt.event.ActionEvent e) {
796
                    chkCaching.setEnabled(false); // This avoids multiple
797
                                                  // contiguous actions
798
                    fPrefs.putBoolean("refresh_capabilities",
799
                        chkCaching.isSelected());
800
                    chkCaching.setEnabled(true); // This avoids multiple
801
                                                 // contiguous actions
802
                }
803
            });
804

    
805
        }
806
        return chkCaching;
807
    }
808

    
809
    /**
810
     * This method makes the 'btnSiguiente' to be clicked
811
     */
812
    public void doClickOnNextButton() {
813
        getBtnSiguiente().doClick();
814
    }
815

    
816
    /*
817
     * (non-Javadoc)
818
     * 
819
     * @see com.iver.cit.gvsig.gui.WizardPanel#getParameters()
820
     */
821
    public DataStoreParameters[] getParameters() {
822
        // TODO Auto-generated method stub
823
        return null;
824
    }
825

    
826
    @Override
827
    public void close() {
828
        if (serverExplorer != null) {
829
            serverExplorer.dispose();
830
        }
831
    }
832

    
833

    
834

    
835
    /**
836
     * This method is called when user changes tab in add layer dialog
837
     */
838
    public boolean areSettingsValid() {
839
        if (wfsParamsPanel != null) {
840
            return wfsParamsPanel.isCorretlyConfigured();
841
        } else {
842
            return false;
843
        }
844
    }
845
    
846
    
847
    
848
    /**
849
     * This method suggests user to remove suspicious parameters
850
     * such as "request=..."
851
     */
852
    private boolean checkServerUrl() {
853
        
854
        Object sel_obj = cmbHost.getModel().getSelectedItem();
855
        if (sel_obj != null) {
856
            
857
            String url = sel_obj.toString();
858
            List<String> suspi = getSuspiciousParameters(url);
859
            if (suspi != null && suspi.size() > 0) {
860
                if (userWantsToContinue(suspi)) {
861
                    // user says url ok anyway
862
                    return true;
863
                } else {
864
                    // user wants to fix url by hand
865
                    return false;
866
                }
867
            } else {
868
                // url is ok
869
                return true;
870
            }
871
        } else {
872
            // no selection in combo
873
            return false;
874
        }
875
    }
876

    
877
    /**
878
     * @param suspi
879
     * @return
880
     */
881
    private boolean userWantsToContinue(List<String> suspi) {
882
        
883
        String tit = PluginServices.getText(this, "server");
884
        String msg = PluginServices.getText(this, "Dangerous_parameters_found_Continue_question");
885
        int len = suspi.size();
886
        msg = msg + " '";
887
        for (int i=0; i<(len-1); i++) {
888
            msg = msg + suspi.get(i) + ", ";
889
        }
890
        msg = msg + suspi.get(len-1) + "'";
891

    
892
        int user_opt = JOptionPane.showConfirmDialog(
893
            thisWFSPanel,  msg, tit, JOptionPane.YES_NO_OPTION);
894
        
895
        return user_opt == JOptionPane.YES_OPTION;
896
    }
897

    
898
    /**
899
     * @param url
900
     * @return
901
     */
902
    private List<String> getSuspiciousParameters(String _url) {
903
        
904
        String str_url = _url;
905
        int len = SUSPICIOUS_PARAMS.length;
906
        String item = null;
907
        ArrayList<String> resp = new ArrayList<String>();
908
        for (int i=0; i<len; i++) {
909
            item = SUSPICIOUS_PARAMS[i];
910
            item = "&" + item + "=";
911
            if (str_url.indexOf(item) != -1) {
912
                resp.add(SUSPICIOUS_PARAMS[i]);
913
            }
914
        }
915
        return resp;
916
    }
917
    
918
    private static final String[] SUSPICIOUS_PARAMS =
919
        { "request" }; // , ""}; 
920
}