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 @ 1132

History | View | Annotate | Download (31.8 KB)

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

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

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

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

    
82

    
83

    
84
/**
85
 * The WMS properties container panel.
86
 *
87
 * @author Jaume Dominguez Faus
88
 */
89
public class WMSWizard extends WizardPanel implements ActionListener {
90
        private static final long             serialVersionUID   = 1L;
91
        //private static Logger               logger             = Logger.getLogger(WMSWizard.class.getName());
92
        protected int                         page               = 0;
93
        protected boolean                     connected          = false;
94
        private JComboServer                  cmbHost            = null;
95
        private JButton                       btnConnect         = null;
96
        private JButton                       btnCancel          = null;
97
        private JPanel                        jPanel             = null;
98
        private JLabel                        jLabel1            = null;
99
        private JLabel                        lblTitle           = null;
100
        private JScrollPane                   jScrollPane        = null;
101
        private JTextArea                     txtAbstract        = null;
102
        private JPanel                        panelPage1         = null;
103
        private JButton                       btnSiguiente       = null;
104
        private JButton                       btnAnterior        = null;
105
        private JPanel                        jPanel1            = null;
106
        protected WizardListenerSupport       listenerSupport    = null;
107
        protected WMSParamsPanel              wmsParamsPanel     = null;
108
        protected JLabel                      lblServerType      = null;
109
        protected JLabel                      lblServerTypeValue = null;
110
        private JCheckBox                     chkCaching         = null;
111
        private boolean                       usingTileCache     = fPrefs.getBoolean("tile_cache", true);
112
        private JCheckBox                     chkTileCache       = null;
113
        private static Preferences            fPrefs             = Preferences.userRoot().node( "gvsig.wms-wizard" );
114
        private boolean                       refreshing         = fPrefs.getBoolean("refresh_capabilities", false);
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
                getPanelPage2().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(getPanelPage2(), 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 JPanel getPanelPage2(){
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 wmsParamsPanel.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);
266
                        } catch (RemoteServiceException e) {
267
                                LoggerFactory.getLogger(getClass()).debug(PluginServices.getText(this, "The layer cannot be added"), e);
268
                                JOptionPane.showMessageDialog(wmsParamsPanel, "The layer cannot be added");
269
                                return;
270
                        } finally {
271
                                ((CancelTaskImpl)cancel).setCanceled(false);
272
                        }
273
                        
274
                        DataStoreParameters parameters = explorer.getStoreParameters();
275
                        if(parameters instanceof WMSDataParameters) {
276
                                storeParams = (WMSDataParameters) parameters;
277
                        }
278
                        
279
                        if(parameters instanceof TileDataParameters) {
280
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
281
                                if(p instanceof WMSDataParameters)
282
                                        storeParams = (WMSDataParameters) p;
283
                        }
284
                        
285
                        wizard.rellenarControles();
286
            }
287
        }
288

    
289
        /**
290
         * DOCUMENT ME!
291
         */
292
        private void rellenarControles() {
293
                try {
294
                        String host = cmbHost.getModel().getSelectedItem().toString();
295
                        
296
                        lblTitle.setText(explorer.getTitle());
297
                        lblServerTypeValue.setText(explorer.getServerType());
298
                        txtAbstract.setText(explorer.getAbstract());
299

    
300
                        addHost(host);
301
                        wmsParamsPanel.setWizardData(explorer);
302
                        connected = true;
303
                        activarVisualizarBotones();
304
                } catch (Exception e) {
305
                        if (e.getMessage()==null) {
306
                                txtAbstract.setText(PluginServices.getText(this,"error"));
307
                        } else {
308
                                txtAbstract.setText(e.getMessage());
309
                        }
310
                        getWizardListenerSupport().callError(e);
311
                        getBtnSiguiente().setEnabled(false);
312
                        getBtnAnterior().setEnabled(true);
313
                } finally {
314
                        getBtnCancel().setEnabled(false);
315
                }
316
        }
