Statistics
| Revision:

root / org.gvsig.wfs.app / trunk / org.gvsig.wfs.app / org.gvsig.wfs.app.mainplugin / src / main / java / org / gvsig / wfs / gui / wizards / WFSWizard.java @ 10

History | View | Annotate | Download (31.4 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 JLabel serverAvailableVersionLabel = 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
        serverAvailableVersionLabel = new JLabel();
154
        serverAvailableVersionLabel.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(serverAvailableVersionLabel, 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
            List sel_ver =
225
                WFSProtocolHandlerFactory.getRequestableVersions(url);
226
            
227
            wfsParamsPanel.getOptionsPanel().refreshVersions(sel_ver);
228

    
229
            if (sel_ver == null || sel_ver.size() == 0) {
230
                serverAvailableVersionLabel.setText("-");
231
            } else {
232
                serverAvailableVersionLabel.setText(
233
                    sel_ver.get(0).toString().trim());
234
                for (int i=1; i<sel_ver.size(); i++) {
235
                    String txt = serverAvailableVersionLabel.getText();
236
                    txt = txt + ", " + sel_ver.get(i).toString().trim();
237
                    serverAvailableVersionLabel.setText(txt);
238
                }
239
            }
240
            serverAvailableVersionLabel.repaint();
241

    
242
            List cacheProviders = dataManager.getFeatureCacheProviders();
243
            Iterator<String> iter = cacheProviders.iterator();
244

    
245
            while (iter.hasNext()) {
246
                String featureCacheProvider = (String) iter.next();
247
                cacheFeatCombo.addItem(featureCacheProvider);
248
            }
249

    
250
            if (!serverExplorer.getServerType().toLowerCase()
251
                .startsWith("wfs 1.0")) {
252
                cacheFeatCombo.setEnabled(true);
253
            } else {
254
                cacheFeatCombo.setEnabled(false);
255
            }
256
            wfsParamsPanel.setServerExplorer(serverExplorer);
257
            connected = true;
258
        } catch (Exception e) {
259
            throw e;
260
        }
261
    }
262

    
263
    /**
264
     * Enables or disables the Next and Previous buttons according with the
265
     * current
266
     * page and the enabled pages.
267
     */
268
    private void uptateNavigatingButtons() {
269
        if (page == 0) {
270
            getBtnAnterior().setEnabled(false);
271
            getBtnSiguiente().setVisible(true);
272
            getBtnSiguiente().setEnabled(false);
273
        } else {
274
            short tabIndex = (short) wfsParamsPanel.getSelectedIndex();
275

    
276
            getBtnAnterior().setEnabled(true);
277
            if (wfsParamsPanel.nextPageEnabled() == -1) {
278
                getBtnSiguiente().setEnabled(false);
279

    
280
                if (tabIndex == (wfsParamsPanel.getPanelInGUICount() - 1))
281
                    getBtnSiguiente().setVisible(false);
282
            } else {
283
                getBtnSiguiente().setVisible(true);
284
                getBtnSiguiente().setEnabled(true);
285
            }
286
        }
287
    }
288

    
289
    /**
290
     * This method initializes txtHost from the persistent data storage
291
     * 
292
     * @return javax.swing.JTextField
293
     */
