Statistics
| Revision:

svn-gvsig-desktop / trunk / extensions / extWCS / src / com / iver / cit / gvsig / gui / wcs / WCSWizard.java @ 28905

History | View | Annotate | Download (17.6 KB)

1
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
2
 *
3
 * Copyright (C) 2005 IVER T.I. and Generalitat Valenciana.
4
 *
5
 * This program is free software; you can redistribute it and/or
6
 * modify it under the terms of the GNU General Public License
7
 * as published by the Free Software Foundation; either version 2
8
 * of the License, or (at your option) any later version.
9
 *
10
 * This program is distributed in the hope that it will be useful,
11
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
12
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
13
 * GNU General Public License for more details.
14
 *
15
 * You should have received a copy of the GNU General Public License
16
 * along with this program; if not, write to the Free Software
17
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
18
 *
19
 * For more information, contact:
20
 *
21
 *  Generalitat Valenciana
22
 *   Conselleria d'Infraestructures i Transport
23
 *   Av. Blasco Ib??ez, 50
24
 *   46010 VALENCIA
25
 *   SPAIN
26
 *
27
 *      +34 963862235
28
 *   gvsig@gva.es
29
 *      www.gvsig.gva.es
30
 *
31
 *    or
32
 *
33
 *   IVER T.I. S.A
34
 *   Salamanca 50
35
 *   46005 Valencia
36
 *   Spain
37
 *
38
 *   +34 963163400
39
 *   dac@iver.es
40
 */
41
package com.iver.cit.gvsig.gui.wcs;
42

    
43
import java.awt.FlowLayout;
44
import java.awt.geom.Rectangle2D;
45
import java.net.MalformedURLException;
46
import java.net.URL;
47
import java.util.prefs.Preferences;
48

    
49
import javax.swing.DefaultComboBoxModel;
50
import javax.swing.JCheckBox;
51
import javax.swing.JLabel;
52
import javax.swing.JPanel;
53
import javax.swing.JScrollPane;
54
import javax.swing.JTextArea;
55

    
56
import org.gvsig.gui.beans.swing.JButton;
57

    
58
import com.iver.andami.PluginServices;
59
import com.iver.andami.persistence.serverData.ServerDataPersistence;
60
import com.iver.cit.gvsig.fmap.layers.FLayer;
61
import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
62
import com.iver.cit.gvsig.gui.WizardPanel;
63
import com.iver.cit.gvsig.gui.panels.WCSParamsPanel;
64
import com.iver.cit.gvsig.gui.wizards.WizardListener;
65
import com.iver.cit.gvsig.gui.wizards.WizardListenerSupport;
66
import com.iver.utiles.NotExistInXMLEntity;
67
import com.iver.utiles.XMLEntity;
68
import com.iver.utiles.swing.JComboBox;
69
import com.iver.utiles.swing.jcomboServer.JComboServer;
70
import com.iver.utiles.swing.jcomboServer.ServerData;
71

    
72
/**
73
 * Class implementing the WCSWizard.
74
 *
75
 * Clase que implementa el Wizard para coberturas WCS
76
 * @author Jaume Dom?nguez Faus
77
 */
