Statistics
| Revision:

svn-gvsig-desktop / trunk / applications / appgvSIG / src / com / iver / cit / gvsig / gui / filter / FilterDialog.java @ 2483

History | View | Annotate | Download (28.1 KB)

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

    
43
import java.text.DateFormat;
44
import java.text.NumberFormat;
45
import java.text.ParseException;
46
import java.util.ArrayList;
47
import java.util.Comparator;
48
import java.util.Date;
49
import java.util.HashSet;
50
import java.util.Iterator;
51
import java.util.TreeSet;
52
import java.util.regex.Matcher;
53
import java.util.regex.Pattern;
54

    
55
import javax.swing.DefaultListModel;
56
import javax.swing.JPanel;
57

    
58
import org.apache.log4j.Logger;
59

    
60
import com.hardcode.gdbms.engine.data.driver.DriverException;
61
import com.hardcode.gdbms.engine.instruction.IncompatibleTypesException;
62
import com.hardcode.gdbms.engine.values.BooleanValue;
63
import com.hardcode.gdbms.engine.values.DateValue;
64
import com.hardcode.gdbms.engine.values.StringValue;
65
import com.hardcode.gdbms.engine.values.Value;
66
import com.iver.andami.PluginServices;
67
import com.iver.andami.messages.NotificationManager;
68
import com.iver.andami.ui.mdiManager.View;
69
import com.iver.andami.ui.mdiManager.ViewInfo;
70
import com.iver.andami.ui.mdiManager.ViewListener;
71
import com.iver.cit.gvsig.gui.Table;
72
import com.iver.utiles.DefaultCharSet;
73
import com.iver.utiles.StringUtilities;
74
import com.iver.utiles.exceptionHandling.ExceptionHandlingSupport;
75
import com.iver.utiles.exceptionHandling.ExceptionListener;
76
import com.lamatek.swingextras.JDateChooser;
77

    
78

    
79
/**
80
 * DOCUMENT ME!
81
 *
82
 * @author Fernando Gonz?lez Cort?s
83
 */
