Statistics
| Revision:

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

History | View | Annotate | Download (29.8 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.awt.geom.Rectangle2D;
31
import java.io.IOException;
32
import java.net.MalformedURLException;
33
import java.net.URL;
34
import java.util.Hashtable;
35
import java.util.Vector;
36
import java.util.prefs.Preferences;
37

    
38
import javax.swing.DefaultComboBoxModel;
39
import javax.swing.JButton;
40
import javax.swing.JCheckBox;
41
import javax.swing.JLabel;
42
import javax.swing.JOptionPane;
43
import javax.swing.JPanel;
44
import javax.swing.JScrollPane;
45
import javax.swing.JTextArea;
46
import javax.swing.tree.TreePath;
47

    
48
import org.cresques.cts.IProjection;
49
import org.gvsig.andami.PluginServices;
50
import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
51
import org.gvsig.andami.ui.mdiManager.IWindow;
52
import org.gvsig.app.gui.WizardPanel;
53
import org.gvsig.app.gui.wizards.WizardListener;
54
import org.gvsig.app.gui.wizards.WizardListenerSupport;
55
import org.gvsig.app.project.documents.view.gui.AbstractViewPanel;
56
import org.gvsig.compat.net.ICancellable;
57
import org.gvsig.fmap.dal.DALLocator;
58
import org.gvsig.fmap.dal.DataManager;
59
import org.gvsig.fmap.dal.DataParameters;
60
import org.gvsig.fmap.dal.DataStoreParameters;
61
import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
62
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
63
import org.gvsig.fmap.dal.exception.InitializeException;
64
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
65
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
66
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
67
import org.gvsig.fmap.mapcontext.exceptions.ProjectionLayerException;
68
import org.gvsig.fmap.mapcontext.layers.FLayer;
69
import org.gvsig.gui.beans.Messages;
70
import org.gvsig.raster.cache.tile.TileCacheLibrary;
71
import org.gvsig.raster.util.CancelTaskImpl;
72
import org.gvsig.raster.wms.app.wmsclient.gui.panel.WMSParamsPanel;
73
import org.gvsig.raster.wms.io.WMSDataParameters;
74
import org.gvsig.raster.wms.io.WMSLayerNode;
75
import org.gvsig.raster.wms.io.WMSServerExplorer;
76
import org.gvsig.raster.wms.io.WMSServerExplorerParameters;
77
import org.gvsig.utils.NotExistInXMLEntity;
78
import org.gvsig.utils.XMLEntity;
79
import org.gvsig.utils.swing.jcomboServer.JComboServer;
80
import org.gvsig.utils.swing.jcomboServer.ServerData;
81
import org.slf4j.LoggerFactory;
82

    
83

    
84

    
85
/**
86
 * The WMS properties container panel.
87
 *
88
 * @author Jaume Dominguez Faus
89
 */
90
public class WMSWizard extends WizardPanel implements ActionListener {
91
        private static final long             serialVersionUID   = 1L;
92
        //private static Logger               logger             = Logger.getLogger(WMSWizard.class.getName());
93
        protected int                         page               = 0;
94
        protected boolean                     connected          = false;
95
        private JComboServer                  cmbHost            = null;
96
        private JButton                       btnConnect         = null;
97
        private JButton                       btnCancel          = null;
98
        private JPanel                        jPanel             = null;
99
        private JLabel                        jLabel1            = null;
100
        private JLabel                        lblTitle           = null;
101
        private JScrollPane                   jScrollPane        = null;
102
        private JTextArea                     txtAbstract        = null;
103
        private JPanel                        panelPage1         = null;
104
        private JButton                       btnSiguiente       = null;
105
        private JButton                       btnAnterior        = null;
106
        private JPanel                        jPanel1            = null;
107
        protected WizardListenerSupport       listenerSupport    = null;
108
        protected WMSParamsPanel              wmsParamsPanel     = null;
109
        protected JLabel                      lblServerType      = null;
110
        protected JLabel                      lblServerTypeValue = null;
111
        private JCheckBox                     chkCaching         = null;
112
        private boolean                       usingTileCache     = fPrefs.getBoolean("tile_cache", false);
113
        private JCheckBox                     chkTileCache       = null;
114
        private static Preferences            fPrefs             = Preferences.userRoot().node( "gvsig.wms-wizard" );
115
        protected int                         firstPage          = 0;
116
        private JPanel                        pnlName            = null;
117
        private IProjection                   proj               = null;
118
        private ICancellable                  cancel             = null;
119
        private WMSDataParameters             storeParams        = null;
120
        private WMSServerExplorer             explorer           = null;
121
        
122
        
123
        public WMSWizard (WMSParamsPanel params) {
124
                super();
125
                firstPage = 1;
126
                page = firstPage;
127
                this.wmsParamsPanel = params;
128
                this.explorer = wmsParamsPanel.getExplorer();
129

    
130
                setTabName("WMS");
131
                lblServerType = new JLabel();
132
                lblServerType.setBounds(20, 444, 100, 20);
133
                lblServerType.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
134
                lblServerType.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
135
                lblServerType.setFont(new java.awt.Font("Arial", java.awt.Font.PLAIN, 11));
136
                lblServerType.setText(PluginServices.getText(this, "server_type")+":");
137
                lblServerTypeValue = new JLabel();
138
                lblServerTypeValue.setBounds(128, 444, 148, 20);
139
                lblServerTypeValue.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 11));
140
                lblServerTypeValue.setText("-");
141
                this.setSize(510, 468);
142
                this.setLayout(null);
143
                this.setPreferredSize(new java.awt.Dimension(750, 420));
144
                this.setVisible(true);
145

    
146
                wmsParamsPanel.setListenerSupport(this.getWizardListenerSupport());
147
                wmsParamsPanel.setBounds(0, 5, 510, 428);
148
                wmsParamsPanel.getJTabbedPane().addMouseListener(
149
                                new java.awt.event.MouseAdapter() {
150
                                        public void mouseClicked(java.awt.event.MouseEvent e) {
151
                                                page = wmsParamsPanel.currentPage() + 1;
152
                                                activarVisualizarBotones();
153
                                        }
154
                                });
155
                this.add(wmsParamsPanel, null);
156
                this.add(lblServerType, null);
157
                this.add(lblServerTypeValue, null);
158
                getWMSParamsPanel().setVisible(true);
159

    
160
                connected = true;
161
        }
