Statistics
| Revision:

root / org.gvsig.wfs.app / trunk / org.gvsig.wfs.app / org.gvsig.wfs.app.mainplugin / src / main / java / org / gvsig / wfs / gui / panels / WFSParamsPanel.java @ 10

History | View | Annotate | Download (28.3 KB)

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

    
3
import java.awt.Container;
4
import java.util.List;
5

    
6
import javax.swing.JTabbedPane;
7

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

    
44

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

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

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

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

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

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

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

    
273
                this.setVisible(false);
274
        }
275

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

    
401
        /**
402
         * Verifies that the selected parameters are enough to request
403
         * the coverage to the server.
404
         * 
405
         * @return boolean <code>true</code> if its correctly configured;
406
         * otherwise returns <code>false</code>
407
         */
408
        public boolean isCorretlyConfigured() {
409
            
410
            if (featurePanel == null) {
411
                return false;
412
            }
413
            
414
            int n_sel = featurePanel.getSelectedFeaturesCount();
415
            return (n_sel > 0);
416
        }
417

    
418
        /**
419
         * Enable or disable the default tabs
420
         */
421
        public void enableDefaultTabs(boolean isEnabled) {
422
                if (fieldsTabPosition != -1)
423
                        setEnabledAt(fieldsTabPosition, isEnabled);
424

    
425
                if (filterTabPosition != -1)
426
                        setEnabledAt(filterTabPosition, isEnabled);
427

    
428
                if (areaTabPosition != -1)
429
                        setEnabledAt(areaTabPosition, isEnabled);
430
        }
431

    
432
        /*
433
         * (non-Javadoc)
434
         * @see org.gvsig.gui.beans.panelGroup.tabbedPanel.TabbedPanel#loadPanel(org.gvsig.gui.beans.panelGroup.panels.IPanel)
435
         */
436
        protected void loadPanel(IPanel panel) {
437
                super.loadPanel(panel);
438

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

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

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

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

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

    
464
                if (((AbstractPanel)panel).getClass() ==  WFSAreaPanel.class) {
465
                        areaTabPosition = getPanelInGUICount() - 1;
466
                        return;
467
                }
468
        }
469

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

    
484
                getInfoPanel().refresh(selectedFeature);
485
        }
486

    
487
        /**
488
         * Gets the information used to add or load a WFS layer.
489
         * 
490
         * @return information used to add or load a WFS layer
491
         */
492
        public WFSServerExplorer getServerExplorer() {
493
                return serverExplorer;
494
        }
495

    
496
        /**
497
         * Sets the information used to add or load a WFS layer.
498
         *
499
         * @param wizardData information used to add or load a WFS layer
500
         */
501
        public void setServerExplorer(WFSServerExplorer serverExplorer) {
502
                this.serverExplorer = serverExplorer;
503
                this.selectedFeatureManager = 
504
                        WFSSelectedFeatureManager.getInstance(serverExplorer);
505
        }
506

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

    
516
                if (currentPage == nPages)
517
                        return -1;
518

    
519
                for (int i = currentPage + 1; i < nPages; i++){
520
                        if (getJTabbedPane().isEnabledAt(i)){
521
                                return i;
522
                        }
523
                }
524

    
525
                return -1;
526
        }
527

    
528
        /**
529
         * Returns the index of the current tab.
530
         *
531
         * @return index of the current tab
532
         */
533
        public int currentPage() {
534
                return getSelectedIndex();
535
        }
536

    
537
        /**
538
         * Returns the index of the previous enabled tab.
539
         *
540
         * @return The index, or -1 if there is no one.
541
         */
542
        public int previousEnabledPage() {
543
                int currentPage = getSelectedIndex();
544

    
545
                if (currentPage == 0)
546
                        return -1;
547

    
548
                for (int i = currentPage - 1; i > -1; i--) {
549
                        if (isEnabledAt(i)) {
550
                                return i;
551
                        }
552
                }
553

    
554
                return -1;
555
        }
556

    
557
        /*
558
         *  (non-Javadoc)
559
         * @see com.iver.cit.gvsig.gui.WizardPanel#initWizard()
560
         */
561
        public void initWizard() {
562

    
563
        }
