Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wms / trunk / org.gvsig.raster.wms / org.gvsig.raster.wms.app.wmsclient / src / main / java / org / gvsig / raster / wms / app / wmsclient / gui / wizard / WMSWizard.java @ 3325

History | View | Annotate | Download (31.7 KB)

1
/* gvSIG. Geographic Information System of the Valencian Government
2
*
3
* Copyright (C) 2007-2008 Infrastructures and Transports Department
4
* of the Valencian Government (CIT)
5
*
6
* This program is free software; you can redistribute it and/or
7
* modify it under the terms of the GNU General Public License
8
* as published by the Free Software Foundation; either version 2
9
* of the License, or (at your option) any later version.
10
*
11
* This program is distributed in the hope that it will be useful,
12
* but WITHOUT ANY WARRANTY; without even the implied warranty of
13
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
14
* GNU General Public License for more details.
15
*
16
* You should have received a copy of the GNU General Public License
17
* along with this program; if not, write to the Free Software
18
* Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
19
* MA  02110-1301, USA.
20
*
21
*/
22

    
23
package org.gvsig.raster.wms.app.wmsclient.gui.wizard;
24

    
25
import java.awt.Component;
26
import java.awt.Dimension;
27
import java.awt.FlowLayout;
28
import java.awt.event.ActionEvent;
29
import java.awt.event.ActionListener;
30
import java.io.File;
31
import java.io.FileInputStream;
32
import java.io.FileNotFoundException;
33
import java.io.IOException;
34
import java.net.MalformedURLException;
35
import java.net.URL;
36
import java.util.Hashtable;
37
import java.util.Properties;
38
import java.util.Vector;
39
import java.util.prefs.Preferences;
40

    
41
import javax.swing.DefaultComboBoxModel;
42
import javax.swing.JButton;
43
import javax.swing.JCheckBox;
44
import javax.swing.JLabel;
45
import javax.swing.JOptionPane;
46
import javax.swing.JPanel;
47
import javax.swing.JScrollPane;
48
import javax.swing.JTextArea;
49
import javax.swing.tree.TreePath;
50

    
51
import org.apache.commons.io.IOUtils;
52
import org.cresques.cts.IProjection;
53
import org.gvsig.andami.PluginServices;
54
import org.gvsig.andami.PluginsLocator;
55
import org.gvsig.andami.PluginsManager;
56
import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
57
import org.gvsig.andami.ui.mdiManager.IWindow;
58
import org.gvsig.app.gui.WizardPanel;
59
import org.gvsig.app.gui.wizards.WizardListener;
60
import org.gvsig.app.gui.wizards.WizardListenerSupport;
61
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
62
import org.gvsig.compat.net.ICancellable;
63
import org.gvsig.fmap.dal.DALLocator;
64
import org.gvsig.fmap.dal.DataManager;
65
import org.gvsig.fmap.dal.DataParameters;
66
import org.gvsig.fmap.dal.DataServerExplorerParameters;
67
import org.gvsig.fmap.dal.DataStoreParameters;
68
import org.gvsig.fmap.dal.coverage.exception.ConnectException;
69
import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
70
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
71
import org.gvsig.fmap.dal.exception.InitializeException;
72
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
73
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
74
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
75
import org.gvsig.fmap.mapcontext.layers.FLayer;
76
import org.gvsig.gui.beans.Messages;
77
import org.gvsig.raster.cache.tile.TileCacheLibrary;
78
import org.gvsig.raster.util.CancelTaskImpl;
79
import org.gvsig.raster.wms.app.wmsclient.WMSClientExtension;
80
import org.gvsig.raster.wms.app.wmsclient.gui.panel.WMSParamsPanel;
81
import org.gvsig.raster.wms.io.RemoteWMSStyle;
82
import org.gvsig.raster.wms.io.WMSDataParameters;
83
import org.gvsig.raster.wms.io.WMSLayerNode;
84
import org.gvsig.raster.wms.io.WMSServerExplorer;
85
import org.gvsig.raster.wms.io.WMSServerExplorerParameters;
86
import org.gvsig.tools.dynobject.DynObject;
87
import org.gvsig.utils.swing.jcomboServer.JComboServer;
88
import org.gvsig.utils.swing.jcomboServer.ServerData;
89
import org.slf4j.Logger;
90
import org.slf4j.LoggerFactory;
91

    
92

    
93

    
94
/**
95
 * The WMS properties container panel.
96
 *
97
 * @author Jaume Dominguez Faus
98
 */
