Statistics
| Revision:

root / branches / v2_0_0_prep / extensions / extDataLocator / src / org / gvsig / datalocator / gui / DataSelectionPanel.java @ 33053

History | View | Annotate | Download (28.2 KB)

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

    
46
import java.awt.FlowLayout;
47
import java.awt.event.ItemListener;
48
import java.util.Comparator;
49
import java.util.Date;
50
import java.util.TreeSet;
51
import java.util.Vector;
52
import java.util.prefs.Preferences;
53

    
54
import javax.swing.DefaultComboBoxModel;
55
import javax.swing.JCheckBox;
56
import javax.swing.JComboBox;
57
import javax.swing.JDialog;
58
import javax.swing.JLabel;
59
import javax.swing.JPanel;
60

    
61
import org.gvsig.andami.PluginServices;
62
import org.gvsig.andami.ui.mdiManager.IWindow;
63
import org.gvsig.andami.ui.mdiManager.IWindowListener;
64
import org.gvsig.andami.ui.mdiManager.SingletonWindow;
65
import org.gvsig.andami.ui.mdiManager.WindowInfo;
66
import org.gvsig.datalocator.DataLocatorExtension;
67
import org.gvsig.fmap.dal.exception.DataException;
68
import org.gvsig.fmap.dal.feature.Feature;
69
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
70
import org.gvsig.fmap.dal.feature.FeatureQuery;
71
import org.gvsig.fmap.dal.feature.FeatureSelection;
72
import org.gvsig.fmap.dal.feature.FeatureSet;
73
import org.gvsig.fmap.dal.feature.FeatureStore;
74
import org.gvsig.fmap.mapcontext.MapContext;
75
import org.gvsig.fmap.mapcontext.SelectedZoomVisitor;
76
import org.gvsig.fmap.mapcontext.layers.CancelationException;
77
import org.gvsig.fmap.mapcontext.layers.FLayer;
78
import org.gvsig.fmap.mapcontext.layers.FLayers;
79
import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
80
import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
81
import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
82
import org.gvsig.fmap.mapcontext.layers.LayersIterator;
83
import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
84
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
85
import org.gvsig.gui.beans.swing.JButton;
86
import org.gvsig.tools.dispose.DisposableIterator;
87
import org.gvsig.tools.dispose.DisposeUtils;
88
import org.gvsig.tools.evaluator.Evaluator;
89
import org.gvsig.tools.evaluator.EvaluatorData;
90
import org.gvsig.tools.evaluator.EvaluatorException;
91
import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
92
import org.gvsig.tools.exception.BaseException;
93

    
94

    
95
/**
96
 * @author jmorell
97
 */
