Statistics
| Revision:

gvsig-raster / org.gvsig.raster.wms / trunk / org.gvsig.raster.wms / org.gvsig.raster.wms.app / org.gvsig.raster.wms.app.wmsclient / src / main / java / org / gvsig / raster / wms / app / wmsclient / gui / panel / WMSParamsPanel.java @ 1173

History | View | Annotate | Download (50 KB)

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

    
25
import java.awt.Component;
26
import java.awt.Dimension;
27
import java.awt.event.FocusAdapter;
28
import java.awt.event.FocusEvent;
29
import java.awt.event.FocusListener;
30
import java.awt.event.MouseAdapter;
31
import java.awt.event.MouseEvent;
32
import java.awt.geom.Rectangle2D;
33
import java.util.AbstractCollection;
34
import java.util.ArrayList;
35
import java.util.Hashtable;
36
import java.util.TreeSet;
37
import java.util.Vector;
38
import java.util.prefs.Preferences;
39

    
40
import javax.swing.JButton;
41
import javax.swing.JCheckBox;
42
import javax.swing.JList;
43
import javax.swing.JOptionPane;
44
import javax.swing.JPanel;
45
import javax.swing.JScrollPane;
46
import javax.swing.JTabbedPane;
47
import javax.swing.JTextField;
48
import javax.swing.tree.TreePath;
49

    
50
import org.cresques.cts.ICoordTrans;
51
import org.cresques.cts.IProjection;
52
import org.gvsig.andami.PluginServices;
53
import org.gvsig.andami.messages.NotificationManager;
54
import org.gvsig.app.gui.WizardPanel;
55
import org.gvsig.app.gui.wizards.FormatListModel;
56
import org.gvsig.app.gui.wizards.WizardListenerSupport;
57
import org.gvsig.fmap.crs.CRSFactory;
58
import org.gvsig.fmap.dal.DALLocator;
59
import org.gvsig.fmap.dal.DataManager;
60
import org.gvsig.fmap.dal.DataParameters;
61
import org.gvsig.fmap.dal.DataStoreParameters;
62
import org.gvsig.fmap.dal.coverage.store.parameter.TileDataParameters;
63
import org.gvsig.fmap.dal.exception.InitializeException;
64
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
65
import org.gvsig.fmap.mapcontext.exceptions.LoadLayerException;
66
import org.gvsig.fmap.mapcontext.exceptions.ProjectionLayerException;
67
import org.gvsig.fmap.mapcontext.layers.FLayer;
68
import org.gvsig.fmap.mapcontext.layers.FLayers;
69
import org.gvsig.gui.beans.controls.dnd.JDnDListModel;
70
import org.gvsig.gui.beans.listeners.BeanListener;
71
import org.gvsig.raster.wms.app.wmsclient.gui.wizard.LayerTreeModel;
72
import org.gvsig.raster.wms.app.wmsclient.gui.wizard.SRSListModel;
73
import org.gvsig.raster.wms.app.wmsclient.layer.FLyrWMS;
74
import org.gvsig.raster.wms.io.RemoteWMSStyle;
75
import org.gvsig.raster.wms.io.WMSDataParameters;
76
import org.gvsig.raster.wms.io.WMSLayerNode;
77
import org.gvsig.raster.wms.io.WMSServerExplorer;
78
import org.gvsig.raster.wms.io.time.RemoteTimeDimension;
79

    
80

    
81
/**
82
 * This class implements the map option panel.
83
 *
84
 * It includes a set of Listeners that implement some control rules which
85
 * refresh the component values that depends on those selected in the other
86
 * components to avoid to choose an invalid set of options. It also includes a
87
 * method (isCorrectlyConfigured()) that checks if the current set of values is
88
 * enough to correctly launch a GetMap request.
89
 *
90
 * The information is obtained from a WMSWizardDataSource object.
91
 *
92
 *
93
 * Esta clase implementa el panel de opciones disponibles sobre el mapa
94
 *
95
 * Incluye una serie de Listeners que implementan unas reglas de control que
96
 * refrescan los valores de componentes cuyos valores dependen de aqu?llos
97
 * seleccionados en otros componentes para evitar que se escoja una combinaci?n
98
 * de opciones err?nea as? como una funci?n (isCorrectlyConfigured()) que
99
 * comprueba si la combinaci?n escogida actualmente es suficiente para lanzar
100
 * una operaci?n GetMap correctamente.
101
 *
102
 * La informaci?n obtiene a partir de un objeto WMSWizardDataSource.
103
 *
104
 * @author jaume - jaume dominguez faus
105
 *
106
 */
107
@SuppressWarnings("unchecked")
108
public class WMSParamsPanel extends WizardPanel {
109
        private static final long       serialVersionUID       = 1L;
110
        private JScrollPane             jScrollPane1           = null;
111
        private JScrollPane             jScrollPane2           = null;
112
        private JScrollPane             jScrollPane3           = null;
113
        private JScrollPane             jScrollPane5           = null;
114
        private JButton                 btnAdd                 = null;
115
        private JButton                 btnDel                 = null;
116
        private JScrollPane             jScrollPane6           = null;
117
        private JPanel                  jPanel2                = null;
118
        private JPanel                  tabFormats             = null;
119
        private JPanel                  jPanel4                = null;
120
        private JTextField              jTxtNomCapa            = null;
121
        private LayerList               lstSelectedLayers      = null;
122
        private ArrayList<TreePath>     selectedPaths          = new ArrayList<TreePath>();
123
        private JList                   lstSRSs                = null;
124
        private JList                   lstInfoFormats         = null;
125
        private LayerTree               treeLayers             = null;
126
        private JList                   lstFormats             = null;
127
        private WizardListenerSupport   listenerSupport;
128
        private JTabbedPane             jTabbedPane            = null;
129
        private JPanel                  tabLayers              = null;
130
        private JPanel                  jPanel1                = null;
131
        private JPanel                  jPanel5                = null;
132
        private JPanel                  jPanel6                = null;
133
        private StylesPanel             tabStyle               = null;
134
        private JCheckBox               chkTransparency        = null;
135
        private InfoPanel               tabInfo                = null;
136
        private DimensionPanel          tabDimensions          = null;
137
        private int                     dimensionTabIndex;
138
        private int                     stylesTabIndex;
139
        private String                  oldSRS                 = null;
140
        private AbstractCollection      oldDimensions          = null;
141
        private Dimension               sizeFixed;
142
        private JCheckBox               chkExtendedNames       = null;
143
        private JButton                 btnUp                  = null;
144
        private JButton                 btnDown                = null;
145
        protected WMSServerExplorer     explorer               = null;
146
        private boolean                 updating               = fPrefs.getBoolean("refresh_capabilities", false);
147
        public static Preferences       fPrefs                 = Preferences.userRoot().node("gvsig.wms-wizard");
148
        private JCheckBox               chkDisagregate         = null;
149
        private boolean                 lastCached;
150
        private String                  groupName              = "WMS Group";
151

    
152
        public WMSParamsPanel() {
153
                super();
154
                initialize();
155
        }
156

    
157
        // TODO: crear nuevo constructor para a?adir los panels que quieras...
158
        public WMSParamsPanel(WMSServerExplorer data) {
159
                super();
160
                setWizardData(data);
161
                this.setLayout(null);
162
                this.setVisible(false);
163
                this.setBounds(0, 0, 510, 427);
164
                if (jTabbedPane == null) {
165
                        jTabbedPane = new JTabbedPane();
166
                        jTabbedPane.setBounds(4, 4, 502, 415);
167
                        StylesPanel sp = getTabStyle();
168
                        DimensionPanel dp = getTabDimensions();
169

    
170
                        jTabbedPane.addTab(PluginServices.getText(this, "capas"), null,
171
                                        getTabLayers(), null);
172
                        jTabbedPane.addTab(PluginServices.getText(this, "estilos"), null,
173
                                        sp, null);
174
                        stylesTabIndex = jTabbedPane.getTabCount() - 1;
175
                        jTabbedPane.addTab(PluginServices.getText(this, "dimensiones"),
176
                                        null, dp, null);
177
                        dimensionTabIndex = jTabbedPane.getTabCount() - 1;
178
                        jTabbedPane.addTab(PluginServices.getText(this, "formatos"), null,
179
                                        getTabFormats(), null);
180
                        jTabbedPane.setEnabledAt(dimensionTabIndex, false);
181
                        jTabbedPane.setEnabledAt(stylesTabIndex, false);
182
                }
183
                this.add(jTabbedPane, null);
184

    
185
                setListenerSupport(new WizardListenerSupport());
186
        }
187

    
188
        /**
189
         * This method initializes panelPage2
190
         *
191
         * @return Panel
192
         */
193
        private void initialize() {
194
                this.setLayout(null);
195
                this.setVisible(false);
196
                this.setBounds(0, 0, 510, 427);
197
                this.add(getJTabbedPane(), null);
198
        }
199
        
200
        public boolean isUpdatingCache() {
201
                return updating;
202
        }
203

    
204
        public void setUpdatingCache(boolean updating) {
205
                this.updating = updating;
206
        }
207

    
208
        /**
209
         * This method initializes jPanel2
210
         *
211
         * @return Panel
212
         */
213
        private JPanel getJPanel2() {
214
                if (jPanel2 == null) {
215
                        jPanel2 = new JPanel();
216
                        jPanel2.setLayout(null);
217
                        jPanel2.setBounds(5, 59, 485, 328);
218
                        jPanel2.setBorder(javax.swing.BorderFactory.createTitledBorder(
219
                                        null, PluginServices.getText(this, "select_layers"),
220
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
221
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
222
                                        null));
223
                        jPanel2.add(getChkExtendedNames(), null);
224

    
225
                        jPanel2.add(getJScrollPane1(), null);
226
                        jPanel2.add(getBtnDel(), null);
227
                        jPanel2.add(getBtnAdd(), null);
228
                        jPanel2.add(getJScrollPane5(), null);
229
                        jPanel2.add(getBtnUp(), null);
230
                        jPanel2.add(getBtnDown(), null);
231
                        jPanel2.add(getChkDisagregate(), null);
232
                }
233

    
234
                return jPanel2;
235
        }
236

    
237
        /**
238
         * This method initializes jPanel4
239
         *
240
         * @return Panel
241
         */
242
        private JPanel getJPanel4() {
243
                if (jPanel4 == null) {
244
                        jPanel4 = new JPanel();
245
                        jPanel4.setLayout(null);
246
                        jPanel4.setBorder(javax.swing.BorderFactory.createTitledBorder(
247
                                        null, PluginServices.getText(this, "layer_name"),
248
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
249
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
250
                                        null));
251
                        jPanel4.setBounds(5, 8, 485, 49);
252
                        jPanel4.add(getJTxtNomCapa(), null);
253
                }
254

    
255
                return jPanel4;
256
        }
257

    
258
        /**
259
         * This method initializes jPanel3
260
         *
261
         * @return Panel
262
         */
263
        private JPanel getTabFormats() {
264
                if (tabFormats == null) {
265
                        tabFormats = new JPanel();
266
                        tabFormats.setLayout(null);
267
                        tabFormats.add(getJPanel1(), null);
268
                        tabFormats.add(getJPanel5(), null);
269
                        tabFormats.add(getJPanel6(), null);
270
                }
271

    
272
                return tabFormats;
273
        }
274

    
275
        /**
276
         * This method initializes jScrollPane1
277
         *
278
         * @return ScrollPane
279
         */
280
        private JScrollPane getJScrollPane1() {
281
                if (jScrollPane1 == null) {
282
                        jScrollPane1 = new JScrollPane();
283
                        jScrollPane1.setBounds(11, 22, 460, 123);
284
                        jScrollPane1.setViewportView(getTreeLayers());
285
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(205, 75));
286
                }
287

    
288
                return jScrollPane1;
289
        }