99
public class WMSWizard extends WizardPanel implements ActionListener {
100
        private static final long             serialVersionUID       = 1L;
101
        private static Logger                 logger                 = LoggerFactory.getLogger(WMSWizard.class);
102
        private String                        serversPropsFilename       = "servers.properties";
103

    
104
        protected int                         page                   = 0;
105
        protected boolean                     connected              = false;
106
        private JComboServer                  cmbHost                = null;
107
        private JButton                       btnConnect             = null;
108
        private JButton                       btnCancel              = null;
109
        private JPanel                        jPanel                 = null;
110
        private JLabel                        jLabel1                = null;
111
        private JLabel                        lblTitle               = null;
112
        private JScrollPane                   jScrollPane            = null;
113
        private JTextArea                     txtAbstract            = null;
114
        private JPanel                        panelPage1             = null;
115
        private JButton                       btnSiguiente           = null;
116
        private JButton                       btnAnterior            = null;
117
        private JPanel                        jPanel1                = null;
118
        protected WizardListenerSupport       listenerSupport        = null;
119
        protected WMSParamsPanel              wmsParamsPanel         = null;
120
        protected JLabel                      lblServerType          = null;
121
        protected JLabel                      lblServerTypeValue     = null;
122
        private JCheckBox                     chkCaching             = null;
123
        private boolean                       usingTileCache         = fPrefs.getBoolean("tile_cache", false);
124
        private JCheckBox                     chkTileCache           = null;
125
        private JCheckBox                     chkAxisOrder           = null;
126
        private static Preferences            fPrefs                 = Preferences.userRoot().node( "gvsig.wms-wizard" );
127
        protected int                         firstPage              = 0;
128
        private JPanel                        pnlName                = null;
129
        private IProjection                   proj                   = null;
130
        private ICancellable                  cancel                 = null;
131
        private WMSDataParameters             storeParams            = null;
132
        private WMSServerExplorer             explorer               = null;
133

    
134
    private PluginServices plugin = null;
135

    
136

    
137
        public WMSWizard (WMSParamsPanel params) {
138
                super();
139
                firstPage = 1;
140
                page = firstPage;
141
                this.wmsParamsPanel = params;
142
                this.explorer = wmsParamsPanel.getExplorer();
143

    
144
                setTabName("WMS");
145
                lblServerType = new JLabel();
146
                lblServerType.setBounds(20, 444, 100, 20);
147
                lblServerType.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
148
                lblServerType.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
149
                lblServerType.setFont(new java.awt.Font("Arial", java.awt.Font.PLAIN, 11));
150
                lblServerType.setText(PluginServices.getText(this, "server_type")+":");
151
                lblServerTypeValue = new JLabel();
152
                lblServerTypeValue.setBounds(128, 444, 148, 20);
153
                lblServerTypeValue.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 11));
154
                lblServerTypeValue.setText("-");
155
                this.setSize(510, 468);
156
                this.setLayout(null);
157
                this.setPreferredSize(new java.awt.Dimension(750, 420));
158
                this.setVisible(true);
159

    
160
                wmsParamsPanel.setListenerSupport(this.getWizardListenerSupport());
161
                wmsParamsPanel.setBounds(0, 5, 510, 428);
162
                wmsParamsPanel.getJTabbedPane().addMouseListener(
163
                                new java.awt.event.MouseAdapter() {
164
                                        public void mouseClicked(java.awt.event.MouseEvent e) {
165
                                                page = wmsParamsPanel.currentPage() + 1;
166
                                                activarVisualizarBotones();
167
                                        }
168
                                });
169
                this.add(wmsParamsPanel, null);
170
                this.add(lblServerType, null);
171
                this.add(lblServerTypeValue, null);
172
                getWMSParamsPanel().setVisible(true);
173

    
174
                connected = true;
175
        }
176

    
177
        /**
178
         * This is the default constructor
179
         */
180
        public WMSWizard() {
181
                super();
182
                firstPage = 0;
183
                page = firstPage;
184
                initialize();
185

    
186
                IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
187
                for (int i = 0; i < windows.length; i++) {
188
                        if(windows[i] instanceof AbstractViewPanel)
189
                                proj = ((AbstractViewPanel)windows[i]).getProjection();
190
                }
191
                cancel = new CancelTaskImpl();
192
        }
193
        /**
194
         * This method initializes this
195
         */
196
        private void initialize() {
197
        PluginsManager pluginsManager = PluginsLocator.getManager();
198
        this.plugin = pluginsManager.getPlugin(WMSClientExtension.class);
199

    
200

    
201
                setTabName("WMS");
202

    
203
                lblServerType = new JLabel();
204
                lblServerType.setBounds(20, 444, 100, 20);
205
                lblServerType.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
206
                lblServerType.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
207
                lblServerType.setFont(new java.awt.Font("Arial", java.awt.Font.PLAIN, 11));
208
                lblServerType.setText(PluginServices.getText(this, "server_type")+":");
209
                lblServerTypeValue = new JLabel();
210
                lblServerTypeValue.setBounds(128, 444, 148, 20);
211
                lblServerTypeValue.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 11));
212
                lblServerTypeValue.setText("-");
213
                this.setSize(510, 468);
214
                this.setLayout(null);
215
                this.setPreferredSize(new java.awt.Dimension(750, 420));
216
                this.setVisible(true);
217
                this.add(getPanelPage1(), null);
218
                this.add(getWMSParamsPanel(), null);
