Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wms / branches / org.gvsig.raster.wms_dataaccess_refactoring / org.gvsig.raster.wms.app.wmsclient / src / main / java / org / gvsig / raster / wms / app / wmsclient / gui / wizard / WMSWizard.java @ 2317

History | View | Annotate | Download (32.3 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.FileOutputStream;
34
import java.io.IOException;
35
import java.net.MalformedURLException;
36
import java.net.URL;
37
import java.util.Hashtable;
38
import java.util.Properties;
39
import java.util.Vector;
40
import java.util.prefs.Preferences;
41

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

    
52
import org.cresques.cts.IProjection;
53
import org.gvsig.andami.Launcher;
54
import org.gvsig.andami.PluginServices;
55
import org.gvsig.andami.PluginsLocator;
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.DataStoreParameters;
67
import org.gvsig.fmap.dal.coverage.exception.ConnectException;
68
import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
69
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
70
import org.gvsig.fmap.dal.exception.InitializeException;
71
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
72
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
73
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
74
import org.gvsig.fmap.mapcontext.layers.FLayer;
75
import org.gvsig.gui.beans.Messages;
76
import org.gvsig.raster.cache.tile.TileCacheLibrary;
77
import org.gvsig.raster.util.CancelTaskImpl;
78
import org.gvsig.raster.wms.app.wmsclient.gui.panel.WMSParamsPanel;
79
import org.gvsig.raster.wms.io.WMSDataParameters;
80
import org.gvsig.raster.wms.io.WMSLayerNode;
81
import org.gvsig.raster.wms.io.WMSServerExplorer;
82
import org.gvsig.raster.wms.io.WMSServerExplorerParameters;
83
import org.gvsig.tools.ToolsLocator;
84
import org.gvsig.tools.persistence.PersistenceManager;
85
import org.gvsig.utils.swing.jcomboServer.JComboServer;
86
import org.gvsig.utils.swing.jcomboServer.ServerData;
87
import org.slf4j.Logger;
88
import org.slf4j.LoggerFactory;
89

    
90

    
91

    
92
/**
93
 * The WMS properties container panel.
94
 *
95
 * @author Jaume Dominguez Faus
96
 */
97
public class WMSWizard extends WizardPanel implements ActionListener {
98
        private static final long             serialVersionUID       = 1L;
99
        private static Logger                 logger                 = LoggerFactory.getLogger(WMSWizard.class);
100
        private String                        pluginName             = "org.gvsig.raster.wms.app.wmsclient";
101
        private File                          pluginPersistenceFile  = null;
102
        private File                          serverPropertiesFile   = null;
103
        private ServerDataPersistence         serverDataPersistence  = null;
104
        private String                        serversPropsFile       = "servers.properties";
105
        
106
        protected int                         page                   = 0;
107
        protected boolean                     connected              = false;
108
        private JComboServer                  cmbHost                = null;
109
        private JButton                       btnConnect             = null;
110
        private JButton                       btnCancel              = null;
111
        private JPanel                        jPanel                 = null;
112
        private JLabel                        jLabel1                = null;
113
        private JLabel                        lblTitle               = null;
114
        private JScrollPane                   jScrollPane            = null;
115
        private JTextArea                     txtAbstract            = null;
116
        private JPanel                        panelPage1             = null;
117
        private JButton                       btnSiguiente           = null;
118
        private JButton                       btnAnterior            = null;
119
        private JPanel                        jPanel1                = null;
120
        protected WizardListenerSupport       listenerSupport        = null;
121
        protected WMSParamsPanel              wmsParamsPanel         = null;
122
        protected JLabel                      lblServerType          = null;
123
        protected JLabel                      lblServerTypeValue     = null;
124
        private JCheckBox                     chkCaching             = null;
125
        private boolean                       usingTileCache         = fPrefs.getBoolean("tile_cache", false);
126
        private JCheckBox                     chkTileCache           = null;
127
        private static Preferences            fPrefs                 = Preferences.userRoot().node( "gvsig.wms-wizard" );
128
        protected int                         firstPage              = 0;
129
        private JPanel                        pnlName                = null;
130
        private IProjection                   proj                   = null;
131
        private ICancellable                  cancel                 = null;
132
        private WMSDataParameters             storeParams            = null;
133
        private WMSServerExplorer             explorer               = null;
134
        
135
        
136
        public WMSWizard (WMSParamsPanel params) {
137
                super();
138
                firstPage = 1;
139
                page = firstPage;
140
                this.wmsParamsPanel = params;
141
                this.explorer = wmsParamsPanel.getExplorer();
142

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

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

    
173
                connected = true;
174
        }
175

    
176
        /**
177
         * This is the default constructor
178
         */
179
        public WMSWizard() {
180
                super();
181
                firstPage = 0;
182
                page = firstPage;
183
                initialize();
184
                
185
                IWindow[] windows = PluginServices.getMDIManager().getAllWindows();
186
                for (int i = 0; i < windows.length; i++) {
187
                        if(windows[i] instanceof AbstractViewPanel)
188
                                proj = ((AbstractViewPanel)windows[i]).getProjection();
189
                }
190
                cancel = new CancelTaskImpl();
191
        }
192
        /**
193
         * This method initializes this
194
         */
195
        private void initialize() {
196
                setTabName("WMS");
197

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

    
221
        
222
        protected WMSParamsPanel getWMSParamsPanel() {
223
                if (wmsParamsPanel == null){
224
                        wmsParamsPanel = new WMSParamsPanel();
225
                        wmsParamsPanel.setListenerSupport(this.getWizardListenerSupport());
226
                        wmsParamsPanel.setBounds(0, 5, 510, 428);
227
                        wmsParamsPanel.getJTabbedPane().addMouseListener(
228
                                        new java.awt.event.MouseAdapter() {
229
                                                public void mouseClicked(java.awt.event.MouseEvent e) {
230
                                                        page = wmsParamsPanel.currentPage() + 1;
231
                                                        activarVisualizarBotones();
232
                                                }
233
                                        });
234
                }
235
                return wmsParamsPanel;
236
        }
237
        
238
        /**
239
         * This method checks for the options selected within the configuration
240
         * dialog are correct.
241
         *
242
         * @return true if you're done, false if not.
243
         */
244
        public boolean areSettingsValid() {
245
                return getWMSParamsPanel().isCorrectlyConfigured();
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
                    if(!checkHostAndNetwork())
265
                            return;
266

    
267
                    try {
268
                            explorer.connect(cancel, getWMSParamsPanel().isUpdatingCache());
269
                            saveServerListFromComboBox();
270
                    } catch (ConnectException e) {
271
                            String msg = e.getMessage() + " : " + getIOExceptionMessage(e);
272
                            if(msg != null) {
273
                                    LoggerFactory.getLogger(getClass()).info(msg, e);
274
                                    JOptionPane.showMessageDialog(getWMSParamsPanel(), msg, Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
275
                            } else
276
                                    LoggerFactory.getLogger(getClass()).info("RemoteServiceException", e);
277
                            return;
278
                    } finally {
279
                            ((CancelTaskImpl)cancel).setCanceled(false);
280
                    }
281
                        
282
                        DataStoreParameters parameters = explorer.getStoredParameters();
283
                        if(parameters instanceof WMSDataParameters) {
284
                                storeParams = (WMSDataParameters) parameters;
285
                        }
286
                        
287
                        if(parameters instanceof TileDataParameters) {
288
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
289
                                if(p instanceof WMSDataParameters)
290
                                        storeParams = (WMSDataParameters) p;
291
                        }
292
                        
293
                        wizard.rellenarControles();
294
            }
295
            
296
            /**
297
                 * Gets the <code>IOException</code> message. The message 
298
                 * of this exception is returned by the server
299
                 * @param e
300
                 * @return
301
                 */
302
                private String getIOExceptionMessage(Exception e) {
303
                        Throwable ex = e;
304
                        final int MAX_DEEP = 10;
305
                        int deep = 0;
306
                        while(deep < MAX_DEEP) {
307
                                Throwable t = null;
308
                                if(ex instanceof IOException) {
309
                                        return ex.getMessage();
310
                                } else if(ex instanceof RemoteServiceException) {
311
                                        t = ex.getCause();
312
                                }
313
                                if(t == null)
314
                                        return null;
315
                                else
316
                                        ex = t;
317
                                deep++;
318
                        }
319
                        return null;
320
                }
321
        }
322
        
323
        /**
324
         * Checks if the network and host are reachable
325
         * @return true if both are reachable and false if they are not
326
         */
327
        private boolean checkHostAndNetwork() {
328
                if(!explorer.isHostReachable()) {
329
                        JOptionPane.showMessageDialog(null, Messages.getText("host_unreachable"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
330
                        return false;
331
                }
332
                return true;
333
        }
334

    
335
        /**
336
         * DOCUMENT ME!
337
         */
338
        private void rellenarControles() {
339
                try {
340
                        //String host = cmbHost.getModel().getSelectedItem().toString();
341
                        
342
                        lblTitle.setText(explorer.getTitle());
343
                        lblServerTypeValue.setText(explorer.getServerType());
344
                        txtAbstract.setText(explorer.getAbstract());
345

    
346
                        getWMSParamsPanel().setWizardData(explorer);
347
                        connected = true;
348
                        activarVisualizarBotones();
349
                } catch (Exception e) {
350
                        if (e.getMessage()==null) {
351
                                txtAbstract.setText(PluginServices.getText(this,"error"));
352
                        } else {
353
                                txtAbstract.setText(e.getMessage());
354
                        }
355
                        getWizardListenerSupport().callError(e);
356
                        getBtnSiguiente().setEnabled(false);
357
                        getBtnAnterior().setEnabled(true);
358
                } finally {
359
                        getBtnCancel().setEnabled(false);
360
                }
361
        }
362
        
363
        public void actionPerformed(ActionEvent e) {
364
                if(e.getSource() == getBtnConnect()) {
365
                        getBtnCancel().setEnabled(true);
366
                        getTxtAbstract().setText("Trying to connect...");
367
                        String host = cmbHost.getModel().getSelectedItem().toString();
368
                        try {
369
                                DataManager datamanager = DALLocator.getDataManager();
370
                                WMSServerExplorerParameters explorerParams = (WMSServerExplorerParameters) datamanager.createServerExplorerParameters(WMSServerExplorer.NAME);
371
                                explorerParams.setHost(host);
372
                                
373
                                explorer = (WMSServerExplorer) datamanager.createServerExplorer(explorerParams);
374
                                
375
                                ((CancelTaskImpl)cancel).setCanceled(false);
376
                                new ConnectThread(cancel, explorer, this).start();
377
                                
378
                        } catch (InitializeException e1) {
379
                                getTxtAbstract().setText("Error creating WMS layer");
380
                        } catch (ProviderNotRegisteredException e1) {
381
                                getTxtAbstract().setText("Provider not registered. I cannot connect.");
382
                        } catch (ValidateDataParametersException e1) {
383
                                getTxtAbstract().setText("Parameters not valid. I cannot connect.");
384
                        }
385
                }
386
                
387
                if(e.getSource() == getBtnCancel()) {
388
                        getTxtAbstract().setText("Cancelled...");
389
                        ((CancelTaskImpl)cancel).setCanceled(true);
390
                        getBtnCancel().setEnabled(false);
391
                }
392
        }
393

    
394
        /**
395
         * DOCUMENT ME!
396
         */
397
        protected void activarVisualizarBotones() {
398
                if (page == firstPage) {
399
                        getBtnAnterior().setEnabled(false);
400
                        getBtnSiguiente().setVisible(true);
401

    
402
                        if (connected) {
403
                                getBtnSiguiente().setEnabled(true);
404
                        } else {
405
                                getBtnSiguiente().setEnabled(false);
406
                        }
407
                } else if (page < getWMSParamsPanel().getNumTabs()) {
408
                        getBtnSiguiente().setEnabled(true);
409
                        getBtnSiguiente().setVisible(true);
410
                        getBtnAnterior().setEnabled(true);
411
                        getBtnAnterior().setVisible(true);
412
                        if (getWMSParamsPanel().nextEnabledPage() == -1){
413
                                getBtnSiguiente().setEnabled(false);
414
                        }
415
                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
416
                } else if (page == getWMSParamsPanel().getNumTabs()) {
417
                        getBtnSiguiente().setVisible(false);
418
                        getBtnSiguiente().setEnabled(false);
419
                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
420
                }
421
        }
422

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

    
438
                return cmbHost;
439
        }
440
        
441
        /**
442
         * Gets the list of servers that have been persisted or added in the properties file
443
         * @return
444
         */
445
        private ServerDataPersistence getServerDataPersistence() {
446
                if(serverDataPersistence == null) {
447
                        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
448

    
449
                        //Lee los servidores de la persistencia
450
                        try {
451
                                FileInputStream is = new FileInputStream(getPluginPersistenceFile());
452
                                serverDataPersistence = (ServerDataPersistence) persistenceManager.getObject(is);
453
                        } catch (FileNotFoundException e) {
454
                                logger.info("Persistence file not found for WMS plugin", e);
455
                        }
456

    
457
                        if(serverDataPersistence == null)
458
                                serverDataPersistence = new ServerDataPersistence(ServerData.SERVER_TYPE_WMS);
459

    
460
                        //Lee los servidores del properties y los mezcla con los que hay en la persistencia
461
                        Properties prop = new Properties();
462
                        try {
463
                                prop.load(new FileInputStream(getServerPropertiesFile()));
464
                        } catch (FileNotFoundException e) {
465
                                logger.info("Properties file not found for WMS plugin", e);
466
                        } catch (IOException e) {
467
                                logger.info("Error reading properties file", e);
468
                        }
469

    
470
                        boolean newProjectServers = false;
471
                        for (int i = 0; i < prop.size(); i++) {
472
                                Object value = prop.get("server[" + i + "]");
473
                                if(!serverDataPersistence.existsServer(value.toString())) {
474
                                        serverDataPersistence.addServerData(new ServerData(value.toString(), ServerData.SERVER_TYPE_WMS));
475
                                        newProjectServers = true;
476
                                }
477
                        }
478

    
479
                        //Si hay servidores nuevos los persiste
480
                        if(newProjectServers) {
481
                                try {
482
                                        FileOutputStream os = new FileOutputStream(getPluginPersistenceFile());
483
                                        persistenceManager.putObject(os, serverDataPersistence);
484
                                } catch (FileNotFoundException e) {
485
                                        logger.info("Persistence file not found for WMS plugin", e);
486
                                }
487
                        }
488
                }
489

    
490
                return serverDataPersistence;
491
        }
492
        
493
        /**
494
         * Saves the list of server reading from the <code>ComboBox</code>
495
         */
496
        private void saveServerListFromComboBox() {
497
                PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
498
                ServerDataPersistence persistence = new ServerDataPersistence(ServerData.SERVER_TYPE_WMS);
499
                String urlSelected = getTxtHost().getModel().getSelectedItem().toString();
500
                
501
                boolean isSelectedInModel = false;
502
                for (int i = 0; i < getTxtHost().getItemCount(); i++) {
503
                        String url = getTxtHost().getItemAt(i).toString();
504
                        persistence.addServerData(new ServerData(url, ServerData.SERVER_TYPE_WMS));
505
                        if(url.equals(urlSelected))
506
                                isSelectedInModel = true;
507
                }
508
                
509
                if(!isSelectedInModel)
510
                        persistence.addServerData(new ServerData(urlSelected, ServerData.SERVER_TYPE_WMS));
511
                
512
                if(getServerDataPersistence().compareTo(persistence) != 0) {
513
                        try {
514
                                FileOutputStream os = new FileOutputStream(getPluginPersistenceFile());
515
                                persistenceManager.putObject(os, persistence);
516
                        } catch (FileNotFoundException e) {
517
                                logger.info("Persistence file not found for WMS plugin", e);
518
                        }
519
                }
520
        }
521
        
522
        /**
523
         * Gets the persistence file of this plugin
524
         * @return
525
         */
526
        private File getPluginPersistenceFile() {
527
                if(pluginPersistenceFile == null) {
528
                        File persistenceFolder = new File(Launcher.getAppHomeDir()
529
                                        + File.separator + "plugins" + File.separator + pluginName);
530
                        
531
                        if (!persistenceFolder.exists()) {
532
                                persistenceFolder.mkdirs();
533
                        }
534
                        
535
                        pluginPersistenceFile = new File(persistenceFolder.getAbsolutePath() + 
536
                                File.separator + 
537
                                "plugin-persistence.dat");
538
                }
539
                return pluginPersistenceFile;
540
        }
541
        
542
        /**
543
         * Gets the file which contains the default list of servers
544
         * @return
545
         */
546
        private File getServerPropertiesFile() {
547
                if(serverPropertiesFile == null) {
548
                        File pluginFolder = PluginsLocator.getManager().getPluginsFolder();
549
                        serverPropertiesFile = new File(pluginFolder.getAbsolutePath() + 
550
                                        File.separator + 
551
                                        pluginName + 
552
                                        File.separator + 
553
                                        serversPropsFile);
554
                }
555
                return serverPropertiesFile;
556
        }
557

    
558
        /**
559
         * This method initializes btnDetalles
560
         *
561
         * @return javax.swing.JButton
562
         */
563
        private JButton getBtnConnect() {
564
                if (btnConnect == null) {
565
                        btnConnect = new JButton();
566
                        btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
567
                        btnConnect.setBounds(262, 50, 100, 20);
568
                        btnConnect.setText(PluginServices.getText(this, "conectar"));
569
                        btnConnect.addActionListener(this);
570
                }
571

    
572
                return btnConnect;
573
        }
574
        
575
        /**
576
         * This method initializes btnDetalles
577
         *
578
         * @return javax.swing.JButton
579
         */
580
        private JButton getBtnCancel() {
581
                if (btnCancel == null) {
582
                        btnCancel = new JButton();
583
                        btnCancel.setEnabled(false);
584
                        btnCancel.setPreferredSize(new java.awt.Dimension(100, 20));
585
                        btnCancel.setBounds(366, 50, 100, 20);
586
                        btnCancel.setText(PluginServices.getText(this, "cancel"));
587
                        btnCancel.addActionListener(this);
588
                }
589

    
590
                return btnCancel;
591
        }
592

    
593
        /**
594
         * This method initializes jPanel
595
         *
596
         * @return javax.swing.JPanel
597
         */
598
        private javax.swing.JPanel getJPanel() {
599
                if (jPanel == null) {
600
                        jPanel = new javax.swing.JPanel();
601
                        jPanel.setLayout(null);
602
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
603
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
604
                                        null, PluginServices.getText(this, "description"),
605
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
606
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
607
                        jPanel.setBounds(2, 116, 477, 304);
608

    
609
                        jPanel.add(getJScrollPane(), null);
610
                        jPanel.add(getPnlName(), null);
611
                }
612

    
613
                return jPanel;
614
        }
615

    
616
        /**
617
         * This method initializes jLabel1
618
         *
619
         * @return javax.swing.JLabel
620
         */
621
        private javax.swing.JLabel getJLabel1() {
622
                if (jLabel1 == null) {
623
                        jLabel1 = new javax.swing.JLabel();
624
                        jLabel1.setText(PluginServices.getText(this, "name") + ":");
625
                }
626

    
627
                return jLabel1;
628
        }
629

    
630
        /**
631
         * This method initializes lblTitle
632
         *
633
         * @return javax.swing.JLabel
634
         */
635
        private javax.swing.JLabel getLblTitle() {
636
                if (lblTitle == null) {
637
                        lblTitle = new javax.swing.JLabel();
638
                        lblTitle.setText("-");
639
                }
640

    
641
                return lblTitle;
642
        }
643

    
644
        /**
645
         * This method initializes jScrollPane
646
         *
647
         * @return javax.swing.JScrollPane
648
         */
649
        private javax.swing.JScrollPane getJScrollPane() {
650
                if (jScrollPane == null) {
651
                        jScrollPane = new javax.swing.JScrollPane();
652
                        jScrollPane.setViewportView(getTxtAbstract());
653
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
654
                        jScrollPane.setBounds(10, 47, 457, 247);
655
                }
656

    
657
                return jScrollPane;
658
        }
659

    
660
        /**
661
         * This method initializes txtAbstract
662
         *
663
         * @return javax.swing.JTextArea
664
         */
665
        private javax.swing.JTextArea getTxtAbstract() {
666
                if (txtAbstract == null) {
667
                        txtAbstract = new javax.swing.JTextArea();
668
                        txtAbstract.setWrapStyleWord(true);
669
                        txtAbstract.setColumns(30);
670
                        txtAbstract.setLineWrap(true);
671
                }
672

    
673
                return txtAbstract;
674
        }
675
        
676
        private javax.swing.JPanel getPanelPage1() {
677
                if (panelPage1 == null) {
678
                        panelPage1 = new JPanel();
679
                        panelPage1.setLayout(null);
680
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
681
                        panelPage1.setVisible(true);
682
                        panelPage1.setBounds(15, 5, 480, 427);
683
                        panelPage1.add(getJPanel1(), null);
684
                        panelPage1.add(getJPanel(), null);
685
                }
686

    
687
                return panelPage1;
688
        }
689

    
690

    
691
        /**
692
         * This method initializes btnSiguiente
693
         *
694
         * @return javax.swing.JButton
695
         */
696
        private javax.swing.JButton getBtnSiguiente() {
697
                if (btnSiguiente == null) {
698
                        btnSiguiente = new JButton();
699
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
700
                        btnSiguiente.setBounds(395, 444, 100, 20);
701
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
702
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
703
                                public void actionPerformed(java.awt.event.ActionEvent e) {
704
                                        if(page == firstPage && getChkTileCache().isSelected()) {
705
                                                messageBoxInfo("remote_service_tiled", TileCacheLibrary.ALTERNATIVE_TILESIZE + "", this);
706
                                        }
707
                                        if (page > firstPage) {
708
                                                // si page es mayor que cero, vamos enfocando las
709
                                                // sucesivas SOLAPAS del WMSParamsPanel
710
                                                getWMSParamsPanel().avanzaTab();
711
                                                page = getWMSParamsPanel().currentPage();
712
                                        }
713
                                        page++;
714
                                        getPanelPage1().setVisible(false);
715
                                        getWMSParamsPanel().setVisible(true);
716
                                        activarVisualizarBotones();
717
                                }
718
                        });
719
                }
720
                return btnSiguiente;
721
        }
722
        
723
        /**
724
         * Shows an information dialog with a text and a accept button 
725
         * @param msg Message to show in the dialog
726
         * @param parentWindow Parent window
727
         */
728
        public static void messageBoxInfo(String msg, String fixedText, Object parentWindow){
729
                String string = PluginServices.getText(parentWindow, "accept");
730
                Object[] options = {string};
731
                JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
732
                                        "<html>" + PluginServices.getText(parentWindow, msg).replaceAll("\n", "<br>") + " " + fixedText + "</html>",
733
                                        PluginServices.getText(parentWindow, "confirmacion"),
734
                                        JOptionPane.OK_OPTION,
735
                                        JOptionPane.INFORMATION_MESSAGE,
736
                                        null,
737
                                        options,
738
                                        string);
739
        }
740

    
741
        /**
742
         * This method initializes btnAnterior
743
         *
744
         * @return javax.swing.JButton
745
         */
746
        private javax.swing.JButton getBtnAnterior() {
747
                if (btnAnterior == null) {
748
                        btnAnterior = new JButton();
749
                        btnAnterior.setBounds(292, 444, 100, 20);
750
                        btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
751
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
752
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
753
                                public void actionPerformed(java.awt.event.ActionEvent e) {
754
                                        page --;
755
                                        if (page > firstPage) {
756
                                                // Tenemos que retroceder en el wmsParamsPanel
757
                                                getWMSParamsPanel().retrocedeTab();
758
                                                page = getWMSParamsPanel().currentPage() + 1;
759
                                                activarVisualizarBotones();
760
                                        } else if (page==firstPage){
761
                                                activarVisualizarBotones();
762
                                                page = firstPage +1;
763
                                                //wmsParamsPanel.limpiaWizard();
764
                                                getLblTitle().setText("-");
765
                                                getTxtAbstract().setText("");
766
                                                getWMSParamsPanel().retrocedeTab();
767
                                                getPanelPage1().setVisible(true);
768
                                                getWMSParamsPanel().setVisible(false);
769
                                                getBtnSiguiente().setEnabled(false);
770
                                                connected = false;
771
                                        }
772
                                        getWizardListenerSupport().callStateChanged(getWMSParamsPanel().isCorrectlyConfigured());
773
                                }
774
                        });
775
                }
