synchronized from quantum plugin
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / wizards / PHPUpdateRowPage.java
1 package com.quantum.wizards;
2
3 import java.text.MessageFormat;
4
5 import org.eclipse.jface.preference.IPreferenceStore;
6 import org.eclipse.jface.wizard.WizardPage;
7 import org.eclipse.swt.SWT;
8 import org.eclipse.swt.dnd.TextTransfer;
9 import org.eclipse.swt.dnd.Transfer;
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.Composite;
18 import org.eclipse.swt.widgets.Label;
19 import org.eclipse.swt.widgets.Text;
20
21 import com.quantum.QuantumPlugin;
22 import com.quantum.sql.TableRow;
23 //import com.quantum.view.PHPSourceConsole;
24 import com.quantum.view.tableview.TableAdapter;
25
26 public class PHPUpdateRowPage extends WizardPage implements SQLPage {
27   TableRow row;
28   String[] columnNames;
29   Text[] oldValues;
30   Text[] newValues;
31   Button[] primaryKeys;
32   Button[] setValues;
33   Label query;
34   IPreferenceStore fStore;
35   private final static boolean DEBUG = false;
36
37   public PHPUpdateRowPage(String pageName) {
38     super(pageName);
39   }
40
41   public void init(TableRow row, TableAdapter adapter) {
42     this.row = row;
43   }
44
45   public void createControl(Composite parent) {
46     if (DEBUG) {
47       System.out.println("page create control");
48     }
49     fStore = QuantumPlugin.getDefault().getPreferenceStore();
50     Composite container = new Composite(parent, SWT.NULL);
51     GridLayout layout = new GridLayout();
52     container.setLayout(layout);
53     int layoutColumns = 5;
54     layout.numColumns = layoutColumns;
55
56     if (DEBUG) {
57       if (row == null) {
58         System.out.println("Row is null");
59       }
60       if (row.getColumnNames() == null) {
61         System.out.println("Columns are null");
62       }
63       if (row.getTableData() == null) {
64         System.out.println("Data is null");
65       }
66     }
67
68     columnNames = row.getColumnNames();
69     String[] data = row.getTableData();
70
71     if (DEBUG) {
72       for (int i = 0; i < row.getColumnCount(); i++) {
73         System.out.println("data = " + i + "=" + data[i]);
74         System.out.println("column = " + i + "=" + columnNames[i]);
75       }
76     }
77
78     oldValues = new Text[row.getColumnCount()];
79     newValues = new Text[row.getColumnCount()];
80     primaryKeys = new Button[row.getColumnCount()];
81     setValues = new Button[row.getColumnCount()];
82     Label temp = new Label(container, SWT.NULL);
83     temp.setText("Column Name");
84     temp = new Label(container, SWT.NULL);
85     temp.setText("Where Value");
86     temp = new Label(container, SWT.NULL);
87     temp.setText("Where");
88     temp = new Label(container, SWT.NULL);
89     temp.setText("Set Value");
90     temp = new Label(container, SWT.NULL);
91     temp.setText("Set");
92     for (int i = 0; i < row.getColumnCount(); i++) {
93       Label label = new Label(container, SWT.NULL);
94       label.setText(columnNames[i]);
95       oldValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
96       if (data[i] == null || data[i].equals("")) {
97         oldValues[i].setText('$' + columnNames[i]);
98       } else {
99         oldValues[i].setText(data[i]);
100       }
101       oldValues[i].addModifyListener(new ModifyListener() {
102         public void modifyText(ModifyEvent e) {
103           updateQuery();
104         }
105       });
106       primaryKeys[i] = new Button(container, SWT.CHECK);
107       //   primaryKeys[i].setText("Where");
108       primaryKeys[i].addSelectionListener(new SelectionListener() {
109         public void widgetDefaultSelected(SelectionEvent e) {
110         }
111         public void widgetSelected(SelectionEvent e) {
112           updateQuery();
113         }
114       });
115       newValues[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
116
117       if (data[i] == null || data[i].equals("")) {
118         newValues[i].setText('$' + columnNames[i]);
119       } else {
120         newValues[i].setText(data[i]);
121       }
122       newValues[i].addModifyListener(new ModifyListener() {
123         public void modifyText(ModifyEvent e) {
124           updateQuery();
125         }
126       });
127       setValues[i] = new Button(container, SWT.CHECK);
128       //  setValues[i].setText("Set Value");
129       setValues[i].addSelectionListener(new SelectionListener() {
130         public void widgetDefaultSelected(SelectionEvent e) {
131         }
132         public void widgetSelected(SelectionEvent e) {
133           updateQuery();
134         }
135       });
136     }
137     query = new Label(container, SWT.WRAP);
138     GridData gridData = new GridData();
139     gridData.horizontalSpan = layoutColumns;
140     gridData.horizontalAlignment = GridData.FILL;
141     gridData.verticalAlignment = GridData.FILL;
142     gridData.grabExcessHorizontalSpace = true;
143     gridData.grabExcessVerticalSpace = true;
144     query.setLayoutData(gridData);
145
146     setControl(container);
147     updateQuery();
148
149     setPageComplete(true);
150   }
151   
152   public void updateQuery() {
153     if (DEBUG) {
154       System.out.println("Updating update query");
155     }
156
157     StringBuffer setClause = new StringBuffer();
158     StringBuffer whereClause = new StringBuffer();
159     for (int i = 0; i < columnNames.length; i++) {
160       if (primaryKeys[i].getSelection()) {
161         whereClause.append(columnNames[i]);
162         whereClause.append(" = ");
163         whereClause.append("'" + oldValues[i].getText() + "'");
164         whereClause.append(", ");
165       }
166       if (setValues[i].getSelection()) {
167         setClause.append(columnNames[i]);
168         setClause.append(" = ");
169         setClause.append("'" + newValues[i].getText() + "'");
170         setClause.append(", ");
171       }
172     }
173     if (whereClause.length() > 1) {
174       whereClause.deleteCharAt(whereClause.length() - 1);
175       whereClause.deleteCharAt(whereClause.length() - 1);
176     }
177     if (setClause.length() > 1) {
178       setClause.deleteCharAt(setClause.length() - 1);
179       setClause.deleteCharAt(setClause.length() - 1);
180     }
181     String[] arguments = { row.getTable(), setClause.toString(), whereClause.toString()};
182     MessageFormat form = new MessageFormat(fStore.getString("phpeclipse.sql.update.template"));
183
184     String query = form.format(arguments);
185     //
186     //    String query = "$results = mysql_query(\"UPDATE " + row.getTable();
187     //    query += " SET " + setClause.toString();
188     //    query += " WHERE " + whereClause.toString() + "\");";
189     this.query.setText(query);
190   }
191   public boolean performFinish() {
192 //    PHPSourceConsole console = PHPSourceConsole.getInstance();
193 //    console.clear();
194 //    console.print(query.getText());
195         QuantumPlugin.getDefault().getSysClip().setContents(
196                         new Object[] { query.getText() },
197                         new Transfer[] { TextTransfer.getInstance()});
198     return true;
199   }
200 }