564

    
565
        /*
566
         *  (non-Javadoc)
567
         * @see com.iver.cit.gvsig.gui.WizardPanel#execute()
568
         */
569
        public void execute() {
570

    
571
        }
572

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

    
610
        public WFSStoreParameters getDataStoreParameters() throws InitializeException, ProviderNotRegisteredException{
611
                DataManager dataManager = DALLocator.getDataManager();
612
                WFSStoreParameters parameters = (WFSStoreParameters) dataManager
613
                .createStoreParameters(WFSStoreProvider.NAME);
614
                refreshDataStoreParameters(parameters);
615
                return parameters;
616
        }        
617

    
618
        private void refreshDataStoreParameters(WFSStoreParameters parameters){
619
                WFSSelectedFeature selectedFeature = getSelectedFeature();
620
                parameters.setUrl(serverExplorer.getUrl());
621
                parameters.setFeatureType(selectedFeature.getNameSpace(),
622
                                selectedFeature.getName());
623
                parameters.setFields(getFieldsPanel().getSelectedFieldsAsString());
624
                parameters.setUser(getOptionsPanel().getUserName());
625
                parameters.setPassword(getOptionsPanel().getPassword());
626
                parameters.setMaxFeatures(getOptionsPanel().getBuffer());
627
                parameters.setTimeOut(getOptionsPanel().getTimeout());
628
                parameters.setFilterByAreaGeometry(getAreaPanel().getArea());
629
                parameters.setFilterByAreaCrs(getOptionsPanel().getSRS());
630

    
631
                XMLNameSpace ns = selectedFeature.getWFSFeature().getNamespace();
632
                if (ns != null) {
633
                String ns_pre = ns.getPrefix(); 
634
                parameters.setDynValue(
635
                    WFSStoreParameters.DYNFIELDNAME_NAMESPACEPREFIX, ns_pre);
636
                }
637
                // serverExplorer.getServerExplorerProviderServices();
638
                
639
                parameters.setVersion(getOptionsPanel().getVersion());
640

    
641
                parameters.setFilterByAreaOperation((int)AbstractFilter.GEOMETRY_INTERSECTS);
642
                parameters.setFilterByAreaAttribute(selectedFeature.getGeometryField().getName());
643
                parameters.setFilterEncodingByAttribute(getFilterPanel().getQuery());
644
        }
645
        
646
    /**
647
     * Sets the forms from a 
648
     */
649
    public void setDataStore(DataStore dataStore){
650
        WFSStoreParameters storeParameters = 
651
            (WFSStoreParameters)dataStore.getParameters();
652
        WFSSelectedFeature selectedFeature =
653
            selectedFeatureManager.getFeatureInfo(storeParameters.getFeatureNamespace(),
654
                storeParameters.getFeatureType());        
655
        getFeaturesPanel().setSelectedFeature(selectedFeature);
656
        getFieldsPanel().setSelectedFields(storeParameters.getFields());
657
        getOptionsPanel().setUserName(storeParameters.getUser());
658
        getOptionsPanel().setPassword(storeParameters.getPassword());
659
        getOptionsPanel().setBuffer(storeParameters.getMaxFeatures());
660
        getOptionsPanel().setTimeOut(storeParameters.getTimeOut());
661
        getAreaPanel().setArea(storeParameters.getFilterByAreaGeometry());
662
        
663
        getOptionsPanel().setSRS(storeParameters.getFilterByAreaCrs());
664
        getOptionsPanel().setVersion(storeParameters.getVersion());
665
        
666
        getFilterPanel().setFilterExpressionIntoInterface(storeParameters.getFilterEncodingByAttribute());  
667
        
668
        //The filter panel needs to store to update the attributes list
669
        getFilterPanel().setDataStore(dataStore);
670
    }
671
    
672
    /**
673
     * Gets the node of the layer selected as a feature, with the selected fields and the filter defined.
674
     * 
675
     * @return gets the node of the layer selected as a feature, with the selected fields and the filter defined
676
     */
677
    private WFSSelectedFeature getSelectedFeature(){
678
        WFSSelectedFeature selectedFeature = getFeaturesPanel().getSelectedFeature();
679
        selectedFeature.setSelectedFields(getFieldsPanel().getSelectedFields());
680
        selectedFeature.setFilter(getFilterPanel().getQuery());     
681
        return selectedFeature;
682
    }