776

    
777
                return btnAnterior;
778
        }
779
        
780
        private javax.swing.JPanel getJPanel1() {
781
                if (jPanel1 == null) {
782
                        jPanel1 = new javax.swing.JPanel();
783
                        jPanel1.setLayout(null);
784
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
785
                                        null, PluginServices.getText(this, "server"),
786
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
787
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
788
                        jPanel1.setBounds(2, 5, 477, 105);
789
                        jPanel1.add(getTxtHost(), null);
790
                        jPanel1.add(getBtnConnect(), null);
791
                        jPanel1.add(getBtnCancel(), null);
792
                        jPanel1.add(getChkCaching(), null);
793
                        jPanel1.add(getChkTileCache(), null);
794
                }
795

    
796
                return jPanel1;
797
        }
798

    
799
        private WizardListenerSupport getWizardListenerSupport() {
800
                if(listenerSupport == null)
801
                        listenerSupport = new WizardListenerSupport();
802
                return listenerSupport;
803
        }
804
        
805
        /**
806
         * DOCUMENT ME!
807
         *
808
         * @param listener
809
         */
810
        public void addWizardListener(WizardListener listener) {
811
                getWizardListenerSupport().addWizardListener(listener);
812
                getWizardListenerSupport().callStateChanged(false);
813
        }