317
        
318
        public void actionPerformed(ActionEvent e) {
319
                if(e.getSource() == getBtnConnect()) {
320
                        getBtnCancel().setEnabled(true);
321
                        getTxtAbstract().setText("Trying to connect...");
322
                        String host = cmbHost.getModel().getSelectedItem().toString();
323
                        try {
324
                                DataManager datamanager = DALLocator.getDataManager();
325
                                WMSServerExplorerParameters explorerParams = (WMSServerExplorerParameters) datamanager.createServerExplorerParameters(WMSServerExplorer.NAME);
326
                                explorerParams.setHost(host);
327
                                
328
                                explorer = (WMSServerExplorer) datamanager.createServerExplorer(explorerParams);
329
                                
330
                                ((CancelTaskImpl)cancel).setCanceled(false);
331
                                new ConnectThread(cancel, explorer, this).start();
332
                                
333
                        } catch (InitializeException e1) {
334
                                getTxtAbstract().setText("Error creating WMS layer");
335
                        } catch (ProviderNotRegisteredException e1) {
336
                                getTxtAbstract().setText("Provider not registered. I cannot connect.");
337
                        } catch (ValidateDataParametersException e1) {
338
                                getTxtAbstract().setText("Parameters not valid. I cannot connect.");
339
                        }
340
                }
341
                
342
                if(e.getSource() == getBtnCancel()) {
343
                        getTxtAbstract().setText("Cancelled...");
344
                        ((CancelTaskImpl)cancel).setCanceled(true);
345
                        getBtnCancel().setEnabled(false);
346
                }
347
        }
348

    
349
        /**
350
         * DOCUMENT ME!
351
         */
352
        protected void activarVisualizarBotones() {
353
                if (page == firstPage) {
354
                        getBtnAnterior().setEnabled(false);
355
                        getBtnSiguiente().setVisible(true);
356

    
357
                        if (connected) {
358
                                getBtnSiguiente().setEnabled(true);
359
                        } else {
360
                                getBtnSiguiente().setEnabled(false);
361
                        }
362
                } else if (page < wmsParamsPanel.getNumTabs()) {
363
                        getBtnSiguiente().setEnabled(true);
364
                        getBtnSiguiente().setVisible(true);
365
                        getBtnAnterior().setEnabled(true);
366
                        getBtnAnterior().setVisible(true);
367
                        if (wmsParamsPanel.nextEnabledPage()==-1){
368
                                getBtnSiguiente().setEnabled(false);
369
                        }
370
                        getWizardListenerSupport().callStateChanged(wmsParamsPanel.isCorrectlyConfigured());
371
                } else if (page == wmsParamsPanel.getNumTabs()) {
372
                        getBtnSiguiente().setVisible(false);
373
                        getBtnSiguiente().setEnabled(false);
374
                        getWizardListenerSupport().callStateChanged(wmsParamsPanel
375
                                        .isCorrectlyConfigured());
376
                }
377
        }
378

    
379
        /**
380
         * This method initializes txtHost
381
         *
382
         * @return javax.swing.JTextField
383
         */