294
    private javax.swing.JComboBox getTxtHost() {
295
        if (cmbHost == null) {
296
            cmbHost = new JComboServer();
297
            cmbHost.setModel(new DefaultComboBoxModel());
298
            cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
299
            cmbHost.setBounds(11, 26, 454, 20);
300
            cmbHost.setEditable(true);
301

    
302
            ServerDataPersistence persistence =
303
                new ServerDataPersistence(this, ServerData.SERVER_TYPE_WFS);
304
            ServerData[] servers = persistence.getArrayOfServerData();
305

    
306
            if (servers.length == 0) {
307
                PluginServices ps = PluginServices.getPluginServices(this);
308
                XMLEntity xml = ps.getPersistentXML();
309
                try {
310
                    String[] oldServers =
311
                        xml.getStringArrayProperty("wfs-servers");
312
                    servers = new ServerData[oldServers.length];
313
                    for (int i = 0; i < oldServers.length; i++) {
314
                        servers[i] =
315
                            new ServerData(oldServers[i],
316
                                ServerData.SERVER_TYPE_WMS);
317
                    }
318
                    xml.remove("wfs-servers");
319
                    ps.setPersistentXML(xml);
320
                } catch (NotExistInXMLEntity e) {
321

    
322
                    servers = new ServerData[4];
323
                    servers[3] = new ServerData(
324
                        "http://www.idee.es/IGN-WFS-SIGLIM/ogcwebservice?",
325
                        ServerData.SERVER_TYPE_WFS);
326
                    servers[2] = new ServerData(
327
                        "http://sd1878-2.sivit.org/geoserver/wfs",
328
                        ServerData.SERVER_TYPE_WFS);
329
                    servers[1] = new ServerData(
330
                        "http://nsidc.org/cgi-bin/atlas_north?service=WFS",
331
                        ServerData.SERVER_TYPE_WFS);
332
                    servers[0] = new ServerData(
333
                        "http://siu.vivienda.es/geoserver/wfs?",
334
                        ServerData.SERVER_TYPE_WFS);
335
                }
336

    
337
                for (int i = 0; i < servers.length; i++) {
338
                    persistence.addServerData(servers[i]);
339
                }
340
                persistence.setPersistent();
341
            }
342

    
343
            cmbHost.setServerList(servers);
344

    
345
            // Allows that user can start the connection to the written server
346
            // pressing the 'Enter' key
347
            cmbHost.getEditor().getEditorComponent()
348
                .addKeyListener(new KeyAdapter() {
349

    
350
                    /*
351
                     * (non-Javadoc)
352
                     * 
353
                     * @see
354
                     * java.awt.event.KeyAdapter#keyReleased(java.awt.event.
355
                     * KeyEvent)
356
                     */
357
                    public void keyReleased(KeyEvent e) {
358
                        if (e.getKeyCode() == KeyEvent.VK_ENTER) {
359
                            getBtnConnect().doClick();
360
                        }
361
                    }
362
                });
363
        }
364
        return cmbHost;
365
    }
366

    
367
    /**
368
     * This method initializes btnDetalles
369
     * 
370
     * @return JButton
371
     */
372
    private JButton getBtnConnect() {
373
        if (btnConnect == null) {
374
            btnConnect = new JButton();
375
            btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
376
            btnConnect.setBounds(366, 50, 100, 20);
377
            btnConnect.setText(PluginServices.getText(this, "connect"));
378
            btnConnect.addActionListener(new java.awt.event.ActionListener() {
379

    
380
                public void actionPerformed(java.awt.event.ActionEvent e) {
381
                    
382
                    /*
383
                     * Check if there is a suspicious parameter in URL
384
                     * The user should approve it
385
                     */
386
                    if (!checkServerUrl()) {
387
                        return;
388
                    }
389
                    
390
                    btnConnect.setEnabled(false); // This avoids multiple
391
                                                  // contiguous actions
392
                    
393
                    try {
394
                        rellenarControles();
395
                        wfsParamsPanel.refreshCapabilitiesInfo();
396
                        wfsParamsPanel.refreshWFSSelectFeaturePanel();
397
                        wfsParamsPanel.enableDefaultTabs(false);
398
                        btnConnect.setEnabled(true); // This avoids multiple
399
                                                     // contiguous actions
400

    
401
                        getBtnSiguiente().setEnabled(true);
402
                        getBtnSiguiente().requestFocus(); // Sets focus to the
403
                                                          // 'next' button
404
                    } catch (Exception e1) {
405
                        
406
                        String msg = WFSWizard.getLastMessage(e1);
407
                        JOptionPane.showMessageDialog(
408
                            thisWFSPanel,
409
                            Messages.getText("cant_connect") + ":\n\n"
410
                            + msg,
411
                            Messages.getText("error"),
412
                            JOptionPane.ERROR_MESSAGE);
413
                        btnConnect.setEnabled(true);
414
                    }
415
                    
416
                    /**
417
                     * Force panel not valid because connect button
418
                     * has been pressed
419
                     */
420
                    thisWFSPanel.callStateChanged(false);
421
                }
422

    
423

    
424
            });
425

    
426
            // If user press the 'Enter' key -> advance
427
            btnConnect.addKeyListener(new KeyAdapter() {
428

    
429
                /*
430
                 * (non-Javadoc)
431
                 * 
432
                 * @see
433
                 * java.awt.event.KeyListener#keyReleased(java.awt.event.KeyEvent
434
                 * )
435
                 */
436
                public void keyReleased(KeyEvent e) {
437
                    if (e.getKeyCode() == KeyEvent.VK_ENTER) {
438
                        btnConnect.doClick();
439
                    }
440
                }
441
            });
442
        }
443

    
444
        return btnConnect;
445
    }