162

    
163
        /**
164
         * This is the default constructor
165
         */
166
        public WMSWizard() {
167
                super();
168
                firstPage = 0;
169
                page = firstPage;
170
                initialize();
171
                
172
                IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
173
                for (int i = 0; i < windows.length; i++) {
174
                        if(windows[i] instanceof AbstractViewPanel)
175
                                proj = ((AbstractViewPanel)windows[i]).getProjection();
176
                }
177
                cancel = new CancelTaskImpl();
178
        }
179
        /**
180
         * This method initializes this
181
         */
182
        private void initialize() {
183
                setTabName("WMS");
184

    
185
                lblServerType = new JLabel();
186
                lblServerType.setBounds(20, 444, 100, 20);
187
                lblServerType.setHorizontalAlignment(javax.swing.SwingConstants.RIGHT);
188
                lblServerType.setHorizontalTextPosition(javax.swing.SwingConstants.RIGHT);
189
                lblServerType.setFont(new java.awt.Font("Arial", java.awt.Font.PLAIN, 11));
190
                lblServerType.setText(PluginServices.getText(this, "server_type")+":");
191
                lblServerTypeValue = new JLabel();
192
                lblServerTypeValue.setBounds(128, 444, 148, 20);
193
                lblServerTypeValue.setFont(new java.awt.Font("Arial", java.awt.Font.BOLD, 11));
194
                lblServerTypeValue.setText("-");
195
                this.setSize(510, 468);
196
                this.setLayout(null);
197
                this.setPreferredSize(new java.awt.Dimension(750, 420));
198
                this.setVisible(true);
199
                this.add(getPanelPage1(), null);
200
                this.add(getWMSParamsPanel(), null);
201
                this.add(getBtnAnterior(), null);
202
                this.add(getBtnSiguiente(), null);
203
                this.add(lblServerType, null);
204
                this.add(lblServerTypeValue, null);
205
                activarVisualizarBotones();
206
        }
207

    
208
        
209
        protected WMSParamsPanel getWMSParamsPanel() {
210
                if (wmsParamsPanel == null){
211
                        wmsParamsPanel = new WMSParamsPanel();
212
                        wmsParamsPanel.setListenerSupport(this.getWizardListenerSupport());
213
                        wmsParamsPanel.setBounds(0, 5, 510, 428);
214
                        wmsParamsPanel.getJTabbedPane().addMouseListener(
215
                                        new java.awt.event.MouseAdapter() {
216
                                                public void mouseClicked(java.awt.event.MouseEvent e) {
217
                                                        page = wmsParamsPanel.currentPage() + 1;
218
                                                        activarVisualizarBotones();
219
                                                }
220
                                        });
221
                }
222
                return wmsParamsPanel;
223
        }