290

    
291
        /**
292
         * This method initializes btnDel
293
         *
294
         * @return Button
295
         */
296
        private JButton getBtnDel() {
297
                if (btnDel == null) {
298
                        btnDel = new JButton();
299
                        // btnDel.setPreferredSize(new java.awt.Dimension(23, 23));
300
                        btnDel.setText(PluginServices.getText(this, "remove"));
301
                        btnDel.setMargin(new java.awt.Insets(2, 0, 2, 0));
302
                        btnDel.setBounds(339, 300, 101, 20);
303
                        btnDel.setEnabled(false);
304
                        btnDel.addActionListener(new java.awt.event.ActionListener() {
305
                                public void actionPerformed(java.awt.event.ActionEvent e) {
306
                                        delLayer();
307
                                }
308
                        });
309
                }
310
                return btnDel;
311
        }
312

    
313
        /**
314
         * This method initializes btnAdd
315
         *
316
         * @return Button
317
         */
318
        private JButton getBtnAdd() {
319
                if (btnAdd == null) {
320
                        btnAdd = new JButton();
321
                        // btnAdd.setPreferredSize(new java.awt.Dimension(23, 23));
322
                        btnAdd.setText(PluginServices.getText(this, "add"));
323
                        btnAdd.setMargin(new java.awt.Insets(2, 0, 2, 0));
324
                        btnAdd.setBounds(236, 300, 101, 20);
325
                        btnAdd.setEnabled(false);
326
                        btnAdd.addActionListener(new java.awt.event.ActionListener() {
327
                                public void actionPerformed(java.awt.event.ActionEvent e) {
328
                                        addLayer();
329
                                }
330
                        });
331
                }
332
                return btnAdd;
333
        }
334

    
335
        /**
336
         * This method initializes jScrollPane5
337
         *
338
         * @return ScrollPane
339
         */
340
        private JScrollPane getJScrollPane5() {
341
                if (jScrollPane5 == null) {
342
                        jScrollPane5 = new JScrollPane();
343
                        jScrollPane5.setBounds(11, 155, 422, 120);
344
                        jScrollPane5.setViewportView(getLstSelectedLayers());
345
                        jScrollPane5.setPreferredSize(new java.awt.Dimension(205, 75));
346
                }
347

    
348
                return jScrollPane5;
349
        }
350

    
351
        /**
352
         * This method initializes jTextField
353
         *
354
         * @return TextField
355
         */
356
        private JTextField getJTxtNomCapa() {
357
                if (jTxtNomCapa == null) {
358
                        jTxtNomCapa = new JTextField();
359
                        jTxtNomCapa.setBounds(10, 19, 460, 20);
360
                        jTxtNomCapa.setText(PluginServices.getText(this, "WMSLayer"));
361
                        jTxtNomCapa.addKeyListener(new java.awt.event.KeyAdapter() {
362
                                public void keyTyped(java.awt.event.KeyEvent e) {
363
                                        fireWizardComplete(isCorrectlyConfigured());
364
                                }
365
                        });
366
                }
367

    
368
                return jTxtNomCapa;
369
        }
370
        
371
        /**
372
         * This method initializes jPanel1
373
         *
374
         * @return Panel
375
         */
376
        private JPanel getJPanel1() {
377
                if (jPanel1 == null) {
378
                        jPanel1 = new JPanel();
379
                        jPanel1.setLayout(null);
380
                        jPanel1.setBorder(javax.swing.BorderFactory.createTitledBorder(
381
                                        null, PluginServices.getText(this, "select_formats"),
382
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
383
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
384
                                        null));
385
                        jPanel1.setBounds(5, 10, 485, 140);
386
                        jPanel1.add(getJScrollPane6(), null);
387
                        jPanel1.add(getChkTransparency(), null);
388
                }
389
                return jPanel1;
390
        }
391

    
392
        /**
393
         * This method initializes jPanel5
394
         *
395
         * @return Panel
396
         */
397
        private JPanel getJPanel5() {
398
                if (jPanel5 == null) {
399
                        jPanel5 = new JPanel();
400
                        jPanel5.setLayout(null);
401
                        jPanel5.setBorder(javax.swing.BorderFactory.createTitledBorder(
402
                                        null, PluginServices.getText(this, "seleccionar_srs"),
403
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
404
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
405
                                        null));
406
                        jPanel5.setBounds(5, 150, 485, 140);
407
                        jPanel5.add(getJScrollPane2(), null);
408
                }
409
                return jPanel5;
410
        }
411
        
412
        /**
413
         * This method initializes jPanel6
414
         *
415
         * @return Panel
416
         */
417
        private JPanel getJPanel6() {
418
                if (jPanel6 == null) {
419
                        jPanel6 = new JPanel();
420
                        jPanel6.setLayout(null);
421
                        jPanel6.setBorder(javax.swing.BorderFactory.createTitledBorder(
422
                                        null, PluginServices.getText(this, "seleccionar_infobypoint_format"),
423
                                        javax.swing.border.TitledBorder.DEFAULT_JUSTIFICATION,
424
                                        javax.swing.border.TitledBorder.DEFAULT_POSITION, null,
425
                                        null));
426
                        jPanel6.setBounds(5, 295, 485, 78);
427
                        jPanel6.add(getJScrollPane3(), null);
428
                }
429
                return jPanel6;
430
        }