98
public class DataSelectionPanel extends JPanel implements IWindow, IWindowListener, SingletonWindow {
99

    
100
        private static final long serialVersionUID = 1L;
101
    private JComboBox jComboBox = null;
102
        private JLabel jLabel = null;  //  @jve:decl-index=0:visual-constraint="597,16"
103
        private JLabel jLabel1 = null;  //  @jve:decl-index=0:visual-constraint="873,44"
104
        private JComboBox jComboBox1 = null;
105
        private JLabel jLabel2 = null;  //  @jve:decl-index=0:visual-constraint="847,16"
106
        private JComboBox jComboBox2 = null;
107
    private WindowInfo viewInfo = null;
108
        private JButton jButton = null;
109
        private JButton jButton1 = null;
110
        private FLayer layerToZoom = null;
111
        private int fieldToZoomIndex = 0;
112
        private Object itemToZoom = null;
113
        private MapContext mapContext = null;
114
        private Preferences prefUsuario = null;
115
        private Vector<LayersListener> layersListenerList = new Vector<LayersListener>();
116
    private Vector<FLayer> vectorialLayers = null;
117
        private JCheckBox jChkBoxOpenFirstTime = null;
118
        private JPanel jPanelButtons = null;
119

    
120
        /**
121
         * This method initializes
122
         *
123
         */
124
        public DataSelectionPanel(MapContext mapContext) {
125
                super();
126
                this.mapContext = mapContext;
127
                prefUsuario = Preferences.userRoot();
128
                initializeVectorialLayers();
129
        initializeLayerToZoom();
130
                initializeFieldToZoomIndex();
131
        initialize();
132

    
133
        int userOpen = prefUsuario.getInt("gvSIG.DataLocator.open_first_time", -1);
134
        if (userOpen == 1)
135
                getJChkBoxOpenFirstTime().setSelected(true);
136
        }
137
    private void initializeVectorialLayers() {
138
            unregisterLayersListener();
139
        vectorialLayers = new Vector<FLayer>();
140
        LayersIterator iter = DataLocatorExtension.newValidLayersIterator(mapContext.getLayers());
141

    
142

    
143
        while (iter.hasNext()) {
144
                vectorialLayers.add(iter.nextLayer());
145
        }
146

    
147
        registerLayersListener();
148
    }
149
        private void initializeLayerToZoom() {
150
                String layerName = prefUsuario.get("LAYERNAME_FOR_DATA_LOCATION", "");
151
        if (layerName.equals("")) layerToZoom = (FLayer)vectorialLayers.get(0);
152
        boolean layerFound = false;
153
        for (int i=0;i<vectorialLayers.size();i++) {
154
            if (((FLayer)vectorialLayers.get(i)).getName().equals(layerName)) {
155
                layerFound = true;
156
                layerToZoom = (FLayer)vectorialLayers.get(i);
157
                break;
158
            }
159
        }
160
        if (!layerFound) layerToZoom = (FLayer)vectorialLayers.get(0);
161
        prefUsuario.put("LAYERNAME_FOR_DATA_LOCATION", layerToZoom.getName());
162

    
163
        }
164
        private void initializeFieldToZoomIndex() {
165
        fieldToZoomIndex = prefUsuario.getInt("FIELDINDEX_FOR_DATA_LOCATION", 0);
166
                FLyrVect lyr = (FLyrVect)layerToZoom;
167
                FeatureStore featureStore;
168
        try {
169
            featureStore = lyr.getFeatureStore();
170
            if (fieldToZoomIndex > (featureStore.getDefaultFeatureType().size()-1)) {
171
                    fieldToZoomIndex = 0;
172
            } else if (featureStore.getDefaultFeatureType().size() == 0) {
173
                    fieldToZoomIndex = -1;
174
            }
175
        } catch (DataException e) {
176
                        fieldToZoomIndex = -1;
177
            e.printStackTrace();
178
                }
179
        }
180
        /**
181
         * This method initializes this
182
         *
183
         * @return void
184
         */
185
        private void initialize() {
186
        jLabel2 = new JLabel();
187
        jLabel1 = new JLabel();
188
        jLabel = new JLabel();
189
        this.setLayout(null);
190
        this.setSize(350, 161);
191
        jLabel.setBounds(6, 6, 80, 23);
192
        jLabel.setText(PluginServices.getText(this,"Capa") + ":");
193
        jLabel1.setBounds(6, 34, 80, 23);
194
        jLabel1.setText(PluginServices.getText(this,"Campo") + ":");
195
        jLabel2.setBounds(6, 61, 80, 23);
196
        jLabel2.setText(PluginServices.getText(this,"Valor") + ":");
197
        this.add(getJComboBox(), null);
198
        this.add(jLabel, null);
199
        this.add(jLabel1, null);
200
        this.add(getJComboBox1(), null);
201
        this.add(jLabel2, null);
202
        this.add(getJComboBox2(), null);
203

    
204
        jPanelButtons = new JPanel();
205
        FlowLayout flowLayor = new FlowLayout(FlowLayout.RIGHT);
206
        flowLayor.setHgap(5);
207

    
208
        jPanelButtons.setLayout(flowLayor);
209
        jPanelButtons.setBounds(15,121,335,35);
210
        jPanelButtons.add(getJButton(), null);
211
        jPanelButtons.add(getJButton1(), null);
212

    
213
        this.add(jPanelButtons);
214

    
215
        this.add(getJChkBoxOpenFirstTime(), null);
216

    
217

    
218
        }
219
        private void registerLayersListener() {
220
                int i,j;
221
                FLayer layer;
222
                LayersListener listener;
223
                boolean found;
224
                for (i=0;i< vectorialLayers.size();i++) {
225
                        found = false;
226
                        layer = ((FLayer)vectorialLayers.get(i));
227
                        for (j=0;j < layersListenerList.size(); j++) {
228
                                listener = (LayersListener)layersListenerList.get(j);
229
                                if ( layer.getParentLayer() == listener.getLayerCollection()) {
230
                                        found = true;
231
                                        break;
232
                                }
233
                        }
234
                        if (!found) {
235
                                listener = new LayersListener(layer.getParentLayer());
236
                                layer.getParentLayer().addLayerCollectionListener(listener);
237
                                layersListenerList.add(listener);
238
                        }
239

    
240
                }
241
        }
242

    
243

    
244
        private void unregisterLayersListener() {
245
                int i;
246
                LayersListener listener;
247
                for (i=0;i<layersListenerList.size();i++) {
248
                        listener = (LayersListener)layersListenerList.get(i);
249
                        listener.getLayerCollection().removeLayerCollectionListener(listener);
250
                }
251
        }
252

    
253
        private String[] getLayerNames() {
254
                String[] layerNames = new String[vectorialLayers.size()];
255
            for (int i=0;i<vectorialLayers.size();i++) {
256
                layerNames[i] = ((FLayer)vectorialLayers.get(i)).getName();
257
            }
258
            return layerNames;
259
        }
260
        private String[] getFieldNames() {
261
                FLyrVect lyr = (FLyrVect)layerToZoom;
262
                FeatureStore featureStore;
263
        String[] fieldNames = null;
264
                try {
265
            featureStore = lyr.getFeatureStore();
266
                        fieldNames = new String[featureStore.getDefaultFeatureType().size()];
267
                        for (int i = 0; i < featureStore.getDefaultFeatureType().size(); i++) {
268
                                fieldNames[i] = ((FeatureAttributeDescriptor)featureStore.getDefaultFeatureType().get(i)).getName();
269
                        }
270
        } catch (DataException e) {
271
                        e.printStackTrace();
272
                }
273
                return fieldNames;
274
        }
275

    
276

    
277
        private Object[] getNewValues() {
278
                FLyrVect lyr = (FLyrVect)layerToZoom;
279
                FeatureStore featureStore;
280
                Object[] newValues = null;
281
                if (fieldToZoomIndex < 0)
282
                        return null;
283
                FeatureSet set = null;
284
                DisposableIterator features = null;
285

    
286
                try {
287
                        featureStore = lyr.getFeatureStore();
288

    
289
//                String sql = "select " + ((FeatureAttributeDescriptor)featureStore.getDefaultFeatureType().get(fieldToZoomIndex)).getName() + " from " + featureStore.getName() + " where " + featureStore.getFieldName(fieldToZoomIndex) + " is not null;";
290
                        FeatureQuery query = featureStore.createFeatureQuery();
291
                        String field =
292
                                        ((FeatureAttributeDescriptor) featureStore.getDefaultFeatureType()
293
                                                        .get(fieldToZoomIndex)).getName();
294
                        Evaluator myEvaluator = new MyEvaluator(field);
295
                        query.setFilter(myEvaluator);
296
                        query.setAttributeNames(new String[] { field });
297
                        set = featureStore.getFeatureSet(query);
298
                        // ds = ds.getDataSourceFactory().executeSQL(sql,
299
                        // DataSourceFactory.AUTOMATIC_OPENING);
300

    
301
                        // Quitar los nombres repetidos y ordenarlos
302
                        TreeSet<Object> treeSet =
303
                                        new TreeSet<Object>(new Comparator<Object>() {
304
                                                public int compare(Object o1, Object o2) {
305
                                                        if (o1 instanceof Number && o2 instanceof Number) {
306
                                                                if (((Number) o1).doubleValue() < ((Number) o2).doubleValue())
307
                                                                        return -1;
308
                                                                if (((Number) o1).doubleValue() > ((Number) o2).doubleValue())
309
                                                                        return 1;
310
                                                        } else if (o1 instanceof String
311
                                                                        && o2 instanceof String) {
312
                                                                return ((String) o1).compareTo((String) o2);
313
                                                        } else if (o1 instanceof Date && o2 instanceof Date) {
314
                                                                return ((Date) o1).compareTo((Date) o2);
315
                                                        }
316
                                                        return 0;
317
                                }
318
                                        });
319
                        features = set.iterator();
320
                        while (features.hasNext()) {
321
                                Feature feature = (Feature) features.next();
322
                                Object obj = feature.get(0);
323
                                treeSet.add(obj);
324
                        }
325
                        newValues = (Object[]) treeSet.toArray(new Object[0]);
326
                } catch (DataException e) {
327
                        e.printStackTrace();
328
                } finally {
329
                        if (features != null) {
330
                                features.dispose();
331
                        }
332
                        if (set != null) {
333
                                set.dispose();
334
                        }
335
                }
336
                return newValues;
337
        }
338
        private class LayersListener implements LayerCollectionListener {
339
                private LayerCollection theLayerCollection;
340
            public LayersListener(FLayers layers){
341
                    theLayerCollection = layers;
342
            }
343

    
344
            public LayerCollection getLayerCollection() {
345
                    return theLayerCollection;
346
            }
347
        /* (non-Javadoc)
348
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdded(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
349
         */
350
        public void layerAdded(LayerCollectionEvent e) {
351
            initializeVectorialLayers();
352
            ((ChangeLayerToZoomItemListener)jComboBox.getItemListeners()[0]).setLayers(vectorialLayers);
353
            jComboBox.removeAllItems();
354
                    DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getLayerNames());
355
                    jComboBox.setModel(defaultModel);
356
                        jComboBox.setSelectedItem(layerToZoom.getName());
357
        }
358
        /* (non-Javadoc)
359
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
360
         */
361
        public void layerRemoved(LayerCollectionEvent e) {
362
            initializeVectorialLayers();
363
            ((ChangeLayerToZoomItemListener)jComboBox.getItemListeners()[0]).setLayers(vectorialLayers);
364
                    if (vectorialLayers.size()>0) {
365
                    jComboBox.removeAllItems();
366
                                String[] layerNames = new String[vectorialLayers.size()];
367
                            boolean currentLayerRemoved = true;
368
                                for (int i=0;i<vectorialLayers.size();i++) {
369
                                layerNames[i] = ((FLayer)vectorialLayers.get(i)).getName();
370
                                if (layerToZoom.getName().equals(layerNames[i])) currentLayerRemoved = false;
371
                            }
372
                            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(layerNames);
373
                            jComboBox.setModel(defaultModel);
374
                            if (currentLayerRemoved) {
375
                                layerToZoom = ((FLayer)vectorialLayers.get(0));
376
                                    defaultModel = new DefaultComboBoxModel(getFieldNames());
377
                                jComboBox1.setModel(defaultModel);
378
                                fieldToZoomIndex = 0;
379
                                jComboBox1.setSelectedIndex(fieldToZoomIndex);
380
                                Object[] values =getNewValues();
381
                                    defaultModel = new DefaultComboBoxModel(values);
382
                                    jComboBox2.setModel(defaultModel);
383
                                    if (values != null) {
384
                                            itemToZoom = getNewValues()[0];
385
                                            jComboBox2.setSelectedItem(itemToZoom);
386
                                    }else {
387
                                            itemToZoom = null;
388
                                    }
389

    
390
                            }
391
                            jComboBox.setSelectedItem(layerToZoom.getName());
392
                    }else {
393
                    if (PluginServices.getMainFrame() == null)
394
                            ((JDialog) (getParent().getParent().getParent().getParent())).dispose();
395
                    else
396
                            PluginServices.getMDIManager().closeWindow(DataSelectionPanel.this);
397
                    }
398
        }
399
        /* (non-Javadoc)
400
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoved(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
401
         */
402
        public void layerMoved(LayerPositionEvent e) {
403
            // TODO Auto-generated method stub
404

    
405
        }
406
        /* (non-Javadoc)
407
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdding(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
408
         */
409
        public void layerAdding(LayerCollectionEvent e) throws CancelationException {
410
            // TODO Auto-generated method stub
411

    
412
        }
413
        /* (non-Javadoc)
414
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoving(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
415
         */
416
        public void layerMoving(LayerPositionEvent e) throws CancelationException {
417
            // TODO Auto-generated method stub
418

    
419
        }
420
        /* (non-Javadoc)
421
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoving(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
422
         */
423
        public void layerRemoving(LayerCollectionEvent e) throws CancelationException {
424
            // TODO Auto-generated method stub
425

    
426
        }
427
        /* (non-Javadoc)
428
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#activationChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
429
         */
430
        public void activationChanged(LayerCollectionEvent e) throws CancelationException {
431
            // TODO Auto-generated method stub
432

    
433
        }
434
        /* (non-Javadoc)
435
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#visibilityChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
436
         */
437
        public void visibilityChanged(LayerCollectionEvent e) throws CancelationException {
438
            // TODO Auto-generated method stub
439

    
440
        }
441
        }
