01: /*
02: * SelectionFilter.java
03: *
04: * This file is part of SQL Workbench/J, http://www.sql-workbench.net
05: *
06: * Copyright 2002-2008, Thomas Kellerer
07: * No part of this code maybe reused without the permission of the author
08: *
09: * To contact the author please send an email to: support@sql-workbench.net
10: *
11: */
12: package workbench.gui.filter;
13:
14: import workbench.gui.components.WbTable;
15: import workbench.storage.filter.AndExpression;
16: import workbench.storage.filter.ColumnComparator;
17: import workbench.storage.filter.ComparatorFactory;
18: import workbench.storage.filter.ComplexExpression;
19: import workbench.storage.filter.DateEqualsComparator;
20: import workbench.storage.filter.IsNullComparator;
21: import workbench.storage.filter.NumberEqualsComparator;
22: import workbench.storage.filter.OrExpression;
23: import workbench.storage.filter.StringEqualsComparator;
24: import workbench.util.SqlUtil;
25:
26: /**
27: * @author support@sql-workbench.net
28: */
29: public class SelectionFilter {
30: private WbTable client;
31:
32: public SelectionFilter(WbTable tbl) {
33: this .client = tbl;
34: }
35:
36: public void applyFilter() {
37: if (client == null)
38: return;
39: int rowCount = client.getSelectedRowCount();
40: int colCount = client.getSelectedColumnCount();
41:
42: if (rowCount < 1 || (rowCount > 1 && colCount != 1))
43: return;
44: int[] columns = null;
45: // if whole rows are selected, use the currently
46: // focused column for the filter
47: if (colCount == client.getColumnCount()) {
48: columns = client.getSelectedColumns();
49: } else {
50: columns = new int[] { client.getSelectedColumn() };
51: }
52: if (columns == null || columns.length == 0)
53: return;
54: ComplexExpression expr = null;
55: if (rowCount == 1) {
56: expr = new AndExpression();
57: } else {
58: expr = new OrExpression();
59: }
60:
61: int[] rows = client.getSelectedRows();
62: for (int ri = 0; ri < rows.length; ri++) {
63: int row = rows[ri];
64:
65: for (int i = 0; i < columns.length; i++) {
66: String name = client.getColumnName(columns[i]);
67: Object value = client.getValueAt(row, columns[i]);
68: int type = client.getDataStore().getColumnType(
69: columns[i]);
70: ColumnComparator comparator = null;
71:
72: if (value == null) {
73: comparator = new IsNullComparator();
74: } else if (SqlUtil.isCharacterType(type)) {
75: comparator = new StringEqualsComparator();
76: } else if (SqlUtil.isNumberType(type)
77: && value instanceof Number) {
78: comparator = new NumberEqualsComparator();
79: } else if (SqlUtil.isDateType(type)
80: && value instanceof java.util.Date) {
81: comparator = new DateEqualsComparator(type);
82: } else {
83: ComparatorFactory factory = new ComparatorFactory();
84: comparator = factory
85: .findEqualityComparatorFor(value.getClass());
86: }
87:
88: if (comparator != null) {
89: expr.addColumnExpression(name, comparator, value);
90: }
91: }
92: }
93: if (expr.hasFilter())
94: client.applyFilter(expr);
95: }
96: }
|