Revision 9488

View differences:

trunk/applications/appgvSIG/src/com/iver/cit/gvsig/gui/filter/FilterDialog.java
40 40
 */
41 41
package com.iver.cit.gvsig.gui.filter;
42 42

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

  
55
import javax.swing.DefaultListModel;
56
import javax.swing.JPanel;
54
import javax.swing.tree.DefaultMutableTreeNode;
55
import javax.swing.tree.DefaultTreeModel;
57 56

  
58 57
import org.apache.log4j.Logger;
58
import org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel;
59
import org.gvsig.gui.beans.filterPanel.tableFilterQueryPanel.TableFilterQueryJPanel;
59 60

  
60 61
import com.hardcode.gdbms.engine.data.driver.DriverException;
61 62
import com.hardcode.gdbms.engine.instruction.IncompatibleTypesException;
......
74 75
import com.iver.utiles.StringUtilities;
75 76
import com.iver.utiles.exceptionHandling.ExceptionHandlingSupport;
76 77
import com.iver.utiles.exceptionHandling.ExceptionListener;
77
import com.lamatek.swingextras.JDateChooser;
78 78

  
79

  
80 79
/**
81
 * DOCUMENT ME!
82
 *
83
 * @author Fernando Gonz?lez Cort?s
80
 * This class substitutes the old "FilterDialog" class made by "Fernando Gonz?lez Cort?s"
81
 * The functionality is the same, but now the class is made from separately (and reusable) components
82
 * 
83
 * @author Pablo Piqueras Bartolom? (p_queras@hotmail.com)
84 84
 */