442
    /* (non-Javadoc)
443
     * @see com.iver.andami.ui.mdiManager.View#getViewInfo()
444
     */
445
    public WindowInfo getWindowInfo() {
446
        if (viewInfo == null) {
447
            viewInfo=new WindowInfo(WindowInfo.MODELESSDIALOG | WindowInfo.PALETTE);
448
            viewInfo.setTitle(PluginServices.getText(this,"Localizador_por_atributo"));
449
            viewInfo.setHeight(getPreferredSize().height);
450
            viewInfo.setWidth(getPreferredSize().width);
451
        }
452
        return viewInfo;
453
    }
454
        /**
455
         * This method initializes jComboBox
456
         *
457
         * @return javax.swing.JComboBox
458
         */
459
        private JComboBox getJComboBox() {
460
                if (jComboBox == null) {
461
                        jComboBox = new JComboBox();
462
            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getLayerNames());
463
            jComboBox.setModel(defaultModel);
464
                        jComboBox.setBounds(90, 6, 250, 23);
465
                        jComboBox.setSelectedItem(layerToZoom.getName());
466
                        ChangeLayerToZoomItemListener changeLayerToZoomItemListener = new ChangeLayerToZoomItemListener(vectorialLayers);
467
                        jComboBox.addItemListener(changeLayerToZoomItemListener);
468
                }
