Statistics
| Revision:

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

History | View | Annotate | Download (15.5 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

    
48
import javax.swing.DefaultComboBoxModel;
49
import javax.swing.JLabel;
50
import javax.swing.JPanel;
51
import javax.swing.JScrollPane;
52
import javax.swing.JTextArea;
53

    
54
import org.gvsig.gui.beans.swing.JButton;
55

    
56
import com.iver.andami.PluginServices;
57
import com.iver.cit.gvsig.fmap.layers.FLayer;
58
import com.iver.cit.gvsig.fmap.layers.FLyrWCS;
59
import com.iver.cit.gvsig.gui.WizardPanel;
60
import com.iver.cit.gvsig.gui.panels.WCSParamsPanel;
61
import com.iver.cit.gvsig.gui.wizards.WizardListener;
62
import com.iver.cit.gvsig.gui.wizards.WizardListenerSupport;
63
import com.iver.utiles.NotExistInXMLEntity;
64
import com.iver.utiles.XMLEntity;
65
import com.iver.utiles.swing.JComboBox;
66

    
67
/**
68
 * Class implementing the WCSWizard.
69
 *
70
 * Clase que implementa el Wizard para coberturas WCS
71
 * @author Jaume Dom?nguez Faus
72
 */
73
public class WCSWizard extends WizardPanel {
74
        private int page = 0;
75
        private boolean connected = false;
76
        private JComboBox cmbHost = null;
77
        private JButton btnConnect = null;
78
        private JPanel jPanel = null;
79
        private JLabel jLabel1 = null;
80
        private JLabel lblTitle = null;
81
        private JScrollPane jScrollPane = null;
82
        private JTextArea txtAbstract = null;
83
        private JPanel panelPage1 = null;
84
        private JButton btnSiguiente = null;
85
        private JButton btnAnterior = null;
86
        private JPanel jPanel1 = null;
87
        private WizardListenerSupport listenerSupport = new WizardListenerSupport();
88
        private WCSParamsPanel wcsParamsPanel = null;
89
        private WCSWizardData dataSource = null;
90
        private JPanel pnlName;
91

    
92
        /**
93
         * This is the default constructor
94
         */
95
        public WCSWizard() {
96
                super();
97
                initialize();
98
        }
99

    
100
        /**
101
         * This method initializes this
102
         */
103
        private void initialize() {
104
                setTabName("WCS");
105
                this.setLayout(null);
106
                this.setPreferredSize(new java.awt.Dimension(750, 320));
107
                this.setVisible(true);
108
                this.setSize(510, 468);
109
                this.add(getPanelPage1(), null);
110
                this.add(getPanelPage2(), null);
111
                this.add(getBtnAnterior(), null);
112
                this.add(getBtnSiguiente(), null);
113
                activarVisualizarBotones();
114
        }
115

    
116
        /**
117
         * Adds the host addres to a persistent data storage.
118
         *
119
         * con addHost guardamos la informaci?n del combo de servidores en un
120
         * almac?n persistente
121
         *
122
         * @param host
123
         */
124
        private void addHost(String host) {
125
                host = host.trim();
126

    
127
                DefaultComboBoxModel model = (DefaultComboBoxModel) getTxtHost()
128
                                .getModel();
129

    
130
                if (model.getIndexOf(host) < 0) {
131
                        model.addElement(host);
132

    
133
                        PluginServices ps = PluginServices.getPluginServices(this);
134
                        XMLEntity xml = ps.getPersistentXML();
135

    
136
                        try {
137
                                String[] servers = xml.getStringArrayProperty("wcs-servers");
138
                                String[] newServers = new String[servers.length + 1];
139
                                System.arraycopy(servers, 0, newServers, 0, servers.length);
140
                                newServers[servers.length] = host;
141
                                xml.putProperty("wcs-servers", newServers);
142
                        } catch (NotExistInXMLEntity e) {
143
                                xml.putProperty("wcs-servers", new String[] { host });
144
                        }
145

    
146
                        ps.setPersistentXML(xml);
147
                }
148
        }
149

    
150
        /**
151
         * Fills up the initial WCSWizard controls.
152
         *
153
         * Rellena los primeros controles del WCS Wizard
154
         *
155
         * jaume
156
         */
157
        private void rellenarControles() {
158
                try {
159
                        String host = cmbHost.getModel().getSelectedItem().toString();
160

    
161
                        dataSource.setHost(new URL(host));
162

    
163
                        addHost(host);
164
                        getLblTitle().setText(dataSource.getTitle());
165
                        getTxtAbstract().setText(dataSource.getDescription());
166
                        wcsParamsPanel.getLstCoverages().setListData(
167
                                        dataSource.getCoverageList());
168
                        wcsParamsPanel.setWizardData(dataSource);
169

    
170
                        connected = true;
171
                        activarVisualizarBotones();
172
                } catch (Exception e) {
173
                        listenerSupport.callError(e);
174
                        e.printStackTrace();
175
                }
176
        }
177

    
178
        /**
179
         * Enables or disables the Next and Previous buttons according with the current
180
         * page and the enabled pages.
181
         */
182
        private void activarVisualizarBotones() {
183
                if (page == 0) {
184
                        getBtnAnterior().setEnabled(false);
185
                        getBtnSiguiente().setVisible(true);
186
                        if (connected) {
187
                                getBtnSiguiente().setEnabled(true);
188
                        } else {
189
                                getBtnSiguiente().setEnabled(false);
190
                        }
191
                } else if (page < wcsParamsPanel.getNumTabs()) {
192
                        getBtnSiguiente().setEnabled(true);
193
                        getBtnSiguiente().setVisible(true);
194
                        getBtnAnterior().setEnabled(true);
195
                        getBtnAnterior().setVisible(true);
196
                        if (wcsParamsPanel.nextPageEnabled()==-1){
197
                            getBtnSiguiente().setEnabled(false);
198
                        }
199
                        listenerSupport.callStateChanged(wcsParamsPanel.isCorretlyConfigured());
200
                } else if (page == wcsParamsPanel.getNumTabs()) {
201
                        getBtnSiguiente().setVisible(false);
202
                        getBtnSiguiente().setEnabled(false);
203
                        listenerSupport.callStateChanged(wcsParamsPanel
204
                                        .isCorretlyConfigured());
205
                }
206

    
207
        }
208

    
209

    
210

    
211
        /**
212
         * This method initializes txtHost from the persistent data storage
213
         *
214
         * @return javax.swing.JTextField
215
         */
216
        private javax.swing.JComboBox getTxtHost() {
217
                if (cmbHost == null) {
218
                        cmbHost = new JComboBox();
219
                        cmbHost.setModel(new DefaultComboBoxModel());
220
                        cmbHost.setPreferredSize(new java.awt.Dimension(350, 20));
221
                        cmbHost.setBounds(11, 26, 454, 20);
222
                        cmbHost.setEditable(true);
223

    
224
                        XMLEntity xml = PluginServices.getPluginServices(this)
225
                                        .getPersistentXML();
226
                        if (xml == null)
227
                                xml = new XMLEntity();
228

    
229
                        if (!xml.contains("wcs-servers")) {
230
                                String[] servers = new String[1];
231
                                servers[0] = "http://hypnos.cbs.umn.edu/cgi-bin/mapserv?map=/data/wcs/demo.map";
232
                                //servers[1] = "http://172.19.21.36/cgi-bin/wcs";
233

    
234
                                xml.putProperty("wcs-servers", servers);
235
                        }
236

    
237
                        try {
238
                                String[] servers = xml.getStringArrayProperty("wcs-servers");
239

    
240
                                for (int i = 0; i < servers.length; i++) {
241
                                        ((DefaultComboBoxModel) cmbHost.getModel())
242
                                                        .addElement(servers[i]);
243
                                }
244
                        } catch (NotExistInXMLEntity e) {
245
                        }
246
                }
247

    
248
                return cmbHost;
249
        }
250

    
251

    
252
        /**
253
         * This method initializes btnDetalles
254
         *
255
         * @return JButton
256
         */
257
        private JButton getBtnConnect() {
258
                if (btnConnect == null) {
259
                        btnConnect = new JButton();
260
                        btnConnect.setPreferredSize(new java.awt.Dimension(100, 20));
261
                        btnConnect.setBounds(366, 50, 100, 20);
262
                        btnConnect.setText(PluginServices.getText(this, "connect"));
263
                        btnConnect.addActionListener(new java.awt.event.ActionListener() {
264
                                public void actionPerformed(java.awt.event.ActionEvent e) {
265
                                        wcsParamsPanel.cleanupWizard();
266
                                        connected = false;
267
                                        rellenarControles();
268
                                }
269
                        });
270
                }
271

    
272
                return btnConnect;
273
        }
274

    
275
        /**
276
         * This method initializes jPanel
277
         *
278
         * @return JPanel
279
         */
280
        private JPanel getJPanel() {
281
                if (jPanel == null) {
282
                        jPanel = new javax.swing.JPanel();
283
                        jPanel.setLayout(null);
284
                        jPanel.setPreferredSize(new java.awt.Dimension(470, 130));
285
                        jPanel.setBorder(javax.swing.BorderFactory.createTitledBorder(null,
286
                                        PluginServices.getText(this, "descripcion"),
287
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
288
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
289
                                        null));
290
                        jPanel.setBounds(2, 96, 477, 324);
291
                        jPanel.add(getPnlName(), null);
292
                        jPanel.add(getJScrollPane(), null);
293
                }
294

    
295
                return jPanel;
296
        }
297

    
298
        /**
299
         * This method initializes jLabel1
300
         *
301
         * @return JLabel
302
         */
303
        private JLabel getJLabel1() {
304
                if (jLabel1 == null) {
305
                        jLabel1 = new javax.swing.JLabel();
306
                        jLabel1.setText(PluginServices.getText(this, "nombre") + ":");
307
                        jLabel1.setBounds(37, 26, 40, 15);
308
                }
309

    
310
                return jLabel1;
311
        }
312

    
313
        /**
314
         * This method initializes lblTitle
315
         *
316
         * @return JLabel
317
         */
318
        private JLabel getLblTitle() {
319
                if (lblTitle == null) {
320
                        lblTitle = new javax.swing.JLabel();
321
                        lblTitle.setText("-");
322
                        lblTitle.setPreferredSize(new java.awt.Dimension(350, 16));
323
                        lblTitle.setBounds(82, 26, 350, 16);
324
                }
325

    
326
                return lblTitle;
327
        }
328

    
329
        /**
330
         * This method initializes jScrollPane
331
         *
332
         * @return JScrollPane
333
         */
334
        private JScrollPane getJScrollPane() {
335
                if (jScrollPane == null) {
336
                        jScrollPane = new javax.swing.JScrollPane();
337
                        jScrollPane.setViewportView(getTxtAbstract());
338
                        jScrollPane.setPreferredSize(new java.awt.Dimension(450, 60));
339
                        jScrollPane.setBounds(10, 47, 450, 267);
340
                }
341

    
342
                return jScrollPane;
343
        }
344

    
345
        /**
346
         * This method initializes txtAbstract
347
         *
348
         * @return JTextArea
349
         */
350
        private JTextArea getTxtAbstract() {
351
                if (txtAbstract == null) {
352
                        txtAbstract = new javax.swing.JTextArea();
353
                        txtAbstract.setWrapStyleWord(true);
354
                        txtAbstract.setColumns(30);
355
                        txtAbstract.setLineWrap(true);
356
                }
357

    
358
                return txtAbstract;
359
        }
360

    
361
        /**
362
         * This method initializes panelPage1
363
         *
364
         * @return JPanel
365
         */
366
        private JPanel getPanelPage1() {
367
                if (panelPage1 == null) {
368
                        panelPage1 = new javax.swing.JPanel();
369
                        panelPage1.setLayout(null);
370
                        panelPage1.setPreferredSize(new java.awt.Dimension(480, 220));
371
                        panelPage1.setVisible(true);
372
                        panelPage1.setBounds(15, 5, 480, 427);
373
                        panelPage1.add(getJPanel1(), null);
374
                        panelPage1.add(getJPanel(), null);
375
                }
376

    
377
                return panelPage1;
378
        }
379

    
380
        /**
381
         * This method initializes panelPage2
382
         *
383
         * @return JPanel
384
         */
385
        private JPanel getPanelPage2() {
386
                if (wcsParamsPanel == null) {
387
                        wcsParamsPanel = new WCSParamsPanel();
388
                        wcsParamsPanel.setListenerSupport(this.listenerSupport);
389
                        wcsParamsPanel.setBounds(15, 5, 480, 428);
390
                }
391

    
392
                return wcsParamsPanel;
393
        }
394

    
395
        /**
396
         * This method initializes pnlName
397
         *
398
         * @return JPanel
399
         */
400
        private JPanel getPnlName() {
401
                if (pnlName == null) {
402
                        pnlName = new JPanel(new FlowLayout(FlowLayout.LEFT, 10, 0));
403
                        pnlName.setBounds(new java.awt.Rectangle(9,19,452,24));
404
                        pnlName.add(getJLabel1(), null);
405
                        pnlName.add(getLblTitle(), null);
406
                }
407
                return pnlName;
408
        }
409

    
410

    
411

    
412
        /**
413
         * This method initializes btnSiguiente
414
         *
415
         * @return JButton
416
         */
417
        private JButton getBtnSiguiente() {
418
                if (btnSiguiente == null) {
419
                        btnSiguiente = new JButton();
420
                        btnSiguiente.setPreferredSize(new java.awt.Dimension(100, 30));
421
                        btnSiguiente.setBounds(395, 444, 100, 20);
422
                        btnSiguiente.setText(PluginServices.getText(this, "siguiente"));
423
                        btnSiguiente.addActionListener(new java.awt.event.ActionListener() {
424
                                public void actionPerformed(java.awt.event.ActionEvent e) {
425
                                        if (page > 0) {
426
                                                // si page es mayor que cero, vamos enfocando las
427
                                                // sucesivas SOLAPAS del WCSParamsPanel
428
                                                wcsParamsPanel.avanzaTab();
429
                                                page = wcsParamsPanel.getIndiceSolapaActual();
430
                                        }
431
                                        page++;
432

    
433
                                        getPanelPage1().setVisible(false);
434
                                        getPanelPage2().setVisible(true);
435
                                        activarVisualizarBotones();
436
                                }
437
                        });
438
                }
439
                return btnSiguiente;
440
        }
441

    
442
        /**
443
         * This method initializes btnAnterior
444
         *
445
         * @return JButton
446
         */
447
        private JButton getBtnAnterior() {
448
                if (btnAnterior == null) {
449
                        btnAnterior = new JButton();
450
                        btnAnterior.setBounds(292, 444, 100, 20);
451
                        btnAnterior.setText(PluginServices.getText(this, "anterior"));
452
                        btnAnterior.addActionListener(new java.awt.event.ActionListener() {
453
                                public void actionPerformed(java.awt.event.ActionEvent e) {
454
                                        page --;
455
                                        if (page > 0) {
456
                                                // Tenemos que retroceder en el wcsParamsPanel
457
                                                wcsParamsPanel.retrocedeTab();
458
                                                page = wcsParamsPanel.getIndiceSolapaActual() + 1;
459
                                                activarVisualizarBotones();
460
                                        } else if (page==0){
461
                                                activarVisualizarBotones();
462
                                                page = 1;
463
                                                wcsParamsPanel.cleanupWizard();
464
                                                getLblTitle().setText("-");
465
                                                getTxtAbstract().setText("");
466
                                                wcsParamsPanel.retrocedeTab();
467
                                                getPanelPage1().setVisible(true);
468
                                                getPanelPage2().setVisible(false);
469
                                                getBtnSiguiente().setEnabled(false);
470
                                                connected = false;
471
                                        }
472
                                        listenerSupport.callStateChanged(wcsParamsPanel.isCorretlyConfigured());
473
                                }
474
                        });
475
                }
476
                return btnAnterior;
477
        }
478

    
479
        /**
480
         * This method initializes jPanel1
481
         *
482
         * @return javax.swing.JPanel
483
         */
484
        private JPanel getJPanel1() {
485
                if (jPanel1 == null) {
486
                        jPanel1 = new javax.swing.JPanel();
487
                        jPanel1.setLayout(null);
488
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
489
                                        null, PluginServices.getText(this, "server"),
490
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
491
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null, null));
492
                        jPanel1.setBounds(2, 5, 477, 85);
493
                        jPanel1.add(getTxtHost(), null);
494
                        jPanel1.add(getBtnConnect(), null);
495
                }
496

    
497
                return jPanel1;
498
        }
