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 @ 143

History | View | Annotate | Download (31.6 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 */package org.gvsig.wfs.gui.wizards;
20

    
21
import java.awt.FlowLayout;
22
import java.awt.event.KeyAdapter;
23
import java.awt.event.KeyEvent;
24
import java.awt.geom.Rectangle2D;
25
import java.io.File;
26
import java.io.FileInputStream;
27
import java.io.FileNotFoundException;
28
import java.io.IOException;
29
import java.net.MalformedURLException;
30
import java.net.URL;
31
import java.util.ArrayList;
32
import java.util.Iterator;
33
import java.util.List;
34
import java.util.Properties;
35
import java.util.prefs.Preferences;
36

    
37
import javax.swing.DefaultComboBoxModel;
38
import javax.swing.JCheckBox;
39
import javax.swing.JComboBox;
40
import javax.swing.JLabel;
41
import javax.swing.JOptionPane;
42
import javax.swing.JPanel;
43
import javax.swing.JTabbedPane;
44
import javax.swing.event.ChangeEvent;
45
import javax.swing.event.ChangeListener;
46
import org.apache.commons.io.IOUtils;
47
import org.apache.commons.lang3.BooleanUtils;
48

    
49
import org.slf4j.Logger;
50
import org.slf4j.LoggerFactory;
51
import org.gvsig.andami.PluginServices;
52
import org.gvsig.andami.PluginsLocator;
53
import org.gvsig.andami.PluginsManager;
54
import org.gvsig.andami.messages.NotificationManager;
55
import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
56
import org.gvsig.app.gui.WizardPanel;
57
import org.gvsig.app.panelGroup.loaders.PanelGroupLoaderFromExtensionPoint;
58
import org.gvsig.fmap.dal.DALLocator;
59
import org.gvsig.fmap.dal.DataManager;
60
import org.gvsig.fmap.dal.DataStoreParameters;
61
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorer;
62
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorerParameters;
63
import org.gvsig.fmap.dal.store.wfs.WFSStoreParameters;
64
import org.gvsig.gui.beans.Messages;
65
import org.gvsig.gui.beans.panelGroup.PanelGroupManager;
66
import org.gvsig.gui.beans.swing.JButton;
67
import org.gvsig.remoteclient.wfs.WFSProtocolHandlerFactory;
68
import org.gvsig.tools.dynobject.DynObject;
69
import org.gvsig.tools.exception.BaseException;
70
import org.gvsig.utils.swing.jcomboServer.JComboServer;
71
import org.gvsig.utils.swing.jcomboServer.ServerData;
72
import org.gvsig.wfs.WFSClientExtension;
73
import org.gvsig.wfs.gui.panels.WFSParamsPanel;
74

    
75
/**
76
 * <p>
77
 * Wizard that allows add a new WFS layer.
78
 * </p>
79
 *
80
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
81
 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
82
 */
83
public class WFSWizard extends WizardPanel {
84

    
85
    private static final Logger logger = LoggerFactory.getLogger(WFSWizard.class);
86
    private static final String serversPropsFilename = "servers.properties";
87
    private PluginServices plugin = null;
88

    
89
    private int page;
90
    private boolean connected = false;
91
    private JComboServer cmbHost = null;
92
    private JButton btnConnect = null;
93
    private javax.swing.JPanel jPanel = null;
94
    private javax.swing.JLabel jLabel1 = null;
95
    private javax.swing.JLabel lblTitle = null;
96
    private javax.swing.JScrollPane jScrollPane = null;
97
    private javax.swing.JTextArea txtAbstract = null;
98
    private javax.swing.JPanel panelPage1 = null;
99
    private javax.swing.JPanel pnlName = null;
100
    private JButton btnSiguiente = null;
101
    private JButton btnAnterior = null;
102

    
103
    private JLabel serverVersionLabel = null;
104
    private JLabel serverAvailableVersionLabel = null;
105

    
106
    private JLabel cacheFeatLabel = null;
107
    private JComboBox cacheFeatCombo = null;
108

    
109
    private javax.swing.JPanel jPanel1 = null;
110
    private WFSParamsPanel wfsParamsPanel = null;
111
    private WFSWizard thisWFSPanel = null;
112
    private WFSServerExplorer explorer = null;
113

    
114
    private JCheckBox chkCaching = null;
115
    
116
    private DynObject preferences = null;
117
    
118
    private boolean refreshing = false;
119
    
120
    private final String wfs_properties_extensionpoint_name
121
            = "WFSPropertiesDialog";
122

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

    
131
    /**
132
     * This method initializes this
133
     */
134
    private void initialize() {
135
        PluginsManager pluginsManager = PluginsLocator.getManager();
136
        this.plugin = pluginsManager.getPlugin(WFSClientExtension.class);
137
        this.preferences = this.plugin.getPluginProperties();
138

    
139
        this.refreshing = BooleanUtils.isTrue((Boolean) this.preferences.getDynValue("refresh_capabilities"));
140

    
141
        setTabName(PluginServices.getText(this, "WFS"));
142

    
143
        serverVersionLabel = new JLabel();
144
        serverVersionLabel.setBounds(30, 425, 100, 21);
145
        serverVersionLabel.setText(PluginServices.getText(this, "_Server_version") + ":");
146

    
147
        serverAvailableVersionLabel = new JLabel();
148
        serverAvailableVersionLabel.setBounds(135, 425, 90, 21);
149

    
150
        cacheFeatLabel = new JLabel();
151
        cacheFeatLabel.setBounds(30, 450, 140, 21);
152
        cacheFeatLabel.setText(PluginServices.getText(this, "_Feature_cache") + ":");
153

    
154
        cacheFeatCombo = new JComboBox();
155
        cacheFeatCombo.addItem(PluginServices.getText(this, "none"));
156
        cacheFeatCombo.setEnabled(false);
157
        cacheFeatCombo.setBounds(170, 450, 90, 21);
158

    
159
        this.setLayout(null);
160
        this.setVisible(true);
161

    
162
        this.add(getPanelPage1(), null);
163
        page = 0;
164
        this.add(getPanelPage2(), null);
165

    
166
        this.add(getBtnAnterior(), null);
167
        this.add(getBtnSiguiente(), null);
168

    
169
        this.add(serverVersionLabel, null);
170
        this.add(serverAvailableVersionLabel, null);
171
        this.add(cacheFeatLabel, null);
172
        this.add(cacheFeatCombo, null);
173

    
174
        uptateNavigatingButtons();
175

    
176
        thisWFSPanel = this;
177
    }
178

    
179
    /**
180
     * Adds the host addres to a persistent data storage.
181
     *
182
     * @param host the host of the server
183
     */
184
    private void addHost(String host) {
185
        host = host.trim();
186
        ServerDataPersistence persistence = getServerDataPersistence();
187
        persistence.addServerData(new ServerData(host, ServerData.SERVER_TYPE_WFS));
188
    }
189

    
190
    /**
191
     * Fills up the initial WCSWizard controls.
192
     */
193
    private void rellenarControles() throws Exception {
194
        try {
195
            String url = cmbHost.getModel().getSelectedItem().toString();
196

    
197
            DataManager dataManager = DALLocator.getDataManager();
198
            
199
            // Create the server explorer parameters
200
            WFSServerExplorerParameters parameters
201
                    = (WFSServerExplorerParameters) dataManager
202
                    .createServerExplorerParameters(WFSServerExplorer.NAME);
203
            parameters.setUrl(url);
204
            parameters.setIgnoreCache(refreshing);
205
            addHost(url);
206
            
207
            // Create the server explorer
208
            explorer = (WFSServerExplorer) dataManager.openServerExplorer(
209
                    WFSServerExplorer.NAME, 
210
                    parameters
211
            );
212

    
213
            saveServerListFromComboBox();
214
            
215
            // Update the forms
216
            getLblTitle().setText(explorer.getTitle());
217
            getTxtAbstract().setText(explorer.getAbstract());
218

    
219
            List sel_ver = WFSProtocolHandlerFactory.getRequestableVersions(url,refreshing);
220

    
221
            wfsParamsPanel.getOptionsPanel().refreshVersions(sel_ver);
222

    
223
            if (sel_ver == null || sel_ver.size() == 0) {
224
                serverAvailableVersionLabel.setText("-");
225
            } else {
226
                serverAvailableVersionLabel.setText(
227
                        sel_ver.get(0).toString().trim());
228
                for (int i = 1; i < sel_ver.size(); i++) {
229
                    String txt = serverAvailableVersionLabel.getText();
230
                    txt = txt + ", " + sel_ver.get(i).toString().trim();
231
                    serverAvailableVersionLabel.setText(txt);
232
                }
233
            }
234
            serverAvailableVersionLabel.repaint();
235

    
236
            List cacheProviders = dataManager.getFeatureCacheProviders();
237
            Iterator<String> iter = cacheProviders.iterator();
238

    
239
            while (iter.hasNext()) {
240
                String featureCacheProvider = (String) iter.next();
241
                cacheFeatCombo.addItem(featureCacheProvider);
242
            }
243

    
244
            if (!explorer.getServerType().toLowerCase()
245
                    .startsWith("wfs 1.0")) {
246
                cacheFeatCombo.setEnabled(true);
247
            } else {
248
                cacheFeatCombo.setEnabled(false);
249
            }
250
            wfsParamsPanel.setServerExplorer(explorer);
251
            connected = true;
252
        } catch (Exception e) {
253
            throw e;
254
        }
255
    }
256

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

    
269
            getBtnAnterior().setEnabled(true);
270
            if (wfsParamsPanel.nextPageEnabled() == -1) {
271
                getBtnSiguiente().setEnabled(false);
272

    
273
                if (tabIndex == (wfsParamsPanel.getPanelInGUICount() - 1)) {
274
                    getBtnSiguiente().setVisible(false);
275
                }
276
            } else {
277
                getBtnSiguiente().setVisible(true);
278
                getBtnSiguiente().setEnabled(true);
279
            }
280
        }
281
    }