469
                return jComboBox;
470
        }
471
        private class ChangeLayerToZoomItemListener implements ItemListener {
472
            private Vector<FLayer> layers;
473
            public ChangeLayerToZoomItemListener(Vector<FLayer> layers) {
474
                this.layers = layers;
475
            }
476
                public void itemStateChanged(java.awt.event.ItemEvent e) {
477
                    if (jComboBox.getItemCount()>0) {
478
                for (int i=0;i<layers.size();i++) {
479
                    if (((FLayer)layers.get(i)).getName().equals((String)jComboBox.getSelectedItem())) {
480
                        layerToZoom = (FLayer)layers.get(i);
481
                        break;
482
                    }
483
                }
484
                            fieldToZoomIndex = 0;
485
                                prefUsuario.put("LAYERNAME_FOR_DATA_LOCATION", (String)jComboBox.getSelectedItem());
486
                        DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getFieldNames());
487
                        jComboBox1.setModel(defaultModel);
488
                        Object[] values =getNewValues();
489
                        defaultModel = new DefaultComboBoxModel(values);
490
                            jComboBox2.setModel(defaultModel);
491
                            if ( values != null) {
492
                                    jComboBox2.setSelectedIndex(0);
493
                                    itemToZoom = values[0];
494
                            } else {
495
                                    itemToZoom = null;
496
                            }
497
                    }
498
                }