384
        private javax.swing.JComboBox getTxtHost() {
385
                if (cmbHost == null) {
386
                        cmbHost = new JComboServer();
387
                        cmbHost.setModel(new DefaultComboBoxModel());
388
                        cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
389
                        cmbHost.setBounds(11, 26, 454, 20);
390
                        cmbHost.setEditable(true);
391

    
392
                        ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WMS);
393
                        ServerData[] servers = persistence.getArrayOfServerData();
394

    
395
                        if (servers.length == 0){
396
                                PluginServices ps = PluginServices.getPluginServices(this);
397
                                XMLEntity xml = ps.getPersistentXML();
398
                                try {
399
                                        String[] oldServers = xml.getStringArrayProperty("wms-servers");
400
                                        servers = new ServerData[oldServers.length];
401
                                        for (int i=0; i<oldServers.length; i++) {
402
                                                servers[i] = new ServerData(oldServers[i],ServerData.SERVER_TYPE_WMS);
403
                                        }
404
                                        xml.remove("wms-servers");
405
                                        ps.setPersistentXML(xml);
406
                                } catch (NotExistInXMLEntity e) {
407
                                        // Old servers doesn't exist
408
                                        servers = new ServerData[12];
409
                                        servers[0] = new ServerData("http://www.ign.es/wms-inspire/ign-base",ServerData.SERVER_TYPE_WMS);
410
                                        servers[1] = new ServerData("http://wms.jpl.nasa.gov/wms.cgi",ServerData.SERVER_TYPE_WMS);
411
                                        servers[2] = new ServerData("http://www2.dmsolutions.ca/cgi-bin/mswms_gmap?",ServerData.SERVER_TYPE_WMS);
412
                                        servers[3] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_patricova",ServerData.SERVER_TYPE_WMS);
413
                                        servers[4] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_parque_fondo_prug",ServerData.SERVER_TYPE_WMS);
414
                                        servers[5] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_pgof",ServerData.SERVER_TYPE_WMS);
415
                                        servers[6] = new ServerData("http://orto.cth.gva.es/wmsconnector/com.esri.wms.Esrimap/wms_urbanismo_tematicos",ServerData.SERVER_TYPE_WMS);
416
                                        servers[7] = new ServerData("http://onearth.jpl.nasa.gov/wms.cgi",ServerData.SERVER_TYPE_WMS);
417
                                        servers[8] = new ServerData("http://www.demis.nl/wms/wms.asp?WMS=WorldMap",ServerData.SERVER_TYPE_WMS);
418
                                        servers[9] = new ServerData("http://aes.gsfc.nasa.gov/cgi-bin/wms",ServerData.SERVER_TYPE_WMS);
419
                                        servers[10] = new ServerData("http://mapas.euitto.upm.es/cgi-bin/cnauticas",ServerData.SERVER_TYPE_WMS);
420
                                        servers[11] = new ServerData("http://ovc.catastro.meh.es/Cartografia/WMS/ServidorWMS.aspx", ServerData.SERVER_TYPE_WMS);
421
                                }
422

    
423
                                for (int i=0 ; i<servers.length ; i++){
424
                                        persistence.addServerData(servers[i]);
425
                                }
426
                                persistence.setPersistent();
427
                        }
428

    
429
                        cmbHost.setServerList(servers);
430
                }
431

    
432
                return cmbHost;
433
        }
434

    
435
        /**
436
         * This method initializes btnDetalles
437
         *
438
         * @return javax.swing.JButton
439
         */
440
        private JButton getBtnConnect() {
441
                if (btnConnect == null) {
442
                        btnConnect = new JButton();
443
                        btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
444
                        btnConnect.setBounds(262, 50, 100, 20);
445
                        btnConnect.setText(PluginServices.getText(this, "conectar"));
446
                        btnConnect.addActionListener(this);
447
                }
448

    
449
                return btnConnect;
450
        }
451
        
452
        /**
453
         * This method initializes btnDetalles
454
         *
455
         * @return javax.swing.JButton
456
         */
457
        private JButton getBtnCancel() {
458
                if (btnCancel == null) {
459
                        btnCancel = new JButton();
460
                        btnCancel.setEnabled(false);
461
                        btnCancel.setPreferredSize(new java.awt.Dimension(100, 20));
462
                        btnCancel.setBounds(366, 50, 100, 20);
463
                        btnCancel.setText(PluginServices.getText(this, "cancel"));
464
                        btnCancel.addActionListener(this);
465
                }
466

    
467
                return btnCancel;
468
        }
469

    
470
        /**
471
         * This method initializes jPanel
472
         *
473
         * @return javax.swing.JPanel
474
         */