431

    
432
        /**
433
         * This method initializes jScrollPane6
434
         *
435
         * @return ScrollPane
436
         */
437
        private JScrollPane getJScrollPane6() {
438
                if (jScrollPane6 == null) {
439
                        jScrollPane6 = new JScrollPane();
440
                        jScrollPane6.setBounds(5, 23, 470, 110);
441
                        jScrollPane6.setViewportView(getLstFormats());
442
                        jScrollPane6.setPreferredSize(new java.awt.Dimension(250, 180));
443
                }
444

    
445
                return jScrollPane6;
446
        }
447

    
448
        /**
449
         * This method initializes jScrollPane2
450
         *
451
         * @return ScrollPane
452
         */
453
        private JScrollPane getJScrollPane2() {
454
                if (jScrollPane2 == null) {
455
                        jScrollPane2 = new JScrollPane();
456
                        jScrollPane2.setBounds(5, 23, 470, 110);
457
                        jScrollPane2.setViewportView(getLstSRSs());
458
                        jScrollPane2.setPreferredSize(new java.awt.Dimension(250, 180));
459
                }
460

    
461
                return jScrollPane2;
462
        }
463
        
464
        /**
465
         * This method initializes jScrollPane3
466
         *
467
         * @return ScrollPane
468
         */
469
        private JScrollPane getJScrollPane3() {
470
                if (jScrollPane3 == null) {
471
                        jScrollPane3 = new JScrollPane();
472
                        jScrollPane3.setBounds(5, 23, 470, 45);
473
                        jScrollPane3.setViewportView(getLstInfoFormats());
474
                        jScrollPane3.setPreferredSize(new java.awt.Dimension(250, 120));
475
                }
476

    
477
                return jScrollPane3;
478
        }
479

    
480
        /**
481
         * Gets the available layers in WMS maintaining the tree structure
482
         *
483
         * @return
484
         */
485
        public LayerTree getLayerStructure() {
486
                return treeLayers;
487
        }
488

    
489
        /**
490
         * This method initializes treeLayers
491
         *
492
         * @return Tree
493
         */
494
        private LayerTree getTreeLayers() {
495
                if (treeLayers == null) {
496
                        treeLayers = new LayerTree();
497
                        treeLayers.setRootVisible(true);
498
                        treeLayers.addMouseListener(new java.awt.event.MouseAdapter() {
499
                                public void mouseClicked(java.awt.event.MouseEvent e) {
500
                                        if (e.getClickCount() == 2) {
501
                                                addLayer();
502
                                        }
503
                                }
504
                        });
505
                        treeLayers
506
                                        .addTreeSelectionListener(new javax.swing.event.TreeSelectionListener() {
507
                                                public void valueChanged(
508
                                                                javax.swing.event.TreeSelectionEvent e) {
509

    
510
                                                        boolean isGetMapable = false; 
511
                                                        TreePath[] selecciones = getTreeLayers()
512
                                                                        .getSelectionPaths();
513
                                                        if (selecciones != null) {
514
                                                                for (int i = 0; i < selecciones.length
515
                                                                                && !isGetMapable; i++) {
516
                                                                        WMSLayerNode layer = ((WMSLayerNode) selecciones[i]
517
                                                                                        .getLastPathComponent());
518
                                                                        isGetMapable = layer.getChildren().size() == 0
519
                                                                                        || layer.getName() != null;
520
                                                                }
521

    
522
                                                        }
523
                                                        getBtnAdd().setEnabled(isGetMapable);
524
                                                        fireWizardComplete(isCorrectlyConfigured());
525
                                                }
526
                                        });
527
                }
528

    
529
                return treeLayers;
530
        }
531

    
532
        /**
533
         * This method checks for the options selected within the configuration
534
         * dialog are correct and enough to perform a GetMap request.
535
         *
536
         * @return true if you're done, false if not.
537
         */
538
        public boolean isCorrectlyConfigured() {
539

    
540
                boolean b;
541
                this.repaint();
542
                if ((getLstSRSs().getSelectedIndex() != -1)
543
                                && (getLstFormats().getSelectedIndex() != -1)
544
                                && (getLstInfoFormats().getSelectedIndex() != -1)
545
                                && (getLstSelectedLayers().getModel().getSize() > 0)) {
546
                        b = true;
547
                } else {
548
                        b = false;
549
                }
550

    
551
                // Enable or disable del button.
552
                int[] selectedIndices = getLstSelectedLayers().getSelectedIndices();
553

    
554
                getBtnDel().setEnabled(selectedIndices != null && selectedIndices.length > 0);
555

    
556
                return b;
557
        }
558

    
559
        public WMSLayerNode[] selectedLayersToArray() {
560
                JDnDListModel modelo = ((JDnDListModel) lstSelectedLayers.getModel());
561
                ArrayList elements = modelo.getElements();
562
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
563
                                .toArray(new WMSLayerNode[0]);
564
                return layers;
565
        }
566

    
567
        /**
568
         * DOCUMENT ME!
569
         */
570
        private void delLayer() {
571
                int[] indices = lstSelectedLayers.getSelectedIndices();
572

    
573
                try {
574
                        ArrayList removeList = new ArrayList();
575
                        WMSLayerNode[] infos = selectedLayersToArray();
576
                        JDnDListModel modelo = ((JDnDListModel) lstSelectedLayers
577
                                        .getModel());
578
                        for (int i = 0; i < indices.length; i++) {
579
                                removeList.add(infos[indices[i]]);
580
                        }
581
                        modelo.delIndices(indices);
582
                        lstSelectedLayers.clearSelection();
583
                        fireWizardComplete(isCorrectlyConfigured());
584

    
585
                        // delete from selectedPaths as well
586
                        WMSLayerNode elemento = null;
587
                        WMSLayerNode last = null;
588
                        TreePath path = null;
589
                        for (int i = removeList.size() - 1; i >= 0; i--) {
590
                                elemento = (WMSLayerNode) removeList.get(i);
591
                                for (int j = 0; j < selectedPaths.size(); j++) {
592
                                        path = (TreePath) selectedPaths.get(j);
593
                                        last = (WMSLayerNode) path.getLastPathComponent();
594
                                        if (last.getTitle().compareTo(elemento.getTitle()) == 0) {
595
                                                selectedPaths.remove(path);
596
                                        }
597
                                }
598
                        }
599

    
600
                        refreshData();
601
                        refreshInfo();
602
                } catch (ArrayIndexOutOfBoundsException ex) {
603
                        // if you reach this, please, tell me how you did it.
604
                        ex.printStackTrace();
605
                }
606
        }
607

    
608
        /**
609
         * Fires a notification to this wizard listeners telling them if the
610
         * configuration is fair enough to send a GetMap request.
611
         *
612
         * @param b
613
         */
614
        private void fireWizardComplete(boolean b) {
615
                listenerSupport.callStateChanged(b);
616
                callStateChanged(b);
617
        }
618

    
619
        /**
620
         * Refreshes the content shown by this.
621
         */
622
        public void refreshData() {
623
                JDnDListModel model = (JDnDListModel) lstSelectedLayers.getModel();
624
                if(model.getSize() > 1)
625
                        setLayerName(groupName);
626
                else if(model.getSize() == 1)
627
                        setLayerName(model.getElementAt(0).toString());
628
                else
629
                        setLayerName(PluginServices.getText(this, "WMSLayer"));
630
                refreshSRS();
631
                getLstSelectedLayers().repaint();
632
                refreshStyleTree();
633
                refreshDimensions();
634

    
635
        }
636

    
637
        /**
638
         * Refreshes the info tab
639
         *
640
         */
641
        public void refreshInfo() {
642
                getTabInfo().refresh(explorer, selectedLayersVector(),
643
                                getStyleTitles(), getFormat(), getInfoFormat(), getSRS(), getDimensions());
644
        }
645

    
646
        private void refreshDimensions() {
647
                int size = getLstSelectedLayers().getModel().getSize();
648
                boolean enable = false;
649
                for (int i = 0; i < size; i++) {
650
                        WMSLayerNode node = (WMSLayerNode) getLstSelectedLayers()
651
                                        .getModel().getElementAt(i);
652
                        if (node.getDimensions() == null) {
653
                                continue;
654
                        }
655

    
656
                        for (int j = 0; j < node.getDimensions().size(); j++) {
657
                                RemoteTimeDimension dim = (RemoteTimeDimension) node
658
                                                .getDimensions().get(j);
659

    
660
                                try {
661
                                        getTabDimensions().addDimension(dim);
662
                                        enable = true;
663
                                } catch (IllegalArgumentException e) {
664
                                        NotificationManager.addWarning(
665
                                                        "Unrecognized dimension expression: "
666
                                                                        + dim.getExpression() + " (for "
667
                                                                        + dim.getName() + " in layer '"
668
                                                                        + node.getName() + "')", null);
669
                                }
670
                        }
671
                }
672
                jTabbedPane.setEnabledAt(dimensionTabIndex, enable);
673

    
674
        }