499
        /**
500
         * @param layers The layers to set.
501
         */
502
        public void setLayers(Vector<FLayer> layers) {
503
            this.layers = layers;
504
        }
505
        }
506
        /**
507
         * This method initializes jComboBox1
508
         *
509
         * @return javax.swing.JComboBox
510
         */
511
        private JComboBox getJComboBox1() {
512
                if (jComboBox1 == null) {
513
                        jComboBox1 = new JComboBox();
514
            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getFieldNames());
515
            jComboBox1.setModel(defaultModel);
516
                        jComboBox1.setBounds(90, 34, 250, 23);
517
                        jComboBox1.setSelectedIndex(fieldToZoomIndex);
518
                        ChangeFieldItemListener changeFieldItemListener = new ChangeFieldItemListener(vectorialLayers);
519
                        jComboBox1.addItemListener(changeFieldItemListener);
520
                }
521
                return jComboBox1;
522
        }
523
        private class ChangeFieldItemListener implements ItemListener {
524
                public ChangeFieldItemListener(Vector<FLayer> layers) {
525
                }
526
                public void itemStateChanged(java.awt.event.ItemEvent itemEvent) {
527
                        String fieldToZoom = ((String)jComboBox1.getSelectedItem());
528
                        FLyrVect lyr = (FLyrVect)layerToZoom;
529
                        FeatureStore featureStore;
530
                        FeatureSet set = null;
531
                        DisposableIterator features = null;
532
                        try {
533
                                featureStore = lyr.getFeatureStore();
534
                                fieldToZoomIndex = featureStore.getDefaultFeatureType().getIndex(fieldToZoom);
535
                                prefUsuario.putInt("FIELDINDEX_FOR_DATA_LOCATION", fieldToZoomIndex);
536

    
537
                                //Quitar los nombres repetidos y ordenarlos
538
                                TreeSet<Object> treeSet = new TreeSet<Object>(new Comparator<Object>() {
539
                                        public int compare(Object o1, Object o2) {
540
                                                if (o1 instanceof Number && o2 instanceof Number){
541
                                                        if (((Number)o1).doubleValue()<((Number)o2).doubleValue())
542
                                                                return -1;
543
                                                        if (((Number)o1).doubleValue()>((Number)o2).doubleValue())
544
                                                                return 1;
545
                                                }else if (o1 instanceof String && o2 instanceof String){
546
                                                        return ((String)o1).compareTo((String)o2);
547
                                                }else if (o1 instanceof Date && o2 instanceof Date){
548
                                                        return ((Date)o1).compareTo((Date)o2);
549
                                                }
550
                                                return 0;
551
                                        }
552
                                });
553

    
554
                                Evaluator myEvaluator=new MyEvaluator(fieldToZoom);
555
                                FeatureQuery query=featureStore.createFeatureQuery();
556
                                query.setFilter(myEvaluator);
557
                                set=featureStore.getFeatureSet(query);
558
                                features=set.iterator();
559
                                while (features.hasNext()) {
560
                                        Feature feature = (Feature) features.next();
561
                                        treeSet.add(feature.get(fieldToZoomIndex));
562
                                }
563
                                Object[] newValues = (Object[])treeSet.toArray(new Object[0]);
564
                                DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(newValues);
565
                                jComboBox2.setModel(defaultModel);
566
                                if (newValues.length>0) jComboBox2.setSelectedIndex(0);
567
                                if (newValues.length>0) {
568
                                        itemToZoom = newValues[0];
569
                                } else {
570
                                        itemToZoom = null;
571
                                }
572
                        } catch (DataException e) {
573
                                e.printStackTrace();
574
                        } finally {
575
                                if (features != null) {
576
                                        features.dispose();
577
                                }
578
                                if (set != null) {
579
                                        set.dispose();
580
                                }
581
                        }
582
                }
583
        }
