Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wcs / branches / org.gvsig.raster.wcs_dataaccess_refactoring / org.gvsig.raster.wcs.app.wcsclient / src / main / java / org / gvsig / raster / wcs / app / wcsclient / gui / wizard / WCSWizard.java @ 2319

History | View | Annotate | Download (28.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.wcs.app.wcsclient.gui.wizard;
24

    
25
import java.awt.Component;
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.io.File;
31
import java.io.FileInputStream;
32
import java.io.FileNotFoundException;
33
import java.io.FileOutputStream;
34
import java.io.IOException;
35
import java.net.MalformedURLException;
36
import java.net.URL;
37
import java.util.Properties;
38
import java.util.prefs.Preferences;
39

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

    
49
import org.gvsig.andami.Launcher;
50
import org.gvsig.andami.PluginServices;
51
import org.gvsig.andami.PluginsLocator;
52
import org.gvsig.andami.persistence.serverData.ServerDataPersistence;
53
import org.gvsig.app.gui.WizardPanel;
54
import org.gvsig.app.gui.wizards.WizardListener;
55
import org.gvsig.app.gui.wizards.WizardListenerSupport;
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.DataStoreParameters;
60
import org.gvsig.fmap.dal.coverage.exception.ConnectException;
61
import org.gvsig.fmap.dal.coverage.exception.RemoteServiceException;
62
import org.gvsig.fmap.dal.exception.InitializeException;
63
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
64
import org.gvsig.fmap.dal.exception.ValidateDataParametersException;
65
import org.gvsig.fmap.mapcontext.exceptions.ProjectionLayerException;
66
import org.gvsig.fmap.mapcontext.layers.FLayer;
67
import org.gvsig.gui.beans.Messages;
68
import org.gvsig.raster.cache.tile.TileCacheLibrary;
69
import org.gvsig.raster.util.CancelTaskImpl;
70
import org.gvsig.raster.wcs.app.wcsclient.gui.panel.WCSParamsPanel;
71
import org.gvsig.raster.wcs.io.WCSProvider;
72
import org.gvsig.raster.wcs.io.WCSServerExplorer;
73
import org.gvsig.raster.wcs.io.WCSServerExplorerParameters;
74
import org.gvsig.tools.ToolsLocator;
75
import org.gvsig.tools.persistence.PersistenceManager;
76
import org.gvsig.utils.swing.jcomboServer.JComboServer;
77
import org.gvsig.utils.swing.jcomboServer.ServerData;
78
import org.slf4j.Logger;
79
import org.slf4j.LoggerFactory;
80

    
81

    
82

    
83
/**
84
 * The WCS properties container panel.
85
 *
86
 * @author Jaume Dominguez Faus
87
 */
88
public class WCSWizard extends WizardPanel implements ActionListener {
89
        final static private Logger           logger = LoggerFactory.getLogger(WCSWizard.class);
90
        private static final long             serialVersionUID   = 1L;
91
        private String                        pluginName             = "org.gvsig.raster.wcs.app.wcsclient";
92
        private File                          pluginPersistenceFile  = null;
93
        private File                          serverPropertiesFile   = null;
94
        private ServerDataPersistence         serverDataPersistence  = null;
95
        private String                        serversPropsFile       = "servers.properties";
96
        
97
        
98
        protected int                         page               = 0;
99
        protected boolean                     connected          = false;
100
        private JComboServer                  cmbHost            = null;
101
        private JButton                       btnConnect         = null;
102
        private JButton                       btnCancel          = null;
103
        private JPanel                        jPanel             = null;
104
        private JLabel                        jLabel1            = null;
105
        private JLabel                        lblTitle           = null;
106
        private JScrollPane                   jScrollPane        = null;
107
        private JTextArea                     txtAbstract        = null;
108
        private JPanel                        panelPage1         = null;
109
        private JButton                       btnSiguiente       = null;
110
        private JButton                       btnAnterior        = null;
111
        private JPanel                        jPanel1            = null;
112
        protected WizardListenerSupport       listenerSupport    = new WizardListenerSupport();
113
        protected WCSParamsPanel              wcsParamsPanel     = null;
114
        protected JLabel                      lblServerType      = null;
115
        protected JLabel                      lblServerTypeValue = null;
116
        private JCheckBox                     chkCaching         = null;
117
        private static Preferences            fPrefs             = Preferences.userRoot().node( "gvsig.wcs-wizard" );
118
        private boolean                       usingTileCache     = fPrefs.getBoolean("tile_cache", false);
119
        private JCheckBox                     chkTileCache       = null;
120
        private boolean                       refreshing         = fPrefs.getBoolean("refresh_capabilities", false);
121
        protected int                         firstPage          = 0;
122
        private JPanel                        pnlName            = null;
123
        private ICancellable                  cancel             = null;
124
        private WCSServerExplorer             explorer           = null;
125
        
126
        
127
        public WCSWizard (WCSParamsPanel params) {
128
                super();
129
                firstPage = 1;
130
                page = firstPage;
131
                this.wcsParamsPanel = params;
132
                this.explorer = wcsParamsPanel.getExplorer();
133

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

    
150
                wcsParamsPanel.setListenerSupport(this.listenerSupport);
151
                wcsParamsPanel.setBounds(0, 5, 510, 428);
152
                wcsParamsPanel.getJTabbedPane().addMouseListener(
153
                                new java.awt.event.MouseAdapter() {
154
                                        public void mouseClicked(java.awt.event.MouseEvent e) {
155
                                                page = wcsParamsPanel.currentPage() + 1;
156
                                                activarVisualizarBotones();
157
                                        }
158
                                });
159
                this.add(wcsParamsPanel, null);
160
                this.add(lblServerType, null);
161
                this.add(lblServerTypeValue, null);
162
                getWCSParamsPanel().setVisible(true);
163

    
164
                connected = true;
165
        }
166

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

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

    
212

    
213
        protected JPanel getWCSParamsPanel(){
214
                if (wcsParamsPanel == null){
215
                        wcsParamsPanel = new WCSParamsPanel();
216
                        wcsParamsPanel.setListenerSupport(this.listenerSupport);
217
                        wcsParamsPanel.setBounds(0, 5, 510, 428);
218
                        wcsParamsPanel.getJTabbedPane().addMouseListener(
219
                                        new java.awt.event.MouseAdapter() {
220
                                                public void mouseClicked(java.awt.event.MouseEvent e) {
221
                                                        page = wcsParamsPanel.currentPage() + 1;
222
                                                        activarVisualizarBotones();
223
                                                }
224
                                        });
225
                }
226
                return wcsParamsPanel;
227
        }
228
        
229
        /**
230
         * This method checks for the options selected within the configuration
231
         * dialog are correct.
232
         *
233
         * @return true if you're done, false if not.
234
         */
235
        public boolean areSettingsValid() {
236
                return wcsParamsPanel.isCorrectlyConfigured();
237
        }
238
        
239
        /**
240
         * Thread to connect to a WCS server
241
         * @author Nacho Brodin (nachobrodin@gmail.com)
242
         */
243
        public class ConnectThread extends Thread {
244
                private ICancellable             cancel      = null;
245
                private WCSServerExplorer        explorer    = null;
246
                private WCSWizard                wizard      = null;
247
                
248
                public ConnectThread(ICancellable cancel, WCSServerExplorer explorer, WCSWizard wizard) {
249
                        this.cancel = cancel;
250
                        this.explorer = explorer;
251
                        this.wizard = wizard;
252
                }
253
                
254
            public void run() {
255
                    if(!checkHostAndNetwork())
256
                            return;
257
                    
258
                    try {
259
                            explorer.connect(cancel);
260
                            saveServerListFromComboBox();
261
                        } catch (ConnectException e) {
262
                                String msg = e.getMessage() + " : " + getIOExceptionMessage(e);
263
                                logger.info(msg, e);
264
                                JOptionPane.showMessageDialog(getWCSParamsPanel(), msg, Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
265
                                return;
266
                        } finally {
267
                                ((CancelTaskImpl)cancel).setCanceled(false);
268
                        }
269
                        
270
                        //storeParams = (WCSDataParameters)explorer.getStoreParameters();
271
                        
272
                        wizard.rellenarControles();
273
            }
274
            
275
            /**
276
                 * Gets the <code>IOException</code> message. The message 
277
                 * of this exception is returned by the server
278
                 * @param e
279
                 * @return
280
                 */
281
                private String getIOExceptionMessage(Exception e) {
282
                        Throwable ex = e;
283
                        final int MAX_DEEP = 10;
284
                        int deep = 0;
285
                        while(deep < MAX_DEEP) {
286
                                Throwable t = null;
287
                                if(ex instanceof IOException) {
288
                                        return ex.getMessage();
289
                                } else if(ex instanceof RemoteServiceException) {
290
                                        t = ex.getCause();
291
                                }
292
                                if(t == null)
293
                                        return null;
294
                                else
295
                                        ex = t;
296
                                deep++;
297
                        }
298
                        return null;
299
                }
300
        }
301
        
302
        /**
303
         * Checks if the network and host are reachable
304
         * @return true if both are reachable and false if they are not
305
         */
306
        private boolean checkHostAndNetwork() {
307
                if(!explorer.isHostReachable()) {
308
                        JOptionPane.showMessageDialog(null, Messages.getText("host_unreachable"), Messages.getText("Error"), JOptionPane.ERROR_MESSAGE);
309
                        logger.info(Messages.getText("host_unreachable"));
310
                        return false;
311
                }
312
                return true;
313
        }
314

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

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

    
375
        /**
376
         * DOCUMENT ME!
377
         */
378
        protected void activarVisualizarBotones() {
379
                if (page == firstPage) {
380
                        getBtnAnterior().setEnabled(false);
381
                        getBtnSiguiente().setVisible(true);
382

    
383
                        if (connected) {
384
                                getBtnSiguiente().setEnabled(true);
385
                        } else {
386
                                getBtnSiguiente().setEnabled(false);
387
                        }
388
                } else if (page < wcsParamsPanel.getNumTabs()) {
389
                        getBtnSiguiente().setEnabled(true);
390
                        getBtnSiguiente().setVisible(true);
391
                        getBtnAnterior().setEnabled(true);
392
                        getBtnAnterior().setVisible(true);
393
                        if (wcsParamsPanel.nextEnabledPage()==-1){
394
                                getBtnSiguiente().setEnabled(false);
395
                        }
396
                        listenerSupport.callStateChanged(wcsParamsPanel.isCorrectlyConfigured());
397
                } else if (page == wcsParamsPanel.getNumTabs()) {
398
                        getBtnSiguiente().setVisible(false);
399
                        getBtnSiguiente().setEnabled(false);
400
                        listenerSupport.callStateChanged(wcsParamsPanel.isCorrectlyConfigured());
401
                }
402
        }
403

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

    
419
                return cmbHost;
420
        }
421
        
422
        /**
423
         * Gets the list of servers that have been persisted or added in the properties file
424
         * @return
425
         */
426
        private ServerDataPersistence getServerDataPersistence() {
427
                if(serverDataPersistence == null) {
428
                        PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
429

    
430
                        //Lee los servidores de la persistencia
431
                        try {
432
                                FileInputStream is = new FileInputStream(getPluginPersistenceFile());
433
                                serverDataPersistence = (ServerDataPersistence) persistenceManager.getObject(is);
434
                        } catch (FileNotFoundException e) {
435
                                logger.info("Persistence file not found for WMS plugin", e);
436
                        }
437

    
438
                        if(serverDataPersistence == null)
439
                                serverDataPersistence = new ServerDataPersistence(ServerData.SERVER_TYPE_WCS);
440

    
441
                        //Lee los servidores del properties y los mezcla con los que hay en la persistencia
442
                        Properties prop = new Properties();
443
                        try {
444
                                prop.load(new FileInputStream(getServerPropertiesFile()));
445
                        } catch (FileNotFoundException e) {
446
                                logger.info("Properties file not found for WMS plugin", e);
447
                        } catch (IOException e) {
448
                                logger.info("Error reading properties file", e);
449
                        }
450

    
451
                        boolean newProjectServers = false;
452
                        for (int i = 0; i < prop.size(); i++) {
453
                                Object value = prop.get("server[" + i + "]");
454
                                if(!serverDataPersistence.existsServer(value.toString())) {
455
                                        serverDataPersistence.addServerData(new ServerData(value.toString(), ServerData.SERVER_TYPE_WCS));
456
                                        newProjectServers = true;
457
                                }
458
                        }
459

    
460
                        //Si hay servidores nuevos los persiste
461
                        if(newProjectServers) {
462
                                try {
463
                                        FileOutputStream os = new FileOutputStream(getPluginPersistenceFile());
464
                                        persistenceManager.putObject(os, serverDataPersistence);
465
                                } catch (FileNotFoundException e) {
466
                                        logger.info("Persistence file not found for WMS plugin", e);
467
                                }
468
                        }
469
                }
470

    
471
                return serverDataPersistence;
472
        }
473
        
474
        /**
475
         * Saves the list of server reading from the <code>ComboBox</code>
476
         */
477
        private void saveServerListFromComboBox() {
478
                PersistenceManager persistenceManager = ToolsLocator.getPersistenceManager();
479
                ServerDataPersistence persistence = new ServerDataPersistence(ServerData.SERVER_TYPE_WCS);
480
                String urlSelected = getTxtHost().getModel().getSelectedItem().toString();
481
                
482
                boolean isSelectedInModel = false;
483
                for (int i = 0; i < getTxtHost().getItemCount(); i++) {
484
                        String url = getTxtHost().getItemAt(i).toString();
485
                        persistence.addServerData(new ServerData(url, ServerData.SERVER_TYPE_WCS));
486
                        if(url.equals(urlSelected))
487
                                isSelectedInModel = true;
488
                }
489
                
490
                if(!isSelectedInModel)
491
                        persistence.addServerData(new ServerData(urlSelected, ServerData.SERVER_TYPE_WCS));
492
                
493
                if(getServerDataPersistence().compareTo(persistence) != 0) {
494
                        try {
495
                                FileOutputStream os = new FileOutputStream(getPluginPersistenceFile());
496
                                persistenceManager.putObject(os, persistence);
497
                        } catch (FileNotFoundException e) {
498
                                logger.info("Persistence file not found for WMS plugin", e);
499
                        }
500
                }
501
        }
502
        
503
        /**
504
         * Gets the persistence file of this plugin
505
         * @return
506
         */
507
        private File getPluginPersistenceFile() {
508
                if(pluginPersistenceFile == null) {
509
                        File persistenceFolder = new File(Launcher.getAppHomeDir()
510
                                        + File.separator + "plugins" + File.separator + pluginName);
511
                        
512
                        if (!persistenceFolder.exists()) {
513
                                persistenceFolder.mkdirs();
514
                        }
515
                        
516
                        pluginPersistenceFile = new File(persistenceFolder.getAbsolutePath() + 
517
                                File.separator + 
518
                                "plugin-persistence.dat");
519
                }
520
                return pluginPersistenceFile;
521
        }
522
        
523
        /**
524
         * Gets the file which contains the default list of servers
525
         * @return
526
         */
527
        private File getServerPropertiesFile() {
528
                if(serverPropertiesFile == null) {
529
                        File pluginFolder = PluginsLocator.getManager().getPluginsFolder();
530
                        serverPropertiesFile = new File(pluginFolder.getAbsolutePath() + 
531
                                        File.separator + 
532
                                        pluginName + 
533
                                        File.separator + 
534
                                        serversPropsFile);
535
                }
536
                return serverPropertiesFile;
537
        }
538

    
539
        /**
540
         * This method initializes btnDetalles
541
         *
542
         * @return javax.swing.JButton
543
         */
544
        private JButton getBtnConnect() {
545
                if (btnConnect == null) {
546
                        btnConnect = new JButton();
547
                        btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
548
                        btnConnect.setBounds(262, 50, 100, 20);
549
                        btnConnect.setText(PluginServices.getText(this, "conectar"));
550
                        btnConnect.addActionListener(this);
551
                }
552

    
553
                return btnConnect;
554
        }
555
        
556
        /**
557
         * This method initializes btnDetalles
558
         *
559
         * @return javax.swing.JButton
560
         */
561
        private JButton getBtnCancel() {
562
                if (btnCancel == null) {
563
                        btnCancel = new JButton();
564
                        btnCancel.setEnabled(false);
565
                        btnCancel.setPreferredSize(new java.awt.Dimension(100, 20));
566
                        btnCancel.setBounds(366, 50, 100, 20);
567
                        btnCancel.setText(PluginServices.getText(this, "cancel"));
568
                        btnCancel.addActionListener(this);
569
                }
570

    
571
                return btnCancel;
572
        }
573

    
574
        /**
575
         * This method initializes jPanel
576
         *
577
         * @return javax.swing.JPanel
578
         */
579
        private javax.swing.JPanel getJPanel() {
580
                if (jPanel == null) {
581
                        jPanel = new javax.swing.JPanel();
582
                        jPanel.setLayout(null);
583
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
584
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(
585
                                        null, PluginServices.getText(this, "description"),
586
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
587
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
588
                        jPanel.setBounds(2, 116, 477, 304);
589

    
590
                        jPanel.add(getJScrollPane(), null);
591
                        jPanel.add(getPnlName(), null);
592
                }
593

    
594
                return jPanel;
595
        }
596

    
597
        /**
598
         * This method initializes jLabel1
599
         *
600
         * @return javax.swing.JLabel
601
         */
602
        private javax.swing.JLabel getJLabel1() {
603
                if (jLabel1 == null) {
604
                        jLabel1 = new javax.swing.JLabel();
605
                        jLabel1.setText(PluginServices.getText(this, "name") + ":");
606
                }
607

    
608
                return jLabel1;
609
        }
610

    
611
        /**
612
         * This method initializes lblTitle
613
         *
614
         * @return javax.swing.JLabel
615
         */
616
        private javax.swing.JLabel getLblTitle() {
617
                if (lblTitle == null) {
618
                        lblTitle = new javax.swing.JLabel();
619
                        lblTitle.setText("-");
620
                }
621

    
622
                return lblTitle;
623
        }
624

    
625
        /**
626
         * This method initializes jScrollPane
627
         *
628
         * @return javax.swing.JScrollPane
629
         */
630
        private javax.swing.JScrollPane getJScrollPane() {
631
                if (jScrollPane == null) {
632
                        jScrollPane = new javax.swing.JScrollPane();
633
                        jScrollPane.setViewportView(getTxtAbstract());
634
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
635
                        jScrollPane.setBounds(10, 47, 457, 247);
636
                }
637

    
638
                return jScrollPane;
639
        }
640

    
641
        /**
642
         * This method initializes txtAbstract
643
         *
644
         * @return javax.swing.JTextArea
645
         */
646
        private javax.swing.JTextArea getTxtAbstract() {
647
                if (txtAbstract == null) {
648
                        txtAbstract = new javax.swing.JTextArea();
649
                        txtAbstract.setWrapStyleWord(true);
650
                        txtAbstract.setColumns(30);
651
                        txtAbstract.setLineWrap(true);
652
                }
653

    
654
                return txtAbstract;
655
        }
656
        
657
        private javax.swing.JPanel getPanelPage1() {
658
                if (panelPage1 == null) {
659
                        panelPage1 = new JPanel();
660
                        panelPage1.setLayout(null);
661
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
662
                        panelPage1.setVisible(true);
663
                        panelPage1.setBounds(15, 5, 480, 427);
664
                        panelPage1.add(getJPanel1(), null);
665
                        panelPage1.add(getJPanel(), null);
666
                }
667

    
668
                return panelPage1;
669
        }
670

    
671

    
672
        /**
673
         * This method initializes btnSiguiente
674
         *
675
         * @return javax.swing.JButton
676
         */
677
        private javax.swing.JButton getBtnSiguiente() {
678
                if (btnSiguiente == null) {
679
                        btnSiguiente = new JButton();
680
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
681
                        btnSiguiente.setBounds(395, 444, 100, 20);
682
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
683
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
684
                                public void actionPerformed(java.awt.event.ActionEvent e) {
685
                                        if(page == firstPage && getChkTileCache().isSelected()) {
686
                                                messageBoxInfo("remote_service_tiled", TileCacheLibrary.ALTERNATIVE_TILESIZE + "", this);
687
                                        }
688
                                        if (page > firstPage) {
689
                                                // si page es mayor que cero, vamos enfocando las
690
                                                // sucesivas SOLAPAS del WCSParamsPanel
691
                                                wcsParamsPanel.avanzaTab();
692
                                                page = wcsParamsPanel.currentPage();
693
                                        }
694
                                        page++;
695
                                        getPanelPage1().setVisible(false);
696
                                        getWCSParamsPanel().setVisible(true);
697
                                        activarVisualizarBotones();
698
                                }
699
                        });
700
                }
701
                return btnSiguiente;
702
        }
703
        
704
        /**
705
         * Shows an information dialog with a text and a accept button 
706
         * @param msg Message to show in the dialog
707
         * @param parentWindow Parent window
708
         */
709
        public static void messageBoxInfo(String msg, String fixedText, Object parentWindow){
710
                String string = PluginServices.getText(parentWindow, "accept");
711
                Object[] options = {string};
712
                JOptionPane.showOptionDialog((Component)PluginServices.getMainFrame(),
713
                                        "<html>" + PluginServices.getText(parentWindow, msg).replaceAll("\n", "<br>") + " " + fixedText + "</html>",
714
                                        PluginServices.getText(parentWindow, "confirmacion"),
715
                                        JOptionPane.OK_OPTION,
716
                                        JOptionPane.INFORMATION_MESSAGE,
717
                                        null,
718
                                        options,
719
                                        string);
720
        }
721

    
722
        /**
723
         * This method initializes btnAnterior
724
         *
725
         * @return javax.swing.JButton
726
         */
727
        private javax.swing.JButton getBtnAnterior() {
728
                if (btnAnterior == null) {
729
                        btnAnterior = new JButton();
730
                        btnAnterior.setBounds(292, 444, 100, 20);
731
                        btnAnterior.setPreferredSize(new java.awt.Dimension(100, 30));
732
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
733
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
734
                                public void actionPerformed(java.awt.event.ActionEvent e) {
735
                                        page --;
736
                                        if (page > firstPage) {
737
                                                // Tenemos que retroceder en el wcsParamsPanel
738
                                                wcsParamsPanel.retrocedeTab();
739
                                                page = wcsParamsPanel.currentPage() + 1;
740
                                                activarVisualizarBotones();
741
                                        } else if (page==firstPage){
742
                                                activarVisualizarBotones();
743
                                                page = firstPage +1;
744
                                                getLblTitle().setText("-");
745
                                                getTxtAbstract().setText("");
746
                                                wcsParamsPanel.retrocedeTab();
747
                                                getPanelPage1().setVisible(true);
748
                                                getWCSParamsPanel().setVisible(false);
749
                                                getBtnSiguiente().setEnabled(false);
750
                                                connected = false;
751
                                        }
752
                                        listenerSupport.callStateChanged(wcsParamsPanel.isCorrectlyConfigured());
753
                                }
754
                        });
755
                }