675

    
676
        /**
677
         *
678
         */
679
        private void refreshStyleTree() {
680

    
681
                int size = getLstSelectedLayers().getModel().getSize();
682
                WMSLayerNode styleRoot = new WMSLayerNode();
683
                styleRoot.setTitle(PluginServices.getText(this, "selected_layers"));
684

    
685
                StyleTreeModel model = new StyleTreeModel(styleRoot);
686
                jTabbedPane.setEnabledAt(stylesTabIndex, false);
687
                for (int i = 0; i < size; i++) {
688
                        WMSLayerNode node = (WMSLayerNode) getLstSelectedLayers()
689
                                        .getModel().getElementAt(i);
690
                        // If any of the layers defines styles, the tab will be enabled.
691
                        if (model.addLayerBranch(node)) {
692
                                jTabbedPane.setEnabledAt(stylesTabIndex, true);
693
                        }
694
                }
695

    
696
                getStyleTree().setModel(model);
697
                getStyleTree().expandAll();
698
                getStyleTree().repaint();
699
        }
700

    
701
        /**
702
         * Takes the array of selected layers and a vector containing the style
703
         * names and set them as selected in the styles panel
704
         *
705
         * @param selectedLayers
706
         * @param styles
707
         */
708
        public void setStyleSelections(Vector<RemoteWMSStyle> styles) {
709

    
710
                WMSLayerNode[] layers = selectedLayersToArray();
711
                int length = layers.length;
712
                for (int i = 0; i < length; i++) {
713
                        String styleName = styles.get(i).getName();
714
                        layers[length - i - 1].setSelectedStyleByName(styleName);
715
                }
716
        }
717

    
718
        /**
719
         * Gets the currently shown style tree.
720
         *
721
         * @return
722
         */
723
        private StyleTree getStyleTree() {
724
                return getTabStyle().getStyleTree();
725
        }
726

    
727
        /**
728
         * Method called when pressing the Add layer button or when double-clicking
729
         * on a layer from the server's layer tree.
730
         */
731
        public void addLayer() {
732
                boolean alguno = false;
733

    
734
                TreePath[] selecciones = getTreeLayers().getSelectionPaths();
735
                if (selecciones == null) {
736
                        return;
737
                }
738
                for (int i = 0; i < selecciones.length; i++) {
739
                        selectedPaths.add(selecciones[i]);
740
                        WMSLayerNode nodo = (WMSLayerNode) selecciones[i]
741
                                        .getLastPathComponent();
742
                        if (nodo.getName() == null || nodo.getName().equals("")) {
743
                                continue;
744
                        }
745
                        if (nodo.isSizeFixed()) {
746
                                if (sizeFixed == null) {
747
                                        sizeFixed = nodo.getFixedSize();
748
                                } else if ((sizeFixed.getHeight() != nodo.getFixedSize()
749
                                                .getHeight())
750
                                                || (sizeFixed.getWidth() != nodo.getFixedSize()
751
                                                                .getWidth())) {
752
                                        JOptionPane.showMessageDialog((Component) PluginServices
753
                                                        .getMainFrame(), PluginServices.getText(this,
754
                                                        "server_cant_render_layers"));
755
                                        continue;
756
                                }
757
                        }
758
                        // s'afegeix a la llista de capes seleccionades
759
                        JDnDListModel modelo = (JDnDListModel) lstSelectedLayers.getModel();
760

    
761
                        try {
762
                                if (modelo.addElement(0, nodo.clone())) {
763
                                        alguno = true;
764
                                }
765
                        } catch (CloneNotSupportedException e) {
766
                        }
767
                }
768

    
769
                if (alguno) {
770
                        refreshData();
771
                }
772
                refreshInfo();
773
        }
774

    
775
        /**
776
         * This method initializes lstSelectedLayers
777
         *
778
         * @return List
779
         */
780
        public LayerList getLstSelectedLayers() {
781
                if (lstSelectedLayers == null) {
782
                        lstSelectedLayers = new LayerList();
783
                        lstSelectedLayers.setModel(new JDnDListModel());
784
                        lstSelectedLayers
785
                                        .setSelectionMode(javax.swing.ListSelectionModel.MULTIPLE_INTERVAL_SELECTION);
786
                        lstSelectedLayers
787
                                        .addListSelectionListener(new javax.swing.event.ListSelectionListener() {
788
                                                public void valueChanged(
789
                                                                javax.swing.event.ListSelectionEvent e) {
790
                                                        fireWizardComplete(isCorrectlyConfigured());
791
                                                }
792
                                        });
793
                        lstSelectedLayers.addMouseListener(new MouseAdapter() {
794
                                public void mouseReleased(MouseEvent e) {
795
                                        refreshData();
796
                                }
797
                        });
798
                }
799

    
800
                return lstSelectedLayers;
801
        }
802

    
803
        /**
804
         * This method initializes lstSRSs
805
         *
806
         * @return JList
807
         */
808
        public JList getLstSRSs() {
809
                if (lstSRSs == null) {
810
                        lstSRSs = new JList();
811
                        lstSRSs.setModel(new SRSListModel());
812
                        lstSRSs.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
813
                        lstSRSs.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
814
                                public void valueChanged(javax.swing.event.ListSelectionEvent e) {
815
                                        int i = lstSRSs.getSelectedIndex();
816
                                        if (i != -1) {
817
                                                oldSRS = (String) lstSRSs.getModel().getElementAt(i);
818
                                        }
819
                                        fireWizardComplete(isCorrectlyConfigured());
820
                                }
821
                        });
822
                }
823
                return lstSRSs;
824
        }
825
        
826
        /**
827
         * This method initializes lstSRSs
828
         *
829
         * @return JList
830
         */
831
        public JList getLstInfoFormats() {
832
                if (lstInfoFormats == null) {
833
                        lstInfoFormats = new JList();
834
                        lstInfoFormats.setModel(new SRSListModel());
835
                        lstInfoFormats.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
836
                        lstInfoFormats.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
837
                                public void valueChanged(javax.swing.event.ListSelectionEvent e) {
838
                                        fireWizardComplete(isCorrectlyConfigured());
839
                                }
840
                        });
841
                }
842

    
843
                return lstInfoFormats;
844
        }
845

    
846
        /**
847
         * This method initializes lstFormats
848
         *
849
         * @return List
850
         */
851
        public JList getLstFormats() {
852
                if (lstFormats == null) {
853
                        lstFormats = new JList();
854
                        lstFormats.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
855
                        lstFormats.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
856
                                public void valueChanged(javax.swing.event.ListSelectionEvent e) {
857
                                        fireWizardComplete(isCorrectlyConfigured());
858
                                }
859
                        });
860
                }
861

    
862
                return lstFormats;
863
        }
864

    
865
        /**
866
         * Refreshes the SRS list
867
         */
868
        private void refreshSRS() {
869
                ArrayList elements = ((JDnDListModel) lstSelectedLayers.getModel())
870
                                .getElements();
871
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
872
                                .toArray(new WMSLayerNode[0]);
873

    
874
                SRSListModel model = new SRSListModel();
875

    
876
                if (layers.length == 0) {
877
                        lstSRSs.setModel(model);// new DefaultListModel());
878
                        sizeFixed = null;
879
                } else {
880
                        TreeSet srsSet = new TreeSet();
881
                        srsSet.addAll(layers[0].getAllSrs());
882
                        model.setAll(srsSet);
883
                        for (int i = 1; i < layers.length; i++) {
884
                                model.setAll(model.intersect(layers[i].getAllSrs()));
885
                        }
886
                        lstSRSs.setModel(model);
887
                }
888
                int srsIndex = getSRSIndex(oldSRS);
889
                if (srsIndex != -1) {
890
                        getLstSRSs().setSelectedIndex(srsIndex);
891
                }
892

    
893
        }
894

    
895
        public void setListenerSupport(WizardListenerSupport support) {
896
                listenerSupport = support;
897
        }
898

    
899
        public void setWizardData(WMSServerExplorer data) {
900
                this.explorer = data;
901
                ((JDnDListModel) getLstSelectedLayers().getModel()).clear();
902
                getLstSelectedLayers().repaint();
903

    
904
                getLstFormats().setModel(
905
                                new FormatListModel(this.explorer.getFormats()));
906
                getLstInfoFormats().setModel(
907
                                new FormatListModel(this.explorer.getInfoFormats()));
908
                getTreeLayers()
909
                                .setModel(new LayerTreeModel(this.explorer.getLayerTree()));
910
                refreshInfo();
911
        }