84
public class FilterDialog extends JPanel implements View, ViewListener {
85
        private static Logger logger = Logger.getLogger(Table.class.getName());
86
        private ArrayList expressionListeners = new ArrayList();
87
        private int position = 0;
88
        private DefaultListModel fieldListModel = new DefaultListModel();
89
        private DefaultListModel valuesListModel = new DefaultListModel();
90
        private NumberFormat nf = NumberFormat.getNumberInstance();
91
        private DateFormat df = DateFormat.getDateInstance();
92
        private ArrayList variables = new ArrayList();
93
        private ExpressionDataSource model = null;
94
        private javax.swing.JPanel jPanel = null;
95
        private javax.swing.JPanel jPanel1 = null;
96
        private javax.swing.JPanel jPanel2 = null;
97
        private javax.swing.JPanel jPanel3 = null;
98
        private javax.swing.JPanel jPanel4 = null;
99
        private javax.swing.JLabel jLabel = null;
100
        private javax.swing.JScrollPane jScrollPane = null;
101
        private javax.swing.JList lstCampos = null;
102
        private javax.swing.JButton btnIgual = null;
103
        private javax.swing.JButton btnMayor = null;
104
        private javax.swing.JButton btnNot = null;
105
        private javax.swing.JButton btnDistinto = null;
106
        private javax.swing.JButton btnMenor = null;
107
        private javax.swing.JButton btnMayorIgual = null;
108
        private javax.swing.JButton btnMenorIgual = null;
109
        private javax.swing.JButton btnAnd = null;
110
        private javax.swing.JButton btnOr = null;
111
        private javax.swing.JTextArea txtExpression = null;
112
        private javax.swing.JPanel jPanel5 = null;
113
        private javax.swing.JButton btnNuevo = null;
114
        private javax.swing.JButton btnAdd = null;
115
        private javax.swing.JButton btnName = null;
116
        private javax.swing.JButton btnFromSet = null;
117
        private javax.swing.JScrollPane jScrollPane1 = null;
118
        private javax.swing.JLabel jLabel1 = null;
119
        private javax.swing.JList lstValores = null;
120
        private javax.swing.JScrollPane jScrollPane2 = null;
121
        private javax.swing.JButton btnParentesis = null;
122
        private ExceptionHandlingSupport exceptionHandlingSupport = new ExceptionHandlingSupport();
123

    
124
        /**
125
         * This is the default constructor
126
         */
127
        public FilterDialog() {
128
                super();
129
                initialize();
130
        }
131

    
132
        /**
133
         * DOCUMENT ME!
134
         *
135
         * @param t DOCUMENT ME!
136
         */
137
        public void setModel(ExpressionDataSource t) {
138
                try {
139
                        model = t;
140
            model.start();
141
        } catch (DriverException e1) {
142
            NotificationManager.addError(e1.getMessage(), e1);
143
        }
144
                fieldListModel.clear();
145

    
146
                try {
147
                        for (int i = 0; i < model.getFieldCount(); i++) {
148
                                fieldListModel.addElement(model.getFieldName(i));
149
                        }
150
                } catch (FilterException e) {
151
                        throwException(e);
152
                }
153
        }
154

    
155
        /**
156
         * Rellena la lista con los valores del campo seleccionado
157
         *
158
         * @param timeOut DOCUMENT ME!
159
         */
160
        private void fillValues(int timeOut) {
161
                int index = lstCampos.getSelectedIndex();
162

    
163
                //Index es ahora el ?ndice del campo seleccionado
164
                //Se eliminan los duplicados
165
                TreeSet conjunto = new TreeSet(new Comparator() {
166
                                        public int compare(Object o1, Object o2) {
167
                                                int resul = -1;
168

    
169
                                                if ((o1 != null) && (o2 != null)) {
170
                                                        Value v2 = (Value) o2;
171
                                                        Value v1 = (Value) o1;
172
                                                        BooleanValue boolVal;
173

    
174
                                                        try {
175
                                                                boolVal = (BooleanValue) (v1.greater(v2));
176

    
177
                                                                if (boolVal.getValue()) {
178
                                                                        return 1;
179
                                                                }
180

    
181
                                                                boolVal = (BooleanValue) (v1.less(v2));
182

    
183
                                                                if (boolVal.getValue()) {
184
                                                                        return -1;
185
                                                                }
186
                                                        } catch (IncompatibleTypesException e) {
187
                                                                throw new RuntimeException(e);
188
                                                        }
189
                                                }
190

    
191
                                                return 0;
192
                                        }
193
                                }); // Para poder ordenar
194

    
195
                valuesListModel.clear();
196
                try {
197
                        for (int i = 0; i < model.getRowCount(); i++) {
198
                                Value value = model.getFieldValue(i, index);
199

    
200
                                if (!conjunto.contains(value)) {
201
                                        conjunto.add(value);
202
                                }
203
                        }
204

    
205
                        Iterator it = conjunto.iterator();
206

    
207
                        while (it.hasNext())
208
                                valuesListModel.addElement(it.next());
209
                } catch (FilterException e) {
210
                        throwException(e);
211
                }
212
        }
213

    
214
        /**
215
         * DOCUMENT ME!
216
         *
217
         * @param expresion DOCUMENT ME!
218
         * @param substring DOCUMENT ME!
219
         * @param startingPos DOCUMENT ME!
220
         *
221
         * @return DOCUMENT ME!
222
         */
223
        private int getIndex(String expresion, String substring, int startingPos) {
224
                int index = startingPos;
225

    
226
                do {
227
                        index = expresion.indexOf(substring, index);
228
                } while ((StringUtilities.isBetweenSymbols(expresion, index, "\"")) &&
229
                                (index != -1));
230

    
231
                return index;
232
        }
233

    
234
        /**
235
         * DOCUMENT ME!
236
         *
237
         * @param expresion DOCUMENT ME!
238
         * @param word DOCUMENT ME!
239
         * @param translation DOCUMENT ME!
240
         *
241
         * @return DOCUMENT ME!
242
         *
243
         * @throws ParseException DOCUMENT ME!
244
         */
245
        private String translateWord(String expresion, String word,
246
                String translation) throws ParseException {
247
                int booleanIndex = 0;
248
                int endIndex = 0;
249
                StringBuffer res = new StringBuffer();
250

    
251
                while ((booleanIndex = getIndex(expresion, word, booleanIndex)) != -1) {
252
                        res.append(expresion.substring(endIndex, booleanIndex));
253
                        endIndex = booleanIndex + word.length();
254
                        booleanIndex++;
255
                        res.append(translation);
256
                }
257

    
258
                if (endIndex < expresion.length()) {
259
                        res.append(expresion.substring(endIndex));
260
                }
261

    
262
                return res.toString();
263
        }
264

    
265
        /**
266
         * DOCUMENT ME!
267
         *
268
         * @param expresion DOCUMENT ME!
269
         *
270
         * @return DOCUMENT ME!
271
         *
272
         * @throws ParseException DOCUMENT ME!
273
         */
274
        private String translateDates(String expresion) throws ParseException {
275
                //Se obtiene el valor de la fecha
276
                String date = StringUtilities.substringDelimited(expresion, "Date(",
277
                                ")", 0);
278

    
279
                if (date == null) {
280
                        return expresion;
281
                }
282

    
283
                //Se comprueba que no est? entre comillas 
284
                int startIndex = expresion.indexOf(date);
285

    
286
                while (startIndex != -1) {
287
                        if (!StringUtilities.isBetweenSymbols(expresion, startIndex, "\"")) {
288
                                //Se sustituye por el valor ordinal de la fecha
289
                                expresion = expresion.substring(0, startIndex - 5) +
290
                                        expresion.substring(startIndex).replaceFirst(date + "\\)",
291
                                                new Long((df.parse(date)).getTime()).toString());
292
                                ;
293
                        } else {
294
                                startIndex += date.length();
295
                        }
296

    
297
                        //Se obtiene el valor de la fecha
298

    
299
                        /*            date = StringUtilities.substringDelimited(expresion, "Date(", ")",
300
                           startIndex);
301
                         */
302
                        if (date == null) {
303
                                return expresion;
304
                        }
305

    
306
                        startIndex = expresion.indexOf(date, startIndex);
307
                }
308

    
309
                return expresion;
310
        }
311

    
312
        /**
313
         * DOCUMENT ME!
314
         *
315
         * @param expresion DOCUMENT ME!
316
         *
317
         * @return DOCUMENT ME!
318
         *
319
         * @throws ParseException DOCUMENT ME!
320
         */
321
        public String translateNumber(String expresion) throws ParseException {
322
                DefaultCharSet ss = new DefaultCharSet();
323
                ss.addInterval('0', '9');
324
                ss.addCharacter(',');
325
                ss.addCharacter('.');
326

    
327
                String number = StringUtilities.substringWithSymbols(expresion, ss, 0);
328

    
329
                if (number == null) {
330
                        return expresion;
331
                }
332

    
333
                int startIndex = expresion.indexOf(number);
334

    
335
                while (startIndex != -1) {
336
                        Number n = nf.parse(number);
337

    
338
                        if (!StringUtilities.isBetweenSymbols(expresion, startIndex, "\"")) {
339
                                //Se sustituye por el valor ordinal de la fecha
340
                                expresion = expresion.substring(0, startIndex) +
341
                                        expresion.substring(startIndex).replaceFirst(number,
342
                                                n.toString());
343
                        } else {
344
                                startIndex += n.toString().length();
345
                        }
346

    
347
                        number = StringUtilities.substringWithSymbols(expresion, ss,
348
                                        startIndex);
349

    
350
                        if (number == null) {
351
                                return expresion;
352
                        }
353

    
354
                        startIndex = expresion.indexOf(number, startIndex);
355
                }
356

    
357
                return expresion;
358
        }
359

    
360
        /**
361
         * DOCUMENT ME!
362
         *
363
         * @return DOCUMENT ME!
364
         *
365
         * @throws ParseException DOCUMENT ME!
366
         */
367
        private String validateExpression() throws ParseException {
368
                String expression = txtExpression.getText();
369
                HashSet variablesIndexes = new HashSet();
370

    
371
                StringBuffer traducida = new StringBuffer();
372

    
373
                //Se transforman los nombres de los campos en las variables xix que analizar?n
374
                //Se quitan los Date(fecha) y se mete la fecha correspondiente
375
                expression = translateDates(expression);
376
                expression = translateNumber(expression);
377
                expression = translateWord(expression, "true", "1");
378
                expression = translateWord(expression, "false", "0");
379

    
380
                String replacement;
381
                Pattern patron = Pattern.compile("[^<>!]=");
382
                Matcher m = patron.matcher(expression);
383
                int index = 0;
384

    
385
                while (m.find(index)) {
386
                        index = m.start();
387
                        replacement = expression.charAt(index) + "==";
388
                        m.replaceFirst(replacement);
389
                        index++;
390
                }
391

    
392
                expression = expression.replaceAll("[^<>!]=", "==");
393

    
394
                logger.debug(expression);
395

    
396
                return expression;
397
        }
398

    
399
        /**
400
         * DOCUMENT ME!
401
         *
402
         * @param symbol DOCUMENT ME!
403
         */
404
        private void putSymbol(String symbol) {
405
                int position = txtExpression.getCaretPosition();
406
                txtExpression.setText(StringUtilities.insert(txtExpression.getText(),
407
                                position, symbol));
408

    
409
                if (symbol.equals(" () ")) {
410
                        position = position + 2;
411
                } else {
412
                        position = position + symbol.length();
413
                }
414

    
415
                txtExpression.setCaretPosition(position);
416
        }
417

    
418
        /**
419
         * This method initializes this
420
         */
421
        private void initialize() {
422
                this.setLayout(new java.awt.BorderLayout());
423
                this.add(getJPanel(), java.awt.BorderLayout.CENTER);
424
                this.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
425
        }
426

    
427
        /**
428
         * This method initializes jPanel
429
         *
430
         * @return javax.swing.JPanel
431
         */
432
        private javax.swing.JPanel getJPanel() {
433
                if (jPanel == null) {
434
                        jPanel = new javax.swing.JPanel();
435
                        jPanel.setLayout(new java.awt.BorderLayout());
436
                        jPanel.add(getJPanel2(), java.awt.BorderLayout.WEST);
437
                        jPanel.add(getJPanel3(), java.awt.BorderLayout.CENTER);
438
                        jPanel.add(getJPanel4(), java.awt.BorderLayout.EAST);
439
                }
440

    
441
                return jPanel;
442
        }
443

    
444
        /**
445
         * This method initializes jPanel1
446
         *
447
         * @return javax.swing.JPanel
448
         */
449
        private javax.swing.JPanel getJPanel1() {
450
                if (jPanel1 == null) {
451
                        jPanel1 = new javax.swing.JPanel();
452
                        jPanel1.add(getJScrollPane2(), null);
453
                        jPanel1.add(getJPanel5(), null);
454
                        jPanel1.setPreferredSize(new java.awt.Dimension(10, 110));
455
                }
456

    
457
                return jPanel1;
458
        }
459

    
460
        /**
461
         * This method initializes jPanel2
462
         *
463
         * @return javax.swing.JPanel
464
         */
465
        private javax.swing.JPanel getJPanel2() {
466
                if (jPanel2 == null) {
467
                        jPanel2 = new javax.swing.JPanel();
468
                        jPanel2.add(getJLabel(), null);
469
                        jPanel2.add(getJScrollPane(), null);
470
                        jPanel2.setPreferredSize(new java.awt.Dimension(150, 170));
471
                }
472

    
473
                return jPanel2;
474
        }
475

    
476
        /**
477
         * This method initializes jPanel3
478
         *
479
         * @return javax.swing.JPanel
480
         */
481
        private javax.swing.JPanel getJPanel3() {
482
                if (jPanel3 == null) {
483
                        jPanel3 = new javax.swing.JPanel();
484
                        jPanel3.add(getBtnIgual(), null);
485
                        jPanel3.add(getBtnDistinto(), null);
486
                        jPanel3.add(getBtnMayor(), null);
487
                        jPanel3.add(getBtnMenor(), null);
488
                        jPanel3.add(getBtnMenorIgual(), null);
489
                        jPanel3.add(getBtnMayorIgual(), null);
490
                        jPanel3.add(getBtnAnd(), null);
491
                        jPanel3.add(getBtnOr(), null);
492
                        jPanel3.add(getBtnNot(), null);
493
                        jPanel3.add(getBtnParentesis(), null);
494
                        jPanel3.add(getBtnName(), null);
495
                        jPanel3.setPreferredSize(new java.awt.Dimension(180, 36));
496
                }
497

    
498
                return jPanel3;
499
        }
500

    
501
        /**
502
         * This method initializes jPanel4
503
         *
504
         * @return javax.swing.JPanel
505
         */
506
        private javax.swing.JPanel getJPanel4() {
507
                if (jPanel4 == null) {
508
                        jPanel4 = new javax.swing.JPanel();
509
                        jPanel4.add(getJLabel1(), null);
510
                        jPanel4.add(getJScrollPane1(), null);
511
                        jPanel4.setPreferredSize(new java.awt.Dimension(150, 10));
512
                }
513

    
514
                return jPanel4;
515
        }
516

    
517
        /**
518
         * This method initializes jLabel
519
         *
520
         * @return javax.swing.JLabel
521
         */
522
        private javax.swing.JLabel getJLabel() {
523
                if (jLabel == null) {
524
                        jLabel = new javax.swing.JLabel();
525
                        jLabel.setText(PluginServices.getText(this, "Campos") + ":");
526
                }
527

    
528
                return jLabel;
529
        }
530

    
531
        /**
532
         * This method initializes jScrollPane
533
         *
534
         * @return javax.swing.JScrollPane
535
         */
536
        private javax.swing.JScrollPane getJScrollPane() {
537
                if (jScrollPane == null) {
538
                        jScrollPane = new javax.swing.JScrollPane();
539
                        jScrollPane.setViewportView(getLstCampos());
540
                        jScrollPane.setPreferredSize(new java.awt.Dimension(135, 120));
541
                }
542

    
543
                return jScrollPane;
544
        }
545

    
546
        /**
547
         * This method initializes lstCampos
548
         *
549
         * @return javax.swing.JList
550
         */
551
        private javax.swing.JList getLstCampos() {
552
                if (lstCampos == null) {
553
                        lstCampos = new javax.swing.JList();
554
                        lstCampos.setModel(fieldListModel);
555
                        lstCampos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
556
                        lstCampos.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
557
                                        public void valueChanged(
558
                                                javax.swing.event.ListSelectionEvent e) {
559
                                                PluginServices.backgroundExecution(new Runnable() {
560
                                                        public void run() {
561
                                                                fillValues(0);
562
                                                        }
563
                                                });
564
                                        }
565
                                });
566
                        lstCampos.addMouseListener(new java.awt.event.MouseAdapter() {
567
                                        public void mouseClicked(java.awt.event.MouseEvent e) {
568
                                                if (e.getClickCount() == 2) {
569
                                                        putSymbol((String) fieldListModel.getElementAt(
570
                                                                        getLstCampos().getSelectedIndex()));
571
                                                }
572
                                        }
573
                                });
574
                }
