initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / wizards / SortFilterPage.java
1 package com.quantum.wizards;
2
3 import com.quantum.sql.FilterSort;
4 import com.quantum.sql.TableRow;
5 import com.quantum.view.tableview.TableAdapter;
6 import com.quantum.view.tableview.TableView;
7
8 import org.eclipse.jface.wizard.WizardPage;
9 import org.eclipse.swt.SWT;
10 import org.eclipse.swt.events.ModifyEvent;
11 import org.eclipse.swt.events.ModifyListener;
12 import org.eclipse.swt.events.SelectionEvent;
13 import org.eclipse.swt.events.SelectionListener;
14 import org.eclipse.swt.layout.GridData;
15 import org.eclipse.swt.layout.GridLayout;
16 import org.eclipse.swt.widgets.Button;
17 import org.eclipse.swt.widgets.Combo;
18 import org.eclipse.swt.widgets.Composite;
19 import org.eclipse.swt.widgets.Label;
20 import org.eclipse.swt.widgets.Text;
21
22 public class SortFilterPage extends WizardPage implements SQLPage {
23         TableRow row;
24         TableAdapter adapter;
25         Button[] filter;
26         Combo[] operator;
27         Text[] filterValues;
28         Button[] stringFlags;
29         Button[] sort;
30         Combo[] ascDesc;
31         
32         String columnNames[];
33         Label query;
34         FilterSort filterSort = new FilterSort();
35         public SortFilterPage(String pageName) {
36                 super(pageName);
37         }
38
39         public void init(TableRow row, TableAdapter adapter) {
40                 this.row = row;
41                 this.adapter = adapter;
42         }
43
44         public void createControl(Composite parent) {
45                 System.out.println("page create control"); //$NON-NLS-1$
46                 
47                 Composite container = new Composite(parent, SWT.NULL);
48                 GridLayout layout = new GridLayout();
49                 container.setLayout(layout);
50                 int layoutColumns = 6;
51                 layout.numColumns = layoutColumns;
52
53                 if (row == null) {
54                         System.out.println("Row is null"); //$NON-NLS-1$
55                 }
56                 if (row.getColumnNames() == null) {
57                         System.out.println("Columns are null"); //$NON-NLS-1$
58                 }
59                 if (row.getTableData() == null) {
60                         System.out.println("Data is null"); //$NON-NLS-1$
61                 }
62                 
63                 columnNames = row.getColumnNames();
64                 String[] data = row.getTableData();
65                 for (int i = 0; i < row.getColumnCount(); i++) {
66                         System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
67                         System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
68                 }
69                 int size = row.getColumnCount();
70                 filter = new Button[size];
71                 operator = new Combo[size];
72                 filterValues = new Text[size];
73                 stringFlags = new Button[size];
74                 sort = new Button[size];
75                 ascDesc = new Combo[size];
76                 for (int i = 0; i < row.getColumnCount(); i++) {
77                         filter[i] = new Button(container, SWT.CHECK);
78                         filter[i].setText(columnNames[i]);
79                         filter[i].addSelectionListener(new SelectionListener() {
80                                 public void widgetDefaultSelected(SelectionEvent e) {
81                                 }
82                                 public void widgetSelected(SelectionEvent e) {
83                                         updateQuery();
84                                 }
85                         });
86
87                         operator[i] = new Combo(container, SWT.SINGLE | SWT.READ_ONLY);
88                         operator[i].add("="); //$NON-NLS-1$
89                         operator[i].add("<>"); //$NON-NLS-1$
90                         operator[i].add("<"); //$NON-NLS-1$
91                         operator[i].add(">"); //$NON-NLS-1$
92                         operator[i].addSelectionListener(new SelectionListener() {
93                                 public void widgetDefaultSelected(SelectionEvent e) {
94                                 }
95                                 public void widgetSelected(SelectionEvent e) {
96                                         updateQuery();
97                                 }
98                         });
99                         
100                         filterValues[i] = new Text(container, SWT.BORDER);
101                         filterValues[i].setText(data[i]);
102                         filterValues[i].addModifyListener(new ModifyListener() {
103                                 public void modifyText(ModifyEvent e) {
104                                         updateQuery();
105                                 }                               
106                         });
107                         
108                         stringFlags[i] = new Button(container, SWT.CHECK);
109                         stringFlags[i].setText("String"); //$NON-NLS-1$
110                         stringFlags[i].addSelectionListener(new SelectionListener() {
111                                 public void widgetDefaultSelected(SelectionEvent e) {
112                                 }
113                                 public void widgetSelected(SelectionEvent e) {
114                                         updateQuery();
115                                 }
116                         });
117                         
118                         final int index = i;
119                         sort[i] = new Button(container, SWT.CHECK);
120                         sort[i].setText(columnNames[i]);
121                         sort[i].addSelectionListener(new SelectionListener() {
122                                 public void widgetDefaultSelected(SelectionEvent e) {
123                                 }
124                                 public void widgetSelected(SelectionEvent e) {
125                                         if (sort[index].getSelection()) {
126                                                 filterSort.addSort(columnNames[index], ascDesc[index].getText());
127                                         } else {
128                                                 filterSort.removeSort(columnNames[index]);
129                                         }
130                                         updateQuery();
131                                 }
132                         });
133
134                         ascDesc[i] = new Combo(container, SWT.SINGLE | SWT.READ_ONLY);
135                         ascDesc[i].add(""); //$NON-NLS-1$
136                         ascDesc[i].add("ASC"); //$NON-NLS-1$
137                         ascDesc[i].add("DESC"); //$NON-NLS-1$
138                         ascDesc[i].addSelectionListener(new SelectionListener() {
139                                 public void widgetDefaultSelected(SelectionEvent e) {
140                                 }
141                                 public void widgetSelected(SelectionEvent e) {
142                                         if (sort[index].getSelection()) {
143                                                 filterSort.addSort(columnNames[index], ascDesc[index].getText());
144                                         } else {
145                                                 filterSort.removeSort(columnNames[index]);
146                                         }
147                                         updateQuery();
148                                 }
149                         });
150                 }
151                 query = new Label(container, SWT.WRAP);
152                 GridData gridData = new GridData();
153                 gridData.horizontalSpan = layoutColumns;
154                 gridData.horizontalAlignment = GridData.FILL;
155                 gridData.verticalAlignment = GridData.FILL;
156                 gridData.grabExcessHorizontalSpace = true;
157                 gridData.grabExcessVerticalSpace = true;
158                 query.setLayoutData(gridData);
159
160                 setControl(container);
161        
162                 setPageComplete(true);
163         }
164
165         public void updateQuery() {
166                 filterSort.clearFilters();
167                 for (int i = 0; i < filter.length; i++) {
168                         if (filter[i].getSelection()) {
169                                 filterSort.addFilter(filter[i].getText(), operator[i].getText(), filterValues[i].getText(), stringFlags[i].getSelection());
170                         }
171                 }
172                 query.setText(filterSort.toString());
173         }
174
175         public boolean performFinish() {
176                 adapter.setFilterSort(filterSort);
177                 TableView.getInstance().refreshCurrent();
178                 return true;
179         }
180 }