912

    
913
        private Vector getStyleTitles() {
914
                return getTabStyle().getStyleTree().getStyleSelectionTitles();
915
        }
916

    
917
        /**
918
         * @return
919
         */
920
        private Vector selectedLayersVector() {
921
                JDnDListModel mod = (JDnDListModel) getLstSelectedLayers().getModel();
922
                Vector lyrs = new Vector();
923
                for (int i = 0; i < mod.getSize(); i++) {
924
                        lyrs.add(mod.getElementAt(i));
925
                }
926
                return lyrs;
927
        }
928

    
929
        public String getFormat() {
930
                return (String) getLstFormats().getSelectedValue();
931
        }
932
        
933
        public String getInfoFormat() {
934
                return (String) getLstInfoFormats().getSelectedValue();
935
        }
936

    
937
        public String getLayersQuery() {
938
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
939
                                .getElements();
940
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
941
                                .toArray(new WMSLayerNode[0]);
942

    
943
                // Nombre separado por comas de las capas
944
                String layersQuery = layers[layers.length - 1].getName();
945

    
946
                for (int i = layers.length - 2; i >= 0; i--) {
947
                        layersQuery += ("," + layers[i].getName());
948
                }
949

    
950
                return layersQuery;
951

    
952
        }
953

    
954
        /**
955
         * Returns the current selected SRS.
956
         *
957
         * @return
958
         */
959
        public String getSRS() {
960
                return (String) getLstSRSs().getSelectedValue();
961
        }
962

    
963
        /**
964
         * Returns the name of the layer that the user has typed-in
965
         *
966
         * @return
967
         */
968
        public String getLayerName() {
969
                return getJTxtNomCapa().getText();
970
        }
971

    
972
        public void setLayerName(String name) {
973
                getJTxtNomCapa().setText(name);
974
        }
975

    
976
        public Rectangle2D getLayersRectangle() throws ProjectionLayerException {
977
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
978
                                .getElements();
979
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
980
                                .toArray(new WMSLayerNode[0]);
981
                String[] layerNames = new String[layers.length];
982
                for (int i = 0; i < layerNames.length; i++) {
983
                        layerNames[i] = layers[i].getName();
984
                }
985
                // Boundingbox de todas las capas
986
                // ArrayList rectangulos = new ArrayList();
987

    
988
                Rectangle2D rect;
989
                String latLonID;
990

    
991
                rect = explorer.getBoundingBox(layerNames, getSRS());
992
                if (rect == null) {
993
                        latLonID = "EPSG:4326";
994
                        rect = explorer.getBoundingBox(layerNames, latLonID);
995
                        if (rect == null) {
996
                                rect = explorer.getBoundingBox(layerNames, "CRS:84");
997
                        }
998

    
999
                        IProjection reqProj = CRSFactory.getCRS(getSRS());
1000
                        IProjection latLonProj = CRSFactory.getCRS(latLonID);
1001
                        if ((reqProj != null) && (latLonProj != null)) {
1002
                                ICoordTrans ct = latLonProj.getCT(reqProj);
1003
                                Rectangle2D reprojectedRect;
1004
                                reprojectedRect = ct.convert(rect);
1005
                                rect = reprojectedRect;
1006
                        } else {
1007
//                                throw new ProjectionLayerException(PluginServices.getText(this,
1008
//                                                "cannotReproject")
1009
//                                                + " " + getSRS() + " -> " + latLonID);
1010
                                throw new ProjectionLayerException(getName(),null);
1011
                        }
1012
                }
1013

    
1014
                return rect;
1015
        }
1016

    
1017
        public TreePath[] getSelectedLayers() {
1018
                return getTreeLayers().getSelectionPaths();
1019
        }
1020

    
1021
        public Hashtable getOnlineResources() {
1022
                return explorer.getOnlineResources();
1023
        }
1024

    
1025
        /**
1026
         * The piece of the GetMap request that has the layer names.
1027
         *
1028
         * @return
1029
         */
1030
        public String getQueryableLayerQuery() {
1031
                ArrayList elements = ((JDnDListModel) getLstSelectedLayers().getModel())
1032
                                .getElements();
1033
                WMSLayerNode[] layers = (WMSLayerNode[]) elements
1034
                                .toArray(new WMSLayerNode[0]);
1035
                // Nombre separado por comas de las capas
1036
                String layersQuery = "";
1037
                int i;
1038

    
1039
                for (i = 0; i < layers.length; i++) {
1040
                        if (layers[i].isQueryable()) {
1041
                                layersQuery = layers[i].getName();
1042

    
1043
                                break;
1044
                        }
1045
                }
1046

    
1047
                for (int j = i + 1; j < layers.length; j++) {
1048
                        if (layers[j].isQueryable()) {
1049
                                layersQuery += ("," + layers[j].getName());
1050
                        }
1051
                }
1052

    
1053
                return layersQuery;
1054
        }
1055

    
1056
        /**
1057
         * Returns the index of the CRS within the CRS list.
1058
         *
1059
         * Devuelve la posicion que ocupa el CRS en la lista de CRS
1060
         *
1061
         * @param crs
1062
         * @return The CRS's index if it exists, -1 if it not exists.
1063
         */
1064
        public int getSRSIndex(String crs) {
1065
                for (int i = 0; i < getLstSRSs().getModel().getSize(); i++) {
1066
                        if (crs != null
1067
                                        && crs.equals(getLstSRSs().getModel().getElementAt(i))) {
1068
                                return i;
1069
                        }
1070
                }
1071
                return -1;
1072
        }
1073

    
1074
        /**
1075
         * Returns the index of the format within the formats list.
1076
         *
1077
         * Devuelve la posicion que ocupa el formato en la lista de formatos
1078
         *
1079
         * @param format
1080
         *
1081
         * @return The format's index if it exists, -1 if it not exists.
1082
         */
1083
        public int getFormatIndex(String format) {
1084
                for (int i = 0; i < getLstFormats().getModel().getSize(); i++) {
1085
                        if (format != null
1086
                                        && format
1087
                                                        .equals(getLstFormats().getModel().getElementAt(i))) {
1088
                                return i;
1089
                        }
1090
                }
1091
                return -1;
1092
        }
1093
        
1094
        /**
1095
         * Returns the index of the format within the formats list.
1096
         *
1097
         * Devuelve la posicion que ocupa el formato en la lista de formatos
1098
         *
1099
         * @param format
1100
         *
1101
         * @return The format's index if it exists, -1 if it not exists.
1102
         */
1103
        public int getInfoFormatIndex(String infoformat) {
1104
                for (int i = 0; i < getLstInfoFormats().getModel().getSize(); i++) {
1105
                        if (infoformat != null
1106
                                        && infoformat.equals(getLstInfoFormats().getModel().getElementAt(i))) {
1107
                                return i;
1108
                        }
1109
                }
1110
                return -1;
1111
        }
1112

    
1113
        /**
1114
         * This method initializes jTabbedPane
1115
         *
1116
         * @return TabbedPane
1117
         */
1118
        public JTabbedPane getJTabbedPane() {
1119
                if (jTabbedPane == null) {
1120
                        jTabbedPane = new JTabbedPane();
1121
                        jTabbedPane.setBounds(4, 4, 502, 415);
1122
                        InfoPanel ip = getTabInfo();
1123
                        ip.addFocusListener(new FocusListener() {
1124
                                public void focusGained(FocusEvent e) {
1125
                                        refreshInfo();
1126
                                }
1127

    
1128
                                public void focusLost(FocusEvent e) {
1129
                                }
1130
                        });
1131

    
1132
                        StylesPanel sp = getTabStyle();
1133
                        DimensionPanel dp = getTabDimensions();
1134

    
1135
                        jTabbedPane.addTab(PluginServices.getText(this, "info"), null, ip,
1136
                                        null);
1137
                        jTabbedPane.addTab(PluginServices.getText(this, "capas"), null,
1138
                                        getTabLayers(), null);
1139
                        jTabbedPane.addTab(PluginServices.getText(this, "estilos"), null,
1140
                                        sp, null);
1141
                        stylesTabIndex = jTabbedPane.getTabCount() - 1;
1142
                        jTabbedPane.addTab(PluginServices.getText(this, "dimensiones"),
1143
                                        null, dp, null);
1144
                        dimensionTabIndex = jTabbedPane.getTabCount() - 1;
1145
                        jTabbedPane.addTab(PluginServices.getText(this, "formatos"), null,
1146
                                        getTabFormats(), null);
1147
                        jTabbedPane.setEnabledAt(dimensionTabIndex, false);
1148
                        jTabbedPane.setEnabledAt(stylesTabIndex, false);
1149
                }
1150
                return jTabbedPane;
1151
        }