446

    
447
    /**
448
     * This method initializes jPanel
449
     * 
450
     * @return javax.swing.JPanel
451
     */
452
    private javax.swing.JPanel getJPanel() {
453
        if (jPanel == null) {
454
            jPanel = new javax.swing.JPanel();
455
            jPanel.setLayout(null);
456
            jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
457
            jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
458
                PluginServices.getText(this, "descripcion"),
459
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
460
                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
461
            jPanel.setBounds(2, 96, 477, 304);
462
            jPanel.add(getJScrollPane(), null);
463
            jPanel.add(getPnlName(), null);
464
        }
465

    
466
        return jPanel;
467
    }
468

    
469
    /**
470
     * This method initializes pnlName
471
     * 
472
     * @return javax.swing.JPanel
473
     */
474
    private JPanel getPnlName() {
475
        if (pnlName == null) {
476
            pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
477
            pnlName.setBounds(new java.awt.Rectangle(9, 19, 452, 24));
478
            pnlName.add(getJLabel1(), null);
479
            pnlName.add(getLblTitle(), null);
480
        }
481
        return pnlName;
482
    }
483

    
484
    /**
485
     * This method initializes jLabel1
486
     * 
487
     * @return javax.swing.JLabel
488
     */
489
    private javax.swing.JLabel getJLabel1() {
490
        if (jLabel1 == null) {
491
            jLabel1 = new javax.swing.JLabel();
492
            jLabel1.setText(PluginServices.getText(this, "nombre") + ":");
493
            jLabel1.setBounds(15, 26, 65, 15);
494
        }
495

    
496
        return jLabel1;
497
    }
498

    
499
    /**
500
     * This method initializes lblTitle
501
     * 
502
     * @return javax.swing.JLabel
503
     */
504
    private javax.swing.JLabel getLblTitle() {
505
        if (lblTitle == null) {
506
            lblTitle = new javax.swing.JLabel();
507
            lblTitle.setText("-");
508
            lblTitle.setPreferredSize(new java.awt.Dimension(350, 16));
509
            lblTitle.setBounds(82, 26, 350, 16);
510
        }
511

    
512
        return lblTitle;
513
    }
514

    
515
    /**
516
     * This method initializes jScrollPane
517
     * 
518
     * @return javax.swing.JScrollPane
519
     */
520
    private javax.swing.JScrollPane getJScrollPane() {
521
        if (jScrollPane == null) {
522
            jScrollPane = new javax.swing.JScrollPane();
523
            jScrollPane.setViewportView(getTxtAbstract());
524
            jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
525
            jScrollPane.setBounds(10, 47, 457, 247);
526
        }
527

    
528
        return jScrollPane;
529
    }
530

    
531
    /**
532
     * This method initializes txtAbstract
533
     * 
534
     * @return javax.swing.JTextArea
535
     */
536
    private javax.swing.JTextArea getTxtAbstract() {
537
        if (txtAbstract == null) {
538
            txtAbstract = new javax.swing.JTextArea();
539
            txtAbstract.setWrapStyleWord(true);
540
            txtAbstract.setColumns(30);
541
            txtAbstract.setLineWrap(true);
542
        }
543

    
544
        return txtAbstract;
545
    }
546

    
547
    /**
548
     * This method initializes panelPage1
549
     * 
550
     * @return javax.swing.JPanel
551
     */
552
    private javax.swing.JPanel getPanelPage1() {
553
        if (panelPage1 == null) {
554
            panelPage1 = new javax.swing.JPanel();
555
            panelPage1.setLayout(null);
556
            panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
557
            panelPage1.setVisible(true);
558
            panelPage1.setBounds(15, 5, 480, 407);
559
            panelPage1.add(getJPanel1(), null);
560
            panelPage1.add(getJPanel(), null);
561
        }
562

    
563
        return panelPage1;
564
    }
565

    
566
    /**
567
     * This method initializes panelPage2
568
     * 
569
     * @return javax.swing.JPanel
570
     */