814

    
815
        /**
816
         * DOCUMENT ME!
817
         *
818
         * @param listener
819
         */
820
        public void removeWizardListener(WizardListener listener) {
821
                getWizardListenerSupport().removeWizardListener(listener);
822
        }
823

    
824
        /**
825
         * DOCUMENT ME!
826
         *
827
         * @return DOCUMENT ME!
828
         */
829
        public String getSRS() {
830
                return getWMSParamsPanel().getSRS();
831
        }
832

    
833
        /**
834
         * DOCUMENT ME!
835
         *
836
         * @return DOCUMENT ME!
837
         */
838
        public String getFormat() {
839
                return getWMSParamsPanel().getFormat();
840
        }
841
        
842
        /**
843
         * DOCUMENT ME!
844
         *
845
         * @return DOCUMENT ME!
846
         */
847
        public String getInfoFormat() {
848
                return getWMSParamsPanel().getInfoFormat();
849
        }
850

    
851
        /**
852
         * DOCUMENT ME!
853
         *
854
         * @return DOCUMENT ME!
855
         */
856
        public TreePath[] getSelectedLayers() {
857
                return getWMSParamsPanel().getSelectedLayers();
858
        }
859

    
860
        /**
861
         * DOCUMENT ME!
862
         *
863
         * @return DOCUMENT ME!
864
         * @throws ProjectionLayerException
865
         */