575

    
576
                return lstCampos;
577
        }
578

    
579
        /**
580
         * This method initializes btnIgual
581
         *
582
         * @return javax.swing.JButton
583
         */
584
        private javax.swing.JButton getBtnIgual() {
585
                if (btnIgual == null) {
586
                        btnIgual = new javax.swing.JButton();
587
                        btnIgual.setText("=");
588
                        btnIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
589
                        btnIgual.setPreferredSize(new java.awt.Dimension(40, 20));
590
                        btnIgual.addActionListener(new java.awt.event.ActionListener() {
591
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
592
                                                putSymbol(" = ");
593
                                        }
594
                                });
595
                }
596

    
597
                return btnIgual;
598
        }
599

    
600
        /**
601
         * This method initializes btnMayor
602
         *
603
         * @return javax.swing.JButton
604
         */
605
        private javax.swing.JButton getBtnMayor() {
606
                if (btnMayor == null) {
607
                        btnMayor = new javax.swing.JButton();
608
                        btnMayor.setText(">");
609
                        btnMayor.setMargin(new java.awt.Insets(2, 2, 2, 2));
610
                        btnMayor.setPreferredSize(new java.awt.Dimension(40, 20));
611
                        btnMayor.addActionListener(new java.awt.event.ActionListener() {
612
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
613
                                                putSymbol(" > ");
614
                                        }
615
                                });
616
                }