85
public class FilterDialog extends JPanel implements IWindow, IWindowListener {
85
public class FilterDialog extends TableFilterQueryJPanel implements IWindow, IWindowListener {
86 86
	private static Logger logger = Logger.getLogger(Table.class.getName());
87
	private ArrayList expressionListeners = new ArrayList();
88
	private int position = 0;
89
	private DefaultListModel fieldListModel = new DefaultListModel();
90
	private DefaultListModel valuesListModel = new DefaultListModel();
91
	private NumberFormat nf = NumberFormat.getNumberInstance();
92
	private DateFormat df = DateFormat.getDateInstance();
93
	private ArrayList variables = new ArrayList();
94 87
	private ExpressionDataSource model = null;
95
	private javax.swing.JPanel jPanel = null;
96
	private javax.swing.JPanel jPanel1 = null;
97
	private javax.swing.JPanel jPanel2 = null;
98
	private javax.swing.JPanel jPanel3 = null;
99
	private javax.swing.JPanel jPanel4 = null;
100
	private javax.swing.JLabel jLabel = null;
101
	private javax.swing.JScrollPane jScrollPane = null;
102
	private javax.swing.JList lstCampos = null;
103
	private javax.swing.JButton btnIgual = null;
104
	private javax.swing.JButton btnMayor = null;
105
	private javax.swing.JButton btnNot = null;
106
	private javax.swing.JButton btnDistinto = null;
107
	private javax.swing.JButton btnMenor = null;
108
	private javax.swing.JButton btnMayorIgual = null;
109
	private javax.swing.JButton btnMenorIgual = null;
110
	private javax.swing.JButton btnAnd = null;
111
	private javax.swing.JButton btnOr = null;
112
	private javax.swing.JTextArea txtExpression = null;
113
	private javax.swing.JPanel jPanel5 = null;
114
	private javax.swing.JButton btnNuevo = null;
115
	private javax.swing.JButton btnAdd = null;
116
	private javax.swing.JButton btnName = null;
117
	private javax.swing.JButton btnFromSet = null;
118
	private javax.swing.JScrollPane jScrollPane1 = null;
119
	private javax.swing.JLabel jLabel1 = null;
120
	private javax.swing.JList lstValores = null;
121
	private javax.swing.JScrollPane jScrollPane2 = null;
122
	private javax.swing.JButton btnParentesis = null;
88
	private ArrayList expressionListeners = new ArrayList();
123 89
	private ExceptionHandlingSupport exceptionHandlingSupport = new ExceptionHandlingSupport();
90
	private NumberFormat nf = NumberFormat.getNumberInstance();
124 91
	
125 92
	private String title;
93
	
94
	private final int filterDialog_Width = AbstractFilterQueryJPanel.DefaultWidth +10;
95
	private final int filterDialog_Height = 362;
126 96

  
97

  
127 98
	/**
128 99
	 * This is the default constructor
129 100
	 */
130 101
	public FilterDialog(String _title) {		
131 102
		super();
132
		initialize();
133 103
		title = _title;
104
		defaultTreeModel = (DefaultTreeModel)fieldsJTree.getModel();
134 105
	}
135 106
	/**
136 107
	 * This is the default constructor
137 108
	 */
138 109
	public FilterDialog() {		
139 110
		super();
140
		initialize();
111
		defaultTreeModel = (DefaultTreeModel)fieldsJTree.getModel();
141 112
	}
142

  
113
	
114
	/*
115
	 *  (non-Javadoc)
116
	 * @see org.gvsig.gui.beans.filterPanel.AbstractFilterQueryJPanel#initialize()
117
	 */
118
	protected void initialize() {
119
		super.initialize();
120
		this.resize(AbstractFilterQueryJPanel.DefaultWidth, filterDialog_Height);
121
		
122
		this.addNewListeners();
123
	}
124
	
143 125
	/**
144
	 * DOCUMENT ME!
145
	 *
146
	 * @param t DOCUMENT ME!
126
	 * Adds some listeners
147 127
	 */
148
	public void setModel(ExpressionDataSource t) {
149
		try {
150
			model = t;
151
            model.start();
152
        } catch (DriverException e1) {
153
            NotificationManager.addError(e1.getMessage(), e1);
154
        }
155
		fieldListModel.clear();
128
	private void addNewListeners() {
129
		// Listener for "btnAdd"
130
		getBtnAdd().addActionListener(new java.awt.event.ActionListener() {
131
			/*
132
			 *  (non-Javadoc)
133
			 * @see java.awt.event.ActionListener#actionPerformed(java.awt.event.ActionEvent)
134
			 */
135
			public void actionPerformed(java.awt.event.ActionEvent e) {
136
				final String expr = "select * from '" +
137
					model.getDataSourceName() + "' where " +
138
					getTxtExpression().getText() + ";";
156 139

  
157
		try {
158
			for (int i = 0; i < model.getFieldCount(); i++) {
159
				fieldListModel.addElement(model.getFieldName(i));
140
				logger.debug(expr);
141

  
142
				PluginServices.backgroundExecution(new Runnable() {
143
						public void run() {
144
							for (int i = 0;
145
									i < expressionListeners.size();
146
									i++) {
147
								ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
148
								l.addToSet(expr);
149
							}
150
						}
151
					});
160 152
			}
161
		} catch (FilterException e) {
162
			throwException(e);
163
		}
164
	}
153
		});
165 154

  
155
		// Listener for "btnNuevo"
156
		getBtnNuevo().addActionListener(new java.awt.event.ActionListener() {
157
			public void actionPerformed(java.awt.event.ActionEvent e) {
158
				final String expr = "select * from '" +
159
					model.getDataSourceName() + "' where " +
160
					getTxtExpression().getText() + ";";
161

  
162
				logger.debug(expr);
163

  
164
				PluginServices.backgroundExecution(new Runnable() {
165
					public void run() {
166
						for (int i = 0; i < expressionListeners.size(); i++) {
167
							ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
168
							l.newSet(expr);
169
						}
170
					}
171
				});
172
			}
173
		});
174
				
175
		// Listener for "btnFromSet"
176
		getBtnFromSet().addActionListener(new java.awt.event.ActionListener() {
177
			public void actionPerformed(java.awt.event.ActionEvent e) {
178
				final String expr = "select * from '" +
179
					model.getDataSourceName() + "' where " +
180
					getTxtExpression().getText() + ";";
181

  
182
				logger.debug(expr);
183

  
184
				PluginServices.backgroundExecution(new Runnable() {
185
					public void run() {
186
						for (int i = 0; i < expressionListeners.size(); i++) {
187
							ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
188
							l.fromSet(expr);
189
						}
190
					}
191
				});
192
			}
193
		});
194
		
195
		// Listener for "fieldsJTree" 
196
		getFieldsJTree().addMouseListener(new MouseAdapter() {
197
			/*
198
			 *  (non-Javadoc)
199
			 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
200
			 */
201
			public void mouseClicked(MouseEvent e) {
202
				int row = fieldsJTree.getRowForLocation(e.getX(), e.getY());
203
				
204
				if (row > -1) {
205
					switch (e.getClickCount()) {
206
						case 1:
207
							fillValues(row);
208
							break;
209
						case 2:						
210
							putSymbol(jtreeRoot.getChildAt(row).toString());
211
							break;
212
					}
213
				}
214
			}
215
		});
216
		
217
		// Listener for "valuesJList"
218
		getValuesJList().addMouseListener(new MouseAdapter() {
219
			/*
220
			 *  (non-Javadoc)
221
			 * @see java.awt.event.MouseListener#mouseClicked(java.awt.event.MouseEvent)
222
			 */
223
			public void mouseClicked(MouseEvent e) {
224
				if (e.getClickCount() == 2) {
225
					Value valor = (Value) valuesListModel.getElementAt(getValuesJList().getSelectedIndex());
226

  
227
					if (valor instanceof DateValue) {
228
						putSymbol("date('" + valor + "')");
229
					} else if (valor instanceof BooleanValue) {
230
						putSymbol("boolean('" + valor.toString() + "')");
231
					} else if (valor instanceof StringValue) {
232
						putSymbol("'" + valor + "'");
233
					} else {
234
						putSymbol(valor.toString());
235
					}		
236
				}
237
			}
238
		});
239
	}	
240
	
166 241
	/**
167 242
	 * Rellena la lista con los valores del campo seleccionado
168 243
	 */
169
	private void fillValues() {
170
		int index = lstCampos.getSelectedIndex();
244
	private void fillValues(int row) {
245
		//int index = lstCampos.getSelectedIndex();
171 246

  
172 247
		//Index es ahora el ?ndice del campo seleccionado
173 248
		//Se eliminan los duplicados
......
199 274
			}
200 275
		}); // Para poder ordenar
201 276
		
277
		
202 278
		valuesListModel.clear();
203 279
		try {
204 280
			for (int i = 0; i < model.getRowCount(); i++) {
205
				Value value = model.getFieldValue(i, index);
281
				Value value = model.getFieldValue(i, row);
206 282

  
207 283
				if (value instanceof NullValue)
208 284
				    continue;
......
220 296
			throwException(e);
221 297
		}
222 298
	}
299
	
300
	/**
301
	 * DOCUMENT ME!
302
	 *
303
	 * @param t DOCUMENT ME!
304
	 */
305
	public void setModel(ExpressionDataSource t) {
306
		try {
307
			model = t;
308
            model.start();
309
        } catch (DriverException e1) {
310
            NotificationManager.addError(e1.getMessage(), e1);
311
        }
312
        
313
        jtreeRoot.removeAllChildren();
314
        
315
        try {
316
			for (int i = 0; i < model.getFieldCount(); i++) {
317
				Object field = model.getFieldName(i);
318
				
319
				if (field != null) {
320
					jtreeRoot.add(new DefaultMutableTreeNode(field.toString()));
321
				}
322
			}
223 323

  
324
			defaultTreeModel.setRoot(jtreeRoot);
325
		} catch (FilterException e) {
326
			throwException(e);
327
		}
328
	}
329
	
330
		/**
331
		 * DOCUMENT ME!
332
		 *
333
		 * @return DOCUMENT ME!
334
		 *
335
		 * @throws ParseException DOCUMENT ME!
336
		 */
337
		private String validateExpression() throws ParseException {
338
			String expression = txtExpression.getText();
339
	//		HashSet variablesIndexes = new HashSet();
340
	//
341
	//		StringBuffer traducida = new StringBuffer();
342
	
343
			//Se transforman los nombres de los campos en las variables xix que analizar?n
344
			//Se quitan los Date(fecha) y se mete la fecha correspondiente
345
			expression = translateDates(expression);
346
			expression = translateNumber(expression);
347
			expression = translateWord(expression, "true", "1");
348
			expression = translateWord(expression, "false", "0");
349
	
350
			String replacement;
351
			Pattern patron = Pattern.compile("[^<>!]=");
352
			Matcher m = patron.matcher(expression);
353
			int index = 0;
354
	
355
			while (m.find(index)) {
356
				index = m.start();
357
				replacement = expression.charAt(index) + "==";
358
				m.replaceFirst(replacement);
359
				index++;
360
			}
361
	
362
			expression = expression.replaceAll("[^<>!]=", "==");
363
	
364
			logger.debug(expression);
365
	
366
			return expression;
367
		}
224 368
	/**
369
	 * Redefinition of the 'putSymbol' method of AbstractFilterQueryJPanel
370
	 *   (I've made this redefinition for write the same code as the 'putSymbol'
371
	 *    code of the original class (FilterDialog) that was in this project
372
	 *    (appgvSIG) and didn't has path troubles to find 'StringUtilities').
373
	 * 
374
	 * Sets a symbol on the filter expression (JTextArea that stores and shows
375
	 *   the current filter expression)
376
	 *
377
	 * @param symbol A symbol: character, characters, number, ...
378
	 */
379
	protected void putSymbol(String symbol) {
380
		int position = txtExpression.getCaretPosition();
381
		txtExpression.setText(StringUtilities.insert(txtExpression.getText(),
382
				position, symbol));
383

  
384
		if (symbol.equals(" () ")) {
385
			position = position + 2;
386
		} else {
387
			position = position + symbol.length();
388
		}
389

  
390
		txtExpression.setCaretPosition(position);
391
	}
392
	
393
	/**
225 394
	 * DOCUMENT ME!
226 395
	 *
227 396
	 * @param expresion DOCUMENT ME!
......
240 409

  
241 410
		return index;
242 411
	}
243

  
412
	
244 413
	/**
245 414
	 * DOCUMENT ME!
246 415
	 *
......
298 467
				//Se sustituye por el valor ordinal de la fecha
299 468
				expresion = expresion.substring(0, startIndex - 5) +
300 469
					expresion.substring(startIndex).replaceFirst(date + "\\)",
301
						new Long((df.parse(date)).getTime()).toString());
470
						new Long((filterButtonsJPanel.getDateFormat().parse(date)).getTime()).toString());
302 471
				;
303 472
			} else {
304 473
				startIndex += date.length();
......
366 535

  
367 536
		return expresion;
368 537
	}
369

  
538
	
370 539
	/**
371 540
	 * DOCUMENT ME!
372 541
	 *
373
	 * @return DOCUMENT ME!
374
	 *
375
	 * @throws ParseException DOCUMENT ME!
376
	 */
377
	private String validateExpression() throws ParseException {
378
		String expression = txtExpression.getText();
379
		HashSet variablesIndexes = new HashSet();
380

  
381
		StringBuffer traducida = new StringBuffer();
382

  
383
		//Se transforman los nombres de los campos en las variables xix que analizar?n
384
		//Se quitan los Date(fecha) y se mete la fecha correspondiente
385
		expression = translateDates(expression);
386
		expression = translateNumber(expression);
387
		expression = translateWord(expression, "true", "1");
388
		expression = translateWord(expression, "false", "0");
389

  
390
		String replacement;
391
		Pattern patron = Pattern.compile("[^<>!]=");
392
		Matcher m = patron.matcher(expression);
393
		int index = 0;
394

  
395
		while (m.find(index)) {
396
			index = m.start();
397
			replacement = expression.charAt(index) + "==";
398
			m.replaceFirst(replacement);
399
			index++;
400
		}
401

  
402
		expression = expression.replaceAll("[^<>!]=", "==");
403

  
404
		logger.debug(expression);
405

  
406
		return expression;
407
	}
408

  
409
	/**
410
	 * DOCUMENT ME!
411
	 *
412
	 * @param symbol DOCUMENT ME!
413
	 */
414
	private void putSymbol(String symbol) {
415
		int position = txtExpression.getCaretPosition();
416
		txtExpression.setText(StringUtilities.insert(txtExpression.getText(),
417
				position, symbol));
418

  
419
		if (symbol.equals(" () ")) {
420
			position = position + 2;
421
		} else {
422
			position = position + symbol.length();
423
		}
424

  
425
		txtExpression.setCaretPosition(position);
426
	}
427

  
428
	/**
429
	 * This method initializes this
430
	 */
431
	private void initialize() {
432
		this.setLayout(new java.awt.BorderLayout());
433
		this.add(getJPanel(), java.awt.BorderLayout.CENTER);
434
		this.add(getJPanel1(), java.awt.BorderLayout.SOUTH);
435
	}
436

  
437
	/**
438
	 * This method initializes jPanel
439
	 *
440
	 * @return javax.swing.JPanel
441
	 */
442
	private javax.swing.JPanel getJPanel() {
443
		if (jPanel == null) {
444
			jPanel = new javax.swing.JPanel();
445
			jPanel.setLayout(new java.awt.BorderLayout());
446
			jPanel.add(getJPanel2(), java.awt.BorderLayout.WEST);
447
			jPanel.add(getJPanel3(), java.awt.BorderLayout.CENTER);
448
			jPanel.add(getJPanel4(), java.awt.BorderLayout.EAST);
449
		}
450

  
451
		return jPanel;
452
	}
453

  
454
	/**
455
	 * This method initializes jPanel1
456
	 *
457
	 * @return javax.swing.JPanel
458
	 */
459
	private javax.swing.JPanel getJPanel1() {
460
		if (jPanel1 == null) {
461
			jPanel1 = new javax.swing.JPanel();
462
			jPanel1.add(getJScrollPane2(), null);
463
			jPanel1.add(getJPanel5(), null);
464
			jPanel1.setPreferredSize(new java.awt.Dimension(10, 110));
465
		}
466

  
467
		return jPanel1;
468
	}
469

  
470
	/**
471
	 * This method initializes jPanel2
472
	 *
473
	 * @return javax.swing.JPanel
474
	 */
475
	private javax.swing.JPanel getJPanel2() {
476
		if (jPanel2 == null) {
477
			jPanel2 = new javax.swing.JPanel();
478
			jPanel2.add(getJLabel(), null);
479
			jPanel2.add(getJScrollPane(), null);
480
			jPanel2.setPreferredSize(new java.awt.Dimension(150, 170));
481
		}
482

  
483
		return jPanel2;
484
	}
485

  
486
	/**
487
	 * This method initializes jPanel3
488
	 *
489
	 * @return javax.swing.JPanel
490
	 */
491
	private javax.swing.JPanel getJPanel3() {
492
		if (jPanel3 == null) {
493
			jPanel3 = new javax.swing.JPanel();
494
			jPanel3.add(getBtnIgual(), null);
495
			jPanel3.add(getBtnDistinto(), null);
496
			jPanel3.add(getBtnMayor(), null);
497
			jPanel3.add(getBtnMenor(), null);
498
			jPanel3.add(getBtnMenorIgual(), null);
499
			jPanel3.add(getBtnMayorIgual(), null);
500
			jPanel3.add(getBtnAnd(), null);
501
			jPanel3.add(getBtnOr(), null);
502
			jPanel3.add(getBtnNot(), null);
503
			jPanel3.add(getBtnParentesis(), null);
504
			jPanel3.add(getBtnName(), null);
505
			jPanel3.setPreferredSize(new java.awt.Dimension(180, 36));
506
		}
507

  
508
		return jPanel3;
509
	}
510

  
511
	/**
512
	 * This method initializes jPanel4
513
	 *
514
	 * @return javax.swing.JPanel
515
	 */
516
	private javax.swing.JPanel getJPanel4() {
517
		if (jPanel4 == null) {
518
			jPanel4 = new javax.swing.JPanel();
519
			jPanel4.add(getJLabel1(), null);
520
			jPanel4.add(getJScrollPane1(), null);
521
			jPanel4.setPreferredSize(new java.awt.Dimension(150, 10));
522
		}
523

  
524
		return jPanel4;
525
	}
526

  
527
	/**
528
	 * This method initializes jLabel
529
	 *
530
	 * @return javax.swing.JLabel
531
	 */
532
	private javax.swing.JLabel getJLabel() {
533
		if (jLabel == null) {
534
			jLabel = new javax.swing.JLabel();
535
			jLabel.setText(PluginServices.getText(this, "Campos") + ":");
536
		}
537

  
538
		return jLabel;
539
	}
540

  
541
	/**
542
	 * This method initializes jScrollPane
543
	 *
544
	 * @return javax.swing.JScrollPane
545
	 */
546
	private javax.swing.JScrollPane getJScrollPane() {
547
		if (jScrollPane == null) {
548
			jScrollPane = new javax.swing.JScrollPane();
549
			jScrollPane.setViewportView(getLstCampos());
550
			jScrollPane.setPreferredSize(new java.awt.Dimension(135, 120));
551
		}
552

  
553
		return jScrollPane;
554
	}
555

  
556
	/**
557
	 * This method initializes lstCampos
558
	 *
559
	 * @return javax.swing.JList
560
	 */
561
	private javax.swing.JList getLstCampos() {
562
		if (lstCampos == null) {
563
			lstCampos = new javax.swing.JList();
564
			lstCampos.setModel(fieldListModel);
565
			lstCampos.setSelectionMode(javax.swing.ListSelectionModel.SINGLE_SELECTION);
566
			lstCampos.addListSelectionListener(new javax.swing.event.ListSelectionListener() {
567
					public void valueChanged(
568
						javax.swing.event.ListSelectionEvent e) {
569
						PluginServices.backgroundExecution(new Runnable() {
570
							public void run() {
571
								fillValues();
572
							}
573
						});
574
					}
575
				});
576
			lstCampos.addMouseListener(new java.awt.event.MouseAdapter() {
577
					public void mouseClicked(java.awt.event.MouseEvent e) {
578
						if (e.getClickCount() == 2) {
579
							putSymbol((String) fieldListModel.getElementAt(
580
									getLstCampos().getSelectedIndex()));
581
						}
582
					}
583
				});
584
		}
585

  
586
		return lstCampos;
587
	}
588

  
589
	/**
590
	 * This method initializes btnIgual
591
	 *
592
	 * @return javax.swing.JButton
593
	 */
594
	private javax.swing.JButton getBtnIgual() {
595
		if (btnIgual == null) {
596
			btnIgual = new javax.swing.JButton();
597
			btnIgual.setText("=");
598
			btnIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
599
			btnIgual.setPreferredSize(new java.awt.Dimension(40, 20));
600
			btnIgual.addActionListener(new java.awt.event.ActionListener() {
601
					public void actionPerformed(java.awt.event.ActionEvent e) {
602
						putSymbol(" = ");
603
					}
604
				});
605
		}
606

  
607
		return btnIgual;
608
	}
609

  
610
	/**
611
	 * This method initializes btnMayor
612
	 *
613
	 * @return javax.swing.JButton
614
	 */
615
	private javax.swing.JButton getBtnMayor() {
616
		if (btnMayor == null) {
617
			btnMayor = new javax.swing.JButton();
618
			btnMayor.setText(">");
619
			btnMayor.setMargin(new java.awt.Insets(2, 2, 2, 2));
620
			btnMayor.setPreferredSize(new java.awt.Dimension(40, 20));
621
			btnMayor.addActionListener(new java.awt.event.ActionListener() {
622
					public void actionPerformed(java.awt.event.ActionEvent e) {
623
						putSymbol(" > ");
624
					}
625
				});
626
		}
627

  
628
		return btnMayor;
629
	}
630

  
631
	/**
632
	 * This method initializes btnNot
633
	 *
634
	 * @return javax.swing.JButton
635
	 */
636
	private javax.swing.JButton getBtnNot() {
637
		if (btnNot == null) {
638
			btnNot = new javax.swing.JButton();
639
			btnNot.setText("Not");
640
			btnNot.setMargin(new java.awt.Insets(2, 2, 2, 2));
641
			btnNot.setPreferredSize(new java.awt.Dimension(40, 20));
642
			btnNot.addActionListener(new java.awt.event.ActionListener() {
643
					public void actionPerformed(java.awt.event.ActionEvent e) {
644
						putSymbol(" not ");
645
					}
646
				});
647
		}
648

  
649
		return btnNot;
650
	}
651

  
652
	/**
653
	 * This method initializes btnDistinto
654
	 *
655
	 * @return javax.swing.JButton
656
	 */
657
	private javax.swing.JButton getBtnDistinto() {
658
		if (btnDistinto == null) {
659
			btnDistinto = new javax.swing.JButton();
660
			btnDistinto.setText("!=");
661
			btnDistinto.setMargin(new java.awt.Insets(2, 2, 2, 2));
662
			btnDistinto.setPreferredSize(new java.awt.Dimension(40, 20));
663
			btnDistinto.addActionListener(new java.awt.event.ActionListener() {
664
					public void actionPerformed(java.awt.event.ActionEvent e) {
665
						putSymbol(" <> ");
666
					}
667
				});
668
		}
669

  
670
		return btnDistinto;
671
	}
672

  
673
	/**
674
	 * This method initializes btnMenor
675
	 *
676
	 * @return javax.swing.JButton
677
	 */
678
	private javax.swing.JButton getBtnMenor() {
679
		if (btnMenor == null) {
680
			btnMenor = new javax.swing.JButton();
681
			btnMenor.setText("<");
682
			btnMenor.setMargin(new java.awt.Insets(2, 2, 2, 2));
683
			btnMenor.setPreferredSize(new java.awt.Dimension(40, 20));
684
			btnMenor.addActionListener(new java.awt.event.ActionListener() {
685
					public void actionPerformed(java.awt.event.ActionEvent e) {
686
						putSymbol(" < ");
687
					}
688
				});
689
		}
690

  
691
		return btnMenor;
692
	}
693

  
694
	/**
695
	 * This method initializes btnMayorIgual
696
	 *
697
	 * @return javax.swing.JButton
698
	 */
699
	private javax.swing.JButton getBtnMayorIgual() {
700
		if (btnMayorIgual == null) {
701
			btnMayorIgual = new javax.swing.JButton();
702
			btnMayorIgual.setText(">=");
703
			btnMayorIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
704
			btnMayorIgual.setPreferredSize(new java.awt.Dimension(40, 20));
705
			btnMayorIgual.addActionListener(new java.awt.event.ActionListener() {
706
					public void actionPerformed(java.awt.event.ActionEvent e) {
707
						putSymbol(" >= ");
708
					}
709
				});
710
		}
711

  
712
		return btnMayorIgual;
713
	}
714

  
715
	/**
716
	 * This method initializes btnMenorIgual
717
	 *
718
	 * @return javax.swing.JButton
719
	 */
720
	private javax.swing.JButton getBtnMenorIgual() {
721
		if (btnMenorIgual == null) {
722
			btnMenorIgual = new javax.swing.JButton();
723
			btnMenorIgual.setText("<=");
724
			btnMenorIgual.setMargin(new java.awt.Insets(2, 2, 2, 2));
725
			btnMenorIgual.setPreferredSize(new java.awt.Dimension(40, 20));
726
			btnMenorIgual.addActionListener(new java.awt.event.ActionListener() {
727
					public void actionPerformed(java.awt.event.ActionEvent e) {
728
						putSymbol(" <= ");
729
					}
730
				});
731
		}
732

  
733
		return btnMenorIgual;
734
	}
735

  
736
	/**
737
	 * This method initializes btnAnd
738
	 *
739
	 * @return javax.swing.JButton
740
	 */
741
	private javax.swing.JButton getBtnAnd() {
742
		if (btnAnd == null) {
743
			btnAnd = new javax.swing.JButton();
744
			btnAnd.setText("And");
745
			btnAnd.setMargin(new java.awt.Insets(2, 2, 2, 2));
746
			btnAnd.setPreferredSize(new java.awt.Dimension(40, 20));
747
			btnAnd.addActionListener(new java.awt.event.ActionListener() {
748
					public void actionPerformed(java.awt.event.ActionEvent e) {
749
						putSymbol(" and ");
750
					}
751
				});
752
		}
753

  
754
		return btnAnd;
755
	}
756

  
757
	/**
758
	 * This method initializes btnOr
759
	 *
760
	 * @return javax.swing.JButton
761
	 */
762
	private javax.swing.JButton getBtnOr() {
763
		if (btnOr == null) {
764
			btnOr = new javax.swing.JButton();
765
			btnOr.setText("Or");
766
			btnOr.setMargin(new java.awt.Insets(2, 2, 2, 2));
767
			btnOr.setPreferredSize(new java.awt.Dimension(40, 20));
768
			btnOr.addActionListener(new java.awt.event.ActionListener() {
769
					public void actionPerformed(java.awt.event.ActionEvent e) {
770
						putSymbol(" or ");
771
					}
772
				});
773
		}
774

  
775
		return btnOr;
776
	}
777

  
778
	/**
779
	 * This method initializes txtExpression
780
	 *
781
	 * @return javax.swing.JTextArea
782
	 */
783
	private javax.swing.JTextArea getTxtExpression() {
784
		if (txtExpression == null) {
785
			txtExpression = new javax.swing.JTextArea();
786
			txtExpression.setLineWrap(true);
787
		}
788

  
789
		return txtExpression;
790
	}
791

  
792
	/**
793
	 * This method initializes jPanel5
794
	 *
795
	 * @return javax.swing.JPanel
796
	 */
797
	private javax.swing.JPanel getJPanel5() {
798
		if (jPanel5 == null) {
799
			jPanel5 = new javax.swing.JPanel();
800
			jPanel5.add(getBtnNuevo(), null);
801
			jPanel5.add(getBtnAdd(), null);
802
			jPanel5.add(getBtnFromSet(), null);
803
			jPanel5.setPreferredSize(new java.awt.Dimension(190, 100));
804
		}
805

  
806
		return jPanel5;
807
	}
808

  
809
	/**
810
	 * This method initializes btnNuevo
811
	 *
812
	 * @return javax.swing.JButton
813
	 */
814
	private javax.swing.JButton getBtnNuevo() {
815
		if (btnNuevo == null) {
816
			btnNuevo = new javax.swing.JButton();
817
			btnNuevo.setText(PluginServices.getText(this, "Nuevo_conjunto"));
818
			btnNuevo.setMargin(new java.awt.Insets(2, 2, 2, 2));
819
			btnNuevo.addActionListener(new java.awt.event.ActionListener() {
820
					public void actionPerformed(java.awt.event.ActionEvent e) {
821
						final String expr = "select * from '" +
822
							model.getDataSourceName() + "' where " +
823
							getTxtExpression().getText() + ";";
824

  
825
						logger.debug(expr);
826

  
827
						PluginServices.backgroundExecution(new Runnable() {
828
							public void run() {
829
								for (int i = 0; i < expressionListeners.size(); i++) {
830
									ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
831
									l.newSet(expr);
832
								}
833
							}
834
						});
835
					}
836
				});
837
		}
838

  
839
		return btnNuevo;
840
	}
841

  
842
	/**
843
	 * This method initializes btnAdd
844
	 *
845
	 * @return javax.swing.JButton
846
	 */
847
	private javax.swing.JButton getBtnAdd() {
848
		if (btnAdd == null) {
849
			btnAdd = new javax.swing.JButton();
850
			btnAdd.setText(PluginServices.getText(this, "Anadir_al_conjunto"));
851
			btnAdd.setMargin(new java.awt.Insets(2, 2, 2, 2));
852
			btnAdd.addActionListener(new java.awt.event.ActionListener() {
853
					public void actionPerformed(java.awt.event.ActionEvent e) {
854
						final String expr = "select * from '" +
855
							model.getDataSourceName() + "' where " +
856
							getTxtExpression().getText() + ";";
857

  
858
						logger.debug(expr);
859

  
860
						PluginServices.backgroundExecution(new Runnable() {
861
								public void run() {
862
									for (int i = 0;
863
											i < expressionListeners.size();
864
											i++) {
865
										ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
866
										l.addToSet(expr);
867
									}
868
								}
869
							});
870
					}
871
				});
872
		}
873

  
874
		return btnAdd;
875
	}
876

  
877
	/**
878
	 * This method initializes btnFromSet
879
	 *
880
	 * @return javax.swing.JButton
881
	 */
882
	private javax.swing.JButton getBtnFromSet() {
883
		if (btnFromSet == null) {
884
			btnFromSet = new javax.swing.JButton();
885
			btnFromSet.setText(PluginServices.getText(this,
886
					"Seleccionar_del_conjunto"));
887
			btnFromSet.setMargin(new java.awt.Insets(2, 2, 2, 2));
888
			btnFromSet.addActionListener(new java.awt.event.ActionListener() {
889
					public void actionPerformed(java.awt.event.ActionEvent e) {
890
						final String expr = "select * from '" +
891
							model.getDataSourceName() + "' where " +
892
							getTxtExpression().getText() + ";";
893

  
894
						logger.debug(expr);
895

  
896
						PluginServices.backgroundExecution(new Runnable() {
897
							public void run() {
898
								for (int i = 0; i < expressionListeners.size(); i++) {
899
									ExpressionListener l = (ExpressionListener) expressionListeners.get(i);
900
									l.fromSet(expr);
901
								}
902
							}
903
						});
904
					}
905
				});
906
		}
907

  
908
		return btnFromSet;
909
	}
910

  
911
	/**
912
	 * This method initializes jScrollPane1
913
	 *
914
	 * @return javax.swing.JScrollPane
915
	 */
916
	private javax.swing.JScrollPane getJScrollPane1() {
917
		if (jScrollPane1 == null) {
918
			jScrollPane1 = new javax.swing.JScrollPane();
919
			jScrollPane1.setViewportView(getLstValores());
920
			jScrollPane1.setPreferredSize(new java.awt.Dimension(140, 120));
921
		}
922

  
923
		return jScrollPane1;
924
	}
925

  
926
	/**
927
	 * This method initializes jLabel1
928
	 *
929
	 * @return javax.swing.JLabel
930
	 */
931
	private javax.swing.JLabel getJLabel1() {
932
		if (jLabel1 == null) {
933
			jLabel1 = new javax.swing.JLabel();
934
			jLabel1.setText(PluginServices.getText(this, "Valores") + ":");
935
		}
936

  
937
		return jLabel1;
938
	}
939

  
940
	/**
941
	 * This method initializes lstValores
942
	 *
943
	 * @return javax.swing.JList
944
	 */
945
	private javax.swing.JList getLstValores() {
946
		if (lstValores == null) {
947
			lstValores = new javax.swing.JList();
948
			lstValores.setModel(valuesListModel);
949
			lstValores.addMouseListener(new java.awt.event.MouseAdapter() {
950
					public void mouseClicked(java.awt.event.MouseEvent e) {
951
						if (e.getClickCount() == 2) {
952
							Value valor = (Value) valuesListModel.getElementAt(getLstValores()
953
																				   .getSelectedIndex());
954

  
955
							if (valor instanceof DateValue) {
956
								putSymbol("date('" + valor + "')");
957
							} else if (valor instanceof BooleanValue) {
958
								putSymbol("boolean('" + valor.toString() +
959
									"')");
960
							} else if (valor instanceof StringValue) {
961
								putSymbol("'" + valor + "'");
962
							} else {
963
								putSymbol(valor.toString());
964
							}
965
						}
966
					}
967
				});
968
		}
969

  
970
		return lstValores;
971
	}
972

  
973
	/**
974
	 * This method initializes jScrollPane2
975
	 *
976
	 * @return javax.swing.JScrollPane
977
	 */
978
	private javax.swing.JScrollPane getJScrollPane2() {
979
		if (jScrollPane2 == null) {
980
			jScrollPane2 = new javax.swing.JScrollPane();
981
			jScrollPane2.setViewportView(getTxtExpression());
982
			jScrollPane2.setPreferredSize(new java.awt.Dimension(250, 100));
983
			jScrollPane2.setHorizontalScrollBarPolicy(javax.swing.JScrollPane.HORIZONTAL_SCROLLBAR_NEVER);
984
		}
985

  
986
		return jScrollPane2;
987
	}
988

  
989
	/**
990
	 * This method initializes btnParentesis
991
	 *
992
	 * @return javax.swing.JButton
993
	 */
994
	private javax.swing.JButton getBtnParentesis() {
995
		if (btnParentesis == null) {
996
			btnParentesis = new javax.swing.JButton();
997
			btnParentesis.setText("()");
998
			btnParentesis.setMargin(new java.awt.Insets(2, 2, 2, 2));
999
			btnParentesis.setPreferredSize(new java.awt.Dimension(40, 20));
1000
			btnParentesis.addActionListener(new java.awt.event.ActionListener() {
1001
					public void actionPerformed(java.awt.event.ActionEvent e) {
1002
						putSymbol(" () ");
1003
					}
1004
				});
1005
		}
1006

  
1007
		return btnParentesis;
1008
	}
1009

  
1010
	/**
1011
	 * This method initializes btnName
1012
	 *
1013
	 * @return javax.swing.JButton
1014
	 */
1015
	private javax.swing.JButton getBtnName() {
1016
		if (btnName == null) {
1017
			btnName = new javax.swing.JButton();
1018
			btnName.setText("Date");
1019
			btnName.addActionListener(new java.awt.event.ActionListener() {
1020
					public void actionPerformed(java.awt.event.ActionEvent e) {
1021
						JDateChooser chooser = new JDateChooser();
1022

  
1023
						PluginServices.getMDIManager().addWindow(chooser);
1024

  
1025
						if (chooser.getSelectedDate() != null){
1026
							Date selectedDate = chooser.getSelectedDate().getTime();
1027

  
1028
							if (selectedDate != null) {
1029
								putSymbol("Date(" + df.format(selectedDate) + ")");
1030
							}
1031
						}
1032
					}
1033
				});
1034
		}
1035

  
1036
		return btnName;
1037
	}
1038

  
1039
	/**
1040
	 * DOCUMENT ME!
1041
	 *
1042 542
	 * @param arg0
1043 543
	 *
1044 544
	 * @return
......
1057 557
	public boolean removeExpressionListener(ExpressionListener arg0) {
1058 558
		return expressionListeners.remove(arg0);
1059 559
	}
1060

  
560
	
1061 561
	/**
1062 562
	 * @see com.iver.mdiApp.ui.MDIManager.IWindow#getWindowInfo()
1063 563
	 */
1064 564
	public WindowInfo getWindowInfo() {
1065 565
		WindowInfo vi = new WindowInfo(WindowInfo.ICONIFIABLE);
1066
		vi.setWidth(480);
1067
		vi.setHeight(362);
566
//		vi.setWidth(480);
567
//		vi.setHeight(362);
568
		vi.setWidth(filterDialog_Width);
569
		vi.setHeight(filterDialog_Height);
1068 570
		vi.setTitle(PluginServices.getText( this, "filtro") + " (" + title + ")");
1069 571
		return vi;
1070 572
	}
1071

  
573
	
1072 574
	/**
1073 575
	 * DOCUMENT ME!
1074 576
	 *
......
1088 590
	public boolean removeExceptionListener(ExceptionListener o) {
1089 591
		return exceptionHandlingSupport.removeExceptionListener(o);
1090 592
	}
1091

  
593
	
1092 594
	/**
1093 595
	 * DOCUMENT ME!
1094 596
	 *
......
1114 616
            NotificationManager.addError(e.getMessage(), e);
1115 617
        }        
1116 618
    }
1117
}
1118

  
1119
//  @jve:visual-info  decl-index=0 visual-constraint="10,10"
619
}

Also available in: Unified diff