282

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

    
297
            // Allows that user can start the connection to the written server
298
            // pressing the 'Enter' key
299
            cmbHost.getEditor().getEditorComponent()
300
                    .addKeyListener(new KeyAdapter() {
301
                        public void keyReleased(KeyEvent e) {
302
                            if (e.getKeyCode() == KeyEvent.VK_ENTER) {
303
                                getBtnConnect().doClick();
304
                            }
305
                        }
306
                    });
307
        }
308
        return cmbHost;
309
    }
310

    
311
    /**
312
     * Gets the list of servers that have been persisted or added in the
313
     * properties file
314
     *
315
     * @return
316
     */
317
    private ServerDataPersistence getServerDataPersistence() {
318
        ServerDataPersistence servers = (ServerDataPersistence) this.preferences.getDynValue("servers");
319

    
320
        if (servers == null || servers.isEmpty()) {
321
            if (servers == null) {
322
                servers = new ServerDataPersistence(ServerData.SERVER_TYPE_WFS);
323
                this.preferences.setDynValue("servers", servers);
324
            }
325
            //Lee los servidores del properties y los mezcla con los que hay en la persistencia
326
            Properties prop = new Properties();
327
            File propFile = new File(this.plugin.getPluginDirectory(), serversPropsFilename);
328
            FileInputStream fis = null;
329
            try {
330
                fis = new FileInputStream(propFile);
331
                prop.load(fis);
332
            } catch (FileNotFoundException e) {
333
                logger.info("Properties file '" + propFile.getAbsolutePath() + "' not found", e);
334
            } catch (IOException e) {
335
                logger.info("Error reading properties file '" + propFile.getAbsolutePath() + "'.", e);
336
            } finally {
337
                IOUtils.closeQuietly(fis);
338
            }
339

    
340
            for (int i = 0; i < prop.size(); i++) {
341
                Object value = prop.get("server[" + i + "]");
342
                servers.addServerData(new ServerData(value.toString(), ServerData.SERVER_TYPE_WFS));
343
            }
344

    
345
        }
346
        return servers;
347
    }