617

    
618
                return btnMayor;
619
        }
620

    
621
        /**
622
         * This method initializes btnNot
623
         *
624
         * @return javax.swing.JButton
625
         */
626
        private javax.swing.JButton getBtnNot() {
627
                if (btnNot == null) {
628
                        btnNot = new javax.swing.JButton();
629
                        btnNot.setText("Not");
630
                        btnNot.setMargin(new java.awt.Insets(2, 2, 2, 2));
631
                        btnNot.setPreferredSize(new java.awt.Dimension(40, 20));
632
                        btnNot.addActionListener(new java.awt.event.ActionListener() {
633
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
634
                                                putSymbol(" not ");
635
                                        }
636
                                });
637
                }
638

    
639
                return btnNot;
640
        }
641

    
642
        /**
643
         * This method initializes btnDistinto
644
         *
645
         * @return javax.swing.JButton
646
         */
647
        private javax.swing.JButton getBtnDistinto() {
648
                if (btnDistinto == null) {
649
                        btnDistinto = new javax.swing.JButton();
650
                        btnDistinto.setText("!=");
651
                        btnDistinto.setMargin(new java.awt.Insets(2, 2, 2, 2));
652
                        btnDistinto.setPreferredSize(new java.awt.Dimension(40, 20));
653
                        btnDistinto.addActionListener(new java.awt.event.ActionListener() {
654
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
655
                                                putSymbol(" <> ");
656
                                        }
657
                                });
658
                }