584
        /**
585
         * This method initializes jComboBox2
586
         *
587
         * @return javax.swing.JComboBox
588
         */
589
        private JComboBox getJComboBox2() {
590
                if (jComboBox2 == null) {
591
                        jComboBox2 = new JComboBox();
592
            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getNewValues());
593
            jComboBox2.setModel(defaultModel);
594
                        jComboBox2.setSelectedIndex(-1);
595
                        jComboBox2.setBounds(90, 61, 250, 23);
596
                        ChangeItemToZoomItemListener changeItemToZoomItemListener = new ChangeItemToZoomItemListener(vectorialLayers);
597
                        jComboBox2.addItemListener(changeItemToZoomItemListener);
598
                }
599
                return jComboBox2;
600
        }
601
        private class ChangeItemToZoomItemListener implements ItemListener {
602
            private Vector<FLayer> layers;
603
            public ChangeItemToZoomItemListener(Vector<FLayer> layers) {
604
                this.layers = layers;
605
            }
606
                public void itemStateChanged(java.awt.event.ItemEvent e) {
607
            for (int i=0;i<layers.size();i++) {
608
                if (((FLayer)layers.get(i)).getName().equals((String)jComboBox.getSelectedItem())) {
609
                    layerToZoom = (FLayer)layers.get(i);
610
                    break;
611
                }
612
            }
613
                        itemToZoom = ((Object)jComboBox2.getSelectedItem());
614
                }
615
        }