866
        /*public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
867
                return getWMSParamsPanel().getLayersRectangle();
868
        }*/
869

    
870

    
871

    
872
        /**
873
         * Devuelve el host que est� escrito en el cuadro de texto del host o null
874
         * en caso de que no haya nada escrito o est� mal escrito
875
         *
876
         * @return URL del host
877
         */
878
        public URL getHost() {
879
                try {
880
                        if ((cmbHost == null)|| (cmbHost.getModel().getSelectedItem() == null)) {
881
                                return new URL(explorer.getHost());
882
                        } else {
883
                                return new URL(cmbHost.getModel().getSelectedItem().toString());
884
                        }
885
                } catch (MalformedURLException e) {
886
                        return null;
887
                }
888
        }
889

    
890
        /**
891
         * DOCUMENT ME!
892
         *
893
         * @return Nombre de la capa que aparece en el TOC.
894
         */
895
        public String getLayerName() {
896
                return getWMSParamsPanel().getLayerName();
897
        }
898

    
899

    
900
        public void initWizard() {
901
        }
902

    
903
        public void execute() {
904
                try {
905
                        FLayer layer = this.getLayer();
906
                        if(layer == null)
907
                                return;
908
                        this.getMapCtrl().getMapContext().getLayers().addLayer(layer);
909
                } catch (InitializeException e) {
910
                        LoggerFactory.getLogger(getClass()).info(PluginServices.getText(this, "The layer cannot be added"), e);
911
                }
912

    
913
        }