78
public class WCSWizard extends WizardPanel {
79
        private int page = 0;
80
        private boolean connected = false;
81
        private JComboServer cmbHost = null;
82
        private JButton btnConnect = null;
83
        private JPanel jPanel = null;
84
        private JLabel jLabel1 = null;
85
        private JLabel lblTitle = null;
86
        private JScrollPane jScrollPane = null;
87
        private JTextArea txtAbstract = null;
88
        private JPanel panelPage1 = null;
89
        private JButton btnSiguiente = null;
90
        private JButton btnAnterior = null;
91
        private JPanel jPanel1 = null;
92
        private WizardListenerSupport listenerSupport = new WizardListenerSupport();
93
        private WCSParamsPanel wcsParamsPanel = null;
94
        private WCSWizardData dataSource = null;
95
        private JPanel pnlName;
96
        private static Preferences fPrefs = Preferences.userRoot().node( "gvsig.wcs-wizard" );
97
        private boolean refreshing = fPrefs.getBoolean("refresh_capabilities", false);
98
        private JCheckBox chkCaching;
99

    
100

    
101
        /**
102
         * This is the default constructor
103
         */
104
        public WCSWizard() {
105
                super();
106
                initialize();
107
        }
108

    
109
        /**
110
         * This method initializes this
111
         */
112
        private void initialize() {
113
                setTabName("WCS");
114
                this.setLayout(null);
115
                this.setPreferredSize(new java.awt.Dimension(750, 320));
116
                this.setVisible(true);
117
                this.setSize(510, 468);
118
                this.add(getPanelPage1(), null);
119
                this.add(getPanelPage2(), null);
120
                this.add(getBtnAnterior(), null);
121
                this.add(getBtnSiguiente(), null);
122
                activarVisualizarBotones();
123
        }
124

    
125
        /**
126
         * Adds the host addres to a persistent data storage.
127
         *
128
         * con addHost guardamos la informaci?n del combo de servidores en un
129
         * almac?n persistente
130
         *
131
         * @param host
132
         */
133
        private void addHost(String host) {
134
                host = host.trim();
135

    
136
                ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WCS);
137
                persistence.addServerData(new ServerData(host, ServerData.SERVER_TYPE_WCS));
138
                persistence.setPersistent();
139
        }
140

    
141
//        private void addHost(String host) {
142
//                host = host.trim();
143
//
144
//                DefaultComboBoxModel model = (DefaultComboBoxModel) getTxtHost()
145
//                                .getModel();
146
//
147
//                if (model.getIndexOf(host) < 0) {
148
//                        model.addElement(host);
149
//
150
//                        PluginServices ps = PluginServices.getPluginServices(this);
151
//                        XMLEntity xml = ps.getPersistentXML();
152
//
153
//                        try {
154
//                                String[] servers = xml.getStringArrayProperty("wcs-servers");
155
//                                String[] newServers = new String[servers.length + 1];
156
//                                System.arraycopy(servers, 0, newServers, 0, servers.length);
157
//                                newServers[servers.length] = host;
158
//                                xml.putProperty("wcs-servers", newServers);
159
//                        } catch (NotExistInXMLEntity e) {
160
//                                xml.putProperty("wcs-servers", new String[] { host });
161
//                        }
162
//
163
//                        ps.setPersistentXML(xml);
164
//                }
165
//        }
166

    
167
        /**
168
         * Fills up the initial WCSWizard controls.
169
         *
170
         * Rellena los primeros controles del WCS Wizard
171
         *
172
         * jaume
173
         */
174
        private void fillupComponents() {
175
                try {
176
                        String host = cmbHost.getModel().getSelectedItem().toString();
177

    
178
                        dataSource.setHost(new URL(host), refreshing);
179

    
180
                        addHost(host);
181
                        getLblTitle().setText(dataSource.getTitle());
182
                        getTxtAbstract().setText(dataSource.getDescription());
183
//                        wcsParamsPanel.getLstCoverages().setListData(
184
//                                        dataSource.getCoverageList());
185
                        wcsParamsPanel.setWizardData(dataSource);
186

    
187
                        connected = true;
188
                        activarVisualizarBotones();
189
                } catch (Exception e) {
190
                        listenerSupport.callError(e);
191
                        e.printStackTrace();
192
                }
193
        }
194

    
195
        /**
196
         * Enables or disables the Next and Previous buttons according with the current
197
         * page and the enabled pages.
198
         */