616
        /**
617
         * This method initializes jButton
618
         *
619
         * @return javax.swing.JButton
620
         */
621
        private JButton getJButton() {
622
                if (jButton == null) {
623
                        jButton = new JButton();
624
                        //jButton.setBounds(8, 121, 128, 23);
625
                        jButton.setText(PluginServices.getText(this,"Zoom"));
626
                        jButton.addActionListener(new java.awt.event.ActionListener() {
627
                                public void actionPerformed(java.awt.event.ActionEvent e) {
628
                                        if (layerToZoom == null || fieldToZoomIndex < 0 || itemToZoom == null)
629
                                                return;
630
                                    if (jComboBox2.getSelectedIndex()!=-1) {
631
                                                FLyrVect lyr = (FLyrVect)layerToZoom;
632
                                                FeatureStore featureStore;
633
                                                FeatureSet featureSet = null;
634
                                                DisposableIterator features = null;
635
                                                try {
636
                                        featureStore = lyr.getFeatureStore();
637
                                                        FeatureSelection selection = (FeatureSelection)featureStore.createFeatureSelection();
638
                                                        featureSet = featureStore.getFeatureSet();
639
                                                        features = featureSet.iterator();
640
                                                        while (features.hasNext()) {
641
                                                                Feature feature = (Feature) features.next();
642
                                                                if (itemToZoom.equals(feature.get(fieldToZoomIndex))){
643
                                                                        selection.select(feature);
644
                                                                }
645
                                                        }
646
//                                                        featureStore.setSelection(selection);
647
                                                        SelectedZoomVisitor visitor = new SelectedZoomVisitor();
648
                                selection.accept(visitor);
649
                                                        mapContext.getViewPort().setEnvelope(visitor.getSelectBound());
650

    
651
                                    } catch (DataException e1) {
652
                                                        e1.printStackTrace();
653
                                                } catch (BaseException e1) {
654
                                                        e1.printStackTrace();
655
                                                } finally {
656
                                                        DisposeUtils.dispose(featureSet);
657
                                                        DisposeUtils.dispose(features);
658
                                                }
659
                    } else if (itemToZoom == null) {
660
                        System.out.println("Localizador por atributo: El campo valor debe tener elementos no nulos para hacer el Zoom.");
661
                    } else {
662
                                        System.out.println("Localizador por atributo: El campo valor debe estar inicializado antes de hacer Zoom.");
663
                                    }
664
                                }
665
                        });
666
                }
667
                return jButton;
668
        }
669
        /**
670
         * This method initializes jButton1
671
         *
672
         * @return javax.swing.JButton
673
         */
674
        private JButton getJButton1() {
675
                if (jButton1 == null) {
676
                        jButton1 = new JButton();
677
                        //jButton1.setBounds(141, 121, 128, 23);
678
                        jButton1.setText(PluginServices.getText(this,"Salir"));
679
                        jButton1.addActionListener(new java.awt.event.ActionListener() {
680
                                public void actionPerformed(java.awt.event.ActionEvent e) {
681
                            if (PluginServices.getMainFrame() == null)
682
                                    ((JDialog) (getParent().getParent().getParent().getParent())).dispose();
683
                            else
684
                                    PluginServices.getMDIManager().closeWindow(DataSelectionPanel.this);
685
                                }
686
                        });
687
                }
688
                return jButton1;
689
        }