348

    
349
    /**
350
     * Saves the list of server reading from the <code>ComboBox</code>
351
     */
352
    private void saveServerListFromComboBox() {
353
        ServerDataPersistence persistence = getServerDataPersistence();
354
        String urlSelected = getTxtHost().getModel().getSelectedItem().toString();
355

    
356
        boolean isSelectedInModel = false;
357
        for (int i = 0; i < getTxtHost().getItemCount(); i++) {
358
            String url = getTxtHost().getItemAt(i).toString();
359
            persistence.addServerData(new ServerData(url, ServerData.SERVER_TYPE_WFS));
360
            if (url.equals(urlSelected)) {
361
                isSelectedInModel = true;
362
            }
363
        }
364
        if (!isSelectedInModel) {
365
            persistence.addServerData(new ServerData(urlSelected, ServerData.SERVER_TYPE_WFS));
366
        }
367
    }
368

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

    
382
                public void actionPerformed(java.awt.event.ActionEvent e) {
383

    
384
                    /*
385
                     * Check if there is a suspicious parameter in URL
386
                     * The user should approve it
387
                     */
388
                    if (!checkServerUrl()) {
389
                        return;
390
                    }
391

    
392
                    btnConnect.setEnabled(false); // This avoids multiple
393
                    // contiguous actions
394

    
395
                    try {
396
                        rellenarControles();
397
                        wfsParamsPanel.refreshCapabilitiesInfo();
398
                        wfsParamsPanel.refreshWFSSelectFeaturePanel();
399
                        wfsParamsPanel.enableDefaultTabs(false);
400
                        btnConnect.setEnabled(true); // This avoids multiple
401
                        // contiguous actions
402

    
403
                        getBtnSiguiente().setEnabled(true);
404
                        getBtnSiguiente().requestFocus(); // Sets focus to the
405
                        // 'next' button
406
                    } catch (Exception e1) {
407

    
408
                        String msg = WFSWizard.getLastMessage(e1);
409
                        JOptionPane.showMessageDialog(
410
                                thisWFSPanel,
411
                                Messages.getText("cant_connect") + ":\n\n"
412
                                + msg,
413
                                Messages.getText("error"),
414
                                JOptionPane.ERROR_MESSAGE);
415
                        btnConnect.setEnabled(true);
416
                    }
417

    
418
                    /**
419
                     * Force panel not valid because connect button has been
420
                     * pressed
421
                     */
422
                    thisWFSPanel.callStateChanged(false);
423
                }