659

    
660
                return btnDistinto;
661
        }
662

    
663
        /**
664
         * This method initializes btnMenor
665
         *
666
         * @return javax.swing.JButton
667
         */
668
        private javax.swing.JButton getBtnMenor() {
669
                if (btnMenor == null) {
670
                        btnMenor = new javax.swing.JButton();
671
                        btnMenor.setText("<");
672
                        btnMenor.setMargin(new java.awt.Insets(2, 2, 2, 2));
673
                        btnMenor.setPreferredSize(new java.awt.Dimension(40, 20));
674
                        btnMenor.addActionListener(new java.awt.event.ActionListener() {
675
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
676
                                                putSymbol(" < ");
677
                                        }
678
                                });
679
                }
680

    
681
                return btnMenor;
682
        }
683

    
684
        /**
685
         * This method initializes btnMayorIgual
686
         *
687
         * @return javax.swing.JButton
688
         */
689
        private javax.swing.JButton getBtnMayorIgual() {
690
                if (btnMayorIgual == null) {
691
                        btnMayorIgual = new javax.swing.JButton();
692
                        btnMayorIgual.setText(">=");
693
                        btnMayorIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
694
                        btnMayorIgual.setPreferredSize(new java.awt.Dimension(40, 20));
695
                        btnMayorIgual.addActionListener(new java.awt.event.ActionListener() {
696
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
697
                                                putSymbol(" >= ");
698
                                        }
699
                                });
700
                }