219
                this.add(getBtnAnterior(), null);
220
                this.add(getBtnSiguiente(), null);
221
                this.add(lblServerType, null);
222
                this.add(lblServerTypeValue, null);
223
                activarVisualizarBotones();
224
        }
225

    
226

    
227
        protected WMSParamsPanel getWMSParamsPanel() {
228
                if (wmsParamsPanel == null){
229
                        wmsParamsPanel = new WMSParamsPanel();
230
                        wmsParamsPanel.setListenerSupport(this.getWizardListenerSupport());
231
                        wmsParamsPanel.setBounds(0, 5, 510, 428);
232
                        wmsParamsPanel.getJTabbedPane().addMouseListener(
233
                                        new java.awt.event.MouseAdapter() {
234
                                                public void mouseClicked(java.awt.event.MouseEvent e) {
235
                                                        page = wmsParamsPanel.currentPage() + 1;
236
                                                        activarVisualizarBotones();
237
                                                }
238
                                        });
239
                }
240
                return wmsParamsPanel;
241
        }
242

    
243
        /**
244
         * This method checks for the options selected within the configuration
245
         * dialog are correct.
246
         *
247
         * @return true if you're done, false if not.
248
         */
249
        public boolean areSettingsValid() {
250
                return getWMSParamsPanel().isCorrectlyConfigured();
251
        }
252

    
253
        /**
254
         * Thread to connect to a WMS server
255
         * @author Nacho Brodin (nachobrodin@gmail.com)
256
         */