571
    private javax.swing.JPanel getPanelPage2() {
572
        if (wfsParamsPanel == null) {
573

    
574
            try {
575
                PanelGroupManager manager = PanelGroupManager.getManager();
576
                manager.registerPanelGroup(WFSParamsPanel.class);
577
                manager.setDefaultType(WFSParamsPanel.class);
578

    
579
                // Initially there is no layer
580
                wfsParamsPanel = (WFSParamsPanel) manager.getPanelGroup(null);
581
                wfsParamsPanel.setBounds(4, 9, 502, 393);
582
                wfsParamsPanel
583
                    .loadPanels(new PanelGroupLoaderFromExtensionPoint(
584
                        wfs_properties_extensionpoint_name));
585
                wfsParamsPanel.addChangeListener(new ChangeListener() {
586

    
587
                    // This method is called whenever the selected tab changes
588
                    public void stateChanged(ChangeEvent evt) {
589
                        JTabbedPane pane = (JTabbedPane) evt.getSource();
590

    
591
                        // Update the navigation buttons
592
                        uptateNavigatingButtons();
593
                    }
594
                });
595
            } catch (BaseException bE) {
596
                NotificationManager.showMessageError(
597
                    bE.getLocalizedMessageStack(), bE);
598
            } catch (Exception e) {
599
                NotificationManager
600
                    .showMessageError(e.getLocalizedMessage(), e);
601
            }
602
        }
603

    
604
        return wfsParamsPanel;
605
    }
606

    
607
    /**
608
     * This method initializes btnSiguiente
609
     * 
610
     * @return JButton
611
     */
612
    private JButton getBtnSiguiente() {
613
        if (btnSiguiente == null) {
614
            btnSiguiente = new JButton();
615
            btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
616
            btnSiguiente.setBounds(395, 444, 100, 20);
617
            btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
618
            btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
619

    
620
                public void actionPerformed(java.awt.event.ActionEvent e) {
621
                    if (page == 0) {
622
                        page = 1;
623
                        getPanelPage1().setVisible(false);
624
                        getPanelPage2().setVisible(true);
625
                    } else {
626
                        wfsParamsPanel.goToNextTab();
627
                    }
628

    
629
                    uptateNavigatingButtons();
630
                }
631
            });
632
        }
633
        return btnSiguiente;
634
    }
635

    
636
    /**
637
     * This method initializes btnAnterior
638
     * 
639
     * @return JButton
640
     */
641
    private JButton getBtnAnterior() {
642
        if (btnAnterior == null) {
643
            btnAnterior = new JButton();
644
            btnAnterior.setBounds(292, 444, 100, 20);
645
            btnAnterior.setText(PluginServices.getText(this, "anterior"));
646
            btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
647
            btnAnterior.addActionListener(new java.awt.event.ActionListener() {
648

    
649
                public void actionPerformed(java.awt.event.ActionEvent e) {
650
                    int tabIndex = wfsParamsPanel.getSelectedIndex();
651

    
652
                    if (page == 1) {
653
                        if (tabIndex == 0) {
654
                            page = 0;
655
                            connected = false;
656

    
657
                            wfsParamsPanel.enableDefaultTabs(false);
658
                            getLblTitle().setText("-");
659
                            getTxtAbstract().setText("");
660

    
661
                            getPanelPage2().setVisible(false);
662
                            getPanelPage1().setVisible(true);
663
                        } else {
664
                            wfsParamsPanel.goToPreviousTab();
665
                        }
666
                    } else {
667

    
668
                    }
669

    
670
                    uptateNavigatingButtons();
671
                }
672
            });
673
        }
674
        return btnAnterior;
675
    }
676

    
677
    /**
678
     * This method initializes jPanel1
679
     * 
680
     * @return javax.swing.JPanel
681
     */
682
    private javax.swing.JPanel getJPanel1() {
683
        if (jPanel1 == null) {
684
            jPanel1 = new javax.swing.JPanel();
685
            jPanel1.setLayout(null);
686
            jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
687
                null, PluginServices.getText(this, "server"),
688
                javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
689
                javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
690
            jPanel1.setBounds(2, 5, 477, 85);
691
            jPanel1.add(getTxtHost(), null);
692
            jPanel1.add(getBtnConnect(), null);
693
            jPanel1.add(getChkCaching(), null);
694
        }
695

    
696
        return jPanel1;
697
    }
698

    
699
    /**
700
     * Returns the wizard's data source
701
     * 
702
     * @return the wizard's data source
703
     */