475
        private javax.swing.JPanel getJPanel() {
476
                if (jPanel == null) {
477
                        jPanel = new javax.swing.JPanel();
478
                        jPanel.setLayout(null);
479
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
480
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
481
                                        null, PluginServices.getText(this, "description"),
482
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
483
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
484
                        jPanel.setBounds(2, 116, 477, 304);
485

    
486
                        jPanel.add(getJScrollPane(), null);
487
                        jPanel.add(getPnlName(), null);
488
                }
489

    
490
                return jPanel;
491
        }
492

    
493
        /**
494
         * This method initializes jLabel1
495
         *
496
         * @return javax.swing.JLabel
497
         */
498
        private javax.swing.JLabel getJLabel1() {
499
                if (jLabel1 == null) {
500
                        jLabel1 = new javax.swing.JLabel();
501
                        jLabel1.setText(PluginServices.getText(this, "name") + ":");
502
                }
503

    
504
                return jLabel1;
505
        }
506

    
507
        /**
508
         * This method initializes lblTitle
509
         *
510
         * @return javax.swing.JLabel
511
         */
512
        private javax.swing.JLabel getLblTitle() {
513
                if (lblTitle == null) {
514
                        lblTitle = new javax.swing.JLabel();
515
                        lblTitle.setText("-");
516
                }
517

    
518
                return lblTitle;
519
        }
520

    
521
        /**
522
         * This method initializes jScrollPane
523
         *
524
         * @return javax.swing.JScrollPane
525
         */
526
        private javax.swing.JScrollPane getJScrollPane() {
527
                if (jScrollPane == null) {
528
                        jScrollPane = new javax.swing.JScrollPane();
529
                        jScrollPane.setViewportView(getTxtAbstract());
530
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
531
                        jScrollPane.setBounds(10, 47, 457, 247);
532
                }
533

    
534
                return jScrollPane;
535
        }
536

    
537
        /**
538
         * This method initializes txtAbstract
539
         *
540
         * @return javax.swing.JTextArea
541
         */
542
        private javax.swing.JTextArea getTxtAbstract() {
543
                if (txtAbstract == null) {
544
                        txtAbstract = new javax.swing.JTextArea();
545
                        txtAbstract.setWrapStyleWord(true);
546
                        txtAbstract.setColumns(30);
547
                        txtAbstract.setLineWrap(true);
548
                }
549

    
550
                return txtAbstract;
551
        }
552
        
553
        private javax.swing.JPanel getPanelPage1() {
554
                if (panelPage1 == null) {
555
                        panelPage1 = new JPanel();
556
                        panelPage1.setLayout(null);
557
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
558
                        panelPage1.setVisible(true);
559
                        panelPage1.setBounds(15, 5, 480, 427);
560
                        panelPage1.add(getJPanel1(), null);
561
                        panelPage1.add(getJPanel(), null);
562
                }
563

    
564
                return panelPage1;
565
        }
566

    
567

    
568
        /**
569
         * This method initializes btnSiguiente
570
         *
571
         * @return javax.swing.JButton
572
         */
573
        private javax.swing.JButton getBtnSiguiente() {
574
                if (btnSiguiente == null) {
575
                        btnSiguiente = new JButton();
576
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
577
                        btnSiguiente.setBounds(395, 444, 100, 20);
578
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
579
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
580
                                public void actionPerformed(java.awt.event.ActionEvent e) {
581
                                        if (page > firstPage) {
582
                                                // si page es mayor que cero, vamos enfocando las
583
                                                // sucesivas SOLAPAS del WMSParamsPanel
584
                                                wmsParamsPanel.avanzaTab();
585
                                                page = wmsParamsPanel.currentPage();
586
                                        }
587
                                        page++;
588
                                        getPanelPage1().setVisible(false);
589
                                        getPanelPage2().setVisible(true);
590
                                        activarVisualizarBotones();
591
                                }
592
                        });
593
                }
594
                return btnSiguiente;