499

    
500
        /**
501
         * Adds the gvSIG's wizard listener
502
         *
503
         * @param listener
504
         */
505
        public void addWizardListener(WizardListener listener) {
506
                listenerSupport.addWizardListener(listener);
507
        }
508

    
509
        /**
510
         * Removes the gvSIG's wizard listener
511
         *
512
         * @param listener
513
         */
514
        public void removeWizardListener(WizardListener listener) {
515
                listenerSupport.removeWizardListener(listener);
516
        }
517

    
518
        /**
519
         * Returns the Wizard's data source
520
         *
521
         * @return
522
         */
523
        public WCSWizardData getDataSource() {
524
                return dataSource;
525
        }
526

    
527
        /**
528
         * sets the wizard's data source
529
         *
530
         * @param source
531
         */
532
        public void setDataSource(WCSWizardData source) {
533
                dataSource = source;
534
        }
535

    
536
        /**
537
         * Returns the rectangle that contains all the others
538
         *
539
         * Obtiene el rect?ngulo que contiene a todos los otros
540
         *
541
         * @param rects[]  rectangulos
542
         *
543
         * @return Rectangle2D
544
         */
545
        public static Rectangle2D getRectangle(Rectangle2D[] rects) {
546
                Rectangle2D ret = rects[0];
547

    
548
                for (int i = 1; i < rects.length; i++) {
549
                        ret.add(rects[i]);
550
                }
551

    
552
                return ret;
553
        }