257
        public class ConnectThread extends Thread {
258
                private ICancellable             cancel      = null;
259
                private WMSServerExplorer        explorer    = null;
260
                private WMSWizard                wizard      = null;
261

    
262
                public ConnectThread(ICancellable cancel, WMSServerExplorer explorer, WMSWizard wizard) {
263
                        this.cancel = cancel;
264
                        this.explorer = explorer;
265
                        this.wizard = wizard;
266
                }
267

    
268
            public void run() {
269
                    if(!checkHostAndNetwork())
270
                            return;
271

    
272
                    try {
273
                            explorer.connect(cancel, getWMSParamsPanel().isUpdatingCache());
274
                            saveServerListFromComboBox();
275
                    } catch (ConnectException e) {
276
                            String msg = e.getMessage() + " : " + getIOExceptionMessage(e);
277
                            if(msg != null) {
278
                                    LoggerFactory.getLogger(getClass()).info(msg, e);
279
                                    JOptionPane.showMessageDialog(getWMSParamsPanel(), msg, Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
280
                            } else
281
                                    LoggerFactory.getLogger(getClass()).info("RemoteServiceException", e);
282
                            return;
283
                    } finally {
284
                            ((CancelTaskImpl)cancel).setCanceled(false);
285
                    }
286

    
287
                        DataStoreParameters parameters = explorer.getStoredParameters();
288
                        if(parameters instanceof WMSDataParameters) {
289
                                storeParams = (WMSDataParameters) parameters;
290
                        }
291

    
292
                        if(parameters instanceof TileDataParameters) {
293
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
294
                                if(p instanceof WMSDataParameters)
295
                                        storeParams = (WMSDataParameters) p;
296
                        }
297

    
298
                        wizard.rellenarControles();
299
            }
300

    
301
            /**
302
                 * Gets the <code>IOException</code> message. The message
303
                 * of this exception is returned by the server
304
                 * @param e
305
                 * @return
306
                 */
307
                private String getIOExceptionMessage(Exception e) {
308
                        Throwable ex = e;
309
                        final int MAX_DEEP = 10;
310
                        int deep = 0;
311
                        while(deep < MAX_DEEP) {
312
                                Throwable t = null;
313
                                if(ex instanceof IOException) {
314
                                        return ex.getMessage();
315
                                } else if(ex instanceof RemoteServiceException) {
316
                                        t = ex.getCause();
317
                                }
318
                                if(t == null)
319
                                        return null;
320
                                else
321
                                        ex = t;
322
                                deep++;
323
                        }
324
                        return null;
325
                }
326
        }
327

    
328
        /**
329
         * Checks if the network and host are reachable
330
         * @return true if both are reachable and false if they are not
331
         */
332
        private boolean checkHostAndNetwork() {
333
                if(!explorer.isHostReachable()) {
334
                        JOptionPane.showMessageDialog(null, Messages.getText("host_unreachable"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
335
                        return false;
336
                }
337
                return true;
338
        }
339

    
340
        /**
341
         * DOCUMENT ME!
342
         */
343
        private void rellenarControles() {
344
                try {
345
                        //String host = cmbHost.getModel().getSelectedItem().toString();
346

    
347
                        lblTitle.setText(explorer.getTitle());
348
                        lblServerTypeValue.setText(explorer.getServerType());
349
                        txtAbstract.setText(explorer.getAbstract());
350

    
351
                        getWMSParamsPanel().setWizardData(explorer);
352
                        connected = true;
353
                        activarVisualizarBotones();
354
                } catch (Exception e) {
355
                        if (e.getMessage()==null) {
356
                                txtAbstract.setText(PluginServices.getText(this,"error"));
357
                        } else {
358
                                txtAbstract.setText(e.getMessage());
359
                        }
360
                        getWizardListenerSupport().callError(e);
361
                        getBtnSiguiente().setEnabled(false);
362
                        getBtnAnterior().setEnabled(true);
363
                } finally {
364
                        getBtnCancel().setEnabled(false);
365
                }
366
        }
367

    
368
        public void actionPerformed(ActionEvent e) {
369
                if(e.getSource() == getBtnConnect()) {
370
                        getBtnCancel().setEnabled(true);
371
                        getTxtAbstract().setText("Trying to connect...");
372
                        String host = cmbHost.getModel().getSelectedItem().toString();
373
                        try {
374
                                DataManager datamanager = DALLocator.getDataManager();
375
                                WMSServerExplorerParameters explorerParams = (WMSServerExplorerParameters) datamanager.createServerExplorerParameters(WMSServerExplorer.NAME);
376
                                explorerParams.setXyAxisOrder(getChkAxisOrder().isSelected());
377

    
378
                                explorerParams.setHost(host);
379
                                explorer = (WMSServerExplorer) datamanager.createServerExplorer(explorerParams);
380

    
381
                                ((CancelTaskImpl)cancel).setCanceled(false);
382
                                new ConnectThread(cancel, explorer, this).start();
383

    
384
                        } catch (InitializeException e1) {
385
                                getTxtAbstract().setText("Error creating WMS layer");
386
                        } catch (ProviderNotRegisteredException e1) {
387
                                getTxtAbstract().setText("Provider not registered. I cannot connect.");
388
                        } catch (ValidateDataParametersException e1) {
389
                                getTxtAbstract().setText("Parameters not valid. I cannot connect.");
390
                        }
391
                }
392

    
393
                if(e.getSource() == getBtnCancel()) {
394
                        getTxtAbstract().setText("Cancelled...");
395
                        ((CancelTaskImpl)cancel).setCanceled(true);
396
                        getBtnCancel().setEnabled(false);
397
                }
398
        }
399

    
400
        /**
401
         * DOCUMENT ME!
402
         */
403
        protected void activarVisualizarBotones() {
404
                if (page == firstPage) {
405
                        getBtnAnterior().setEnabled(false);
406
                        getBtnSiguiente().setVisible(true);
407

    
408
                        if (connected) {
409
                                getBtnSiguiente().setEnabled(true);
410
                        } else {
411
                                getBtnSiguiente().setEnabled(false);
412
                        }
413
                } else if (page < getWMSParamsPanel().getNumTabs()) {
414
                        getBtnSiguiente().setEnabled(true);
415
                        getBtnSiguiente().setVisible(true);
416
                        getBtnAnterior().setEnabled(true);
417
                        getBtnAnterior().setVisible(true);
418
                        if (getWMSParamsPanel().nextEnabledPage() == -1){
419
                                getBtnSiguiente().setEnabled(false);
420
                        }
421
                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
422
                } else if (page == getWMSParamsPanel().getNumTabs()) {
423
                        getBtnSiguiente().setVisible(false);
424
                        getBtnSiguiente().setEnabled(false);
425
                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
426
                }
427
        }
428

    
429
        /**
430
         * This method initializes txtHost
431
         *
432
         * @return javax.swing.JTextField
433
         */
434
        private javax.swing.JComboBox getTxtHost() {
435
                if (cmbHost == null) {
436
                        cmbHost = new JComboServer();
437
                        cmbHost.setModel(new DefaultComboBoxModel());
438
                        cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
439
                        cmbHost.setBounds(11, 26, 454, 20);
440
                        cmbHost.setEditable(true);
441
                        cmbHost.setServerList(getServerDataPersistence().getArrayOfServerData());
442
                }
443

    
444
                return cmbHost;
445
        }
446

    
447
        /**
448
         * Gets the list of servers that have been persisted or added in the properties file
449
         * @return
450
         */
451
        private ServerDataPersistence getServerDataPersistence() {
452
        DynObject pluginProperties = this.plugin.getPluginProperties();
453
        ServerDataPersistence servers =  (ServerDataPersistence) pluginProperties.getDynValue("servers");
454

    
455
        if( servers == null || servers.isEmpty() ) {
456
            if( servers == null ) {
457
                servers = new ServerDataPersistence(ServerData.SERVER_TYPE_WMS);
458
                pluginProperties.setDynValue("servers", servers);
459
            }
460
            //Lee los servidores del properties y los mezcla con los que hay en la persistencia
461
            Properties prop = new Properties();
462
            File propFile = new File(this.plugin.getPluginDirectory(),serversPropsFilename);
463
            FileInputStream fis = null;
464
            try {
465
                    fis = new FileInputStream(propFile);
466
                    prop.load(fis);
467
            } catch (FileNotFoundException e) {
468
                    logger.info("Properties file '"+propFile.getAbsolutePath()+"' not found", e);
469
            } catch (IOException e) {
470
                    logger.info("Error reading properties file '"+propFile.getAbsolutePath()+"'.", e);
471
            } finally {
472
                IOUtils.closeQuietly(fis);
473
            }
474

    
475
            for (int i = 0; i < prop.size(); i++) {
476
                Object value = prop.get("server[" + i + "]");
477
                servers.addServerData(new ServerData(value.toString(), ServerData.SERVER_TYPE_WMS));
478
            }
479

    
480
        }
481
        return servers;
482
    }
483

    
484
        /**
485
         * Saves the list of server reading from the <code>ComboBox</code>
486
         */
487
        private void saveServerListFromComboBox() {
488
        ServerDataPersistence persistence = getServerDataPersistence();
489
        String urlSelected = getTxtHost().getModel().getSelectedItem().toString();
490

    
491
        boolean isSelectedInModel = false;
492
        for ( int i = 0; i < getTxtHost().getItemCount(); i++ ) {
493
            String url = getTxtHost().getItemAt(i).toString();
494
            persistence.addServerData(new ServerData(url, ServerData.SERVER_TYPE_WMS));
495
            if(url.equals(urlSelected)) {
496
                isSelectedInModel = true;
497
            }
498
        }
499
        if ( !isSelectedInModel ) {
500
            persistence.addServerData(new ServerData(urlSelected, ServerData.SERVER_TYPE_WMS));
501
        }
502
    }
503

    
504
        /**
505
         * This method initializes btnDetalles
506
         *
507
         * @return javax.swing.JButton
508
         */
509
        private JButton getBtnConnect() {
510
                if (btnConnect == null) {
511
                        btnConnect = new JButton();
512
                        btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
513
                        btnConnect.setBounds(262, 50, 100, 20);
514
                        btnConnect.setText(PluginServices.getText(this, "conectar"));
515
                        btnConnect.addActionListener(this);
516
                }
517

    
518
                return btnConnect;
519
        }
520

    
521
        /**
522
         * This method initializes btnDetalles
523
         *
524
         * @return javax.swing.JButton
525
         */
526
        private JButton getBtnCancel() {
527
                if (btnCancel == null) {
528
                        btnCancel = new JButton();
529
                        btnCancel.setEnabled(false);
530
                        btnCancel.setPreferredSize(new java.awt.Dimension(100, 20));
531
                        btnCancel.setBounds(366, 50, 100, 20);
532
                        btnCancel.setText(PluginServices.getText(this, "cancel"));
533
                        btnCancel.addActionListener(this);
534
                }
535

    
536
                return btnCancel;
537
        }
538

    
539
        /**
540
         * This method initializes jPanel
541
         *
542
         * @return javax.swing.JPanel
543
         */
544
        private javax.swing.JPanel getJPanel() {
545
                if (jPanel == null) {
546
                        jPanel = new javax.swing.JPanel();
547
                        jPanel.setLayout(null);
548
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
549
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
550
                                        null, PluginServices.getText(this, "description"),
551
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
552
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
553
                        jPanel.setBounds(2, 137, 477, 283);
554

    
555
                        jPanel.add(getJScrollPane(), null);
556
                        jPanel.add(getPnlName(), null);
557
                }
558

    
559
                return jPanel;
560
        }
561

    
562
        /**
563
         * This method initializes jLabel1
564
         *
565
         * @return javax.swing.JLabel
566
         */
567
        private javax.swing.JLabel getJLabel1() {
568
                if (jLabel1 == null) {
569
                        jLabel1 = new javax.swing.JLabel();
570
                        jLabel1.setText(PluginServices.getText(this, "name") + ":");
571
                }
572

    
573
                return jLabel1;
574
        }
575

    
576
        /**
577
         * This method initializes lblTitle
578
         *
579
         * @return javax.swing.JLabel
580
         */
581
        private javax.swing.JLabel getLblTitle() {
582
                if (lblTitle == null) {
583
                        lblTitle = new javax.swing.JLabel();
584
                        lblTitle.setText("-");
585
                }
586

    
587
                return lblTitle;
588
        }
589

    
590
        /**
591
         * This method initializes jScrollPane
592
         *
593
         * @return javax.swing.JScrollPane
594
         */
595
        private javax.swing.JScrollPane getJScrollPane() {
596
                if (jScrollPane == null) {
597
                        jScrollPane = new javax.swing.JScrollPane();
598
                        jScrollPane.setViewportView(getTxtAbstract());
599
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
600
                        jScrollPane.setBounds(10, 47, 457, 247);
601
                }
602

    
603
                return jScrollPane;
604
        }
605

    
606
        /**
607
         * This method initializes txtAbstract
608
         *
609
         * @return javax.swing.JTextArea
610
         */
611
        private javax.swing.JTextArea getTxtAbstract() {
612
                if (txtAbstract == null) {
613
                        txtAbstract = new javax.swing.JTextArea();
614
                        txtAbstract.setWrapStyleWord(true);
615
                        txtAbstract.setColumns(30);
616
                        txtAbstract.setLineWrap(true);
617
                }
618

    
619
                return txtAbstract;
620
        }
621

    
622
        private javax.swing.JPanel getPanelPage1() {
623
                if (panelPage1 == null) {
624
                        panelPage1 = new JPanel();
625
                        panelPage1.setLayout(null);
626
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
627
                        panelPage1.setVisible(true);
628
                        panelPage1.setBounds(15, 5, 480, 427);
629
                        panelPage1.add(getJPanel1(), null);
630
                        panelPage1.add(getJPanel(), null);
631
                }
632

    
633
                return panelPage1;
634
        }
635

    
636

    
637
        /**
638
         * This method initializes btnSiguiente
639
         *
640
         * @return javax.swing.JButton
641
         */
642
        private javax.swing.JButton getBtnSiguiente() {
643
                if (btnSiguiente == null) {
644
                        btnSiguiente = new JButton();
645
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
646
                        btnSiguiente.setBounds(395, 444, 100, 20);
647
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
648
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
649
                                public void actionPerformed(java.awt.event.ActionEvent e) {
650
                                        if(page == firstPage && getChkTileCache().isSelected()) {
651
                                                messageBoxInfo("remote_service_tiled", TileCacheLibrary.ALTERNATIVE_TILESIZE + "", this);
652
                                        }
653
                                        if (page > firstPage) {
654
                                                // si page es mayor que cero, vamos enfocando las
655
                                                // sucesivas SOLAPAS del WMSParamsPanel
656
                                                getWMSParamsPanel().avanzaTab();
657
                                                page = getWMSParamsPanel().currentPage();
658
                                        }
659
                                        page++;
660
                                        getPanelPage1().setVisible(false);
661
                                        getWMSParamsPanel().setVisible(true);
662
                                        activarVisualizarBotones();
663
                                }
664
                        });
665
                }
666
                return btnSiguiente;
667
        }
668

    
669
        /**
670
         * Shows an information dialog with a text and a accept button
671
         * @param msg Message to show in the dialog
672
         * @param parentWindow Parent window
673
         */
674
        public static void messageBoxInfo(String msg, String fixedText, Object parentWindow){
675
                String string = PluginServices.getText(parentWindow, "accept");
676
                Object[] options = {string};
677
                JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
678
                                        "<html>" + PluginServices.getText(parentWindow, msg).replaceAll("\n", "<br>") + " " + fixedText + "</html>",
679
                                        PluginServices.getText(parentWindow, "confirmacion"),
680
                                        JOptionPane.OK_OPTION,
681
                                        JOptionPane.INFORMATION_MESSAGE,
682
                                        null,
683
                                        options,
684
                                        string);
685
        }