199
        private void activarVisualizarBotones() {
200
                if (page == 0) {
201
                        getBtnAnterior().setEnabled(false);
202
                        getBtnSiguiente().setVisible(true);
203
                        if (connected) {
204
                                getBtnSiguiente().setEnabled(true);
205
                        } else {
206
                                getBtnSiguiente().setEnabled(false);
207
                        }
208
                } else if (page < wcsParamsPanel.getNumTabs()) {
209
                        getBtnSiguiente().setEnabled(true);
210
                        getBtnSiguiente().setVisible(true);
211
                        getBtnAnterior().setEnabled(true);
212
                        getBtnAnterior().setVisible(true);
213
                        if (wcsParamsPanel.nextPageEnabled()==-1){
214
                            getBtnSiguiente().setEnabled(false);
215
                        }
216
                        listenerSupport.callStateChanged(wcsParamsPanel.isCorretlyConfigured());
217
                } else if (page == wcsParamsPanel.getNumTabs()) {
218
                        getBtnSiguiente().setVisible(false);
219
                        getBtnSiguiente().setEnabled(false);
220
                        listenerSupport.callStateChanged(wcsParamsPanel
221
                                        .isCorretlyConfigured());
222
                }
223

    
224
        }
225

    
226

    
227

    
228
        /**
229
         * This method initializes txtHost from the persistent data storage
230
         *
231
         * @return javax.swing.JTextField
232
         */
233
        private javax.swing.JComboBox getTxtHost() {
234
                        if (cmbHost == null) {
235
                                cmbHost = new JComboServer();
236
                                cmbHost.setModel(new DefaultComboBoxModel());
237
                                cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
238
                                cmbHost.setBounds(11, 26, 454, 20);
239
                                cmbHost.setEditable(true);
240

    
241
                                ServerDataPersistence persistence = new ServerDataPersistence(this,ServerData.SERVER_TYPE_WCS);
242
                                ServerData[] servers = persistence.getArrayOfServerData();
243

    
244
                                if (servers.length == 0){
245
                                        PluginServices ps = PluginServices.getPluginServices(this);
246
                                        XMLEntity xml = ps.getPersistentXML();
247
                                        try {
248
                                                String[] oldServers = xml.getStringArrayProperty("wcs-servers");
249
                                                servers = new ServerData[oldServers.length];
250
                                                for (int i=0; i<oldServers.length; i++) {
251
                                                        servers[i] = new ServerData(oldServers[i],ServerData.SERVER_TYPE_WCS);
252
                                                }
253
                                                xml.remove("wcs-servers");
254
                                                ps.setPersistentXML(xml);
255
                                        } catch (NotExistInXMLEntity e) {
256
                                                // Old servers doesn't exist
257
                                                servers = new ServerData[2];
258
                                                servers[0] = new ServerData("http://maps.gdal.org/cgi-bin/mapserv_dem",ServerData.SERVER_TYPE_WCS);
259
                                                servers[1] = new ServerData("http://inspire.cop.gva.es/mapserver/wcs",ServerData.SERVER_TYPE_WCS);
260
                                        }
261

    
262
                                        for (int i=0 ; i<servers.length ; i++){
263
                                                persistence.addServerData(servers[i]);
264
                                        }
265
                                        persistence.setPersistent();
266
                                }
267

    
268
                                cmbHost.setServerList(servers);
269
                        }
270
                        return cmbHost;
271
        }
272

    
273

    
274
        /**
275
         * This method initializes btnDetalles
276
         *
277
         * @return JButton
278
         */
279
        private JButton getBtnConnect() {
280
                if (btnConnect == null) {
281
                        btnConnect = new JButton();
282
                        btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
283
                        btnConnect.setBounds(366, 50, 100, 20);
284
                        btnConnect.setText(PluginServices.getText(this, "connect"));
285
                        btnConnect.addActionListener(new java.awt.event.ActionListener() {
286
                                public void actionPerformed(java.awt.event.ActionEvent e) {
287
                                        wcsParamsPanel.cleanupWizard();
288
                                        connected = false;
289
                                        fillupComponents();
290
                                }
291
                        });
292
                }
293

    
294
                return btnConnect;
295
        }
296

    
297
        /**
298
         * This method initializes jPanel
299
         *
300
         * @return JPanel
301
         */