224
        
225
        /**
226
         * This method checks for the options selected within the configuration
227
         * dialog are correct.
228
         *
229
         * @return true if you're done, false if not.
230
         */
231
        public boolean areSettingsValid() {
232
                return getWMSParamsPanel().isCorrectlyConfigured();
233
        }
234
        
235
        /**
236
         * DOCUMENT ME!
237
         *
238
         * @param host DOCUMENT ME!
239
         */
240
        private void addHost(String host) {
241
                host = host.trim();
242

    
243
                ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WMS);
244
                persistence.addServerData(new ServerData(host, ServerData.SERVER_TYPE_WMS));
245
                persistence.setPersistent();
246
        }
247
        
248
        /**
249
         * Thread to connect to a WMS server
250
         * @author Nacho Brodin (nachobrodin@gmail.com)
251
         */
252
        public class ConnectThread extends Thread {
253
                private ICancellable             cancel      = null;
254
                private WMSServerExplorer        explorer    = null;
255
                private WMSWizard                wizard      = null;
256
                
257
                public ConnectThread(ICancellable cancel, WMSServerExplorer explorer, WMSWizard wizard) {
258
                        this.cancel = cancel;
259
                        this.explorer = explorer;
260
                        this.wizard = wizard;
261
                }
262
                
263
            public void run() {
264
                    try {
265
                                    explorer.connect(cancel, getWMSParamsPanel().isUpdatingCache());
266
                        } catch (RemoteServiceException e) {
267
                                String msg = e.getMessage() + " : " + getIOExceptionMessage(e);
268
                                if(msg != null) {
269
                                        LoggerFactory.getLogger(getClass()).info(msg, e);
270
                                        JOptionPane.showMessageDialog(getWMSParamsPanel(), msg, Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
271
                                } else
272
                                        LoggerFactory.getLogger(getClass()).info("RemoteServiceException", e);
273
                                return;
274
                        } finally {
275
                                ((CancelTaskImpl)cancel).setCanceled(false);
276
                        }
277
                        
278
                        DataStoreParameters parameters = explorer.getStoreParameters();
279
                        if(parameters instanceof WMSDataParameters) {
280
                                storeParams = (WMSDataParameters) parameters;
281
                        }
282
                        
283
                        if(parameters instanceof TileDataParameters) {
284
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
285
                                if(p instanceof WMSDataParameters)
286
                                        storeParams = (WMSDataParameters) p;
287
                        }
288
                        
289
                        wizard.rellenarControles();
290
            }
291
            
292
            /**
293
                 * Gets the <code>IOException</code> message. The message 
294
                 * of this exception is returned by the server
295
                 * @param e
296
                 * @return
297
                 */
298
                private String getIOExceptionMessage(Exception e) {
299
                        Throwable ex = e;
300
                        final int MAX_DEEP = 10;
301
                        int deep = 0;
302
                        while(deep < MAX_DEEP) {
303
                                Throwable t = null;
304
                                if(ex instanceof IOException) {
305
                                        return ex.getMessage();
306
                                } else if(ex instanceof RemoteServiceException) {
307
                                        t = ex.getCause();
308
                                }
309
                                if(t == null)
310
                                        return null;
311
                                else
312
                                        ex = t;
313
                                deep++;
314
                        }
315
                        return null;
316
                }
317
        }
318

    
319
        /**
320
         * DOCUMENT ME!
321
         */
322
        private void rellenarControles() {
323
                try {
324
                        String host = cmbHost.getModel().getSelectedItem().toString();
325
                        
326
                        lblTitle.setText(explorer.getTitle());
327
                        lblServerTypeValue.setText(explorer.getServerType());
328
                        txtAbstract.setText(explorer.getAbstract());
329

    
330
                        addHost(host);
331
                        getWMSParamsPanel().setWizardData(explorer);
332
                        connected = true;
333
                        activarVisualizarBotones();
334
                } catch (Exception e) {
335
                        if (e.getMessage()==null) {
336
                                txtAbstract.setText(PluginServices.getText(this,"error"));
337
                        } else {
338
                                txtAbstract.setText(e.getMessage());
339
                        }
340
                        getWizardListenerSupport().callError(e);
341
                        getBtnSiguiente().setEnabled(false);
342
                        getBtnAnterior().setEnabled(true);
343
                } finally {
344
                        getBtnCancel().setEnabled(false);
345
                }
346
        }
347
        
348
        public void actionPerformed(ActionEvent e) {
349
                if(e.getSource() == getBtnConnect()) {
350
                        getBtnCancel().setEnabled(true);
351
                        getTxtAbstract().setText("Trying to connect...");
352
                        String host = cmbHost.getModel().getSelectedItem().toString();
353
                        try {
354
                                DataManager datamanager = DALLocator.getDataManager();
355
                                WMSServerExplorerParameters explorerParams = (WMSServerExplorerParameters) datamanager.createServerExplorerParameters(WMSServerExplorer.NAME);
356
                                explorerParams.setHost(host);
357
                                
358
                                explorer = (WMSServerExplorer) datamanager.createServerExplorer(explorerParams);
359
                                
360
                                ((CancelTaskImpl)cancel).setCanceled(false);
361
                                new ConnectThread(cancel, explorer, this).start();
362
                                
363
                        } catch (InitializeException e1) {
364
                                getTxtAbstract().setText("Error creating WMS layer");
365
                        } catch (ProviderNotRegisteredException e1) {
366
                                getTxtAbstract().setText("Provider not registered. I cannot connect.");
367
                        } catch (ValidateDataParametersException e1) {
368
                                getTxtAbstract().setText("Parameters not valid. I cannot connect.");
369
                        }
370
                }
371
                
372
                if(e.getSource() == getBtnCancel()) {
373
                        getTxtAbstract().setText("Cancelled...");
374
                        ((CancelTaskImpl)cancel).setCanceled(true);
375
                        getBtnCancel().setEnabled(false);
376
                }
377
        }
378

    
379
        /**
380
         * DOCUMENT ME!
381
         */
382
        protected void activarVisualizarBotones() {
383
                if (page == firstPage) {
384
                        getBtnAnterior().setEnabled(false);
385
                        getBtnSiguiente().setVisible(true);
386

    
387
                        if (connected) {
388
                                getBtnSiguiente().setEnabled(true);
389
                        } else {
390
                                getBtnSiguiente().setEnabled(false);
391
                        }
392
                } else if (page < getWMSParamsPanel().getNumTabs()) {
393
                        getBtnSiguiente().setEnabled(true);
394
                        getBtnSiguiente().setVisible(true);
395
                        getBtnAnterior().setEnabled(true);
396
                        getBtnAnterior().setVisible(true);
397
                        if (getWMSParamsPanel().nextEnabledPage() == -1){
398
                                getBtnSiguiente().setEnabled(false);
399
                        }
400
                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
401
                } else if (page == getWMSParamsPanel().getNumTabs()) {
402
                        getBtnSiguiente().setVisible(false);
403
                        getBtnSiguiente().setEnabled(false);
404
                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
405
                }
406
        }
407

    
408
        /**
409
         * This method initializes txtHost
410
         *
411
         * @return javax.swing.JTextField
412
         */
413
        private javax.swing.JComboBox getTxtHost() {
414
                if (cmbHost == null) {
415
                        cmbHost = new JComboServer();
416
                        cmbHost.setModel(new DefaultComboBoxModel());
417
                        cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
418
                        cmbHost.setBounds(11, 26, 454, 20);
419
                        cmbHost.setEditable(true);
420

    
421
                        ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WMS);
422
                        ServerData[] servers = persistence.getArrayOfServerData();
423

    
424
                        if (servers.length == 0){
425
                                PluginServices ps = PluginServices.getPluginServices(this);
426
                                XMLEntity xml = ps.getPersistentXML();
427
                                try {
428
                                        String[] oldServers = xml.getStringArrayProperty("wms-servers");
429
                                        servers = new ServerData[oldServers.length];
430
                                        for (int i=0; i<oldServers.length; i++) {
431
                                                servers[i] = new ServerData(oldServers[i],ServerData.SERVER_TYPE_WMS);
432
                                        }
433
                                        xml.remove("wms-servers");
434
                                        ps.setPersistentXML(xml);
435
                                } catch (NotExistInXMLEntity e) {
436
                                        // Old servers doesn't exist
437
                                        servers = new ServerData[12];
438
                                        servers[0] = new ServerData("http://www.ign.es/wms-inspire/ign-base",ServerData.SERVER_TYPE_WMS);
439
                                        servers[1] = new ServerData("http://wms.jpl.nasa.gov/wms.cgi",ServerData.SERVER_TYPE_WMS);
440
                                        servers[2] = new ServerData("http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?",ServerData.SERVER_TYPE_WMS);
441
                                        servers[3] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_patricova",ServerData.SERVER_TYPE_WMS);
442
                                        servers[4] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_parque_fondo_prug",ServerData.SERVER_TYPE_WMS);
443
                                        servers[5] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_pgof",ServerData.SERVER_TYPE_WMS);
444
                                        servers[6] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_urbanismo_tematicos",ServerData.SERVER_TYPE_WMS);
445
                                        servers[7] = new ServerData("http://onearth.jpl.nasa.gov/wms.cgi",ServerData.SERVER_TYPE_WMS);
446
                                        servers[8] = new ServerData("http://www.demis.nl/wms/wms.asp?WMS=WorldMap",ServerData.SERVER_TYPE_WMS);
447
                                        servers[9] = new ServerData("http://aes.gsfc.nasa.gov/cgi-bin/wms",ServerData.SERVER_TYPE_WMS);
448
                                        servers[10] = new ServerData("http://mapas.euitto.upm.es/cgi-bin/cnauticas",ServerData.SERVER_TYPE_WMS);
449
                                        servers[11] = new ServerData("http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx", ServerData.SERVER_TYPE_WMS);
450
                                }
451

    
452
                                for (int i=0 ; i<servers.length ; i++){
453
                                        persistence.addServerData(servers[i]);
454
                                }
455
                                persistence.setPersistent();
456
                        }
457

    
458
                        cmbHost.setServerList(servers);
459
                }
460

    
461
                return cmbHost;
462
        }