595
        }
596

    
597
        /**
598
         * This method initializes btnAnterior
599
         *
600
         * @return javax.swing.JButton
601
         */
602
        private javax.swing.JButton getBtnAnterior() {
603
                if (btnAnterior == null) {
604
                        btnAnterior = new JButton();
605
                        btnAnterior.setBounds(292, 444, 100, 20);
606
                        btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
607
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
608
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
609
                                public void actionPerformed(java.awt.event.ActionEvent e) {
610
                                        page --;
611
                                        if (page > firstPage) {
612
                                                // Tenemos que retroceder en el wmsParamsPanel
613
                                                wmsParamsPanel.retrocedeTab();
614
                                                page = wmsParamsPanel.currentPage() + 1;
615
                                                activarVisualizarBotones();
616
                                        } else if (page==firstPage){
617
                                                activarVisualizarBotones();
618
                                                page = firstPage +1;
619
                                                //wmsParamsPanel.limpiaWizard();
620
                                                getLblTitle().setText("-");
621
                                                getTxtAbstract().setText("");
622
                                                wmsParamsPanel.retrocedeTab();
623
                                                getPanelPage1().setVisible(true);
624
                                                getPanelPage2().setVisible(false);
625
                                                getBtnSiguiente().setEnabled(false);
626
                                                connected = false;
627
                                        }
628
                                        getWizardListenerSupport().callStateChanged(wmsParamsPanel.isCorrectlyConfigured());
629
                                }
630
                        });
631
                }
632

    
633
                return btnAnterior;
634
        }
635
        
636
        private javax.swing.JPanel getJPanel1() {
637
                if (jPanel1 == null) {
638
                        jPanel1 = new javax.swing.JPanel();
639
                        jPanel1.setLayout(null);
640
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
641
                                        null, PluginServices.getText(this, "server"),
642
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
643
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
644
                        jPanel1.setBounds(2, 5, 477, 105);
645
                        jPanel1.add(getTxtHost(), null);
646
                        jPanel1.add(getBtnConnect(), null);
647
                        jPanel1.add(getBtnCancel(), null);
648
                        jPanel1.add(getChkCaching(), null);
649
                        jPanel1.add(getChkTileCache(), null);
650
                }
651

    
652
                return jPanel1;
653
        }
654

    
655
        private WizardListenerSupport getWizardListenerSupport() {
656
                if(listenerSupport == null)
657
                        listenerSupport = new WizardListenerSupport();
658
                return listenerSupport;
659
        }
660
        
661
        /**
662
         * DOCUMENT ME!
663
         *
664
         * @param listener
665
         */
666
        public void addWizardListener(WizardListener listener) {
667
                getWizardListenerSupport().addWizardListener(listener);
668
                getWizardListenerSupport().callStateChanged(false);
669
        }
670

    
671
        /**
672
         * DOCUMENT ME!
673
         *
674
         * @param listener
675
         */
676
        public void removeWizardListener(WizardListener listener) {
677
                getWizardListenerSupport().removeWizardListener(listener);
678
        }
679

    
680
        /**
681
         * DOCUMENT ME!
682
         *
683
         * @return DOCUMENT ME!
684
         */
685
        public String getSRS() {
686
                return wmsParamsPanel.getSRS();
687
        }
688

    
689
        /**
690
         * DOCUMENT ME!
691
         *
692
         * @return DOCUMENT ME!
693
         */
694
        public String getFormat() {
695
                return wmsParamsPanel.getFormat();
696
        }
697

    
698
        /**
699
         * DOCUMENT ME!
700
         *
701
         * @return DOCUMENT ME!
702
         */
703
        public TreePath[] getSelectedLayers() {
704
                return wmsParamsPanel.getSelectedLayers();
705
        }
706

    
707
        /**
708
         * DOCUMENT ME!
709
         *
710
         * @return DOCUMENT ME!
711
         * @throws ProjectionLayerException
712
         */