302
        private JPanel getJPanel() {
303
                if (jPanel == null) {
304
                        jPanel = new javax.swing.JPanel();
305
                        jPanel.setLayout(null);
306
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
307
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
308
                                        PluginServices.getText(this, "descripcion"),
309
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
310
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
311
                                        null));
312
                        jPanel.setBounds(2, 96, 477, 324);
313
                        jPanel.add(getPnlName(), null);
314
                        jPanel.add(getJScrollPane(), null);
315
                }
316

    
317
                return jPanel;
318
        }
319

    
320
        /**
321
         * This method initializes jLabel1
322
         *
323
         * @return JLabel
324
         */
325
        private JLabel getJLabel1() {
326
                if (jLabel1 == null) {
327
                        jLabel1 = new javax.swing.JLabel();
328
                        jLabel1.setText(PluginServices.getText(this, "nombre") + ":");
329
                        jLabel1.setBounds(37, 26, 40, 15);
330
                }
331

    
332
                return jLabel1;
333
        }
334

    
335
        /**
336
         * This method initializes lblTitle
337
         *
338
         * @return JLabel
339
         */
340
        private JLabel getLblTitle() {
341
                if (lblTitle == null) {
342
                        lblTitle = new javax.swing.JLabel();
343
                        lblTitle.setText("-");
344
                        lblTitle.setPreferredSize(new java.awt.Dimension(350, 16));
345
                        lblTitle.setBounds(82, 26, 350, 16);
346
                }
347

    
348
                return lblTitle;
349
        }
350

    
351
        /**
352
         * This method initializes jScrollPane
353
         *
354
         * @return JScrollPane
355
         */
356
        private JScrollPane getJScrollPane() {
357
                if (jScrollPane == null) {
358
                        jScrollPane = new javax.swing.JScrollPane();
359
                        jScrollPane.setViewportView(getTxtAbstract());
360
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
361
                        jScrollPane.setBounds(10, 47, 457, 267);
362
                }
363

    
364
                return jScrollPane;
365
        }
366

    
367
        /**
368
         * This method initializes txtAbstract
369
         *
370
         * @return JTextArea
371
         */
372
        private JTextArea getTxtAbstract() {
373
                if (txtAbstract == null) {
374
                        txtAbstract = new javax.swing.JTextArea();
375
                        txtAbstract.setWrapStyleWord(true);
376
                        txtAbstract.setColumns(30);
377
                        txtAbstract.setLineWrap(true);
378
                }
379

    
380
                return txtAbstract;
381
        }
382
        /**
383
         * This method initializes chkCaching
384
         *
385
         * @return javax.swing.JCheckBox
386
         */
387
        private JCheckBox getChkCaching() {
388
                if (chkCaching == null) {
389
                        chkCaching = new JCheckBox();
390
                        chkCaching.setBounds(7, 51, 349, 20);
391
                        chkCaching.setText(PluginServices.getText(this, "refresh_capabilities"));
392
                        chkCaching.setToolTipText(PluginServices.getText(this, "refresh_capabilities_tooltip"));
393
                        chkCaching.setSelected(refreshing);
394
                        chkCaching.addItemListener(new java.awt.event.ItemListener() {
395
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
396
                                        refreshing = chkCaching.isSelected();
397
                                }
398
                        });
399
                        chkCaching.addActionListener(new java.awt.event.ActionListener() {
400
                                public void actionPerformed(java.awt.event.ActionEvent e) {
401
                                        fPrefs.putBoolean("refresh_capabilities", chkCaching.isSelected());
402
                                }
403
                        });
404

    
405
                }
406
                return chkCaching;
407
        }
408

    
409
        /**
410
         * This method initializes panelPage1
411
         *
412
         * @return JPanel
413
         */