686

    
687
        /**
688
         * This method initializes btnAnterior
689
         *
690
         * @return javax.swing.JButton
691
         */
692
        private javax.swing.JButton getBtnAnterior() {
693
                if (btnAnterior == null) {
694
                        btnAnterior = new JButton();
695
                        btnAnterior.setBounds(292, 444, 100, 20);
696
                        btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
697
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
698
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
699
                                public void actionPerformed(java.awt.event.ActionEvent e) {
700
                                        page --;
701
                                        if (page > firstPage) {
702
                                                // Tenemos que retroceder en el wmsParamsPanel
703
                                                getWMSParamsPanel().retrocedeTab();
704
                                                page = getWMSParamsPanel().currentPage() + 1;
705
                                                activarVisualizarBotones();
706
                                        } else if (page==firstPage){
707
                                                activarVisualizarBotones();
708
                                                page = firstPage +1;
709
                                                //wmsParamsPanel.limpiaWizard();
710
                                                getLblTitle().setText("-");
711
                                                getTxtAbstract().setText("");
712
                                                getWMSParamsPanel().retrocedeTab();
713
                                                getPanelPage1().setVisible(true);
714
                                                getWMSParamsPanel().setVisible(false);
715
                                                getBtnSiguiente().setEnabled(false);
716
                                                connected = false;
717
                                        }
718
                                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
719
                                }
720
                        });