704
    public WFSServerExplorer getServerExplorer() {
705
        return serverExplorer;
706
    }
707
    
708

    
709

    
710
    /**
711
     * Returns the rectangle that contains all the others
712
     * 
713
     * @param rects
714
     *            [] rectangles with its positions and dimensions
715
     * 
716
     * @return Rectangle2D the rectangle that contains all the others
717
     */
718
    public static Rectangle2D getRectangle(Rectangle2D[] rects) {
719
        Rectangle2D ret = rects[0];
720

    
721
        for (int i = 1; i < rects.length; i++) {
722
            ret.add(rects[i]);
723
        }
724

    
725
        return ret;
726
    }
727

    
728
    /**
729
     * Returns the host typed in the host text field or null if nothing is typed
730
     * or it is not a valid URL.
731
     * 
732
     * @return URL del host
733
     */
734
    public URL getHost() {
735
        try {
736
            return new URL(cmbHost.getModel().getSelectedItem().toString());
737
        } catch (MalformedURLException e) {
738
            return null;
739
        }
740
    }
741

    
742
    /*
743
     * (non-Javadoc)
744
     * 
745
     * @see com.iver.cit.gvsig.gui.WizardPanel#initWizard()
746
     */
747
    public void initWizard() {
748
        // setServerExplorer(new WFSWizardData());
749
    }
750

    
751
    /*
752
     * (non-Javadoc)
753
     * 
754
     * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
755
     */
756
    public void execute() {
757
        wfsParamsPanel.setSelectedCache(cacheFeatCombo.getSelectedItem().toString());
758
        String layerName = wfsParamsPanel.getFeaturesPanel().getLayerName();
759
        WFSStoreParameters parameters;
760
        try {
761
            //
762
            // TODO: La proyeccion deberia ir en los parametros ?? !!!!!!!!!
763
            // 
764
            parameters = wfsParamsPanel.getDataStoreParameters();
765
            
766
        } catch (Exception e) {
767
            logger.warn("Can't make the parameters of the wfs layer", e);
768
            JOptionPane.showMessageDialog(null,
769
                PluginServices.getText(this, "_cant_create_wfslayer"),
770
                "addLayer", JOptionPane.WARNING_MESSAGE
771
                    + JOptionPane.OK_OPTION);
772
            return;
773
        }
774
        doAddLayer(getMapCtrl(), layerName, parameters);
775
    }
776

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

    
793
                public void itemStateChanged(java.awt.event.ItemEvent e) {
794
                    refreshing = chkCaching.isSelected();
795
                }
796
            });
797
            chkCaching.addActionListener(new java.awt.event.ActionListener() {
798

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

    
809
        }
810
        return chkCaching;
811
    }
812

    
813
    /**
814
     * This method makes the 'btnSiguiente' to be clicked
815
     */
816
    public void doClickOnNextButton() {
817
        getBtnSiguiente().doClick();
818
    }
819

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

    
830
    @Override
831
    public void close() {
832
        if (serverExplorer != null) {
833
            serverExplorer.dispose();
834
        }
835
    }
836

    
837

    
838

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

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

    
896
        int user_opt = JOptionPane.showConfirmDialog(
897
            thisWFSPanel,  msg, tit, JOptionPane.YES_NO_OPTION);
898
        
899
        return user_opt == JOptionPane.YES_OPTION;
900
    }
901

    
902
    /**
903
     * @param url
904
     * @return
905
     */
906
    private List<String> getSuspiciousParameters(String _url) {
907
        
908
        String str_url = _url;
909
        int len = SUSPICIOUS_PARAMS.length;
910
        String item = null;
911
        ArrayList<String> resp = new ArrayList<String>();
912
        for (int i=0; i<len; i++) {
913
            item = SUSPICIOUS_PARAMS[i];
914
            item = "&" + item + "=";
915
            if (str_url.indexOf(item) != -1) {
916
                resp.add(SUSPICIOUS_PARAMS[i]);
917
            }
918
        }
919
        return resp;
920
    }
921
    
922
    public static String getLastMessage(Throwable ex) {
923
        
924
        Throwable p = ex;
925
        while (p.getCause() != null && p.getCause() != p) {
926
            p = p.getCause();
927
        }
928
        return p.getMessage();
929
    }
930
    
931
    private static final String[] SUSPICIOUS_PARAMS =
932
        { "request" }; // , ""}; 
933
}