1152

    
1153
        /**
1154
         * This method initializes jPanel
1155
         *
1156
         * @return Panel
1157
         */
1158
        private JPanel getTabLayers() {
1159
                if (tabLayers == null) {
1160
                        tabLayers = new JPanel();
1161
                        tabLayers.setLayout(null);
1162
                        tabLayers.add(getJPanel4(), null);
1163
                        tabLayers.add(getJPanel2(), null);
1164
                }
1165
                return tabLayers;
1166
        }
1167

    
1168
        /**
1169
         * This method initializes jPanel6
1170
         *
1171
         * @return Panel
1172
         */
1173
        private StylesPanel getTabStyle() {
1174
                if (tabStyle == null) {
1175
                        tabStyle = new StylesPanel(this);
1176
                        tabStyle.setEnabled(false);
1177
                        tabStyle.addListener(new BeanListener() {
1178
                                public void beanValueChanged(Object value) {
1179
                                        fireWizardComplete(isCorrectlyConfigured());
1180
                                };
1181
                        });
1182
                        tabStyle.addFocusListener(new FocusAdapter() {
1183
                                public void focusGained(FocusEvent e) {
1184
                                        refreshStyleTree();
1185
                                }
1186
                        });
1187
                }
1188
                return tabStyle;
1189
        }
1190

    
1191
        /**
1192
         * Sets the focus to the tab next to the current one.
1193
         *
1194
         * Enfoca a la solapa siguiente a la actualmente enfocada del TabbedPane
1195
         *
1196
         */
1197
        public void avanzaTab() {
1198
                int currentPage = currentPage();
1199
                int nPages = getNumTabs();
1200
                if (nPages - 1 > currentPage) {
1201
                        getJTabbedPane().setSelectedIndex(nextEnabledPage());
1202
                }
1203
        }
1204

    
1205
        /**
1206
         * Sets the focus to the tab previous to the current one.
1207
         *
1208
         * Enfoca a la solapa anterior a la actualmente enfocada del TabbedPane
1209
         *
1210
         */
1211
        public void retrocedeTab() {
1212
                this.getJTabbedPane().setSelectedIndex(previousEnabledPage());
1213

    
1214
        }
1215

    
1216
        /**
1217
         * Returns the index of the current tab.
1218
         *
1219
         * Devuelve el ?ndice de la p?gina actual del wizard.
1220
         *
1221
         * @return
1222
         */
1223
        public int currentPage() {
1224
                return getJTabbedPane().getSelectedIndex();
1225
        }
1226

    
1227
        /**
1228
         * Returns the tab amount that the WMSParamsPanel currently have
1229
         *
1230
         * Devuelve el n?mero de solapas que tiene actualmente el WMSParamsPanel
1231
         *
1232
         * @return int
1233
         */
1234
        public int getNumTabs() {
1235
                return getJTabbedPane().getTabCount();
1236
        }
1237

    
1238
        /**
1239
         * <p>
1240
         * Returns the index of the previous enabled tab.
1241
         * </p>
1242
         * <p>
1243
         * Devuelve el ?ndice de la anterior p?gina habilitada del wizard o -1
1244
         * si no hay ninguna.
1245
         * </p>
1246
         *
1247
         * @return The index, or -1 if there is no one.
1248
         */
1249
        public int previousEnabledPage() {
1250
                int currentPage = currentPage();
1251
                int j = 0;
1252
                if (currentPage == 0) {
1253
                        j = -1;
1254
                }
1255
                for (int i = currentPage - 1; i > -1; i--) {
1256
                        if (getJTabbedPane().isEnabledAt(i)) {
1257
                                j = i;
1258
                                break;
1259
                        }
1260
                }
1261
                return j;
1262
        }
1263

    
1264
        /**
1265
         * <p>
1266
         * Returns the previous of the previous enabled tab.
1267
         * </p>
1268
         * <p>
1269
         * Devuelve el ?ndice de la siguiente p?gina habilitada del wizard o -1
1270
         * si no hay ninguna.
1271
         * </p>
1272
         *
1273
         * @return The index, or -1 if there is no one.
1274
         */
1275
        public int nextEnabledPage() {
1276
                int currentPage = currentPage();
1277
                int nPages = getNumTabs();
1278
                if (currentPage == nPages) {
1279
                        return -1;
1280
                }
1281
                for (int i = currentPage + 1; i < nPages; i++) {
1282
                        if (getJTabbedPane().isEnabledAt(i)) {
1283
                                return i;
1284
                        }
1285
                }
1286
                return -1;
1287
        }
1288

    
1289
        /**
1290
         * Selects/deselects the transparency checkbox.
1291
         *
1292
         * @param b
1293
         */
1294
        public void setTransparent(boolean b) {
1295
                getChkTransparency().setSelected(b);
1296
        }
1297

    
1298
        /**
1299
         * This method initializes chkTrasparency
1300
         *
1301
         * @return CheckBox
1302
         */
1303
        private JCheckBox getChkTransparency() {
1304
                if (chkTransparency == null) {
1305
                        chkTransparency = new JCheckBox();
1306
                        chkTransparency.setText(PluginServices.getText(this,
1307
                                        "wms_transparency"));
1308
                        chkTransparency.setSelected(true);
1309
                        chkTransparency.addItemListener(new java.awt.event.ItemListener() {
1310
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1311
                                        fireWizardComplete(isCorrectlyConfigured());
1312
                                }
1313
                        });
1314
                        chkTransparency.setBounds(5, 168, 441, 21);
1315

    
1316
                }
1317
                return chkTransparency;
1318
        }
1319

    
1320
        /**
1321
         * Returns a vector of strings containing the styles selected for the
1322
         * layers. A blank style is correct and means that default style will be
1323
         * used.
1324
         *
1325
         * @return Vector
1326
         */
1327
        public Vector<RemoteWMSStyle> getStyles() {
1328
                Vector<RemoteWMSStyle> v = new Vector<RemoteWMSStyle>();
1329
                WMSLayerNode[] layers = selectedLayersToArray();
1330
                for (int i = 0; i < layers.length; i++) {
1331
                        RemoteWMSStyle sty = layers[i].getSelectedStyle();
1332
                        if(sty != null)
1333
                                v.add(0, sty);
1334
                }
1335
                return v;
1336
        }
1337

    
1338
        public Vector<RemoteWMSStyle> getLayerStyle(String layerName) {
1339
                Vector<RemoteWMSStyle> v = new Vector<RemoteWMSStyle>();
1340
                WMSLayerNode[] layers = selectedLayersToArray();
1341
                for (int i = 0; i < layers.length; i++) {
1342
                        if (layers[i].getName().equalsIgnoreCase(layerName)) {
1343
                                RemoteWMSStyle sty = layers[i].getSelectedStyle();
1344
                                v.add(sty);
1345
                                return v;
1346
                        }
1347
                }
1348
                return v;
1349
        }
1350

    
1351
        /**
1352
         * This method initializes tabInfo
1353
         *
1354
         * @return Panel
1355
         */
1356
        private InfoPanel getTabInfo() {
1357
                if (tabInfo == null) {
1358
                        tabInfo = new InfoPanel();
1359

    
1360
                }
1361
                return tabInfo;
1362
        }
1363

    
1364
        public void setDimensions(Vector dimensions) {
1365
                for (int i = 0; i < dimensions.size(); i++) {
1366
                        String st = (String) dimensions.get(i);
1367
                        if (st.split("=").length == 2) {
1368
                                String[] s = st.split("=");
1369
                                getTabDimensions().setDimensionValue(s[0], s[1]);
1370
                        }
1371
                }
1372

    
1373
        }
1374

    
1375
        /**
1376
         * This method initializes tabDimension
1377
         *
1378
         * @return Panel
1379
         */
1380
        private DimensionPanel getTabDimensions() {
1381
                if (tabDimensions == null) {
1382
                        tabDimensions = new DimensionPanel();
1383
                        tabDimensions.setEnabled(false);
1384
                        tabDimensions.addListener(new BeanListener() {
1385
                                public void beanValueChanged(Object value) {
1386
                                        Vector myDimensions = (Vector) value;
1387
                                        if (value != null
1388
                                                        && (oldDimensions == null || !(oldDimensions.size() == myDimensions
1389
                                                                        .size() && oldDimensions
1390
                                                                        .containsAll(myDimensions)))) {
1391
                                                oldDimensions = myDimensions;
1392
                                        }
1393
                                        fireWizardComplete(isCorrectlyConfigured());
1394
                                }
1395
                        });
1396

    
1397
                }
1398
                return tabDimensions;
1399
        }