463

    
464
        /**
465
         * This method initializes btnDetalles
466
         *
467
         * @return javax.swing.JButton
468
         */
469
        private JButton getBtnConnect() {
470
                if (btnConnect == null) {
471
                        btnConnect = new JButton();
472
                        btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
473
                        btnConnect.setBounds(262, 50, 100, 20);
474
                        btnConnect.setText(PluginServices.getText(this, "conectar"));
475
                        btnConnect.addActionListener(this);
476
                }
477

    
478
                return btnConnect;
479
        }
480
        
481
        /**
482
         * This method initializes btnDetalles
483
         *
484
         * @return javax.swing.JButton
485
         */
486
        private JButton getBtnCancel() {
487
                if (btnCancel == null) {
488
                        btnCancel = new JButton();
489
                        btnCancel.setEnabled(false);
490
                        btnCancel.setPreferredSize(new java.awt.Dimension(100, 20));
491
                        btnCancel.setBounds(366, 50, 100, 20);
492
                        btnCancel.setText(PluginServices.getText(this, "cancel"));
493
                        btnCancel.addActionListener(this);
494
                }
495

    
496
                return btnCancel;
497
        }
498

    
499
        /**
500
         * This method initializes jPanel
501
         *
502
         * @return javax.swing.JPanel
503
         */