756

    
757
                return btnAnterior;
758
        }
759
        
760
        private javax.swing.JPanel getJPanel1() {
761
                if (jPanel1 == null) {
762
                        jPanel1 = new javax.swing.JPanel();
763
                        jPanel1.setLayout(null);
764
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
765
                                        null, PluginServices.getText(this, "server"),
766
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
767
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
768
                        jPanel1.setBounds(2, 5, 477, 105);
769
                        jPanel1.add(getTxtHost(), null);
770
                        jPanel1.add(getBtnConnect(), null);
771
                        jPanel1.add(getBtnCancel(), null);
772
                        jPanel1.add(getChkCaching(), null);
773
                        jPanel1.add(getChkTileCache(), null);
774
                }
775

    
776
                return jPanel1;
777
        }
778

    
779
        /**
780
         * DOCUMENT ME!
781
         *
782
         * @param listener
783
         */
784
        public void addWizardListener(WizardListener listener) {
785
                listenerSupport.addWizardListener(listener);
786
        }
787

    
788
        /**
789
         * DOCUMENT ME!
790
         *
791
         * @param listener
792
         */
793
        public void removeWizardListener(WizardListener listener) {
794
                listenerSupport.removeWizardListener(listener);
795
        }
796

    
797
        /**
798
         * DOCUMENT ME!
799
         *
800
         * @return DOCUMENT ME!
801
         * @throws ProjectionLayerException
802
         */