713
        public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
714
                return wmsParamsPanel.getLayersRectangle();
715
        }
716

    
717

    
718

    
719
        /**
720
         * Devuelve el host que est๏ฟฝ escrito en el cuadro de texto del host o null
721
         * en caso de que no haya nada escrito o est๏ฟฝ mal escrito
722
         *
723
         * @return URL del host
724
         */
725
        public URL getHost() {
726
                try {
727
                        if ((cmbHost == null)|| (cmbHost.getModel().getSelectedItem() == null)) {
728
                                return new URL(explorer.getHost());
729
                        } else {
730
                                return new URL(cmbHost.getModel().getSelectedItem().toString());
731
                        }
732
                } catch (MalformedURLException e) {
733
                        return null;
734
                }
735
        }
736

    
737
        /**
738
         * DOCUMENT ME!
739
         *
740
         * @return Nombre de la capa que aparece en el TOC.
741
         */
742
        public String getLayerName() {
743
                return wmsParamsPanel.getLayerName();
744
        }
745

    
746

    
747
        public void initWizard() {
748
        }
749

    
750
        public void execute() {
751
                try {
752
                        FLayer layer = this.getLayer();
753
                        this.getMapCtrl().getMapContext().getLayers().addLayer(layer);
754
                } catch (LoadLayerException e) {
755
                        LoggerFactory.getLogger(getClass()).debug(PluginServices.getText(this, "The layer cannot be added"), e);
756
                        JOptionPane.showMessageDialog(this, "The layer cannot be added");
757
                }
758

    
759
        }
760

    
761
        /**
762
         * DOCUMENT ME!
763
         *
764
         * @return DOCUMENT ME!
765
         */
766
        protected String getLayersQuery() {
767
                return wmsParamsPanel.getLayersQuery();
768
        }
769

    
770
        //gets all the layers available in the WMS
771
        public FLayer getAllLayers() throws LoadLayerException {
772
                return wmsParamsPanel.getAllLayers();
773
        }
774

    
775
        public synchronized FLayer getLayer() throws LoadLayerException {
776
                return wmsParamsPanel.getLayer(getChkTileCache().isSelected());
777
        }
778

    
779
        /**
780
         * If user does not select the chekbox Disagregate layers, will get the layer tree in WMS
781
         * @return
782
         * @throws LoadLayerException 
783
         */
784
    @SuppressWarnings("unchecked")
785
        protected FLayer getLayerTree() throws LoadLayerException {
786
        LayerTree layerTree = wmsParamsPanel.getLayerStructure();
787
                TreePath[] selection = (TreePath[])wmsParamsPanel.getSelectedPaths().toArray(new TreePath[0]);//layerTree.getSelectionPaths();
788
                if (selection != null) {
789
                        return getSubTree((WMSLayerNode)layerTree.getModel().getRoot(), selection);
790
                }
791
                return null;
792
    }
793

    
794
    protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node) {
795
                for (int i = 0; i < selection.length; i++) {
796
                        Object[] components = selection[i].getPath();
797
                        for (int j = 0; j < components.length ;j++) {
798
                                if (components[j] instanceof WMSLayerNode) {
799
                                        if (((WMSLayerNode)components[j]).getTitle().compareTo(node.getTitle()) == 0){
800
                                                return true;
801
                                        }
802
                                }
803
                        }
804
                }
805
                return false;
806
    }
807

    
808
    /**
809
     * @deprecated
810
     * @param node
811
     * @param selection
812
     * @return
813
     */
814
        @SuppressWarnings("unchecked")
