Statistics
| Revision:

svn-gvsig-desktop / branches / v2_0_0_prep / extensions / extWFS2 / src / org / gvsig / wfs / gui / panels / WFSParamsPanel.java @ 36040

History | View | Annotate | Download (27.7 KB)

1
package org.gvsig.wfs.gui.panels;
2

    
3
import java.awt.Container;
4

    
5
import javax.swing.JTabbedPane;
6

    
7
import org.cresques.cts.IProjection;
8
import org.geotools.filter.AbstractFilter;
9
import org.slf4j.Logger;
10
import org.slf4j.LoggerFactory;
11

    
12
import org.gvsig.andami.PluginServices;
13
import org.gvsig.app.gui.ILayerPanel;
14
import org.gvsig.app.gui.WizardPanel;
15
import org.gvsig.fmap.crs.CRSFactory;
16
import org.gvsig.fmap.dal.DALLocator;
17
import org.gvsig.fmap.dal.DataManager;
18
import org.gvsig.fmap.dal.DataStore;
19
import org.gvsig.fmap.dal.DataStoreParameters;
20
import org.gvsig.fmap.dal.exception.DataException;
21
import org.gvsig.fmap.dal.exception.InitializeException;
22
import org.gvsig.fmap.dal.exception.ProviderNotRegisteredException;
23
import org.gvsig.fmap.dal.serverexplorer.wfs.WFSServerExplorer;
24
import org.gvsig.fmap.dal.store.wfs.WFSStoreParameters;
25
import org.gvsig.fmap.dal.store.wfs.WFSStoreProvider;
26
import org.gvsig.fmap.mapcontext.MapContextLocator;
27
import org.gvsig.fmap.mapcontext.MapContextManager;
28
import org.gvsig.fmap.mapcontext.exceptions.CreateLayerException;
29
import org.gvsig.fmap.mapcontext.layers.FLayer;
30
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
31
import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupException;
32
import org.gvsig.gui.beans.panelGroup.exceptions.EmptyPanelGroupGUIException;
33
import org.gvsig.gui.beans.panelGroup.exceptions.ListCouldntAddPanelException;
34
import org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader;
35
import org.gvsig.gui.beans.panelGroup.panels.AbstractPanel;
36
import org.gvsig.gui.beans.panelGroup.panels.IPanel;
37
import org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel;
38
import org.gvsig.tools.dynobject.DynObject;
39
import org.gvsig.wfs.gui.panels.model.WFSSelectedFeature;
40
import org.gvsig.wfs.gui.panels.model.WFSSelectedFeatureManager;
41
import org.gvsig.wfs.gui.wizards.WFSWizard;
42

    
43

    
44
/* gvSIG. Sistema de Informaci?n Geogr?fica de la Generalitat Valenciana
45
 *
46
 * Copyright (C) 2004 IVER T.I. and Generalitat Valenciana.
47
 *
48
 * This program is free software; you can redistribute it and/or
49
 * modify it under the terms of the GNU General Public License
50
 * as published by the Free Software Foundation; either version 2
51
 * of the License, or (at your option) any later version.
52
 *
53
 * This program is distributed in the hope that it will be useful,
54
 * but WITHOUT ANY WARRANTY; without even the implied warranty of
55
 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
56
 * GNU General Public License for more details.
57
 *
58
 * You should have received a copy of the GNU General Public License
59
 * along with this program; if not, write to the Free Software
60
 * Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA  02111-1307,USA.
61
 *
62
 * For more information, contact:
63
 *
64
 *  Generalitat Valenciana
65
 *   Conselleria d'Infraestructures i Transport
66
 *   Av. Blasco Ib??ez, 50
67
 *   46010 VALENCIA
68
 *   SPAIN
69
 *
70
 *      +34 963862235
71
 *   gvsig@gva.es
72
 *      www.gvsig.gva.es
73
 *
74
 *    or
75
 *
76
 *   IVER T.I. S.A
77
 *   Salamanca 50
78
 *   46005 Valencia
79
 *   Spain
80
 *
81
 *   +34 963163400
82
 *   dac@iver.es
83
 */