721
                }
722

    
723
                return btnAnterior;
724
        }
725

    
726
        private javax.swing.JPanel getJPanel1() {
727
                if (jPanel1 == null) {
728
                        jPanel1 = new javax.swing.JPanel();
729
                        jPanel1.setLayout(null);
730
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
731
                                        null, PluginServices.getText(this, "server"),
732
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
733
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
734
                        jPanel1.setBounds(2, 5, 477, 126);
735
                        jPanel1.add(getTxtHost(), null);
736
                        jPanel1.add(getBtnConnect(), null);
737
                        jPanel1.add(getBtnCancel(), null);
738
                        jPanel1.add(getChkCaching(), null);
739
                        jPanel1.add(getChkTileCache(), null);
740
                        jPanel1.add(getChkAxisOrder(), null);
741
                }
742

    
743
                return jPanel1;
744
        }
745

    
746
        private WizardListenerSupport getWizardListenerSupport() {
747
                if(listenerSupport == null)
748
                        listenerSupport = new WizardListenerSupport();
749
                return listenerSupport;
750
        }
751

    
752
        /**
753
         * DOCUMENT ME!
754
         *
755
         * @param listener
756
         */
757
        public void addWizardListener(WizardListener listener) {
758
                getWizardListenerSupport().addWizardListener(listener);
759
                getWizardListenerSupport().callStateChanged(false);
760
        }
