Statistics
| Revision:

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

History | View | Annotate | Download (32.4 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.RemoteWMSStyle;
80
import org.gvsig.raster.wms.io.WMSDataParameters;
81
import org.gvsig.raster.wms.io.WMSLayerNode;
82
import org.gvsig.raster.wms.io.WMSServerExplorer;
83
import org.gvsig.raster.wms.io.WMSServerExplorerParameters;
84
import org.gvsig.tools.ToolsLocator;
85
import org.gvsig.tools.persistence.PersistenceManager;
86
import org.gvsig.utils.swing.jcomboServer.JComboServer;
87
import org.gvsig.utils.swing.jcomboServer.ServerData;
88
import org.slf4j.Logger;
89
import org.slf4j.LoggerFactory;
90

    
91

    
92

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

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

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

    
174
                connected = true;
175
        }
176

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

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

    
222
        
223
        protected WMSParamsPanel getWMSParamsPanel() {
224
                if (wmsParamsPanel == null){
225
                        wmsParamsPanel = new WMSParamsPanel();
226
                        wmsParamsPanel.setListenerSupport(this.getWizardListenerSupport());
227
                        wmsParamsPanel.setBounds(0, 5, 510, 428);
228
                        wmsParamsPanel.getJTabbedPane().addMouseListener(
229
                                        new java.awt.event.MouseAdapter() {
230
                                                public void mouseClicked(java.awt.event.MouseEvent e) {
231
                                                        page = wmsParamsPanel.currentPage() + 1;
232
                                                        activarVisualizarBotones();
233
                                                }
234
                                        });
235
                }
236
                return wmsParamsPanel;
237
        }
238
        
239
        /**
240
         * This method checks for the options selected within the configuration
241
         * dialog are correct.
242
         *
243
         * @return true if you're done, false if not.
244
         */
245
        public boolean areSettingsValid() {
246
                return getWMSParamsPanel().isCorrectlyConfigured();
247
        }
248
        
249
        /**
250
         * Thread to connect to a WMS server
251
         * @author Nacho Brodin (nachobrodin@gmail.com)
252
         */
253
        public class ConnectThread extends Thread {
254
                private ICancellable             cancel      = null;
255
                private WMSServerExplorer        explorer    = null;
256
                private WMSWizard                wizard      = null;
257
                
258
                public ConnectThread(ICancellable cancel, WMSServerExplorer explorer, WMSWizard wizard) {
259
                        this.cancel = cancel;
260
                        this.explorer = explorer;
261
                        this.wizard = wizard;
262
                }
263
                
264
            public void run() {
265
                    if(!checkHostAndNetwork())
266
                            return;
267

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
591
                return btnCancel;
592
        }
593

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

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

    
614
                return jPanel;
615
        }
616

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

    
628
                return jLabel1;
629
        }
630

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

    
642
                return lblTitle;
643
        }
644

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

    
658
                return jScrollPane;
659
        }
660

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

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

    
688
                return panelPage1;
689
        }
690

    
691

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

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

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

    
797
                return jPanel1;
798
        }
799

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

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

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

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

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

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

    
871

    
872

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

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

    
900

    
901
        public void initWizard() {
902
        }
903

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

    
914
        }
915

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

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

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

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

    
948

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

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

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

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

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

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

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

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

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

    
1038
                }
1039
                return chkTileCache;
1040
        }
1041

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

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

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