803
        public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
804
                //return wcsParamsPanel.getLayersRectangle();
805
                return null;
806
        }
807

    
808

    
809

    
810
        /**
811
         * Devuelve el host que est� escrito en el cuadro de texto del host o null
812
         * en caso de que no haya nada escrito o est� mal escrito
813
         *
814
         * @return URL del host
815
         */
816
        public URL getHost() {
817
                try {
818
                        if ((cmbHost == null)|| (cmbHost.getModel().getSelectedItem() == null)) {
819
                                return new URL(explorer.getHost());
820
                        } else {
821
                                return new URL(cmbHost.getModel().getSelectedItem().toString());
822
                        }
823
                } catch (MalformedURLException e) {
824
                        return null;
825
                }
826
        }
827

    
828
        /**
829
         * DOCUMENT ME!
830
         *
831
         * @return Nombre de la capa que aparece en el TOC.
832
         */
833
        public String getLayerName() {
834
                return wcsParamsPanel.getLayerName();
835
        }
836

    
837

    
838
        public void initWizard() {
839
        }
840

    
841
        public void execute() {
842
                try {
843
                        FLayer layer = wcsParamsPanel.getLayer(getChkTileCache().isSelected());
844
                        if(layer == null)
845
                                return;
846
                        this.getMapCtrl().getMapContext().getLayers().addLayer(layer);
847
                } catch (InitializeException e) {
848
                        logger.info("The layer cannot be added", e);
849
                }
850

    
851
        }