701

    
702
                return btnMayorIgual;
703
        }
704

    
705
        /**
706
         * This method initializes btnMenorIgual
707
         *
708
         * @return javax.swing.JButton
709
         */
710
        private javax.swing.JButton getBtnMenorIgual() {
711
                if (btnMenorIgual == null) {
712
                        btnMenorIgual = new javax.swing.JButton();
713
                        btnMenorIgual.setText("<=");
714
                        btnMenorIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
715
                        btnMenorIgual.setPreferredSize(new java.awt.Dimension(40, 20));
716
                        btnMenorIgual.addActionListener(new java.awt.event.ActionListener() {
717
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
718
                                                putSymbol(" <= ");
719
                                        }
720
                                });
721
                }
722

    
723
                return btnMenorIgual;
724
        }
725

    
726
        /**
727
         * This method initializes btnAnd
728
         *
729
         * @return javax.swing.JButton
730
         */
731
        private javax.swing.JButton getBtnAnd() {
732
                if (btnAnd == null) {
733
                        btnAnd = new javax.swing.JButton();
734
                        btnAnd.setText("And");
735
                        btnAnd.setMargin(new java.awt.Insets(2, 2, 2, 2));
736
                        btnAnd.setPreferredSize(new java.awt.Dimension(40, 20));
737
                        btnAnd.addActionListener(new java.awt.event.ActionListener() {
738
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
739
                                                putSymbol(" and ");
740
                                        }
741
                                });
742
                }
743

    
744
                return btnAnd;
745
        }
746

    
747
        /**
748
         * This method initializes btnOr
749
         *
750
         * @return javax.swing.JButton
751
         */
752
        private javax.swing.JButton getBtnOr() {
753
                if (btnOr == null) {
754
                        btnOr = new javax.swing.JButton();
755
                        btnOr.setText("Or");
756
                        btnOr.setMargin(new java.awt.Insets(2, 2, 2, 2));
757
                        btnOr.setPreferredSize(new java.awt.Dimension(40, 20));
758
                        btnOr.addActionListener(new java.awt.event.ActionListener() {
759
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
760
                                                putSymbol(" or ");
761
                                        }
762
                                });
763
                }
764

    
765
                return btnOr;
766
        }
767

    
768
        /**
769
         * This method initializes txtExpression
770
         *
771
         * @return javax.swing.JTextArea
772
         */
773
        private javax.swing.JTextArea getTxtExpression() {
774
                if (txtExpression == null) {
775
                        txtExpression = new javax.swing.JTextArea();
776
                        txtExpression.setLineWrap(true);
777
                }
778

    
779
                return txtExpression;
780
        }
781

    
782
        /**
783
         * This method initializes jPanel5
784
         *
785
         * @return javax.swing.JPanel
786
         */
787
        private javax.swing.JPanel getJPanel5() {
788
                if (jPanel5 == null) {
789
                        jPanel5 = new javax.swing.JPanel();
790
                        jPanel5.add(getBtnNuevo(), null);
791
                        jPanel5.add(getBtnAdd(), null);
792
                        jPanel5.add(getBtnFromSet(), null);
793
                        jPanel5.setPreferredSize(new java.awt.Dimension(190, 100));
794
                }
795

    
796
                return jPanel5;
797
        }
798

    
799
        /**
800
         * This method initializes btnNuevo
801
         *
802
         * @return javax.swing.JButton
803
         */
804
        private javax.swing.JButton getBtnNuevo() {
805
                if (btnNuevo == null) {
806
                        btnNuevo = new javax.swing.JButton();
807
                        btnNuevo.setText(PluginServices.getText(this, "Nuevo_conjunto"));
808
                        btnNuevo.setMargin(new java.awt.Insets(2, 2, 2, 2));
809
                        btnNuevo.addActionListener(new java.awt.event.ActionListener() {
810
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
811
                                                final String expr = "select * from " +
812
                                                        model.getDataSourceName() + " where " +
813
                                                        getTxtExpression().getText() + ";";
814

    
815
                                                logger.debug(expr);
816

    
817
                                                PluginServices.backgroundExecution(new Runnable() {
818
                                                        public void run() {
819
                                                                for (int i = 0; i < expressionListeners.size(); i++) {
820
                                                                        ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
821
                                                                        l.newSet(expr);
822
                                                                }
823
                                                        }
824
                                                });
825
                                        }
826
                                });
827
                }
828

    
829
                return btnNuevo;
830
        }
831

    
832
        /**
833
         * This method initializes btnAdd
834
         *
835
         * @return javax.swing.JButton
836
         */