683

    
684
        /**
685
         * @see WFSWizard#doClickOnNextButton()
686
         */
687
        public void doClickOnNextButton() {
688
                Object obj = this.getParent();
689

    
690
                if (obj == null)
691
                        return;
692

    
693
                // When we start to connect to a server -> the interface is the dialog WFSWizard
694
                if (obj instanceof WFSWizard)
695
                        ((WFSWizard)this.getParent()).doClickOnNextButton();
696
                else {
697
                        // When we are modifying a loaded layer -> the interface is the dialog WFSPropsDialog
698
                        this.advanceCurrentTab();
699
                }
700
        }
701

    
702
        /**
703
         * Selects the next tab
704
         */
705
        public void advanceCurrentTab() {
706
                int currentTabIndex = this.getJTabbedPane().getSelectedIndex();
707

    
708
                // Ensure we can select next tab
709
                if ((currentTabIndex != -1) && (currentTabIndex < (values().size() -1)))
710
                        setSelectedIndex(currentTabIndex + 1);
711
        }
712

    
713
        /**
714
         * Refreshes the data of the inner <code>WFSSelectFeaturePanel</code>.
715
         */
716
        public void refreshWFSSelectFeaturePanel() {
717
                WFSSelectFeaturePanel panel = getFeaturesPanel();
718

    
719
                if (panel != null) {
720
                        panel.refresh(null);
721
                }
722
        }
723

    
724
        /**
725
         * @return the selected projection
726
         */
727
        public IProjection getSelectedFeatureProjection(){
728
                WFSSelectedFeature selectedFeature = getSelectedFeature();
729
                if (selectedFeature.getSrs().size() > 0){
730
                        String crs = (String)selectedFeature.getSrs().get(0);
731
                        crs = getSRS(crs);
732
                        IProjection projection = CRSFactory.getCRS(crs);
733
                        if (projection != null){
734
                                return projection;
735
                        }
736
                }
737
                return null;
738
        }
739

    
740
        /**
741
         * Removing the URN prefix
742
         * @param srs
743
         * @return
744
         */
745
        private String getSRS(String srs){
746
                if (srs == null){
747
                        return null;
748
                }
749
                if (srs.startsWith("urn:x-ogc:def:crs:")){
750
                        String newString = srs.substring(srs.lastIndexOf(":") + 1, srs.length());
751
                        if (srs.indexOf("EPSG") > 0){
752
                                if (newString.indexOf("EPSG") < 0){
753
                                        newString = "EPSG:" + newString;
754
                                }
755
                        }
756
                        return newString;                        
757
                }
758
                if (srs.toLowerCase().startsWith("crs:")){
759
                        return srs.substring(4, srs.length());
760
                }
761
                return srs;
762
        }
763

    
764
        /**
765
         * Refresh all the panels every time that a different layer is selected. The info panel is refreshed every time the user 
766
         * makes a click on it.
767
         * 
768
         * @param selectedFeature the selected layer
769
         */
770
        public void refresh(WFSSelectedFeature selectedFeature, List vers_list){
771
                boolean hasFields = false;
772

    
773
                if (selectedFeature!=null){
774
                        //Update the layer information
775
                        selectedFeature = selectedFeatureManager.getFeatureInfo(selectedFeature.getNameSpace(),
776
                                        selectedFeature.getName());
777

    
778
                        // If there is no fields -> disable not necessary tabs
779
                        if (selectedFeature.getWFSFeature().getFieldSize() == 0) {
780
                                setApplicable(false);
781
                                hasFields = false;
782
                        }else{        
783
                                getFieldsPanel().refresh(selectedFeature);                        
784
                                getOptionsPanel().refresh(selectedFeature);
785
                getOptionsPanel().refreshVersions(vers_list);
786
                                getFilterPanel().refresh(selectedFeature);
787
                                getAreaPanel().refresh(selectedFeature);
788
                                hasFields = true;
789
                        }
790
                }
791

    
792
                enableDefaultTabs(hasFields);
793
        }
794

    
795
        /**
796
         * Changes the <i>enable</i> status of the "<i>apply</i>" button
797
         * 
798
         * @param isApplicable the <i>enable</i> status of the "<i>apply</i>" button
799
         */