414
        private JPanel getPanelPage1() {
415
                if (panelPage1 == null) {
416
                        panelPage1 = new javax.swing.JPanel();
417
                        panelPage1.setLayout(null);
418
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
419
                        panelPage1.setVisible(true);
420
                        panelPage1.setBounds(15, 5, 480, 427);
421
                        panelPage1.add(getJPanel1(), null);
422
                        panelPage1.add(getJPanel(), null);
423
                }
424

    
425
                return panelPage1;
426
        }
427

    
428
        /**
429
         * This method initializes panelPage2
430
         *
431
         * @return JPanel
432
         */
433
        private JPanel getPanelPage2() {
434
                if (wcsParamsPanel == null) {
435
                        wcsParamsPanel = new WCSParamsPanel();
436
                        wcsParamsPanel.setListenerSupport(this.listenerSupport);
437
                        wcsParamsPanel.setBounds(0, 5, 510, 428);
438
                }
439

    
440
                return wcsParamsPanel;
441
        }
442

    
443
        /**
444
         * This method initializes pnlName
445
         *
446
         * @return JPanel
447
         */
448
        private JPanel getPnlName() {
449
                if (pnlName == null) {
450
                        pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
451
                        pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
452
                        pnlName.add(getJLabel1(), null);
453
                        pnlName.add(getLblTitle(), null);
454
                }
455
                return pnlName;
456
        }
457

    
458

    
459

    
460
        /**
461
         * This method initializes btnSiguiente
462
         *
463
         * @return JButton
464
         */
465
        private JButton getBtnSiguiente() {
466
                if (btnSiguiente == null) {
467
                        btnSiguiente = new JButton();
468
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
469
                        btnSiguiente.setBounds(395, 444, 100, 20);
470
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
471
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
472
                                public void actionPerformed(java.awt.event.ActionEvent e) {
473
                                        if (page > 0) {
474
                                                // si page es mayor que cero, vamos enfocando las
475
                                                // sucesivas SOLAPAS del WCSParamsPanel
476
                                                wcsParamsPanel.avanzaTab();
477
                                                page = wcsParamsPanel.getIndiceSolapaActual();
478
                                        }
479
                                        page++;
480

    
481
                                        getPanelPage1().setVisible(false);
482
                                        getPanelPage2().setVisible(true);
483
                                        activarVisualizarBotones();
484
                                }
485
                        });
486
                }
487
                return btnSiguiente;
488
        }
489

    
490
        /**
491
         * This method initializes btnAnterior
492
         *
493
         * @return JButton
494
         */
495
        private JButton getBtnAnterior() {
496
                if (btnAnterior == null) {
497
                        btnAnterior = new JButton();
498
                        btnAnterior.setBounds(292, 444, 100, 20);
499
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
500
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
501
                                public void actionPerformed(java.awt.event.ActionEvent e) {
502
                                        page --;
503
                                        if (page > 0) {
504
                                                // Tenemos que retroceder en el wcsParamsPanel
505
                                                wcsParamsPanel.retrocedeTab();
506
                                                page = wcsParamsPanel.getIndiceSolapaActual() + 1;
507
                                                activarVisualizarBotones();
508
                                        } else if (page==0){
509
                                                activarVisualizarBotones();
510
                                                page = 1;
511
                                                wcsParamsPanel.cleanupWizard();
512
                                                getLblTitle().setText("-");
513
                                                getTxtAbstract().setText("");
514
                                                wcsParamsPanel.retrocedeTab();
515
                                                getPanelPage1().setVisible(true);
516
                                                getPanelPage2().setVisible(false);
517
                                                getBtnSiguiente().setEnabled(false);
518
                                                connected = false;
519
                                        }
520
                                        listenerSupport.callStateChanged(wcsParamsPanel.isCorretlyConfigured());
521
                                }
522
                        });
523
                }
524
                return btnAnterior;
525
        }
526

    
527
        /**
528
         * This method initializes jPanel1
529
         *
530
         * @return javax.swing.JPanel
531
         */