424

    
425
            });
426

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

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

    
445
        return btnConnect;
446
    }
447

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

    
467
        return jPanel;
468
    }
469

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

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

    
497
        return jLabel1;
498
    }
499

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

    
513
        return lblTitle;
514
    }
515

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

    
529
        return jScrollPane;
530
    }
531

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

    
545
        return txtAbstract;
546
    }
547

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

    
564
        return panelPage1;
565
    }
566

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

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

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

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

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

    
605
        return wfsParamsPanel;
606
    }
607

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

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

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

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

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

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

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

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

    
669
                    }
670

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

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

    
697
        return jPanel1;
698
    }
699

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

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

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

    
723
        return ret;
724
    }
725

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

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

    
749
    /*
750
     * (non-Javadoc)
751
     *
752
     * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
753
     */
754
    public void execute() {
755
        wfsParamsPanel.setSelectedCache(cacheFeatCombo.getSelectedItem().toString());
756
        String layerName = wfsParamsPanel.getFeaturesPanel().getLayerName();
757
        WFSStoreParameters parameters;
758
        try {
759
            //
760
            // TODO: La proyeccion deberia ir en los parametros ?? !!!!!!!!!
761
            //
762
            parameters = wfsParamsPanel.getDataStoreParameters();
763

    
764
        } catch (Exception e) {
765
            logger.warn("Can't make the parameters of the wfs layer", e);
766
            JOptionPane.showMessageDialog(null,
767
                    PluginServices.getText(this, "_cant_create_wfslayer"),
768
                    "addLayer", JOptionPane.WARNING_MESSAGE
769
                    + JOptionPane.OK_OPTION);
770
            return;
771
        }
772
        doAddLayer(getMapCtrl(), layerName, parameters);
773
    }