800
        public void setApplicable(boolean isApplicable){
801
                setEnabledApplyButton(isApplicable);
802
        }
803

    
804
        /*
805
         * (non-Javadoc)
806
         * @see org.gvsig.gui.beans.buttonspanel.IButtonsPanel#setEnabledApplyButton(boolean)
807
         */
808
        public void setEnabledApplyButton(boolean b) {
809
                super.setEnabledApplyButton(b);
810

    
811
                Container parent = getParent();
812

    
813
                if ((parent != null) && (parent instanceof WizardPanel))
814
                        ((WizardPanel)parent).callStateChanged(b);
815
        }
816

    
817
        /*
818
         * (non-Javadoc)
819
         * @see org.gvsig.gui.beans.panelGroup.AbstractPanelGroup#loadPanels(org.gvsig.gui.beans.panelGroup.loaders.IPanelGroupLoader)
820
         */
821
        public void loadPanels(IPanelGroupLoader loader) throws ListCouldntAddPanelException, EmptyPanelGroupException, EmptyPanelGroupGUIException {
822
                // This code will be executed when is creating the dialog of properties
823
                if (getReference() != null) {
824
                        FLyrVect lyr = (FLyrVect) getReference();
825

    
826
                        DataManager dataManager = DALLocator.getDataManager();
827
                        //Create the datastore parameters and fill them
828
                        WFSStoreParameters parameters;
829
                        try {
830
                                parameters = (WFSStoreParameters) dataManager
831
                                .createStoreParameters(WFSStoreProvider.NAME);
832
                                parameters.setUrl(serverExplorer.getUrl());
833
                                parameters.setVersion(serverExplorer.getVersion());
834
                                //parameters.setFeatureType(namespacePrefix, namespace, featureType);
835

    
836
                                //dataSource.setDriver(lyr.getWfsDriver());
837

    
838
                                //setServerExplorer(dataSource);
839

    
840
                                super.loadPanels(loader);
841

    
842
                                //                                HashMap<String, Object> info = lyr.getProperties();
843
                                //                                setSelectedFeature((WFSLayerNode)info.get("wfsLayerNode"));
844
                                //                                setStatus((WFSStatus)info.get("status"));
845
                                //                                setLayerName(lyr.getName());
846
                                //                                setVisible(true);
847
                                //                                refreshInfo();
848
                        } catch (InitializeException e) {
849
                                // TODO Auto-generated catch block
850
                                e.printStackTrace();
851
                        } catch (ProviderNotRegisteredException e) {
852
                                // TODO Auto-generated catch block
853
                                e.printStackTrace();
854
                        }                        
855
                        return;
856
                }
857

    
858
                // This will executed when is adding a new WFS layer:
859
                super.loadPanels(loader);
860
        }
861

    
862
        ///// BEGIN: METHODS FOR INITIALIZE THIS PANEL AS A COMPONENT OF A PROPERTIES DIALOG /////
863

    
864

    
865
        /**
866
         * @see WFSSelectFeaturePanel#setLayerName(String)
867
         */
868
        public void setLayerName(String name) {
869
                getFeaturesPanel().setLayerName(name);
870
        }
871

    
872
        /**
873
         * Updates the information stored at the wizard's data and <i>info</i> panel.
874
         */
875
        public void refreshInfo(){
876
                WFSSelectedFeature selectedFeature = getFeaturesPanel().getSelectedFeature();
877

    
878
                if (selectedFeature != null) {
879
                        selectedFeature.setSelectedFields(getFieldsPanel().getSelectedFields());
880
                }
881

    
882
                serverExplorer.setUserName(getOptionsPanel().getUserName());
883
                serverExplorer.setMaxFeatures(getOptionsPanel().getBuffer());
884
                serverExplorer.setTimeOut(getOptionsPanel().getTimeout());
885
                getInfoPanel().refresh(selectedFeature);
886
        }
887

    
888
        /**
889
         * @return the selectedFeatureManager
890
         */
891
        public WFSSelectedFeatureManager getSelectedFeatureManager() {
892
                return selectedFeatureManager;
893
        }
894

    
895
        public void setSelectedCache(String selectedCache) {
896
                this.cacheSelected = selectedCache;
897
        }        
898
}