815
        protected FLayer getSubTree(WMSLayerNode node, TreePath[] selection) throws LoadLayerException {
816
                if (node.getChildren().size() > 0) {
817
                //com.iver.cit.gvsig.gui.View v = (com.iver.cit.gvsig.gui.View) PluginServices.getMDIManager().getActiveView();
818
                FLayers l = new FLayers();
819
                l.setMapContext(this.getMapCtrl().getMapContext());
820
                l.setName(node.getTitle());
821
                        for(int i = 0; i < node.getChildren().size(); i++ ) {
822
                                if (nodeSelected(selection, (WMSLayerNode)(node.getChildren().get(i))))
823
                                {
824
                                        FLayer lyr = getSubTree((WMSLayerNode)node.getChildren().get(i), selection);
825
                                        if(lyr != null){
826
                                                l.addLayer(lyr);
827
                                        }
828
                                }
829
                        }
830
                        return l;
831
                } else {
832
                        if (nodeSelected(selection, node)) {
833
                                DataStoreParameters parameters = explorer.getStoreParameters();
834
                                WMSDataParameters par = null;
835
                                if(parameters instanceof WMSDataParameters) {
836
                                        par = (WMSDataParameters) parameters;
837
                                }
838
                                par.setFormat(getFormat());
839
                                par.setLayerQuery(node.getName());
840
                                par.setInfoLayerQuery(getQueryableLayerQuery());
841
                                par.setSRS(getSRS());
842
                                par.setName(node.getTitle());
843
                                par.setWmsTransparency(getTransparency());
844
                                par.setStyles(getStyles());
845
                                par.setDimensions(getDimensions());
846
                                par.setOnlineResources(getOnlineResources());
847
                                par.setFixedSize(getFixedSize());
848
                                par.setQueryable(node.isQueryable());
849
                                par.setURI(getHost().getPath());
850
                                
851
                                FLyrWMS layer = new FLyrWMS();
852
                                try {
853
                                        layer.setParameters(par);
854
                                        layer.setExplorer(explorer);
855
                                        layer.setFullExtent(getLayersRectangle());
856
                                } catch (InitializeException e) {
857
                                        throw new LoadLayerException("Error initializating layer", e);
858
                                }
859
                        return layer;
860

    
861
                        } else {
862
                                return null;
863
                        }
864
                }
865
        }
866

    
867
        /**
868
         * @deprecated
869
         * If user selects the chekbox Disagregate layers, will get the selected layers rendered in one
870
         * the tree structure in WMS will be lost.
871
         * @return
872
         */
873
    protected FLayer getLayerPlain() throws LoadLayerException {
874
            DataStoreParameters parameters = explorer.getStoreParameters();
875
                WMSDataParameters par = null;
876
                if(parameters instanceof WMSDataParameters) {
877
                        par = (WMSDataParameters) parameters;
878
                }
879
                if(parameters instanceof TileDataParameters) {
880
                        DataParameters p = ((TileDataParameters) parameters).getDataParameters();
881
                        if(p instanceof WMSDataParameters)
882
                                par = (WMSDataParameters) p;
883
                }
884
                par.setFormat(getFormat());
885
                par.setLayerQuery(getLayersQuery());
886
                par.setInfoLayerQuery(getQueryableLayerQuery());
887
                par.setSRS(getSRS());
888
                par.setName(getLayerName());
889
                par.setWmsTransparency(getTransparency());
890
                par.setStyles(getStyles());
891
                par.setDimensions(getDimensions());
892
                par.setOnlineResources(getOnlineResources());
893
                par.setFixedSize(getFixedSize());
894
                par.setQueryable(isQueryable());
895
                par.setURI(getHost().getPath());
896
                
897
        FLyrWMS layer = new FLyrWMS();
898
        try {
899
                layer.setParameters(par);
900
                layer.setExplorer(explorer);
901
                layer.setFullExtent(getLayersRectangle());
902
        } catch (InitializeException e) {
903
                throw new LoadLayerException("Error initializating layer", e);
904
                }
905
        return layer;
906
    }
907

    
908
        protected boolean isQueryable() {
909
                return explorer.isQueryable();
910
        }
911

    
912
        protected Dimension getFixedSize() {
913
                return wmsParamsPanel.getFixedSize();
914
        }