84
/* CVS MESSAGES:
85
 *
86
 * $Id: WFSParamsPanel.java 17736 2008-01-02 16:53:48Z ppiqueras $
87
 * $Log$
88
 * Revision 1.42  2007-09-19 16:14:50  jaume
89
 * removed unnecessary imports
90
 *
91
 * Revision 1.41  2007/06/26 09:33:54  jorpiell
92
 * Information tab refreshed
93
 *
94
 * Revision 1.40  2007/04/11 12:08:55  ppiqueras
95
 * Varios cambios:
96
 * - Corregida etiqueta "Campo"
97
 * - Cambiada actualizaci?n
98
 * - Corregido bug: actualizar ?rea visible despu?s de pulsar "Aplicar" en la interfaz gr?fica.
99
 *
100
 * Revision 1.39  2007/03/15 13:33:44  ppiqueras
101
 * Corregido bug de excepci?n que se lanzaba cuando se filtraba y no se pod?a cargar la capa.
102
 *
103
 * Revision 1.38  2007/03/05 13:49:42  ppiqueras
104
 * Si una capa WFS no tiene campos (y por tanto no tiene un campo obligatorio de tipo geometr?a), que avise al usuario y no permita que se intente cargar dicha capa.
105
 *
106
 * Revision 1.37  2007/03/01 13:12:09  ppiqueras
107
 * Mejorado el filtrado por ?rea.
108
 *
109
 * Revision 1.36  2007/02/22 12:30:59  ppiqueras
110
 * - Eliminado m?todo que sobraba.
111
 * - Mejorada la relaci?n con el panel del ?rea.
112
 * - A?adido JOptionPanel de aviso que no se aplicar? ?rea porque es incorrecta.
113
 *
114
 * Revision 1.35  2007/02/20 11:31:11  ppiqueras
115
 * Eliminados comentarios que sobraban.
116
 *
117
 * Revision 1.34  2007/02/19 11:44:42  jorpiell
118
 * A?adidos los filtros por ?rea
119
 *
120
 * Revision 1.33  2007/02/16 13:36:53  ppiqueras
121
 * Que el ?rea seleccionada en el panel WFSArea sea accesible una vez se va a aplicar.
122
 *
123
 * Revision 1.32  2007/02/12 11:37:00  ppiqueras
124
 * A?adidos comentarios y m?todo para refrescar el MapControl de la pesta?a del ?rea.
125
 *
126
 * Revision 1.31  2007/02/09 14:12:39  jorpiell
127
 * Soporte para WFS 1.1 y WFS-T
128
 *
129
 * Revision 1.30  2007/02/02 12:22:22  ppiqueras
130
 * Corregido alg?n bug.
131
 *
132
 * Revision 1.29  2007/01/08 09:37:39  ppiqueras
133
 * Eliminado comentario que sobraba
134
 *
135
 * Revision 1.28  2006/12/29 09:27:02  ppiqueras
136
 * Corregidos varios bugs:
137
 *
138
 * - Se ejecuta 2 veces "Aplicar" o "Aceptar" en los filtros WFS.
139
 * - Cuando se carga por primera vez una capa WFS, si se pone un
140
 * filtro incorrecto, se ignora el filtro (cargando toda la informaci?n posible de la capa, y borrando el texto de filtrado).
141
 *
142
 * Revision 1.27  2006/12/26 09:19:40  ppiqueras
143
 * Cambiado "atttibutes" en todas las aparaciones en atributos, m?todos, clases, paquetes o comentarios por "fields". (S?lo a aquellas que afectan a clases dentro del proyecto extWFS2).
144
 *
145
 * Revision 1.26  2006/12/20 14:22:06  ppiqueras
146
 * A?adido comentario
147
 *
148
 * Revision 1.25  2006/12/15 13:59:36  ppiqueras
149
 * -Permite que se almacenen y/o recojan todos los campos y valores conocidos de la capa actual.
150
 *
151
 * -Adem?s, control frentre a consultas de filtro err?neas, (esto a medias a?n).
152
 *
153
 * - Alg?n comentario m?s.
154
 *
155
 * Revision 1.24  2006/12/12 10:24:45  ppiqueras
156
 * Nueva funcionalidad: Pulsando doble 'click' sobre una capa de un servidor, se carga (igual que antes), pero adem?s se avanza a la siguiente pesta?a sin tener que pulsar el bot?n 'Siguiente'.
157
 *
158
 * Revision 1.23  2006/12/11 11:02:24  ppiqueras
159
 * Corregido bug -> que se mantenga la frase de filtrado
160
 *
161
 * Revision 1.22  2006/12/04 08:59:47  ppiqueras
162
 * Algunos bugs corregidos. A cambio hay 2 bugs relacionados que todav?a no han sido corregidos (ver PHPCollab) (los tiene asignados Jorge).
163
 *
164
 * Revision 1.21  2006/11/28 08:05:13  jorpiell
165
 * Se escribe la query en la pesta?a del filtro
166
 *
167
 * Revision 1.20  2006/11/14 13:45:49  ppiqueras
168
 * A?adida peque?a funcionalidad:
169
 * Cuando se pulsa el bot?n "Aplicar", (al seleccionar un nuevo filtro), si el ?rbol de campos posee alguno seleccionado, actualiza los valores (con los nuevos), asociados a ?ste campo seleccionado.
170
 *
171
 * Revision 1.19  2006/10/27 12:10:02  ppiqueras
172
 * Nueva funcionalidad
173
 *
174
 * Revision 1.16  2006/10/23 07:37:04  jorpiell
175
 * Ya funciona el filterEncoding
176
 *
177
 * Revision 1.14  2006/10/13 13:05:32  ppiqueras
178
 * Permite el refrescado de datos del panel de filtrado sobre capa WFS.
179
 *
180
 * Revision 1.13  2006/10/10 12:55:06  jorpiell
181
 * Se ha a?adido el soporte de features complejas
182
 *
183
 * Revision 1.12  2006/10/02 09:17:48  jorpiell
184
 * A?adido el setCRS a la capa
185
 *
186
 * Revision 1.11  2006/09/29 13:02:38  ppiqueras
187
 * Filtro para WFS. De momento s?lo interfaz gr?fica.
188
 *
189
 * Revision 1.10  2006/07/21 11:50:31  jaume
190
 * improved appearance
191
 *
192
 * Revision 1.9  2006/06/21 12:35:45  jorpiell
193
 * Se ha a?adido la ventana de propiedades. Esto implica a?adir listeners por todos los paneles. Adem?s no se muestra la geomatr?a en la lista de atributos y se muestran ?nicamnete los que se van a descargar
194
 *
195
 * Revision 1.8  2006/06/15 07:50:58  jorpiell
196
 * A?adida la funcionalidad de reproyectar y hechos algunos cambios en la interfaz
197
 *
198
 * Revision 1.7  2006/05/25 16:22:47  jorpiell
199
 * Se limpia el panel cada vez que se conecta con un servidor distinto
200
 *
201
 * Revision 1.6  2006/05/25 16:01:43  jorpiell
202
 * Se ha a?adido la funcionalidad para eliminar el namespace de los tipos de atributos
203
 *
204
 * Revision 1.5  2006/05/25 10:31:06  jorpiell
205
 * Como ha cambiado la forma de mostrar las capas (una tabla, en lugar de una lista), los paneles han tenido que ser modificados
206
 *
207
 * Revision 1.4  2006/05/23 08:09:39  jorpiell
208
 * Se ha cambiado la forma en la que se leian los valores seleccionados en los paneles y se ha cambiado el comportamiento de los botones
209
 *
210
 * Revision 1.3  2006/05/19 12:57:08  jorpiell
211
 * Modificados algunos paneles
212
 *
213
 * Revision 1.2  2006/04/20 16:38:24  jorpiell
214
 * Ahora mismo ya se puede hacer un getCapabilities y un getDescribeType de la capa seleccionada para ver los atributos a dibujar. Queda implementar el panel de opciones y hacer el getFeature().
215
 *
216
 * Revision 1.1  2006/04/19 12:50:16  jorpiell
217
 * Primer commit de la aplicaci?n. Se puede hacer un getCapabilities y ver el mensaje de vienvenida del servidor
218
 *
219
 */