914

    
915
        /**
916
         * DOCUMENT ME!
917
         *
918
         * @return DOCUMENT ME!
919
         */
920
        protected String getLayersQuery() {
921
                return getWMSParamsPanel().getLayersQuery();
922
        }
923

    
924
        //gets all the layers available in the WMS
925
        public FLayer getAllLayers() throws LoadLayerException {
926
                return getWMSParamsPanel().getAllLayers();
927
        }
928

    
929
        public synchronized FLayer getLayer() throws InitializeException {
930
                return getWMSParamsPanel().getLayer(getChkTileCache().isSelected());
931
        }
932

    
933
    protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node) {
934
                for (int i = 0; i < selection.length; i++) {
935
                        Object[] components = selection[i].getPath();
936
                        for (int j = 0; j < components.length ;j++) {
937
                                if (components[j] instanceof WMSLayerNode) {
938
                                        if (((WMSLayerNode)components[j]).getTitle().compareTo(node.getTitle()) == 0){
939
                                                return true;
940
                                        }
941
                                }
942
                        }
943
                }
944
                return false;
945
    }
946

    
947

    
948
        protected boolean isQueryable() {
949
                return explorer.isQueryable();
950
        }
951

    
952
        protected Dimension getFixedSize() {
953
                return getWMSParamsPanel().getFixedSize();
954
        }
