Statistics
| Revision:

svn-gvsig-desktop / trunk / org.gvsig.desktop / org.gvsig.desktop.plugin / org.gvsig.datalocator.app / org.gvsig.datalocator.app.mainplugin / src / main / java / org / gvsig / datalocator / gui / DataSelectionPanel.java @ 40558

History | View | Annotate | Download (28.9 KB)

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

    
26
import java.awt.FlowLayout;
27
import java.awt.event.ItemListener;
28
import java.util.Comparator;
29
import java.util.Date;
30
import java.util.TreeSet;
31
import java.util.Vector;
32
import java.util.prefs.Preferences;
33

    
34
import javax.swing.DefaultComboBoxModel;
35
import javax.swing.JButton;
36
import javax.swing.JCheckBox;
37
import javax.swing.JComboBox;
38
import javax.swing.JDialog;
39
import javax.swing.JLabel;
40
import javax.swing.JOptionPane;
41
import javax.swing.JPanel;
42

    
43
import org.slf4j.Logger;
44
import org.slf4j.LoggerFactory;
45

    
46
import org.gvsig.andami.PluginServices;
47
import org.gvsig.andami.ui.mdiManager.IWindow;
48
import org.gvsig.andami.ui.mdiManager.IWindowListener;
49
import org.gvsig.andami.ui.mdiManager.SingletonWindow;
50
import org.gvsig.andami.ui.mdiManager.WindowInfo;
51
import org.gvsig.app.ApplicationLocator;
52
import org.gvsig.datalocator.DataLocatorExtension;
53
import org.gvsig.fmap.dal.exception.DataException;
54
import org.gvsig.fmap.dal.feature.Feature;
55
import org.gvsig.fmap.dal.feature.FeatureAttributeDescriptor;
56
import org.gvsig.fmap.dal.feature.FeatureQuery;
57
import org.gvsig.fmap.dal.feature.FeatureSelection;
58
import org.gvsig.fmap.dal.feature.FeatureSet;
59
import org.gvsig.fmap.dal.feature.FeatureStore;
60
import org.gvsig.fmap.geom.primitive.Envelope;
61
import org.gvsig.fmap.mapcontext.MapContext;
62
import org.gvsig.fmap.mapcontext.layers.CancelationException;
63
import org.gvsig.fmap.mapcontext.layers.FLayer;
64
import org.gvsig.fmap.mapcontext.layers.FLayers;
65
import org.gvsig.fmap.mapcontext.layers.LayerCollectionEvent;
66
import org.gvsig.fmap.mapcontext.layers.LayerCollectionListener;
67
import org.gvsig.fmap.mapcontext.layers.LayerPositionEvent;
68
import org.gvsig.fmap.mapcontext.layers.LayersIterator;
69
import org.gvsig.fmap.mapcontext.layers.operations.LayerCollection;
70
import org.gvsig.fmap.mapcontext.layers.vectorial.FLyrVect;
71
import org.gvsig.fmap.mapcontext.rendering.strategies.SelectedZoomVisitor;
72
import org.gvsig.tools.dispose.DisposableIterator;
73
import org.gvsig.tools.dispose.DisposeUtils;
74
import org.gvsig.tools.evaluator.Evaluator;
75
import org.gvsig.tools.evaluator.EvaluatorData;
76
import org.gvsig.tools.evaluator.EvaluatorException;
77
import org.gvsig.tools.evaluator.EvaluatorFieldsInfo;
78

    
79

    
80
/**
81
 * @author jmorell
82
 */