837
        private javax.swing.JButton getBtnAdd() {
838
                if (btnAdd == null) {
839
                        btnAdd = new javax.swing.JButton();
840
                        btnAdd.setText(PluginServices.getText(this, "Anadir_al_conjunto"));
841
                        btnAdd.setMargin(new java.awt.Insets(2, 2, 2, 2));
842
                        btnAdd.addActionListener(new java.awt.event.ActionListener() {
843
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
844
                                                final String expr = "select * from " +
845
                                                        model.getDataSourceName() + " where " +
846
                                                        getTxtExpression().getText() + ";";
847

    
848
                                                logger.debug(expr);
849

    
850
                                                PluginServices.backgroundExecution(new Runnable() {
851
                                                                public void run() {
852
                                                                        for (int i = 0;
853
                                                                                        i < expressionListeners.size();
854
                                                                                        i++) {
855
                                                                                ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
856
                                                                                l.addToSet(expr);
857
                                                                        }
858
                                                                }
859
                                                        });
860
                                        }
861
                                });
862
                }
863

    
864
                return btnAdd;
865
        }
866

    
867
        /**
868
         * This method initializes btnFromSet
869
         *
870
         * @return javax.swing.JButton
871
         */
872
        private javax.swing.JButton getBtnFromSet() {
873
                if (btnFromSet == null) {
874
                        btnFromSet = new javax.swing.JButton();
875
                        btnFromSet.setText(PluginServices.getText(this,
876
                                        "Seleccionar_del_conjunto"));
877
                        btnFromSet.setMargin(new java.awt.Insets(2, 2, 2, 2));
878
                        btnFromSet.addActionListener(new java.awt.event.ActionListener() {
879
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
880
                                                final String expr = "select * from " +
881
                                                        model.getDataSourceName() + " where " +
882
                                                        getTxtExpression().getText() + ";";
883

    
884
                                                logger.debug(expr);
885

    
886
                                                PluginServices.backgroundExecution(new Runnable() {
887
                                                        public void run() {
888
                                                                for (int i = 0; i < expressionListeners.size(); i++) {
889
                                                                        ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
890
                                                                        l.fromSet(expr);
891
                                                                }
892
                                                        }
893
                                                });
894
                                        }
895
                                });
896
                }
897

    
898
                return btnFromSet;
899
        }
900

    
901
        /**
902
         * This method initializes jScrollPane1
903
         *
904
         * @return javax.swing.JScrollPane
905
         */
906
        private javax.swing.JScrollPane getJScrollPane1() {
907
                if (jScrollPane1 == null) {
908
                        jScrollPane1 = new javax.swing.JScrollPane();
909
                        jScrollPane1.setViewportView(getLstValores());
910
                        jScrollPane1.setPreferredSize(new java.awt.Dimension(140, 120));
911
                }
912

    
913
                return jScrollPane1;
914
        }
915

    
916
        /**
917
         * This method initializes jLabel1
918
         *
919
         * @return javax.swing.JLabel
920
         */
921
        private javax.swing.JLabel getJLabel1() {
922
                if (jLabel1 == null) {
923
                        jLabel1 = new javax.swing.JLabel();
924
                        jLabel1.setText(PluginServices.getText(this, "Valores") + ":");
925
                }
926

    
927
                return jLabel1;
928
        }
929

    
930
        /**
931
         * This method initializes lstValores
932
         *
933
         * @return javax.swing.JList
934
         */
935
        private javax.swing.JList getLstValores() {
936
                if (lstValores == null) {
937
                        lstValores = new javax.swing.JList();
938
                        lstValores.setModel(valuesListModel);
939
                        lstValores.addMouseListener(new java.awt.event.MouseAdapter() {
940
                                        public void mouseClicked(java.awt.event.MouseEvent e) {
941
                                                if (e.getClickCount() == 2) {
942
                                                        Value valor = (Value) valuesListModel.getElementAt(getLstValores()
943
                                                                                                                                                                   .getSelectedIndex());
944

    
945
                                                        if (valor instanceof DateValue) {
946
                                                                putSymbol("date('" + valor + "')");
947
                                                        } else if (valor instanceof BooleanValue) {
948
                                                                putSymbol("boolean('" + valor.toString() +
949
                                                                        "')");
950
                                                        } else if (valor instanceof StringValue) {
951
                                                                putSymbol("'" + valor + "'");
952
                                                        } else {
953
                                                                putSymbol(valor.toString());
954
                                                        }
955
                                                }
956
                                        }
957
                                });
958
                }
959

    
960
                return lstValores;
961
        }
962

    
963
        /**
964
         * This method initializes jScrollPane2
965
         *
966
         * @return javax.swing.JScrollPane
967
         */
