Statistics
| Revision:

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

History | View | Annotate | Download (30 KB)

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

    
25
import java.awt.Component;
26
import java.awt.Dimension;
27
import java.awt.FlowLayout;
28
import java.awt.event.ActionEvent;
29
import java.awt.event.ActionListener;
30
import java.awt.geom.Rectangle2D;
31
import java.io.IOException;
32
import java.net.MalformedURLException;
33
import java.net.URL;
34
import java.util.Hashtable;
35
import java.util.Vector;
36
import java.util.prefs.Preferences;
37

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

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

    
83

    
84

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

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

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

    
160
                connected = true;
161
        }
162

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

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

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

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

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

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

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

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

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

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

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

    
455
                                for (int i=0 ; i<servers.length ; i++){
456
                                        persistence.addServerData(servers[i]);
457
                                }
458
                                persistence.setPersistent();
459
                        }
460

    
461
                        cmbHost.setServerList(servers);
462
                }
463

    
464
                return cmbHost;
465
        }
466

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

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

    
499
                return btnCancel;
500
        }
501

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

    
518
                        jPanel.add(getJScrollPane(), null);
519
                        jPanel.add(getPnlName(), null);
520
                }
521

    
522
                return jPanel;
523
        }
524

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

    
536
                return jLabel1;
537
        }
538

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

    
550
                return lblTitle;
551
        }
552

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

    
566
                return jScrollPane;
567
        }
568

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

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

    
596
                return panelPage1;
597
        }
598

    
599

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

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

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

    
705
                return jPanel1;
706
        }
707

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

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

    
733
        /**
734
         * DOCUMENT ME!
735
         *
736
         * @return DOCUMENT ME!
737
         */
738
        public String getSRS() {
739
                return getWMSParamsPanel().getSRS();
740
        }
741

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

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

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

    
779

    
780

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

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

    
808

    
809
        public void initWizard() {
810
        }
811

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

    
822
        }
823

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

    
833
        //gets all the layers available in the WMS
834
        public FLayer getAllLayers() throws LoadLayerException {
835
                return getWMSParamsPanel().getAllLayers();
836
        }
837

    
838
        public synchronized FLayer getLayer() throws InitializeException {
839
                return getWMSParamsPanel().getLayer(getChkTileCache().isSelected());
840
        }
841

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

    
856

    
857
        protected boolean isQueryable() {
858
                return explorer.isQueryable();
859
        }
860

    
861
        protected Dimension getFixedSize() {
862
                return getWMSParamsPanel().getFixedSize();
863
        }
864

    
865
        private Hashtable getOnlineResources() {
866
                return getWMSParamsPanel().getOnlineResources();
867
        }
868

    
869
        /**
870
         * @return
871
         */
872
        protected Vector getStyles() {
873
                return getWMSParamsPanel().getStyles();
874
        }
875

    
876
        protected Vector getDimensions() {
877
                return getWMSParamsPanel().getDimensions();
878
        }
879

    
880
        /**
881
         * @return
882
         */
883
        protected boolean getTransparency() {
884
                return getWMSParamsPanel().getTransparency();
885
        }
886

    
887
        /**
888
         * DOCUMENT ME!
889
         *
890
         * @return DOCUMENT ME!
891
         */
892
        public String getQueryableLayerQuery() {
893
                return getWMSParamsPanel().getQueryableLayerQuery();
894
        }
895

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

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

    
946
                }
947
                return chkTileCache;
948
        }
949

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

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

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