1400

    
1401
        /**
1402
         * @return
1403
         */
1404
        public boolean getTransparency() {
1405
                return getChkTransparency().isSelected();
1406
        }
1407

    
1408
        /**
1409
         * @return
1410
         */
1411
        public Vector getDimensions() {
1412
                return getTabDimensions().getDimensions();
1413
        }
1414

    
1415
        public void initWizard() {
1416
        }
1417

    
1418
        public void execute() {
1419
        }
1420

    
1421
        // Gets all the layers available in the WMS Server
1422
        protected FLayer getAllSubTree(WMSLayerNode node) throws LoadLayerException {
1423
                if (node.getChildren().size() > 0) {
1424
                        FLayers l = null;
1425
                        if (this.getMapCtrl() == null) {
1426
                                org.gvsig.app.project.documents.view.gui.AbstractViewPanel v = (org.gvsig.app.project.documents.view.gui.AbstractViewPanel) PluginServices
1427
                                                .getMDIManager().getActiveWindow();
1428
                                l = new FLayers();
1429
                                l.setMapContext(v.getMapControl().getMapContext());
1430
                        } else {
1431
                                l = new FLayers();
1432
                                l.setMapContext(this.getMapCtrl().getMapContext());
1433
                        }
1434

    
1435
                        l.setName(node.getTitle());
1436
                        l.setVisible(false);
1437
                        for (int i = 0; i < node.getChildren().size(); i++) {
1438
                                FLayer lyr = getAllSubTree((WMSLayerNode) node.getChildren()
1439
                                                .get(i));
1440
                                if (lyr != null) {
1441
                                        l.addLayer(lyr);
1442
                                }
1443
                        }
1444
                        return l;
1445
                } else {
1446
                        DataStoreParameters parameters = explorer.getStoreParameters();
1447
                        WMSDataParameters par = null;
1448
                        if(parameters instanceof WMSDataParameters) {
1449
                                par = (WMSDataParameters) parameters;
1450
                        }
1451
                        if(parameters instanceof TileDataParameters) {
1452
                                DataParameters p = ((TileDataParameters) parameters).getDataParameters();
1453
                                if(p instanceof WMSDataParameters)
1454
                                        par = (WMSDataParameters) p;
1455
                        }
1456
                        par.setFormat(getFormat());
1457
                        par.setInfoFormat(getInfoFormat());
1458
                        par.setLayerQuery(node.getName());
1459
                        par.setInfoLayerQuery(getQueryableLayerQuery());
1460
                        par.setSRS(getSRS());
1461
                        par.setWmsTransparency(getTransparency());
1462
                        par.setStyles(getLayerStyle(node.getName()));
1463
                        par.setDimensions(getDimensions());
1464
                        par.setOnlineResources(getOnlineResources());
1465
                        par.setFixedSize(getFixedSize());
1466
                        par.setQueryable(explorer.isQueryable());
1467
                        par.setName(node.getTitle());
1468
                        par.setURI(explorer.getHost());
1469
                        par.deleteCache(updating);
1470
                        
1471
                        FLyrWMS layer = new FLyrWMS();
1472
                        try {
1473
                                layer.setParameters(parameters);
1474
                                layer.setExplorer(explorer);
1475
                                layer.setFullExtent(getLayersRectangle());
1476
                        } catch (InitializeException e) {
1477
                                throw new LoadLayerException("Error initializating layer", e);
1478
                        }
1479
                        layer.setVisible(false);
1480
                        return layer;
1481
                }
1482
        }
1483

    
1484
        // Gets all the layers available in the WMS Server
1485
        public FLayer getAllLayers() throws LoadLayerException {
1486
                LayerTree layerTree = getLayerStructure();
1487
                return getAllSubTree((WMSLayerNode) layerTree.getModel().getRoot());
1488
        }
1489

    
1490
        // changed by Laura:
1491
        // To delegate getLayer to ParamsPanel from WMSWizard and WMSProps
1492
        // public FLayer getLayer() { return null; }
1493
        public FLayer getLayer(boolean cached) throws LoadLayerException {
1494
                lastCached = cached;
1495
                if (getDisagregatedLayers()) {
1496
                        return getLayerTree();
1497
                } else {
1498
                        return getLayerPlain(cached);
1499
                }
1500
        }
1501
        
1502
        public FLayer getLayer() throws LoadLayerException {
1503
                return getLayer(lastCached);
1504
        }
1505

    
1506
        /**
1507
         * If user does not select the chekbox Disagregate layers, will get the
1508
         * layer tree in WMS
1509
         *
1510
         * @return
1511
         * @throws LoadLayerException 
1512
         */
1513
        protected FLayer getLayerTree() throws LoadLayerException {
1514
                LayerTree layerTree = getLayerStructure();
1515
                TreePath[] selection = (TreePath[]) getSelectedPaths().toArray(new TreePath[0]);
1516
                if (selection != null) {
1517
                        return getSubTree((WMSLayerNode) layerTree.getModel().getRoot(), selection);
1518
                }
1519
                return null;
1520
        }
1521

    
1522
        protected boolean nodeSelected(TreePath[] selection, WMSLayerNode node) {
1523
                for (int i = 0; i < selection.length; i++) {
1524
                        Object[] components = selection[i].getPath();
1525
                        for (int j = 0; j < components.length; j++) {
1526
                                if (components[j] instanceof WMSLayerNode) {
1527
                                        if (((WMSLayerNode) components[j]).getTitle().compareTo(
1528
                                                        node.getTitle()) == 0) {
1529
                                                return true;
1530
                                        }
1531
                                }
1532
                        }
1533
                }
1534
                return false;
1535
        }
1536

    
1537
        protected FLayer getSubTree(WMSLayerNode node, TreePath[] selection) throws LoadLayerException {
1538
                if (node.getChildren().size() > 0) {
1539
                        FLayers l = null;
1540
                        if (this.getMapCtrl() == null) {
1541
                                org.gvsig.app.project.documents.view.gui.AbstractViewPanel v = (org.gvsig.app.project.documents.view.gui.AbstractViewPanel) PluginServices
1542
                                                .getMDIManager().getActiveWindow();
1543
                                l = new FLayers();
1544
                                l.setMapContext(v.getMapControl().getMapContext());
1545
                        } else {
1546
                                l = new FLayers();
1547
                                l.setMapContext(this.getMapCtrl().getMapContext());
1548
                        }
1549

    
1550
                        l.setName(node.getTitle());
1551
                        for (int i = 0; i < node.getChildren().size(); i++) {
1552
                                if (nodeSelected(selection, (WMSLayerNode) (node.getChildren()
1553
                                                .get(i)))) {
1554
                                        FLayer lyr = getSubTree((WMSLayerNode) node.getChildren()
1555
                                                        .get(i), selection);
1556
                                        if (lyr != null) {
1557
                                                l.addLayer(lyr);
1558
                                        }
1559
                                }
1560
                        }
1561
                        return l;
1562
                } else {
1563
                        if (nodeSelected(selection, node)) {
1564
                                
1565
                                DataStoreParameters parameters = explorer.getStoreParameters();
1566
                                WMSDataParameters par = null;
1567
                                if(parameters instanceof WMSDataParameters) {
1568
                                        par = (WMSDataParameters) parameters;
1569
                                }
1570
                                if(parameters instanceof TileDataParameters) {
1571
                                        DataParameters p = ((TileDataParameters) parameters).getDataParameters();
1572
                                        if(p instanceof WMSDataParameters)
1573
                                                par = (WMSDataParameters) p;
1574
                                }
1575
                                par.setFormat(getFormat());
1576
                                par.setInfoFormat(getInfoFormat());
1577
                                par.setLayerQuery(node.getName());
1578
                                par.setInfoLayerQuery(getQueryableLayerQuery());
1579
                                par.setSRS(getSRS());
1580
                                par.setWmsTransparency(getTransparency());
1581
                                par.setStyles(getLayerStyle(node.getName()));
1582
                                par.setDimensions(getDimensions());
1583
                                par.setOnlineResources(explorer.getOnlineResources());
1584
                                par.setFixedSize(getFixedSize());
1585
                                par.setQueryable(node.isQueryable());
1586
                                par.setName(node.getTitle());
1587
                                par.setURI(explorer.getHost());
1588
                                par.deleteCache(updating);
1589
                                
1590
                                FLyrWMS layer = new FLyrWMS();
1591
                                try {
1592
                                        layer.setParameters(parameters);
1593
                                        layer.setExplorer(explorer);
1594
                                        layer.setFullExtent(getLayersRectangle());
1595
                                } catch (InitializeException e) {
1596
                                        throw new LoadLayerException("Error initializating layer", e);
1597
                                }
1598
                                return layer;
1599

    
1600
                        } else {
1601
                                return null;
1602
                        }
1603
                }
1604
        }