915

    
916
        private Hashtable getOnlineResources() {
917
                return wmsParamsPanel.getOnlineResources();
918
        }
919

    
920
        /**
921
         * @return
922
         */
923
        protected Vector getStyles() {
924
                return wmsParamsPanel.getStyles();
925
        }
926

    
927
        protected Vector getDimensions() {
928
                return wmsParamsPanel.getDimensions();
929
        }
930

    
931
        /**
932
         * @return
933
         */
934
        protected boolean getTransparency() {
935
                return wmsParamsPanel.getTransparency();
936
        }
937

    
938
        /**
939
         * DOCUMENT ME!
940
         *
941
         * @return DOCUMENT ME!
942
         */
943
        public String getQueryableLayerQuery() {
944
                return wmsParamsPanel.getQueryableLayerQuery();
945
        }
946

    
947
        /**
948
         * This method initializes chkCaching
949
         *
950
         * @return javax.swing.JCheckBox
951
         */
952
        private JCheckBox getChkCaching() {
953
                if (chkCaching == null) {
954
                        chkCaching = new JCheckBox();
955
                        chkCaching.setBounds(7, 51, 249, 20);
956
                        chkCaching.setText(PluginServices.getText(this, "refresh_capabilities"));
957
                        chkCaching.setToolTipText(PluginServices.getText(this, "refresh_capabilities_tooltip"));
958
                        chkCaching.setSelected(refreshing);
959
                        chkCaching.addItemListener(new java.awt.event.ItemListener() {
960
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
961
                                        refreshing = chkCaching.isSelected();
962
                                }
963
                        });
964
                        chkCaching.addActionListener(new java.awt.event.ActionListener() {
965
                                public void actionPerformed(java.awt.event.ActionEvent e) {
966
                                        fPrefs.putBoolean("refresh_capabilities", chkCaching.isSelected());
967
                                }
968
                        });
969

    
970
                }
971
                return chkCaching;
972
        }
973
        
974
        /**
975
         * This method initializes chkCaching
976
         *
977
         * @return javax.swing.JCheckBox
978
         */
979
        private JCheckBox getChkTileCache() {
980
                if (chkTileCache == null) {
981
                        chkTileCache = new JCheckBox();
982
                        chkTileCache.setBounds(7, 72, 249, 20);
983
                        chkTileCache.setText(PluginServices.getText(this, "tile_cache"));
984
                        chkTileCache.setToolTipText(PluginServices.getText(this, "tile_cache_tooltip"));
985
                        chkTileCache.setSelected(usingTileCache);
986
                        chkTileCache.addItemListener(new java.awt.event.ItemListener() {
987
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
988
                                        usingTileCache = chkTileCache.isSelected();
989
                                }
990
                        });
991
                        chkTileCache.addActionListener(new java.awt.event.ActionListener() {
992
                                public void actionPerformed(java.awt.event.ActionEvent e) {
993
                                        fPrefs.putBoolean("tile_cache", chkTileCache.isSelected());
994
                                }
995
                        });
996

    
997
                }
998
                return chkTileCache;
999
        }
1000

    
1001
        /**
1002
         * This method initializes pnlName
1003
         *
1004
         * @return javax.swing.JPanel
1005
         */
1006
        private JPanel getPnlName() {
1007
                if (pnlName == null) {
1008
                        pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
1009
                        pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
1010
                        pnlName.add(getJLabel1(), null);
1011
                        pnlName.add(getLblTitle(), null);
1012
                }
1013
                return pnlName;
1014
        }
1015

    
1016
        @Override
1017
        public DataStoreParameters[] getParameters() {
1018
                // TODO Auto-generated method stub
1019
                return null;
1020
        }
1021

    
1022
        @Override
1023
        public void close() {
1024
                // Nothing to do
1025
        }
1026
}  //  @jve:decl-index=0:visual-constraint="10,10"