852
        
853
        /**
854
         * This method initializes chkCaching
855
         *
856
         * @return javax.swing.JCheckBox
857
         */
858
        private JCheckBox getChkCaching() {
859
                if (chkCaching == null) {
860
                        chkCaching = new JCheckBox();
861
                        chkCaching.setBounds(7, 51, 249, 20);
862
                        chkCaching.setText(PluginServices.getText(this, "refresh_capabilities"));
863
                        chkCaching.setToolTipText(PluginServices.getText(this, "refresh_capabilities_tooltip"));
864
                        chkCaching.setSelected(refreshing);
865
                        chkCaching.addItemListener(new java.awt.event.ItemListener() {
866
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
867
                                        refreshing = chkCaching.isSelected();
868
                                }
869
                        });
870
                        chkCaching.addActionListener(new java.awt.event.ActionListener() {
871
                                public void actionPerformed(java.awt.event.ActionEvent e) {
872
                                        fPrefs.putBoolean("refresh_capabilities", chkCaching.isSelected());
873
                                }
874
                        });
875

    
876
                }
877
                return chkCaching;
878
        }
879
        
880
        /**
881
         * This method initializes chkCaching
882
         *
883
         * @return javax.swing.JCheckBox
884
         */
885
        private JCheckBox getChkTileCache() {
886
                if (chkTileCache == null) {
887
                        chkTileCache = new JCheckBox();
888
                        chkTileCache.setBounds(7, 72, 249, 20);
889
                        chkTileCache.setText(PluginServices.getText(this, "tile_cache"));
890
                        chkTileCache.setToolTipText(PluginServices.getText(this, "tile_cache_tooltip"));
891
                        chkTileCache.setSelected(usingTileCache);
892
                        chkTileCache.addItemListener(new java.awt.event.ItemListener() {
893
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
894
                                        usingTileCache = chkTileCache.isSelected();
895
                                }
896
                        });
897
                        chkTileCache.addActionListener(new java.awt.event.ActionListener() {
898
                                public void actionPerformed(java.awt.event.ActionEvent e) {
899
                                        fPrefs.putBoolean("tile_cache", chkTileCache.isSelected());
900
                                }
901
                        });
902

    
903
                }
904
                return chkTileCache;
905
        }
906

    
907
        /**
908
         * This method initializes pnlName
909
         *
910
         * @return javax.swing.JPanel
911
         */
912
        private JPanel getPnlName() {
913
                if (pnlName == null) {
914
                        pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
915
                        pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
916
                        pnlName.add(getJLabel1(), null);
917
                        pnlName.add(getLblTitle(), null);
918
                }
919
                return pnlName;
920
        }
921

    
922
        @Override
923
        public DataStoreParameters[] getParameters() {
924
                // TODO Auto-generated method stub
925
                return null;
926
        }
927

    
928
        @Override
929
        public void close() {
930
                // Nothing to do
931
        }
932
}  //  @jve:decl-index=0:visual-constraint="10,10"