1605

    
1606
        /**
1607
         * If user selects the chekbox Disagregate layers, will get the selected
1608
         * layers rendered in one the tree structure in WMS will be lost.
1609
         *
1610
         * @return
1611
         */
1612
        protected FLayer getLayerPlain(boolean cached) throws LoadLayerException {
1613
                WMSDataParameters par = (WMSDataParameters)explorer.getStoreParameters();
1614
                DataStoreParameters parameters = par;
1615
                
1616
                if(cached) {
1617
                        DataManager manager = DALLocator.getDataManager();
1618
                        TileDataParameters tileParams = null;
1619
                        try {
1620
                                tileParams = (TileDataParameters) manager.createStoreParameters("Tile Store");
1621
                        } catch (InitializeException e) {
1622
                                throw new LoadLayerException("", e);
1623
                        } catch (ProviderNotRegisteredException e) {
1624
                                throw new LoadLayerException("", e);
1625
                        }
1626
                        tileParams.setDataParameters(par);
1627
                        parameters = tileParams;
1628
                }
1629
                
1630
                par.setFormat(getFormat());
1631
                par.setInfoFormat(getInfoFormat());
1632
                par.setLayerQuery(getLayersQuery());
1633
                par.setInfoLayerQuery(getQueryableLayerQuery());
1634
                par.setSRS(getSRS());
1635
                par.setWmsTransparency(getTransparency());
1636
                par.setStyles(getStyles());
1637
                par.setDimensions(getDimensions());
1638
                par.setOnlineResources(explorer.getOnlineResources());
1639
                par.setFixedSize(getFixedSize());
1640
                par.setQueryable(explorer.isQueryable());
1641
                par.setName(getLayerName());
1642
                par.setURI(explorer.getHost());
1643
                par.deleteCache(updating);
1644
                
1645
                FLyrWMS layer = new FLyrWMS();
1646
                try {
1647
                        layer.setParameters(parameters);
1648
                        layer.setExplorer(explorer);
1649
                        layer.setFullExtent(getLayersRectangle());
1650
                        layer.setName(getLayerName());
1651
                } catch (InitializeException e) {
1652
                        throw new LoadLayerException("Error initializating layer", e);
1653
                }
1654
                return layer;
1655
        }
1656

    
1657
        // ---------------------
1658

    
1659
        public Dimension getFixedSize() {
1660
                return sizeFixed;
1661
        }
1662

    
1663
        /**
1664
         * This method initializes chkExtendedNames
1665
         *
1666
         * @return CheckBox
1667
         */
1668
        private JCheckBox getChkExtendedNames() {
1669
                if (chkExtendedNames == null) {
1670
                        chkExtendedNames = new JCheckBox();
1671
                        chkExtendedNames.setText(PluginServices.getText(this,
1672
                                        "show_layer_names"));
1673
                        chkExtendedNames.addItemListener(new java.awt.event.ItemListener() {
1674
                                public void itemStateChanged(java.awt.event.ItemEvent e) {
1675
                                        boolean b = chkExtendedNames.isSelected();
1676
                                        getTreeLayers().showLayerNames = b;
1677
                                        getTreeLayers().repaint();
1678
                                        getLstSelectedLayers().showLayerNames = b;
1679
                                        getLstSelectedLayers().repaint();
1680
                                        getStyleTree().showLayerNames = b;
1681
                                }
1682
                        });
1683
                        chkExtendedNames
1684
                                        .addActionListener(new java.awt.event.ActionListener() {
1685
                                                public void actionPerformed(java.awt.event.ActionEvent e) {
1686
                                                        fPrefs.putBoolean("show_layer_names",
1687
                                                                        chkExtendedNames.isSelected());
1688
                                                }
1689
                                        });
1690
                        chkExtendedNames.setBounds(19, 300, 212, 20);
1691
                        chkExtendedNames.setSelected(fPrefs.getBoolean("show_layer_names",
1692
                                        false));
1693

    
1694
                }
1695
                return chkExtendedNames;
1696
        }
1697

    
1698
        /**
1699
         * This method initializes btnUp
1700
         *
1701
         * @return Button
1702
         */
1703
        private JButton getBtnUp() {
1704
                if (btnUp == null) {
1705
                        btnUp = new JButton();
1706
                        btnUp.setBounds(438, 184, 30, 30);
1707
                        btnUp.setToolTipText(PluginServices.getText(this, "move_layer_up"));
1708
                        btnUp.addActionListener(new java.awt.event.ActionListener() {
1709
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1710
                                        LayerList list = getLstSelectedLayers();
1711
                                        int[] selectedIndices = list.getSelectedIndices();
1712
                                        int index = list.getSelectedIndex();
1713
                                        if (selectedIndices != null && selectedIndices.length == 1
1714
                                                        && index > 0) {
1715
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1716
                                                m.itemsMoved(index - 1, new int[] { index });
1717
                                                list.setSelectedIndex(index - 1);
1718
                                        }
1719
                                }
1720
                        });
1721
                        btnUp.setIcon(PluginServices.getIconTheme().get("aplication-preferences-uparrow"));
1722
                }
1723
                return btnUp;
1724
        }
1725

    
1726
        /**
1727
         * This method initializes btnDown
1728
         *
1729
         * @return Button
1730
         */
1731
        private JButton getBtnDown() {
1732
                if (btnDown == null) {
1733
                        btnDown = new JButton();
1734
                        btnDown.setBounds(438, 215, 30, 30);
1735
                        btnDown.setToolTipText(PluginServices.getText(this,
1736
                                        "move_layer_down"));
1737
                        btnDown.addActionListener(new java.awt.event.ActionListener() {
1738
                                public void actionPerformed(java.awt.event.ActionEvent e) {
1739
                                        LayerList list = getLstSelectedLayers();
1740
                                        int[] selectedIndices = list.getSelectedIndices();
1741
                                        int index = list.getSelectedIndex();
1742
                                        if (selectedIndices != null
1743
                                                        && selectedIndices.length == 1
1744
                                                        && index < getLstSelectedLayers().getModel()
1745
                                                                        .getSize() - 1) {
1746
                                                JDnDListModel m = (JDnDListModel) list.getModel();
1747
                                                m.itemsMoved(index + 1, new int[] { index });
1748
                                                list.setSelectedIndex(index + 1);
1749
                                        }
1750
                                }
1751
                        });
1752
                        btnDown.setIcon(PluginServices.getIconTheme()
1753
                                        .get("aplication-preferences-downarrow"));
1754
                }
1755
                return btnDown;
1756
        }
1757

    
1758
        public void setFixedSize(Dimension sz) {
1759
                sizeFixed = sz;
1760
        }
1761

    
1762
        public ArrayList getSelectedPaths() {
1763
                return selectedPaths;
1764
        }
1765

    
1766
        public LayerTree getJustTreeLayer() {
1767
                return treeLayers;
1768
        }
1769

    
1770
        /**
1771
         * This method initializes chkDisagregate
1772
         *
1773
         * @return CheckBox
1774
         */
1775
        private JCheckBox getChkDisagregate() {
1776
                if (chkDisagregate == null) {
1777

    
1778
                        chkDisagregate = new JCheckBox();
1779
                        chkDisagregate.setBounds(new java.awt.Rectangle(19,276,269,20));
1780
                        chkDisagregate.setText(PluginServices.getText(this,
1781
                                        "disagregate_layers"));
1782
                        chkDisagregate.setSelected(false);
1783

    
1784
                }
1785
                return chkDisagregate;
1786
        }
1787

    
1788
        public boolean getDisagregatedLayers() {
1789
                return chkDisagregate.isSelected();
1790
        }
1791

    
1792
        public void disableDisagregatedLayers() {
1793
                chkDisagregate.setEnabled(false);
1794
        }
1795

    
1796
        @Override
1797
        public DataStoreParameters[] getParameters() {
1798
                // TODO Auto-generated method stub
1799
                return null;
1800
        }
1801

    
1802
        @Override
1803
        public void close() {
1804
                // Nothing to do
1805
        }
1806
        
1807
        public WMSServerExplorer getExplorer() {
1808
                return explorer;
1809
        }
1810
} // @jve:decl-index=0:visual-constraint="10,10"