774

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

    
791
                public void itemStateChanged(java.awt.event.ItemEvent e) {
792
                    refreshing = chkCaching.isSelected();
793
                    preferences.setDynValue("refresh_capabilities", new Boolean(refreshing));
794
                }
795
            });
796
            chkCaching.addActionListener(new java.awt.event.ActionListener() {
797

    
798
                public void actionPerformed(java.awt.event.ActionEvent e) {
799
                    refreshing = chkCaching.isSelected();
800
                    preferences.setDynValue("refresh_capabilities", new Boolean(refreshing));
801
                }
802
            });
803

    
804
        }
805
        return chkCaching;
806
    }
807

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

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

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

    
832
    /**
833
     * This method is called when user changes tab in add layer dialog
834
     */
835
    public boolean areSettingsValid() {
836
        if (wfsParamsPanel != null) {
837
            return wfsParamsPanel.isCorretlyConfigured();
838
        } else {
839
            return false;
840
        }
841
    }
842

    
843
    /**
844
     * This method suggests user to remove suspicious parameters such as
845
     * "request=..."
846
     */
847
    private boolean checkServerUrl() {
848

    
849
        Object sel_obj = cmbHost.getModel().getSelectedItem();
850
        if (sel_obj != null) {
851

    
852
            String url = sel_obj.toString();
853
            List<String> suspi = getSuspiciousParameters(url);
854
            if (suspi != null && suspi.size() > 0) {
855
                if (userWantsToContinue(suspi)) {
856
                    // user says url ok anyway
857
                    return true;
858
                } else {
859
                    // user wants to fix url by hand
860
                    return false;
861
                }
862
            } else {
863
                // url is ok
864
                return true;
865
            }
866
        } else {
867
            // no selection in combo
868
            return false;
869
        }
870
    }
871

    
872
    /**
873
     * @param suspi
874
     * @return
875
     */
876
    private boolean userWantsToContinue(List<String> suspi) {
877

    
878
        String tit = PluginServices.getText(this, "server");
879
        String msg = PluginServices.getText(this, "Dangerous_parameters_found_Continue_question");
880
        int len = suspi.size();
881
        msg = msg + " '";
882
        for (int i = 0; i < (len - 1); i++) {
883
            msg = msg + suspi.get(i) + ", ";
884
        }
885
        msg = msg + suspi.get(len - 1) + "'";
886

    
887
        int user_opt = JOptionPane.showConfirmDialog(
888
                thisWFSPanel, msg, tit, JOptionPane.YES_NO_OPTION);
889

    
890
        return user_opt == JOptionPane.YES_OPTION;
891
    }
892

    
893
    /**
894
     * @param url
895
     * @return
896
     */
897
    private List<String> getSuspiciousParameters(String _url) {
898

    
899
        String str_url = _url;
900
        int len = SUSPICIOUS_PARAMS.length;
901
        String item = null;
902
        ArrayList<String> resp = new ArrayList<String>();
903
        for (int i = 0; i < len; i++) {
904
            item = SUSPICIOUS_PARAMS[i];
905
            item = "&" + item + "=";
906
            if (str_url.indexOf(item) != -1) {
907
                resp.add(SUSPICIOUS_PARAMS[i]);
908
            }
909
        }
910
        return resp;
911
    }
912

    
913
    public static String getLastMessage(Throwable ex) {
914

    
915
        Throwable p = ex;
916
        while (p.getCause() != null && p.getCause() != p) {
917
            p = p.getCause();
918
        }
919
        return p.getMessage();
920
    }
921

    
922
    private static final String[] SUSPICIOUS_PARAMS
923
            = {"request"}; // , ""};
924
}