955

    
956
        private Hashtable getOnlineResources() {
957
                return getWMSParamsPanel().getOnlineResources();
958
        }
959

    
960
        /**
961
         * @return
962
         */
963
        protected Vector getStyles() {
964
                return getWMSParamsPanel().getStyles();
965
        }
966

    
967
        protected Vector getDimensions() {
968
                return getWMSParamsPanel().getDimensions();
969
        }
970

    
971
        /**
972
         * @return
973
         */
974
        protected boolean getTransparency() {
975
                return getWMSParamsPanel().getTransparency();
976
        }
977

    
978
        /**
979
         * DOCUMENT ME!
980
         *
981
         * @return DOCUMENT ME!
982
         */
983
        public String getQueryableLayerQuery() {
984
                return getWMSParamsPanel().getQueryableLayerQuery();
985
        }
986

    
987
        /**
988
         * This method initializes chkCaching
989
         *
990
         * @return javax.swing.JCheckBox
991
         */
992
        private JCheckBox getChkCaching() {
993
                if (chkCaching == null) {
994
                        chkCaching = new JCheckBox();
995
                        chkCaching.setBounds(7, 51, 249, 20);
996
                        chkCaching.setText(PluginServices.getText(this, "refresh_capabilities"));
997
                        chkCaching.setToolTipText(PluginServices.getText(this, "refresh_capabilities_tooltip"));
998
                        chkCaching.setSelected(getWMSParamsPanel().isUpdatingCache());
999
                        chkCaching.addItemListener(new java.awt.event.ItemListener() {
1000
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1001
                                        getWMSParamsPanel().setUpdatingCache(chkCaching.isSelected());
1002
                                }
1003
                        });
1004
                        chkCaching.addActionListener(new java.awt.event.ActionListener() {
1005
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1006
                                        fPrefs.putBoolean("refresh_capabilities", chkCaching.isSelected());
1007
                                }
1008
                        });