220

    
221
/**
222
 * <p>Container of the WFS panels, that works as a {@linkplain TabbedPanel TabbedPanel}.</p>
223
 *
224
 * @author Pablo Piqueras Bartolom? (pablo.piqueras@iver.es)
225
 * @author Jorge Piera Llodr? (piera_jor@gva.es)
226
 */
227
public class WFSParamsPanel extends TabbedPanel implements ILayerPanel {
228
        private static final long serialVersionUID = 150328995058481516L;
229
        
230
        private static Logger logger = LoggerFactory.getLogger(WFSParamsPanel.class);
231

    
232
        private WFSServerExplorer serverExplorer = null;
233
        private WFSSelectedFeatureManager selectedFeatureManager = null;
234
        
235
        private static final MapContextManager MAP_CONTEXT_MANAGER = MapContextLocator.getMapContextManager();
236

    
237
        // Tab positions
238
        private int infoTabPosition = -1;
239
        private int featureTabPosition = -1;
240
        private int fieldsTabPosition = -1;
241
        private int optionsTabPosition = -1;
242
        private int filterTabPosition = -1;
243
        private int areaTabPosition = -1;
244

    
245
        // Tabs
246
        private WFSInfoPanel infoPanel = null;
247
        private WFSSelectFeaturePanel featurePanel = null;
248
        private WFSSelectFieldsPanel fieldsPanel = null;
249
        private WFSOptionsPanel optionsPanel = null;
250
        private WFSFilterPanel filterPanel = null;
251
        private WFSAreaPanel areaPanel = null;
252
        
253
        private String cacheSelected = null;
254

    
255
        /**
256
         * This method initializes jTabbedPane
257
         *
258
         * @return javax.swing.JTabbedPane
259
         */
260
        public WFSParamsPanel(Object reference) {
261
                super(reference);
262
                initialize();
263
        }
264

    
265
        /*
266
         * (non-Javadoc)
267
         * @see org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel#initialize()
268
         */
269
        protected void initialize() {
270
                super.initialize();
271

    
272
                this.setVisible(false);
273
        }
274

    
275
        /**
276
         * Sets the focus to the next tab of the current one.
277
         */
278
        public void goToNextTab() {
279
                int tabIndex = getSelectedIndex();
280

    
281
                if ((tabIndex - 1) < getPanelInGUICount()) {
282
                        int nextIndex = nextPageEnabled();
283

    
284
                        if (nextIndex > -1)
285
                                setSelectedIndex(nextIndex);
286
                }
287
        }
288

    
289
        /**
290
         * Sets the focus to the tab previous to the current one.
291
         */
292
        public void goToPreviousTab(){
293
                setSelectedIndex(previousEnabledPage());
294
        }
295

    
296
        /**
297
         * @see JTabbedPane#getSelectedIndex()
298
         */
299
        public int getSelectedIndex(){
300
                return this.getJTabbedPane().getSelectedIndex();
301
        }
302

    
303
        /**
304
         * @see JTabbedPane#setSelectedIndex(int)
305
         */
306
        public void setSelectedIndex(int index) {
307
                this.getJTabbedPane().setSelectedIndex(index);
308
        }
309

    
310
        /**
311
         * This method initializes infoPanel
312
         * 
313
         * @return the information panel
314
         */
315
        public WFSInfoPanel getInfoPanel() {
316
                if (infoPanel != null)
317
                        return infoPanel;
318

    
319
                if (infoTabPosition == -1)
320
                        return null;
321

    
322
                return (infoPanel = (WFSInfoPanel) values().toArray()[infoTabPosition]);
323
        }
324

    
325
        /**
326
         * This method initializes featurePanel
327
         *
328
         * @return javax.swing.JPanel
329
         */
330
        public WFSSelectFeaturePanel getFeaturesPanel() {
331
                if (featurePanel != null)
332
                        return featurePanel;
333

    
334
                if (featureTabPosition == -1)
335
                        return null;
336

    
337
                return (featurePanel = (WFSSelectFeaturePanel) values().toArray()[featureTabPosition]);
338
        }
339

    
340
        /**
341
         * This method initializes fieldsPanel
342
         *
343
         * @return javax.swing.JPanel
344
         */
345
        public WFSSelectFieldsPanel getFieldsPanel() {
346
                if (fieldsPanel != null)
347
                        return fieldsPanel;
348

    
349
                if (fieldsTabPosition == -1)
350
                        return null;
351

    
352
                return (fieldsPanel = (WFSSelectFieldsPanel) values().toArray()[fieldsTabPosition]);
353
        }
354

    
355
        /**
356
         * This method initializes optionsPanel
357
         *
358
         * @return javax.swing.JPanel
359
         */
360
        public WFSOptionsPanel getOptionsPanel() {
361
                if (optionsPanel != null)
362
                        return optionsPanel;
363

    
364
                if (optionsTabPosition == -1)
365
                        return null;
366

    
367
                return (optionsPanel = (WFSOptionsPanel) values().toArray()[optionsTabPosition]);
368
        }
369

    
370
        /**
371
         * This method initializes filterPanel
372
         * 
373
         * @return javax.swing.JPanel
374
         */
375
        public WFSFilterPanel getFilterPanel(){
376
                if (filterPanel != null)
377
                        return filterPanel;
378

    
379
                if (filterTabPosition == -1)
380
                        return null;
381

    
382
                return (filterPanel = (WFSFilterPanel) values().toArray()[filterTabPosition]);
383
        }
384

    
385
        /**
386
         * This method initializes areaPanel
387
         * 
388
         * @return javax.swing.JPanel
389
         */
390
        public WFSAreaPanel getAreaPanel() {
391
                if (areaPanel != null)
392
                        return areaPanel;
393

    
394
                if (areaTabPosition == -1)
395
                        return null;
396

    
397
                return (areaPanel = (WFSAreaPanel) values().toArray()[areaTabPosition]);
398
        }
399

    
400
        /**
401
         * Verifies that the selected parameters are enough to request the coverage to the server.
402
         * 
403
         * @return boolean <code>true</code> if its correctly configured; otherwise returns <code>false</code>
404
         */
405
        public boolean isCorretlyConfigured() {
406
                if (featureTabPosition == -1) {
407
                        return false;
408
                } else {
409
                        return true;
410
                }
411
        }
412

    
413
        /**
414
         * Enable or disable the default tabs
415
         */
416
        public void enableDefaultTabs(boolean isEnabled) {
417
                if (fieldsTabPosition != -1)
418
                        setEnabledAt(fieldsTabPosition, isEnabled);
419

    
420
                if (filterTabPosition != -1)
421
                        setEnabledAt(filterTabPosition, isEnabled);
422

    
423
                if (areaTabPosition != -1)
424
                        setEnabledAt(areaTabPosition, isEnabled);
425
        }
426

    
427
        /*
428
         * (non-Javadoc)
429
         * @see org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel#loadPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
430
         */
431
        protected void loadPanel(IPanel panel) {
432
                super.loadPanel(panel);
433

    
434
                if (((AbstractPanel)panel).getClass() ==  WFSInfoPanel.class) {
435
                        infoTabPosition = getPanelInGUICount() - 1;
436
                        return;
437
                }
438

    
439
                if (((AbstractPanel)panel).getClass() ==  WFSSelectFeaturePanel.class) {
440
                        featureTabPosition = getPanelInGUICount() - 1;
441
                        return;
442
                }
443

    
444
                if (((AbstractPanel)panel).getClass() ==  WFSSelectFieldsPanel.class) {
445
                        fieldsTabPosition = getPanelInGUICount() - 1;
446
                        return;
447
                }
448

    
449
                if (((AbstractPanel)panel).getClass() ==  WFSOptionsPanel.class) {
450
                        optionsTabPosition = getPanelInGUICount() - 1;
451
                        return;
452
                }
453

    
454
                if (((AbstractPanel)panel).getClass() ==  WFSFilterPanel.class) {
455
                        filterTabPosition = getPanelInGUICount() - 1;
456
                        return;
457
                }
458

    
459
                if (((AbstractPanel)panel).getClass() ==  WFSAreaPanel.class) {
460
                        areaTabPosition = getPanelInGUICount() - 1;
461
                        return;
462
                }
463
        }
464

    
465
        /**
466
         * Refresh all the panels with the WFS capabilities information.
467
         */
468
        public void refreshCapabilitiesInfo(){
469
                WFSSelectedFeature selectedFeature = getFeaturesPanel().getSelectedFeature();
470
                if (selectedFeature != null) {
471
                        selectedFeature.setSelectedFields(getFieldsPanel().getSelectedFields());
472
                } else {
473
                        getFeaturesPanel().refresh(null);
474
                }
475
                serverExplorer.setUserName(getOptionsPanel().getUserName());
476
                serverExplorer.setMaxFeatures(getOptionsPanel().getBuffer());
477
                serverExplorer.setTimeOut(getOptionsPanel().getTimeout());
478

    
479
                getInfoPanel().refresh(selectedFeature);
480
        }
481

    
482
        /**
483
         * Gets the information used to add or load a WFS layer.
484
         * 
485
         * @return information used to add or load a WFS layer
486
         */
487
        public WFSServerExplorer getServerExplorer() {
488
                return serverExplorer;
489
        }
490

    
491
        /**
492
         * Sets the information used to add or load a WFS layer.
493
         *
494
         * @param wizardData information used to add or load a WFS layer
495
         */
496
        public void setServerExplorer(WFSServerExplorer serverExplorer) {
497
                this.serverExplorer = serverExplorer;
498
                this.selectedFeatureManager = 
499
                        WFSSelectedFeatureManager.getInstance(serverExplorer);
500
        }
501

    
502
        /**
503
         * Returns the next enabled tab's index, or -1 if there isn't any.
504
         *
505
         * @return The index or -1 if there is no one.
506
         */
507
        public int nextPageEnabled() {
508
                int currentPage = getSelectedIndex();
509
                int nPages = getPanelInGUICount();
510

    
511
                if (currentPage == nPages)
512
                        return -1;
513

    
514
                for (int i = currentPage + 1; i < nPages; i++){
515
                        if (getJTabbedPane().isEnabledAt(i)){
516
                                return i;
517
                        }
518
                }
519

    
520
                return -1;
521
        }
522

    
523
        /**
524
         * Returns the index of the current tab.
525
         *
526
         * @return index of the current tab
527
         */
528
        public int currentPage() {
529
                return getSelectedIndex();
530
        }
531

    
532
        /**
533
         * Returns the index of the previous enabled tab.
534
         *
535
         * @return The index, or -1 if there is no one.
536
         */
537
        public int previousEnabledPage() {
538
                int currentPage = getSelectedIndex();
539

    
540
                if (currentPage == 0)
541
                        return -1;
542

    
543
                for (int i = currentPage - 1; i > -1; i--) {
544
                        if (isEnabledAt(i)) {
545
                                return i;
546
                        }
547
                }
548

    
549
                return -1;
550
        }
551

    
552
        /*
553
         *  (non-Javadoc)
554
         * @see com.iver.cit.gvsig.gui.WizardPanel#initWizard()
555
         */
556
        public void initWizard() {
557

    
558
        }
559

    
560
        /*
561
         *  (non-Javadoc)
562
         * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
563
         */
564
        public void execute() {
565

    
566
        }
567

    
568
        /*
569
         *  (non-Javadoc)
570
         * @see com.iver.cit.gvsig.gui.ILayerPanel#getLayer()
571
         */
572
        public FLayer getLayer() {                
573
            try {
574
                FLayer layer = (FLyrVect) createLayer();
575
                logger.warn("El flujo de la apliaci?n tal vez no deber?a haber pasado por aqu?.");
576
                return layer;
577
            } catch (CreateLayerException e) {
578
                // do nothing
579
            }                
580
            return null;
581
        }
582
        
583
        public FLayer createLayer() throws CreateLayerException {
584
                try {                    
585
                    FLyrVect layerAux = 
586
                        (FLyrVect)MAP_CONTEXT_MANAGER.createLayer(getFeaturesPanel().getLayerName(), getDataStoreParameters());
587
                        
588
                        if((cacheSelected != null) && (!this.cacheSelected.equals(PluginServices.getText(this, "none")))){
589
                                layerAux.getFeatureStore().createCache(cacheSelected, getParameters(cacheSelected));
590
                        }
591
                        return layerAux;
592
                } catch (Exception e) {
593
                        logger.warn("Can't create layer.",e);
594
                        throw new CreateLayerException(getFeaturesPanel().getLayerName(), e); 
595
                }
596
        
597
        }
598
        
599
        
600
         protected DynObject getParameters(String nameCacheProvider) throws DataException {
601
                 DataManager dataManager = DALLocator.getDataManager();
602
                 return dataManager.createCacheParameters(nameCacheProvider);
603
         }
604

    
605
        public DataStoreParameters getDataStoreParameters() throws InitializeException, ProviderNotRegisteredException{
606
                DataManager dataManager = DALLocator.getDataManager();
607
                WFSStoreParameters parameters = (WFSStoreParameters) dataManager
608
                .createStoreParameters(WFSStoreProvider.NAME);
609
                refreshDataStoreParameters(parameters);
610
                return parameters;
611
        }        
612

    
613
        private void refreshDataStoreParameters(WFSStoreParameters parameters){
614
                WFSSelectedFeature selectedFeature = getSelectedFeature();
615
                parameters.setUrl(serverExplorer.getUrl());
616
                parameters.setVersion(serverExplorer.getVersion());
617
                parameters.setFeatureType(selectedFeature.getNameSpace(),
618
                                selectedFeature.getName());
619
                parameters.setFields(getFieldsPanel().getSelectedFieldsAsString());
620
                parameters.setUser(getOptionsPanel().getUserName());
621
                parameters.setPassword(getOptionsPanel().getPassword());
622
                parameters.setMaxFeatures(getOptionsPanel().getBuffer());
623
                parameters.setTimeOut(getOptionsPanel().getTimeout());
624
                parameters.setFilterByAreaGeometry(getAreaPanel().getArea());
625
                parameters.setFilterByAreaCrs(getOptionsPanel().getSRS());
626
                parameters.setFilterByAreaOperation((int)AbstractFilter.GEOMETRY_INTERSECTS);
627
                parameters.setFilterByAreaAttribute(selectedFeature.getGeometryField().getName());
628
                parameters.setFilterEncodingByAttribute(getFilterPanel().getQuery());
629
        }
630
        
631
    /**
632
     * Sets the forms from a 
633
     */
634
    public void setDataStore(DataStore dataStore){
635
        WFSStoreParameters storeParameters = 
636
            (WFSStoreParameters)dataStore.getParameters();
637
        WFSSelectedFeature selectedFeature =
638
            selectedFeatureManager.getFeatureInfo(storeParameters.getFeatureNamespace(),
639
                storeParameters.getFeatureType());        
640
        getFeaturesPanel().setSelectedFeature(selectedFeature);
641
        getFieldsPanel().setSelectedFields(storeParameters.getFields());
642
        getOptionsPanel().setUserName(storeParameters.getUser());
643
        getOptionsPanel().setPassword(storeParameters.getPassword());
644
        getOptionsPanel().setBuffer(storeParameters.getMaxFeatures());
645
        getOptionsPanel().setTimeOut(storeParameters.getTimeOut());
646
        getAreaPanel().setArea(storeParameters.getFilterByAreaGeometry());
647
        getOptionsPanel().setSRS(storeParameters.getFilterByAreaCrs());
648
        getFilterPanel().setFilterExpressionIntoInterface(storeParameters.getFilterEncodingByAttribute());  
649
        
650
        //The filter panel needs to store to update the attributes list
651
        getFilterPanel().setDataStore(dataStore);
652
    }
653
    
654
    /**
655
     * Gets the node of the layer selected as a feature, with the selected fields and the filter defined.
656
     * 
657
     * @return gets the node of the layer selected as a feature, with the selected fields and the filter defined
658
     */
659
    private WFSSelectedFeature getSelectedFeature(){
660
        WFSSelectedFeature selectedFeature = getFeaturesPanel().getSelectedFeature();
661
        selectedFeature.setSelectedFields(getFieldsPanel().getSelectedFields());
662
        selectedFeature.setFilter(getFilterPanel().getQuery());     
663
        return selectedFeature;
664
    }
665

    
666
        /**
667
         * @see WFSWizard#doClickOnNextButton()
668
         */
669
        public void doClickOnNextButton() {
670
                Object obj = this.getParent();
671

    
672
                if (obj == null)
673
                        return;
674

    
675
                // When we start to connect to a server -> the interface is the dialog WFSWizard
676
                if (obj instanceof WFSWizard)
677
                        ((WFSWizard)this.getParent()).doClickOnNextButton();
678
                else {
679
                        // When we are modifying a loaded layer -> the interface is the dialog WFSPropsDialog
680
                        this.advanceCurrentTab();
681
                }
682
        }
683

    
684
        /**
685
         * Selects the next tab
686
         */
687
        public void advanceCurrentTab() {
688
                int currentTabIndex = this.getJTabbedPane().getSelectedIndex();
689

    
690
                // Ensure we can select next tab
691
                if ((currentTabIndex != -1) && (currentTabIndex < (values().size() -1)))
692
                        setSelectedIndex(currentTabIndex + 1);
693
        }
694

    
695
        /**
696
         * Refreshes the data of the inner <code>WFSSelectFeaturePanel</code>.
697
         */
698
        public void refreshWFSSelectFeaturePanel() {
699
                WFSSelectFeaturePanel panel = getFeaturesPanel();
700

    
701
                if (panel != null) {
702
                        panel.refresh(null);
703
                }
704
        }
705

    
706
        /**
707
         * @return the selected projection
708
         */
709
        public IProjection getSelectedFeatureProjection(){
710
                WFSSelectedFeature selectedFeature = getSelectedFeature();
711
                if (selectedFeature.getSrs().size() > 0){
712
                        String crs = (String)selectedFeature.getSrs().get(0);
713
                        crs = getSRS(crs);
714
                        IProjection projection = CRSFactory.getCRS(crs);
715
                        if (projection != null){
716
                                return projection;
717
                        }
718
                }
719
                return null;
720
        }
721

    
722
        /**
723
         * Removing the URN prefix
724
         * @param srs
725
         * @return
726
         */
727
        private String getSRS(String srs){
728
                if (srs == null){
729
                        return null;
730
                }
731
                if (srs.startsWith("urn:x-ogc:def:crs:")){
732
                        String newString = srs.substring(srs.lastIndexOf(":") + 1, srs.length());
733
                        if (srs.indexOf("EPSG") > 0){
734
                                if (newString.indexOf("EPSG") < 0){
735
                                        newString = "EPSG:" + newString;
736
                                }
737
                        }
738
                        return newString;                        
739
                }
740
                if (srs.toLowerCase().startsWith("crs:")){
741
                        return srs.substring(4, srs.length());
742
                }
743
                return srs;
744
        }
745

    
746
        /**
747
         * Refresh all the panels every time that a different layer is selected. The info panel is refreshed every time the user 
748
         * makes a click on it.
749
         * 
750
         * @param selectedFeature the selected layer
751
         */
752
        public void refresh(WFSSelectedFeature selectedFeature){
753
                boolean hasFields = false;
754

    
755
                if (selectedFeature!=null){
756
                        //Update the layer information
757
                        selectedFeature = selectedFeatureManager.getFeatureInfo(selectedFeature.getNameSpace(),
758
                                        selectedFeature.getName());
759

    
760
                        // If there is no fields -> disable not necessary tabs
761
                        if (selectedFeature.getWFSFeature().getFieldSize() == 0) {
762
                                setApplicable(false);
763
                                hasFields = false;
764
                        }else{        
765
                                getFieldsPanel().refresh(selectedFeature);                        
766
                                getOptionsPanel().refresh(selectedFeature);
767
                                getFilterPanel().refresh(selectedFeature);
768
                                getAreaPanel().refresh(selectedFeature);
769
                                hasFields = true;
770
                        }
771
                }
772

    
773
                enableDefaultTabs(hasFields);
774
        }
775

    
776
        /**
777
         * Changes the <i>enable</i> status of the "<i>apply</i>" button
778
         * 
779
         * @param isApplicable the <i>enable</i> status of the "<i>apply</i>" button
780
         */
781
        public void setApplicable(boolean isApplicable){
782
                setEnabledApplyButton(isApplicable);
783
        }
784

    
785
        /*
786
         * (non-Javadoc)
787
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledApplyButton(boolean)
788
         */
789
        public void setEnabledApplyButton(boolean b) {
790
                super.setEnabledApplyButton(b);
791

    
792
                Container parent = getParent();
793

    
794
                if ((parent != null) && (parent instanceof WizardPanel))
795
                        ((WizardPanel)parent).callStateChanged(b);
796
        }
797

    
798
        /*
799
         * (non-Javadoc)
800
         * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#loadPanels(org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader)
801
         */
802
        public void loadPanels(IPanelGroupLoader loader) throws ListCouldntAddPanelException, EmptyPanelGroupException, EmptyPanelGroupGUIException {
803
                // This code will be executed when is creating the dialog of properties
804
                if (getReference() != null) {
805
                        FLyrVect lyr = (FLyrVect) getReference();
806

    
807
                        DataManager dataManager = DALLocator.getDataManager();
808
                        //Create the datastore parameters and fill them
809
                        WFSStoreParameters parameters;
810
                        try {
811
                                parameters = (WFSStoreParameters) dataManager
812
                                .createStoreParameters(WFSStoreProvider.NAME);
813
                                parameters.setUrl(serverExplorer.getUrl());
814
                                parameters.setVersion(serverExplorer.getVersion());
815
                                //parameters.setFeatureType(namespacePrefix, namespace, featureType);
816

    
817
                                //dataSource.setDriver(lyr.getWfsDriver());
818

    
819
                                //setServerExplorer(dataSource);
820

    
821
                                super.loadPanels(loader);
822

    
823
                                //                                HashMap<String, Object> info = lyr.getProperties();
824
                                //                                setSelectedFeature((WFSLayerNode)info.get("wfsLayerNode"));
825
                                //                                setStatus((WFSStatus)info.get("status"));
826
                                //                                setLayerName(lyr.getName());
827
                                //                                setVisible(true);
828
                                //                                refreshInfo();
829
                        } catch (InitializeException e) {
830
                                // TODO Auto-generated catch block
831
                                e.printStackTrace();
832
                        } catch (ProviderNotRegisteredException e) {
833
                                // TODO Auto-generated catch block
834
                                e.printStackTrace();
835
                        }                        
836
                        return;
837
                }
838

    
839
                // This will executed when is adding a new WFS layer:
840
                super.loadPanels(loader);
841
        }
842

    
843
        ///// BEGIN: METHODS FOR INITIALIZE THIS PANEL AS A COMPONENT OF A PROPERTIES DIALOG /////
844

    
845

    
846
        /**
847
         * @see WFSSelectFeaturePanel#setLayerName(String)
848
         */
849
        public void setLayerName(String name) {
850
                getFeaturesPanel().setLayerName(name);
851
        }
852

    
853
        /**
854
         * Updates the information stored at the wizard's data and <i>info</i> panel.
855
         */
856
        public void refreshInfo(){
857
                WFSSelectedFeature selectedFeature = getFeaturesPanel().getSelectedFeature();
858

    
859
                if (selectedFeature != null) {
860
                        selectedFeature.setSelectedFields(getFieldsPanel().getSelectedFields());
861
                }
862

    
863
                serverExplorer.setUserName(getOptionsPanel().getUserName());
864
                serverExplorer.setMaxFeatures(getOptionsPanel().getBuffer());
865
                serverExplorer.setTimeOut(getOptionsPanel().getTimeout());
866
                getInfoPanel().refresh(selectedFeature);
867
        }
868

    
869
        /**
870
         * @return the selectedFeatureManager
871
         */
872
        public WFSSelectedFeatureManager getSelectedFeatureManager() {
873
                return selectedFeatureManager;
874
        }
875

    
876
        public void setSelectedCache(String selectedCache) {
877
                this.cacheSelected = selectedCache;
878
        }        
879
}