761

    
762
        /**
763
         * DOCUMENT ME!
764
         *
765
         * @param listener
766
         */
767
        public void removeWizardListener(WizardListener listener) {
768
                getWizardListenerSupport().removeWizardListener(listener);
769
        }
770

    
771
        /**
772
         * DOCUMENT ME!
773
         *
774
         * @return DOCUMENT ME!
775
         */
776
        public String getSRS() {
777
                return getWMSParamsPanel().getSRS();
778
        }
779

    
780
        /**
781
         * DOCUMENT ME!
782
         *
783
         * @return DOCUMENT ME!
784
         */
785
        public String getFormat() {
786
                return getWMSParamsPanel().getFormat();
787
        }
788

    
789
        /**
790
         * DOCUMENT ME!
791
         *
792
         * @return DOCUMENT ME!
793
         */
794
        public String getInfoFormat() {
795
                return getWMSParamsPanel().getInfoFormat();
796
        }
797

    
798
        /**
799
         * DOCUMENT ME!
800
         *
801
         * @return DOCUMENT ME!
802
         */
803
        public TreePath[] getSelectedLayers() {
804
                return getWMSParamsPanel().getSelectedLayers();
805
        }
806

    
807
        /**
808
         * DOCUMENT ME!
809
         *
810
         * @return DOCUMENT ME!
811
         * @throws ProjectionLayerException
812
         */
813
        /*public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
814
                return getWMSParamsPanel().getLayersRectangle();
815
        }*/
816

    
817

    
818

    
819
        /**
820
         * Devuelve el host que est� escrito en el cuadro de texto del host o null
821
         * en caso de que no haya nada escrito o est� mal escrito
822
         *
823
         * @return URL del host
824
         */
825
        public URL getHost() {
826
                try {
827
                        if ((cmbHost == null)|| (cmbHost.getModel().getSelectedItem() == null)) {
828
                                return new URL(explorer.getHost());
829
                        } else {
830
                                return new URL(cmbHost.getModel().getSelectedItem().toString());
831
                        }
832
                } catch (MalformedURLException e) {
833
                        return null;
834
                }
835
        }
836

    
837
        /**
838
         * DOCUMENT ME!
839
         *
840
         * @return Nombre de la capa que aparece en el TOC.
841
         */
842
        public String getLayerName() {
843
                return getWMSParamsPanel().getLayerName();
844
        }
845

    
846

    
847
        public void initWizard() {
848
        }
849

    
850
        public void execute() {
851
                try {
852
                        FLayer layer = this.getLayer();
853
                        if(layer == null)
854
                                return;
855
                        this.getMapCtrl().getMapContext().getLayers().addLayer(layer);
856
                } catch (InitializeException e) {
857
                        LoggerFactory.getLogger(getClass()).info(PluginServices.getText(this, "The layer cannot be added"), e);
858
                }
859

    
860
        }
861

    
862
        /**
863
         * DOCUMENT ME!
864
         *
865
         * @return DOCUMENT ME!
866
         */
867
        protected String getLayersQuery() {
868
                return getWMSParamsPanel().getLayersQuery();
869
        }
870

    
871
        //gets all the layers available in the WMS
872
        public FLayer getAllLayers() throws LoadLayerException {
873
                return getWMSParamsPanel().getAllLayers();
874
        }
875

    
876
        public synchronized FLayer getLayer() throws InitializeException {
877
                return getWMSParamsPanel().getLayer(getChkTileCache().isSelected());
878
        }
879

    
880
    protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node) {
881
                for (int i = 0; i < selection.length; i++) {
882
                        Object[] components = selection[i].getPath();
883
                        for (int j = 0; j < components.length ;j++) {
884
                                if (components[j] instanceof WMSLayerNode) {
885
                                        if (((WMSLayerNode)components[j]).getTitle().compareTo(node.getTitle()) == 0){
886
                                                return true;
887
                                        }
888
                                }
889
                        }
890
                }
891
                return false;
892
    }
893

    
894

    
895
        protected boolean isQueryable() {
896
                return explorer.isQueryable();
897
        }
898

    
899
        protected Dimension getFixedSize() {
900
                return getWMSParamsPanel().getFixedSize();
901
        }