1009

    
1010
                }
1011
                return chkCaching;
1012
        }
1013
        
1014
        /**
1015
         * This method initializes chkCaching
1016
         *
1017
         * @return javax.swing.JCheckBox
1018
         */
1019
        private JCheckBox getChkTileCache() {
1020
                if (chkTileCache == null) {
1021
                        chkTileCache = new JCheckBox();
1022
                        chkTileCache.setBounds(7, 72, 249, 20);
1023
                        chkTileCache.setText(PluginServices.getText(this, "tile_cache"));
1024
                        chkTileCache.setToolTipText(PluginServices.getText(this, "tile_cache_tooltip"));
1025
                        chkTileCache.setSelected(usingTileCache);
1026
                        chkTileCache.addItemListener(new java.awt.event.ItemListener() {
1027
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1028
                                        usingTileCache = chkTileCache.isSelected();
1029
                                }
1030
                        });
1031
                        chkTileCache.addActionListener(new java.awt.event.ActionListener() {
1032
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1033
                                        fPrefs.putBoolean("tile_cache", chkTileCache.isSelected());
1034
                                }
1035
                        });
1036

    
1037
                }
1038
                return chkTileCache;
1039
        }
1040

    
1041
        /**
1042
         * This method initializes pnlName
1043
         *
1044
         * @return javax.swing.JPanel
1045
         */
1046
        private JPanel getPnlName() {
1047
                if (pnlName == null) {
1048
                        pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
1049
                        pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
1050
                        pnlName.add(getJLabel1(), null);
1051
                        pnlName.add(getLblTitle(), null);
1052
                }
1053
                return pnlName;
1054
        }
1055

    
1056
        @Override
1057
        public DataStoreParameters[] getParameters() {
1058
                // TODO Auto-generated method stub
1059
                return null;
1060
        }
1061

    
1062
        @Override
1063
        public void close() {
1064
                // Nothing to do
1065
        }
1066
}  //  @jve:decl-index=0:visual-constraint="10,10"