504
        private javax.swing.JPanel getJPanel() {
505
                if (jPanel == null) {
506
                        jPanel = new javax.swing.JPanel();
507
                        jPanel.setLayout(null);
508
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
509
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
510
                                        null, PluginServices.getText(this, "description"),
511
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
512
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
513
                        jPanel.setBounds(2, 116, 477, 304);
514

    
515
                        jPanel.add(getJScrollPane(), null);
516
                        jPanel.add(getPnlName(), null);
517
                }
518

    
519
                return jPanel;
520
        }
521

    
522
        /**
523
         * This method initializes jLabel1
524
         *
525
         * @return javax.swing.JLabel
526
         */
527
        private javax.swing.JLabel getJLabel1() {
528
                if (jLabel1 == null) {
529
                        jLabel1 = new javax.swing.JLabel();
530
                        jLabel1.setText(PluginServices.getText(this, "name") + ":");
531
                }
532

    
533
                return jLabel1;
534
        }
535

    
536
        /**
537
         * This method initializes lblTitle
538
         *
539
         * @return javax.swing.JLabel
540
         */
541
        private javax.swing.JLabel getLblTitle() {
542
                if (lblTitle == null) {
543
                        lblTitle = new javax.swing.JLabel();
544
                        lblTitle.setText("-");
545
                }
546

    
547
                return lblTitle;
548
        }
549

    
550
        /**
551
         * This method initializes jScrollPane
552
         *
553
         * @return javax.swing.JScrollPane
554
         */
555
        private javax.swing.JScrollPane getJScrollPane() {
556
                if (jScrollPane == null) {
557
                        jScrollPane = new javax.swing.JScrollPane();
558
                        jScrollPane.setViewportView(getTxtAbstract());
559
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
560
                        jScrollPane.setBounds(10, 47, 457, 247);
561
                }
562

    
563
                return jScrollPane;
564
        }
565

    
566
        /**
567
         * This method initializes txtAbstract
568
         *
569
         * @return javax.swing.JTextArea
570
         */