532
        private JPanel getJPanel1() {
533
                if (jPanel1 == null) {
534
                        jPanel1 = new javax.swing.JPanel();
535
                        jPanel1.setLayout(null);
536
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
537
                                        null, PluginServices.getText(this, "server"),
538
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
539
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
540
                        jPanel1.setBounds(2, 5, 477, 85);
541
                        jPanel1.add(getTxtHost(), null);
542
                        jPanel1.add(getBtnConnect(), null);
543
                        jPanel1.add(getChkCaching(), null);
544
                }
545

    
546
                return jPanel1;
547
        }
548

    
549
        /**
550
         * Adds the gvSIG's wizard listener
551
         *
552
         * @param listener
553
         */
554
        public void addWizardListener(WizardListener listener) {
555
                listenerSupport.addWizardListener(listener);
556
        }
557

    
558
        /**
559
         * Removes the gvSIG's wizard listener
560
         *
561
         * @param listener
562
         */
563
        public void removeWizardListener(WizardListener listener) {
564
                listenerSupport.removeWizardListener(listener);
565
        }
566

    
567
        /**
568
         * Returns the Wizard's data source
569
         *
570
         * @return
571
         */
572
        public WCSWizardData getDataSource() {
573
                return dataSource;
574
        }
575

    
576
        /**
577
         * sets the wizard's data source
578
         *
579
         * @param source
580
         */
581
        public void setDataSource(WCSWizardData source) {
582
                dataSource = source;
583
        }
584

    
585
        /**
586
         * Returns the rectangle that contains all the others
587
         *
588
         * Obtiene el rect?ngulo que contiene a todos los otros
589
         *
590
         * @param rects[]  rectangulos
591
         *
592
         * @return Rectangle2D
593
         */
594
        public static Rectangle2D getRectangle(Rectangle2D[] rects) {
595
                Rectangle2D ret = rects[0];
596

    
597
                for (int i = 1; i < rects.length; i++) {
598
                        ret.add(rects[i]);
599
                }
600

    
601
                return ret;
602
        }
603

    
604
        /**
605
         * Returns the host typed in the host text field or null if nothing is typed
606
         * or it is not a valid URL.
607
         *
608
         * Devuelve el host que est? escrito en el cuadro de texto del host o null
609
         * en caso de que no haya nada escrito o est? mal escrito
610
         *
611
         * @return URL del host
612
         */
613
        public URL getHost() {
614
                try {
615
                        return new URL(cmbHost.getModel().getSelectedItem().toString());
616
                } catch (MalformedURLException e) {
617
                        return null;
618
                }
619
        }
620

    
621
        /**
622
         * Returns the name of the coverage that appears in the TOC
623
         *
624
         * @return String
625
         */
626
        public String getLayerName() {
627
                return wcsParamsPanel.getLayerName();
628
        }
629

    
630
        public void initWizard() {
631
                setDataSource(new WCSWizardData());
632
        }
633

    
634
        public void execute() {
635
        }
636

    
637
        /**
638
         * Creates a new layer to be passed to gvSIG. This method is automatically called
639
         * by gvSIG and it must ensure that a layer is fully and correctly created or then
640
         * return null.
641
         */
642
        public FLayer getLayer() {
643
                FLyrWCS layer = new FLyrWCS();
644
                layer.setHost(this.getHost().toString());
645
                layer.setCoverageName(wcsParamsPanel.getCurrentCoverageName());
646
                layer.setSRS(wcsParamsPanel.getSRS());
647
                layer.setFormat(wcsParamsPanel.getFormat());
648
                layer.setFullExtent(wcsParamsPanel.getExtent());
649
                layer.setDriver(wcsParamsPanel.getDriver());
650
                layer.setTime(wcsParamsPanel.getTime());
651
                layer.setParameter(wcsParamsPanel.getParameterString());
652
                layer.setName(wcsParamsPanel.getCoverageName());
653
                layer.setMaxResolution(wcsParamsPanel.getMaxRes());
654

    
655
                return layer;
656
        }
657

    
658
}
659