968
        private javax.swing.JScrollPane getJScrollPane2() {
969
                if (jScrollPane2 == null) {
970
                        jScrollPane2 = new javax.swing.JScrollPane();
971
                        jScrollPane2.setViewportView(getTxtExpression());
972
                        jScrollPane2.setPreferredSize(new java.awt.Dimension(250, 100));
973
                        jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
974
                }
975

    
976
                return jScrollPane2;
977
        }
978

    
979
        /**
980
         * This method initializes btnParentesis
981
         *
982
         * @return javax.swing.JButton
983
         */
984
        private javax.swing.JButton getBtnParentesis() {
985
                if (btnParentesis == null) {
986
                        btnParentesis = new javax.swing.JButton();
987
                        btnParentesis.setText("()");
988
                        btnParentesis.setMargin(new java.awt.Insets(2, 2, 2, 2));
989
                        btnParentesis.setPreferredSize(new java.awt.Dimension(40, 20));
990
                        btnParentesis.addActionListener(new java.awt.event.ActionListener() {
991
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
992
                                                putSymbol(" () ");
993
                                        }
994
                                });
995
                }
996

    
997
                return btnParentesis;
998
        }
999

    
1000
        /**
1001
         * This method initializes btnName
1002
         *
1003
         * @return javax.swing.JButton
1004
         */
1005
        private javax.swing.JButton getBtnName() {
1006
                if (btnName == null) {
1007
                        btnName = new javax.swing.JButton();
1008
                        btnName.setText("Date");
1009
                        btnName.addActionListener(new java.awt.event.ActionListener() {
1010
                                        public void actionPerformed(java.awt.event.ActionEvent e) {
1011
                                                JDateChooser chooser = new JDateChooser();
1012

    
1013
                                                PluginServices.getMDIManager().addView(chooser);
1014

    
1015
                                                if (chooser.getSelectedDate() != null){
1016
                                                        Date selectedDate = chooser.getSelectedDate().getTime();
1017

    
1018
                                                        if (selectedDate != null) {
1019
                                                                putSymbol("Date(" + df.format(selectedDate) + ")");
1020
                                                        }
1021
                                                }
1022
                                        }
1023
                                });
1024
                }
1025

    
1026
                return btnName;
1027
        }
1028

    
1029
        /**
1030
         * DOCUMENT ME!
1031
         *
1032
         * @param arg0
1033
         *
1034
         * @return
1035
         */
1036
        public boolean addExpressionListener(ExpressionListener arg0) {
1037
                return expressionListeners.add(arg0);
1038
        }
1039

    
1040
        /**
1041
         * DOCUMENT ME!
1042
         *
1043
         * @param arg0
1044
         *
1045
         * @return
1046
         */
1047
        public boolean removeExpressionListener(ExpressionListener arg0) {
1048
                return expressionListeners.remove(arg0);
1049
        }
1050

    
1051
        /**
1052
         * @see com.iver.mdiApp.ui.MDIManager.View#getViewInfo()
1053
         */
1054
        public ViewInfo getViewInfo() {
1055
                ViewInfo vi = new ViewInfo(ViewInfo.ICONIFIABLE);
1056
                vi.setWidth(480);
1057
                vi.setHeight(362);
1058

    
1059
                return vi;
1060
        }
1061

    
1062
        /**
1063
         * DOCUMENT ME!
1064
         *
1065
         * @param o DOCUMENT ME!
1066
         */
1067
        public void addExceptionListener(ExceptionListener o) {
1068
                exceptionHandlingSupport.addExceptionListener(o);
1069
        }
1070

    
1071
        /**
1072
         * DOCUMENT ME!
1073
         *
1074
         * @param o DOCUMENT ME!
1075
         *
1076
         * @return DOCUMENT ME!
1077
         */
1078
        public boolean removeExceptionListener(ExceptionListener o) {
1079
                return exceptionHandlingSupport.removeExceptionListener(o);
1080
        }
1081

    
1082
        /**
1083
         * DOCUMENT ME!
1084
         *
1085
         * @param t DOCUMENT ME!
1086
         */
1087
        private void throwException(Throwable t) {
1088
                exceptionHandlingSupport.throwException(t);
1089
        }
1090

    
1091
    /* (non-Javadoc)
1092
     * @see com.iver.andami.ui.mdiManager.ViewListener#viewActivated()
1093
     */
1094
    public void viewActivated() {
1095
    }
1096

    
1097
    /* (non-Javadoc)
1098
     * @see com.iver.andami.ui.mdiManager.ViewListener#viewClosed()
1099
     */
1100
    public void viewClosed() {
1101
        try {
1102
            model.stop();
1103
        } catch (DriverException e) {
1104
            NotificationManager.addError(e.getMessage(), e);
1105
        }        
1106
    }
1107
}
1108

    
1109
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"