571
        private javax.swing.JTextArea getTxtAbstract() {
572
                if (txtAbstract == null) {
573
                        txtAbstract = new javax.swing.JTextArea();
574
                        txtAbstract.setWrapStyleWord(true);
575
                        txtAbstract.setColumns(30);
576
                        txtAbstract.setLineWrap(true);
577
                }
578

    
579
                return txtAbstract;
580
        }
581
        
582
        private javax.swing.JPanel getPanelPage1() {
583
                if (panelPage1 == null) {
584
                        panelPage1 = new JPanel();
585
                        panelPage1.setLayout(null);
586
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
587
                        panelPage1.setVisible(true);
588
                        panelPage1.setBounds(15, 5, 480, 427);
589
                        panelPage1.add(getJPanel1(), null);
590
                        panelPage1.add(getJPanel(), null);
591
                }
592

    
593
                return panelPage1;
594
        }
595

    
596

    
597
        /**
598
         * This method initializes btnSiguiente
599
         *
600
         * @return javax.swing.JButton
601
         */
602
        private javax.swing.JButton getBtnSiguiente() {
603
                if (btnSiguiente == null) {
604
                        btnSiguiente = new JButton();
605
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
606
                        btnSiguiente.setBounds(395, 444, 100, 20);
607
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
608
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
609
                                public void actionPerformed(java.awt.event.ActionEvent e) {
610
                                        if(page == firstPage && getChkTileCache().isSelected()) {
611
                                                messageBoxInfo("remote_service_tiled", TileCacheLibrary.ALTERNATIVE_TILESIZE + "", this);
612
                                        }
613
                                        if (page > firstPage) {
614
                                                // si page es mayor que cero, vamos enfocando las
615
                                                // sucesivas SOLAPAS del WMSParamsPanel
616
                                                getWMSParamsPanel().avanzaTab();
617
                                                page = getWMSParamsPanel().currentPage();
618
                                        }
619
                                        page++;
620
                                        getPanelPage1().setVisible(false);
621
                                        getWMSParamsPanel().setVisible(true);
622
                                        activarVisualizarBotones();
623
                                }
624
                        });
625
                }
626
                return btnSiguiente;
627
        }
628
        
629
        /**
630
         * Shows an information dialog with a text and a accept button 
631
         * @param msg Message to show in the dialog
632
         * @param parentWindow Parent window
633
         */
634
        public static void messageBoxInfo(String msg, String fixedText, Object parentWindow){
635
                String string = PluginServices.getText(parentWindow, "accept");
636
                Object[] options = {string};
637
                JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
638
                                        "<html>" + PluginServices.getText(parentWindow, msg).replaceAll("\n", "<br>") + " " + fixedText + "</html>",
639
                                        PluginServices.getText(parentWindow, "confirmacion"),
640
                                        JOptionPane.OK_OPTION,
641
                                        JOptionPane.INFORMATION_MESSAGE,
642
                                        null,
643
                                        options,
644
                                        string);
645
        }
646

    
647
        /**
648
         * This method initializes btnAnterior
649
         *
650
         * @return javax.swing.JButton
651
         */
652
        private javax.swing.JButton getBtnAnterior() {
653
                if (btnAnterior == null) {
654
                        btnAnterior = new JButton();
655
                        btnAnterior.setBounds(292, 444, 100, 20);
656
                        btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
657
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
658
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
659
                                public void actionPerformed(java.awt.event.ActionEvent e) {
660
                                        page --;
661
                                        if (page > firstPage) {
662
                                                // Tenemos que retroceder en el wmsParamsPanel
663
                                                getWMSParamsPanel().retrocedeTab();
664
                                                page = getWMSParamsPanel().currentPage() + 1;
665
                                                activarVisualizarBotones();
666
                                        } else if (page==firstPage){
667
                                                activarVisualizarBotones();
668
                                                page = firstPage +1;
669
                                                //wmsParamsPanel.limpiaWizard();
670
                                                getLblTitle().setText("-");
671
                                                getTxtAbstract().setText("");
672
                                                getWMSParamsPanel().retrocedeTab();
673
                                                getPanelPage1().setVisible(true);
674
                                                getWMSParamsPanel().setVisible(false);
675
                                                getBtnSiguiente().setEnabled(false);
676
                                                connected = false;
677
                                        }
678
                                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
679
                                }
680
                        });
681
                }
682

    
683
                return btnAnterior;
684
        }
685
        