554

    
555
        /**
556
         * Returns the host typed in the host text field or null if nothing is typed
557
         * or it is not a valid URL.
558
         *
559
         * Devuelve el host que est? escrito en el cuadro de texto del host o null
560
         * en caso de que no haya nada escrito o est? mal escrito
561
         *
562
         * @return URL del host
563
         */
564
        public URL getHost() {
565
                try {
566
                        return new URL(cmbHost.getModel().getSelectedItem().toString());
567
                } catch (MalformedURLException e) {
568
                        return null;
569
                }
570
        }
571

    
572
        /**
573
         * Returns the name of the coverage that appears in the TOC
574
         *
575
         * @return String
576
         */
577
        public String getLayerName() {
578
                return wcsParamsPanel.getLayerName();
579
        }
580

    
581
        public void initWizard() {
582
                setDataSource(new WCSWizardData());
583
        }
584

    
585
        public void execute() {
586
        }
587

    
588
        /**
589
         * Creates a new layer to be passed to gvSIG. This method is automatically called
590
         * by gvSIG and it must ensure that a layer is fully and correctly created or then
591
         * return null.
592
         */
593
        public FLayer getLayer() {
594
                FLyrWCS layer = new FLyrWCS();
595
                layer.setHost(this.getHost().toString());
596
                layer.setCoverageName(wcsParamsPanel.getCurrentCoverageName());
597
                layer.setSRS(wcsParamsPanel.getSRS());
598
                layer.setFormat(wcsParamsPanel.getFormat());
599
                layer.setFullExtent(wcsParamsPanel.getExtent());
600
                layer.setDriver(wcsParamsPanel.getDriver());
601
                layer.setTime(wcsParamsPanel.getTime());
602
                layer.setParameter(wcsParamsPanel.getParameterString());
603
                layer.setName(wcsParamsPanel.getCoverageName());
604
                layer.setMaxResolution(wcsParamsPanel.getMaxRes());
605
                return layer;
606
        }
607

    
608
}
609