690
    /* (non-Javadoc)
691
     * @see com.iver.andami.ui.mdiManager.ViewListener#viewActivated()
692
     */
693
    public void windowActivated() {
694
        // TODO Auto-generated method stub
695

    
696
    }
697
    /* (non-Javadoc)
698
     * @see com.iver.andami.ui.mdiManager.ViewListener#viewClosed()
699
     */
700
    public void windowClosed() {
701
                unregisterLayersListener();
702
                // Guardamos la posici?n en las preferencias del usuario.
703
                WindowInfo vi = PluginServices.getMDIManager().getWindowInfo(this);
704
                prefUsuario.putInt("gvSIG.DataLocator.x", vi.getX());
705
                prefUsuario.putInt("gvSIG.DataLocator.y", vi.getY());
706
                prefUsuario.putInt("gvSIG.DataLocator.w", vi.getWidth());
707
                prefUsuario.putInt("gvSIG.DataLocator.h", vi.getHeight());
708
                vi.setClosed(true);
709
    }
710
    /* (non-Javadoc)
711
     * @see com.iver.andami.ui.mdiManager.SingletonView#getViewModel()
712
     */
713
    public Object getWindowModel() {
714
        // Debe devolver una cadena. Mirar Console del CorePlugin
715
        return "DataSelectionPanel";
716
    }
717
        /**
718
         * This method initializes jChkBoxOpenFirstTime
719
         *
720
         * @return javax.swing.JCheckBox
721
         */
722
        private JCheckBox getJChkBoxOpenFirstTime() {
723
                if (jChkBoxOpenFirstTime == null) {
724
                        jChkBoxOpenFirstTime = new JCheckBox();
725
                        jChkBoxOpenFirstTime.setBounds(new java.awt.Rectangle(90,89,179,23));
726
                        jChkBoxOpenFirstTime.setText(PluginServices.getText(this, "open_first_time"));
727
                        jChkBoxOpenFirstTime.addActionListener(new java.awt.event.ActionListener() {
728
                                public void actionPerformed(java.awt.event.ActionEvent e) {
729
                                        System.out.println("actionPerformed()"); // TODO Auto-generated Event stub actionPerformed()
730
                                        if (jChkBoxOpenFirstTime.isSelected())
731
                                        {
732
                                                prefUsuario.putInt("gvSIG.DataLocator.open_first_time",1);
733
                                        }
734
                                        else
735
                                        {
736
                                                prefUsuario.putInt("gvSIG.DataLocator.open_first_time",0);
737
                                        }
738
                                }
739
                        });
740
                }
741
                return jChkBoxOpenFirstTime;
742
        }
743
        public Object getWindowProfile() {
744
                return WindowInfo.TOOL_PROFILE;
745
        }
746
        class MyEvaluator implements Evaluator{
747
                private String name=null;
748
                private EvaluatorFieldsInfo info = null;
749

    
750
                public MyEvaluator(String name){
751
                        this.name=name;
752
                        info = new EvaluatorFieldsInfo();
753
                        this.info.addFieldValue(name);
754
                }
755

    
756
                public Object evaluate(EvaluatorData data)
757
                                throws EvaluatorException {
758
                        Feature feature = (Feature) data.getContextValue("feature");
759
                        if (feature.get(name)!=null)
760
                                return new Boolean(true);
761
                        return new Boolean(false);
762
                }
763

    
764
                public String getSQL() {
765
                        return name + " is not null;";
766
                }
767

    
768
                public String getDescription() {
769
                        return "Evaluates if a field is not null";
770
                }
771

    
772
                public EvaluatorFieldsInfo getFieldsInfo() {
773
                        return this.info;
774
                }
775

    
776
                public String getName() {
777
                        return this.getClass().getName();
778
                }
779

    
780
    }
781
}  //  @jve:decl-index=0:visual-constraint="10,10"