902

    
903
        private Hashtable getOnlineResources() {
904
                return getWMSParamsPanel().getOnlineResources();
905
        }
906

    
907
        /**
908
         * @return
909
         */
910
        protected Vector<RemoteWMSStyle> getStyles() {
911
                return getWMSParamsPanel().getStyles();
912
        }
913

    
914
        protected Vector getDimensions() {
915
                return getWMSParamsPanel().getDimensions();
916
        }
917

    
918
        /**
919
         * @return
920
         */
921
        protected boolean getTransparency() {
922
                return getWMSParamsPanel().getTransparency();
923
        }
924

    
925
        /**
926
         * DOCUMENT ME!
927
         *
928
         * @return DOCUMENT ME!
929
         */
930
        public String getQueryableLayerQuery() {
931
                return getWMSParamsPanel().getQueryableLayerQuery();
932
        }
933

    
934
        /**
935
         * This method initializes chkCaching
936
         *
937
         * @return javax.swing.JCheckBox
938
         */
939
        private JCheckBox getChkCaching() {
940
                if (chkCaching == null) {
941
                        chkCaching = new JCheckBox();
942
                        chkCaching.setBounds(7, 51, 249, 20);
943
                        chkCaching.setText(PluginServices.getText(this, "refresh_capabilities"));
944
                        chkCaching.setToolTipText(PluginServices.getText(this, "refresh_capabilities_tooltip"));
945
                        chkCaching.setSelected(getWMSParamsPanel().isUpdatingCache());
946
                        chkCaching.addItemListener(new java.awt.event.ItemListener() {
947
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
948
                                        getWMSParamsPanel().setUpdatingCache(chkCaching.isSelected());
949
                                }
950
                        });
951
                        chkCaching.addActionListener(new java.awt.event.ActionListener() {
952
                                public void actionPerformed(java.awt.event.ActionEvent e) {
953
                                        fPrefs.putBoolean("refresh_capabilities", chkCaching.isSelected());
954
                                }
955
                        });
956

    
957
                }
958
                return chkCaching;
959
        }
960

    
961
        /**
962
         * This method initializes chkCaching
963
         *
964
         * @return javax.swing.JCheckBox
965
         */
966
        private JCheckBox getChkTileCache() {
967
                if (chkTileCache == null) {
968
                        chkTileCache = new JCheckBox();
969
                        chkTileCache.setBounds(7, 72, 249, 20);
970
                        chkTileCache.setText(PluginServices.getText(this, "tile_cache"));
971
                        chkTileCache.setToolTipText(PluginServices.getText(this, "tile_cache_tooltip"));
972
                        chkTileCache.setSelected(usingTileCache);
973
                        chkTileCache.addItemListener(new java.awt.event.ItemListener() {
974
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
975
                                        usingTileCache = chkTileCache.isSelected();
976
                                }
977
                        });
978
                        chkTileCache.addActionListener(new java.awt.event.ActionListener() {
979
                                public void actionPerformed(java.awt.event.ActionEvent e) {
980
                                        fPrefs.putBoolean("tile_cache", chkTileCache.isSelected());
981
                                }
982
                        });
983

    
984
                }
985
                return chkTileCache;
986
        }
987
        
988
        /**
989
         * This method initializes chkAxisOrder, to decide if the
990
         * parser should assume coordinates follow XY axis order
991
         *
992
         * @see WMSDataParameters#isXyAxisOrder()
993
         * @see WMSDataParameters#setXyAxisOrder(boolean)
994
         * @return CheckBox
995
         */
996
        private JCheckBox getChkAxisOrder() {
997
                if (chkAxisOrder == null) {
998
                        chkAxisOrder = new JCheckBox();
999
                        chkAxisOrder.setText(PluginServices.getText(this,
1000
                                        "Assume_coordinates_follow_XY_axis_order"));
1001
                        chkAxisOrder.setSelected(false);
1002
                        chkAxisOrder.setBounds(7, 93, 475, 21);
1003
                        chkAxisOrder.setToolTipText(PluginServices.getText(this,
1004
                                        "Only_needed_for_servers_not_strictly_honouring_the_WMS_standard"));
1005

    
1006
                }
1007
                return chkAxisOrder;
1008
        }
1009

    
1010
        /**
1011
         * This method initializes pnlName
1012
         *
1013
         * @return javax.swing.JPanel
1014
         */
1015
        private JPanel getPnlName() {
1016
                if (pnlName == null) {
1017
                        pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
1018
                        pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
1019
                        pnlName.add(getJLabel1(), null);
1020
                        pnlName.add(getLblTitle(), null);
1021
                }
1022
                return pnlName;
1023
        }
1024

    
1025
        @Override
1026
        public DataStoreParameters[] getParameters() {
1027
                // TODO Auto-generated method stub
1028
                return null;
1029
        }
1030

    
1031
        @Override
1032
        public void close() {
1033
                // Nothing to do
1034
        }
1035
}  //  @jve:decl-index=0:visual-constraint="10,10"