686
        private javax.swing.JPanel getJPanel1() {
687
                if (jPanel1 == null) {
688
                        jPanel1 = new javax.swing.JPanel();
689
                        jPanel1.setLayout(null);
690
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
691
                                        null, PluginServices.getText(this, "server"),
692
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
693
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
694
                        jPanel1.setBounds(2, 5, 477, 105);
695
                        jPanel1.add(getTxtHost(), null);
696
                        jPanel1.add(getBtnConnect(), null);
697
                        jPanel1.add(getBtnCancel(), null);
698
                        jPanel1.add(getChkCaching(), null);
699
                        jPanel1.add(getChkTileCache(), null);
700
                }
701

    
702
                return jPanel1;
703
        }
704

    
705
        private WizardListenerSupport getWizardListenerSupport() {
706
                if(listenerSupport == null)
707
                        listenerSupport = new WizardListenerSupport();
708
                return listenerSupport;
709
        }
710
        
711
        /**
712
         * DOCUMENT ME!
713
         *
714
         * @param listener
715
         */
716
        public void addWizardListener(WizardListener listener) {
717
                getWizardListenerSupport().addWizardListener(listener);
718
                getWizardListenerSupport().callStateChanged(false);
719
        }
720

    
721
        /**
722
         * DOCUMENT ME!
723
         *
724
         * @param listener
725
         */
726
        public void removeWizardListener(WizardListener listener) {
727
                getWizardListenerSupport().removeWizardListener(listener);
728
        }
729

    
730
        /**
731
         * DOCUMENT ME!
732
         *
733
         * @return DOCUMENT ME!
734
         */
735
        public String getSRS() {
736
                return getWMSParamsPanel().getSRS();
737
        }
738

    
739
        /**
740
         * DOCUMENT ME!
741
         *
742
         * @return DOCUMENT ME!
743
         */
744
        public String getFormat() {
745
                return getWMSParamsPanel().getFormat();
746
        }
747
        
748
        /**
749
         * DOCUMENT ME!
750
         *
751
         * @return DOCUMENT ME!
752
         */
753
        public String getInfoFormat() {
754
                return getWMSParamsPanel().getInfoFormat();
755
        }
756

    
757
        /**
758
         * DOCUMENT ME!
759
         *
760
         * @return DOCUMENT ME!
761
         */
762
        public TreePath[] getSelectedLayers() {
763
                return getWMSParamsPanel().getSelectedLayers();
764
        }
765

    
766
        /**
767
         * DOCUMENT ME!
768
         *
769
         * @return DOCUMENT ME!
770
         * @throws ProjectionLayerException
771
         */
772
        public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
773
                return getWMSParamsPanel().getLayersRectangle();
774
        }
775

    
776

    
777

    
778
        /**
779
         * Devuelve el host que est� escrito en el cuadro de texto del host o null
780
         * en caso de que no haya nada escrito o est� mal escrito
781
         *
782
         * @return URL del host
783
         */
784
        public URL getHost() {
785
                try {
786
                        if ((cmbHost == null)|| (cmbHost.getModel().getSelectedItem() == null)) {
787
                                return new URL(explorer.getHost());
788
                        } else {
789
                                return new URL(cmbHost.getModel().getSelectedItem().toString());
790
                        }
791
                } catch (MalformedURLException e) {
792
                        return null;
793
                }
794
        }
795

    
796
        /**
797
         * DOCUMENT ME!
798
         *
799
         * @return Nombre de la capa que aparece en el TOC.
800
         */
801
        public String getLayerName() {
802
                return getWMSParamsPanel().getLayerName();
803
        }
804

    
805

    
806
        public void initWizard() {
807
        }
808

    
809
        public void execute() {
810
                try {
811
                        FLayer layer = this.getLayer();
812
                        if(layer == null)
813
                                return;
814
                        this.getMapCtrl().getMapContext().getLayers().addLayer(layer);
815
                } catch (InitializeException e) {
816
                        LoggerFactory.getLogger(getClass()).info(PluginServices.getText(this, "The layer cannot be added"), e);
817
                }
818

    
819
        }
820

    
821
        /**
822
         * DOCUMENT ME!
823
         *
824
         * @return DOCUMENT ME!
825
         */
826
        protected String getLayersQuery() {
827
                return getWMSParamsPanel().getLayersQuery();
828
        }
829

    
830
        //gets all the layers available in the WMS
831
        public FLayer getAllLayers() throws LoadLayerException {
832
                return getWMSParamsPanel().getAllLayers();
833
        }
834

    
835
        public synchronized FLayer getLayer() throws InitializeException {
836
                return getWMSParamsPanel().getLayer(getChkTileCache().isSelected());
837
        }