83
public class DataSelectionPanel extends JPanel implements IWindow, IWindowListener, SingletonWindow {
84

    
85
        private static final long serialVersionUID = 1L;
86
        
87
        private static final Logger logger =
88
        LoggerFactory.getLogger(DataSelectionPanel.class);
89
            
90
    private JComboBox layerComboBox = null;
91
        private JLabel jLabel = null; 
92
        private JLabel jLabel1 = null; 
93
        private JComboBox fieldValueComboBox = null;
94
        private JLabel jLabel2 = null;  
95
        private JComboBox fieldNameComboBox = null;
96
    private WindowInfo viewInfo = null;
97
        private JButton jButton = null;
98
        private JButton jButton1 = null;
99
        private FLayer layerToZoom = null;
100
        private int fieldToZoomIndex = 0;
101
        private Object itemToZoom = null;
102
        private MapContext mapContext = null;
103
        private Preferences prefUsuario = null;
104
        private Vector<LayersListener> layersListenerList = new Vector<LayersListener>();
105
    private Vector<FLayer> vectorialLayers = null;
106
        private JCheckBox jChkBoxOpenFirstTime = null;
107
        private JPanel jPanelButtons = null;
108

    
109
        /**
110
         * This method initializes
111
         *
112
         */
113
        public DataSelectionPanel(MapContext mapContext) {
114
                super();
115
                this.mapContext = mapContext;
116
                prefUsuario = Preferences.userRoot();
117
                initializeVectorialLayers();
118
        initializeLayerToZoom();
119
                initializeFieldToZoomIndex();
120
        initialize();
121

    
122
        int userOpen = prefUsuario.getInt("gvSIG.DataLocator.open_first_time", -1);
123
        if (userOpen == 1)
124
                getJChkBoxOpenFirstTime().setSelected(true);
125
        }
126
    private void initializeVectorialLayers() {
127
            unregisterLayersListener();
128
        vectorialLayers = new Vector<FLayer>();
129
        LayersIterator iter = DataLocatorExtension.newValidLayersIterator(mapContext.getLayers());
130

    
131

    
132
        while (iter.hasNext()) {
133
                vectorialLayers.add(iter.nextLayer());
134
        }
135

    
136
        registerLayersListener();
137
    }
138
        private void initializeLayerToZoom() {
139
                String layerName = prefUsuario.get("LAYERNAME_FOR_DATA_LOCATION", "");
140
        if (layerName.equals("")) layerToZoom = (FLayer)vectorialLayers.get(0);
141
        boolean layerFound = false;
142
        for (int i=0;i<vectorialLayers.size();i++) {
143
            if (((FLayer)vectorialLayers.get(i)).getName().equals(layerName)) {
144
                layerFound = true;
145
                layerToZoom = (FLayer)vectorialLayers.get(i);
146
                break;
147
            }
148
        }
149
        if (!layerFound) layerToZoom = (FLayer)vectorialLayers.get(0);
150
        prefUsuario.put("LAYERNAME_FOR_DATA_LOCATION", layerToZoom.getName());
151

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

    
193
        jPanelButtons = new JPanel();
194
        FlowLayout flowLayor = new FlowLayout(FlowLayout.RIGHT);
195
        flowLayor.setHgap(5);
196

    
197
        jPanelButtons.setLayout(flowLayor);
198
        jPanelButtons.setBounds(15,121,335,35);
199
        jPanelButtons.add(getJButton(), null);
200
        jPanelButtons.add(getJButton1(), null);
201

    
202
        this.add(jPanelButtons);
203

    
204
        this.add(getJChkBoxOpenFirstTime(), null);
205

    
206

    
207
        }
208
        private void registerLayersListener() {
209
                int i,j;
210
                FLayer layer;
211
                LayersListener listener;
212
                boolean found;
213
                for (i=0;i< vectorialLayers.size();i++) {
214
                        found = false;
215
                        layer = ((FLayer)vectorialLayers.get(i));
216
                        for (j=0;j < layersListenerList.size(); j++) {
217
                                listener = (LayersListener)layersListenerList.get(j);
218
                                if ( layer.getParentLayer() == listener.getLayerCollection()) {
219
                                        found = true;
220
                                        break;
221
                                }
222
                        }
223
                        if (!found) {
224
                                listener = new LayersListener(layer.getParentLayer());
225
                                layer.getParentLayer().addLayerCollectionListener(listener);
226
                                layersListenerList.add(listener);
227
                        }
228

    
229
                }
230
        }
231

    
232

    
233
        private void unregisterLayersListener() {
234
                int i;
235
                LayersListener listener;
236
                for (i=0;i<layersListenerList.size();i++) {
237
                        listener = (LayersListener)layersListenerList.get(i);
238
                        listener.getLayerCollection().removeLayerCollectionListener(listener);
239
                }
240
        }
241

    
242
        private String[] getLayerNames() {
243
                String[] layerNames = new String[vectorialLayers.size()];
244
            for (int i=0;i<vectorialLayers.size();i++) {
245
                layerNames[i] = ((FLayer)vectorialLayers.get(i)).getName();
246
            }
247
            return layerNames;
248
        }
249
        private String[] getFieldNames() {
250
                FLyrVect lyr = (FLyrVect)layerToZoom;
251
                FeatureStore featureStore;
252
        String[] fieldNames = null;
253
                try {
254
            featureStore = lyr.getFeatureStore();
255
                        fieldNames = new String[featureStore.getDefaultFeatureType().size()];
256
                        for (int i = 0; i < featureStore.getDefaultFeatureType().size(); i++) {
257
                                fieldNames[i] = ((FeatureAttributeDescriptor)featureStore.getDefaultFeatureType().get(i)).getName();
258
                        }
259
        } catch (DataException e) {
260
                        e.printStackTrace();
261
                }
262
                return fieldNames;
263
        }
264

    
265

    
266
        private Object[] getNewValues() {
267
                FLyrVect lyr = (FLyrVect)layerToZoom;
268
                FeatureStore featureStore;
269
                Object[] newValues = null;
270
                if (fieldToZoomIndex < 0)
271
                        return null;
272
                FeatureSet set = null;
273
                DisposableIterator features = null;
274

    
275
                try {
276
                        featureStore = lyr.getFeatureStore();
277

    
278
//                String sql = "select " + ((FeatureAttributeDescriptor)featureStore.getDefaultFeatureType().get(fieldToZoomIndex)).getName() + " from " + featureStore.getName() + " where " + featureStore.getFieldName(fieldToZoomIndex) + " is not null;";
279
                        FeatureQuery query = featureStore.createFeatureQuery();
280
                        String field =
281
                                        ((FeatureAttributeDescriptor) featureStore.getDefaultFeatureType()
282
                                                        .get(fieldToZoomIndex)).getName();
283
                        Evaluator myEvaluator = new MyEvaluator(field);
284
                        query.setFilter(myEvaluator);
285
                        query.setAttributeNames(new String[] { field });
286
                        set = featureStore.getFeatureSet(query);
287
                        // ds = ds.getDataSourceFactory().executeSQL(sql,
288
                        // DataSourceFactory.AUTOMATIC_OPENING);
289

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

    
333
            public LayerCollection getLayerCollection() {
334
                    return theLayerCollection;
335
            }
336
        /* (non-Javadoc)
337
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdded(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
338
         */
339
        public void layerAdded(LayerCollectionEvent e) {
340
            initializeVectorialLayers();
341
            ((ChangeLayerToZoomItemListener)layerComboBox.getItemListeners()[0]).setLayers(vectorialLayers);
342
            layerComboBox.removeAllItems();
343
                    DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(getLayerNames());
344
                    layerComboBox.setModel(defaultModel);
345
                        layerComboBox.setSelectedItem(layerToZoom.getName());
346
        }
347
        /* (non-Javadoc)
348
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerRemoved(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
349
         */
350
        public void layerRemoved(LayerCollectionEvent e) {
351
            initializeVectorialLayers();
352
            ((ChangeLayerToZoomItemListener)layerComboBox.getItemListeners()[0]).setLayers(vectorialLayers);
353
                    if (vectorialLayers.size()>0) {
354
                    layerComboBox.removeAllItems();
355
                                String[] layerNames = new String[vectorialLayers.size()];
356
                            boolean currentLayerRemoved = true;
357
                                for (int i=0;i<vectorialLayers.size();i++) {
358
                                layerNames[i] = ((FLayer)vectorialLayers.get(i)).getName();
359
                                if (layerToZoom.getName().equals(layerNames[i])) currentLayerRemoved = false;
360
                            }
361
                            DefaultComboBoxModel defaultModel = new DefaultComboBoxModel(layerNames);
362
                            layerComboBox.setModel(defaultModel);
363
                            if (currentLayerRemoved) {
364
                                layerToZoom = ((FLayer)vectorialLayers.get(0));
365
                                    defaultModel = new DefaultComboBoxModel(getFieldNames());
366
                                fieldValueComboBox.setModel(defaultModel);
367
                                fieldToZoomIndex = 0;
368
                                fieldValueComboBox.setSelectedIndex(fieldToZoomIndex);
369
                                Object[] values =getNewValues();
370
                                    defaultModel = new DefaultComboBoxModel(values);
371
                                    fieldNameComboBox.setModel(defaultModel);
372
                                    if (values != null) {
373
                                            itemToZoom = getNewValues()[0];
374
                                            fieldNameComboBox.setSelectedItem(itemToZoom);
375
                                    }else {
376
                                            itemToZoom = null;
377
                                    }
378

    
379
                            }
380
                            layerComboBox.setSelectedItem(layerToZoom.getName());
381
                    }else {
382
                    if (PluginServices.getMainFrame() == null)
383
                            ((JDialog) (getParent().getParent().getParent().getParent())).dispose();
384
                    else
385
                            PluginServices.getMDIManager().closeWindow(DataSelectionPanel.this);
386
                    }
387
        }
388
        /* (non-Javadoc)
389
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoved(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
390
         */
391
        public void layerMoved(LayerPositionEvent e) {
392
            // TODO Auto-generated method stub
393

    
394
        }
395
        /* (non-Javadoc)
396
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerAdding(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
397
         */
398
        public void layerAdding(LayerCollectionEvent e) throws CancelationException {
399
            // TODO Auto-generated method stub
400

    
401
        }
402
        /* (non-Javadoc)
403
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#layerMoving(com.iver.cit.gvsig.fmap.layers.LayerPositionEvent)
404
         */
405
        public void layerMoving(LayerPositionEvent e) throws CancelationException {
406
            // TODO Auto-generated method stub
407

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

    
415
        }
416
        /* (non-Javadoc)
417
         * @see com.iver.cit.gvsig.fmap.layers.LayerCollectionListener#activationChanged(com.iver.cit.gvsig.fmap.layers.LayerCollectionEvent)
418
         */
419
        public void activationChanged(LayerCollectionEvent e) throws CancelationException {
420
            // TODO Auto-generated method stub
421

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

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

    
525
                                //Quitar los nombres repetidos y ordenarlos
526
                                TreeSet<Object> treeSet = new TreeSet<Object>(new Comparator<Object>() {
527
                                        public int compare(Object o1, Object o2) {
528
                                                if (o1 instanceof Number && o2 instanceof Number){
529
                                                        if (((Number)o1).doubleValue()<((Number)o2).doubleValue())
530
                                                                return -1;
531
                                                        if (((Number)o1).doubleValue()>((Number)o2).doubleValue())
532
                                                                return 1;
533
                                                }else if (o1 instanceof String && o2 instanceof String){
534
                                                        return ((String)o1).compareTo((String)o2);
535
                                                }else if (o1 instanceof Date && o2 instanceof Date){
536
                                                        return ((Date)o1).compareTo((Date)o2);
537
                                                }
538
                                                return 0;
539
                                        }
540
                                });
541

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

    
649
                                    } catch (Exception e1) {
650
                                        logger.debug("While doing zoom: " + e1.getMessage(), e1);
651
                                        ApplicationLocator.getManager().message(
652
                                            "While doing zoom: " + e1.getMessage(),
653
                                            JOptionPane.ERROR_MESSAGE);
654
                                        
655
                                                } finally {
656
                                                        DisposeUtils.dispose(featureSet);
657
                                                        DisposeUtils.dispose(features);
658
                                                }
659
                    } else if (itemToZoom == null) {
660
                        logger.debug("Localizador por atributo: El campo valor debe tener elementos no nulos para hacer el Zoom.");
661
                    } else {
662
                        logger.debug("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"