838

    
839
    protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node) {
840
                for (int i = 0; i < selection.length; i++) {
841
                        Object[] components = selection[i].getPath();
842
                        for (int j = 0; j < components.length ;j++) {
843
                                if (components[j] instanceof WMSLayerNode) {
844
                                        if (((WMSLayerNode)components[j]).getTitle().compareTo(node.getTitle()) == 0){
845
                                                return true;
846
                                        }
847
                                }
848
                        }
849
                }
850
                return false;
851
    }
852

    
853

    
854
        protected boolean isQueryable() {
855
                return explorer.isQueryable();
856
        }
857

    
858
        protected Dimension getFixedSize() {
859
                return getWMSParamsPanel().getFixedSize();
860
        }
861

    
862
        private Hashtable getOnlineResources() {
863
                return getWMSParamsPanel().getOnlineResources();
864
        }
865

    
866
        /**
867
         * @return
868
         */
869
        protected Vector getStyles() {
870
                return getWMSParamsPanel().getStyles();
871
        }
872

    
873
        protected Vector getDimensions() {
874
                return getWMSParamsPanel().getDimensions();
875
        }
876

    
877
        /**
878
         * @return
879
         */
880
        protected boolean getTransparency() {
881
                return getWMSParamsPanel().getTransparency();
882
        }
883

    
884
        /**
885
         * DOCUMENT ME!
886
         *
887
         * @return DOCUMENT ME!
888
         */
889
        public String getQueryableLayerQuery() {
890
                return getWMSParamsPanel().getQueryableLayerQuery();
891
        }
892

    
893
        /**
894
         * This method initializes chkCaching
895
         *
896
         * @return javax.swing.JCheckBox
897
         */
898
        private JCheckBox getChkCaching() {
899
                if (chkCaching == null) {
900
                        chkCaching = new JCheckBox();
901
                        chkCaching.setBounds(7, 51, 249, 20);
902
                        chkCaching.setText(PluginServices.getText(this, "refresh_capabilities"));
903
                        chkCaching.setToolTipText(PluginServices.getText(this, "refresh_capabilities_tooltip"));
904
                        chkCaching.setSelected(getWMSParamsPanel().isUpdatingCache());
905
                        chkCaching.addItemListener(new java.awt.event.ItemListener() {
906
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
907
                                        getWMSParamsPanel().setUpdatingCache(chkCaching.isSelected());
908
                                }
909
                        });
910
                        chkCaching.addActionListener(new java.awt.event.ActionListener() {
911
                                public void actionPerformed(java.awt.event.ActionEvent e) {
912
                                        fPrefs.putBoolean("refresh_capabilities", chkCaching.isSelected());
913
                                }
914
                        });
915

    
916
                }
917
                return chkCaching;
918
        }
919
        
920
        /**
921
         * This method initializes chkCaching
922
         *
923
         * @return javax.swing.JCheckBox
924
         */
925
        private JCheckBox getChkTileCache() {
926
                if (chkTileCache == null) {
927
                        chkTileCache = new JCheckBox();
928
                        chkTileCache.setBounds(7, 72, 249, 20);
929
                        chkTileCache.setText(PluginServices.getText(this, "tile_cache"));
930
                        chkTileCache.setToolTipText(PluginServices.getText(this, "tile_cache_tooltip"));
931
                        chkTileCache.setSelected(usingTileCache);
932
                        chkTileCache.addItemListener(new java.awt.event.ItemListener() {
933
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
934
                                        usingTileCache = chkTileCache.isSelected();
935
                                }
936
                        });
937
                        chkTileCache.addActionListener(new java.awt.event.ActionListener() {
938
                                public void actionPerformed(java.awt.event.ActionEvent e) {
939
                                        fPrefs.putBoolean("tile_cache", chkTileCache.isSelected());
940
                                }
941
                        });
942

    
943
                }
944
                return chkTileCache;
945
        }
946

    
947
        /**
948
         * This method initializes pnlName
949
         *
950
         * @return javax.swing.JPanel
951
         */
952
        private JPanel getPnlName() {
953
                if (pnlName == null) {
954
                        pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
955
                        pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
956
                        pnlName.add(getJLabel1(), null);
957
                        pnlName.add(getLblTitle(), null);
958
                }
959
                return pnlName;
960
        }
961

    
962
        @Override
963
        public DataStoreParameters[] getParameters() {
964
                // TODO Auto-generated method stub
965
                return null;
966
        }
967

    
968
        @Override
969
        public void close() {
970
                // Nothing to do
971
        }
972
}  //  @jve:decl-index=0:visual-constraint="10,10"