1 package net.sourceforge.phpdt.sql.wizards;
3 import org.eclipse.jface.wizard.WizardPage;
4 import org.eclipse.swt.SWT;
5 import org.eclipse.swt.events.ModifyEvent;
6 import org.eclipse.swt.events.ModifyListener;
7 import org.eclipse.swt.events.SelectionEvent;
8 import org.eclipse.swt.events.SelectionListener;
9 import org.eclipse.swt.layout.GridData;
10 import org.eclipse.swt.layout.GridLayout;
11 import org.eclipse.swt.widgets.Button;
12 import org.eclipse.swt.widgets.Composite;
13 import org.eclipse.swt.widgets.Label;
14 import org.eclipse.swt.widgets.Text;
16 import net.sourceforge.phpdt.sql.Messages;
17 import net.sourceforge.phpdt.sql.adapters.AdapterFactory;
18 import net.sourceforge.phpdt.sql.adapters.DatabaseAdapter;
19 import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
20 import net.sourceforge.phpdt.sql.sql.TableRow;
21 import net.sourceforge.phpdt.sql.sql.metadata.ObjectMetaData;
22 import net.sourceforge.phpdt.sql.view.BookmarkView;
23 import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
24 import net.sourceforge.phpdt.sql.view.bookmark.TreeNode;
25 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
27 public class DeleteRowPage extends WizardPage implements SQLPage {
34 public DeleteRowPage(String pageName) {
38 public void init(TableRow row, TableAdapter adapter) {
42 public void createControl(Composite parent) {
43 System.out.println("page create control"); //$NON-NLS-1$
44 Composite container = new Composite(parent, SWT.NULL);
45 GridLayout layout = new GridLayout();
46 container.setLayout(layout);
47 layout.numColumns = 3;
50 System.out.println("Row is null"); //$NON-NLS-1$
52 if (row.getColumnNames() == null) {
53 System.out.println("Columns are null"); //$NON-NLS-1$
55 if (row.getTableData() == null) {
56 System.out.println("Data is null"); //$NON-NLS-1$
58 BookmarkNode bookmark = row.getBookmarkNode();
59 TreeNode node = bookmark.find(row.getTable());
60 ObjectMetaData metadata = null;
61 if (node != null) metadata = node.getMetaData();
62 columnNames = row.getColumnNames();
63 String[] data = row.getTableData();
64 for (int i = 0; i < row.getColumnCount(); i++) {
65 System.out.println("data = " + i + "=" + data[i]); //$NON-NLS-1$ //$NON-NLS-2$
66 System.out.println("column = " + i + "=" + columnNames[i]); //$NON-NLS-1$ //$NON-NLS-2$
68 values = new Text[row.getColumnCount()];
69 whereValues = new Button[row.getColumnCount()];
70 new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.ColumnName")); //$NON-NLS-1$
71 new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.Value")); //$NON-NLS-1$
72 new Label(container, SWT.NULL).setText(Messages.getString("DeleteRowPage.IncludeIn")); //$NON-NLS-1$
73 for (int i = 0; i < row.getColumnCount(); i++) {
74 Label label = new Label(container, SWT.NULL);
75 label.setText(columnNames[i]);
76 values[i] = new Text(container, SWT.BORDER | SWT.SINGLE);
77 GridData fullHorizontal = new GridData();
78 fullHorizontal.horizontalAlignment = GridData.FILL;
79 values[i].setLayoutData(fullHorizontal);
80 values[i].setText(data[i]);
82 values[i].addModifyListener(new ModifyListener() {
83 public void modifyText(ModifyEvent e) {
88 whereValues[i] = new Button(container, SWT.CHECK);
89 whereValues[i].setText(Messages.getString("DeleteRowPage.WhereClause")); //$NON-NLS-1$
90 // we check if it's a primary key to select it in the WHERE clause
91 if (metadata != null && metadata.getPrimaryKeyOrder(columnNames[i]) > 0)
92 whereValues[i].setSelection(true);
94 whereValues[i].setSelection(false);
95 whereValues[i].addSelectionListener(new SelectionListener() {
96 public void widgetDefaultSelected(SelectionEvent e) {
98 public void widgetSelected(SelectionEvent e) {
103 query = new Text(container, SWT.MULTI | SWT.READ_ONLY | SWT.WRAP);
104 GridData gridData = new GridData();
105 gridData.horizontalSpan = layout.numColumns;
106 gridData.verticalSpan = 3;
107 gridData.horizontalAlignment = GridData.FILL;
108 gridData.verticalAlignment = GridData.FILL;
109 gridData.grabExcessHorizontalSpace = true;
110 gridData.grabExcessVerticalSpace = true;
111 query.setLayoutData(gridData);
113 setControl(container);
116 setPageComplete(true);
118 public void updateQuery() {
119 System.out.println(Messages.getString("DeleteRowPage.UpdatingQuery")); //$NON-NLS-1$
120 StringBuffer whereClause = new StringBuffer();
121 BookmarkNode bookmark = row.getBookmarkNode();
122 TreeNode node = bookmark.find(row.getTable());
123 ObjectMetaData metadata = null;
124 if (node != null) metadata = node.getMetaData();
125 DatabaseAdapter adapter = AdapterFactory.getInstance().getAdapter(bookmark.getType());
128 for (int i = 0; i < columnNames.length; i++) {
129 if (whereValues[i].getSelection()) {
130 if (numSelected > 0) whereClause.append(" AND "); //$NON-NLS-1$
132 whereClause.append("("); //$NON-NLS-1$
133 whereClause.append(columnNames[i]);
134 whereClause.append(" = "); //$NON-NLS-1$
135 if (adapter != null && metadata != null)
136 whereClause.append(adapter.quote(values[i].getText(), metadata.getColumnType(columnNames[i])));
138 whereClause.append(values[i].getText());
140 whereClause.append(")"); //$NON-NLS-1$
143 String query = "DELETE FROM " + row.getTable(); //$NON-NLS-1$
144 if (numSelected > 0) {
145 query += " WHERE " + whereClause.toString(); //$NON-NLS-1$
147 if (numSelected > 0) {
148 setMessage(""); //$NON-NLS-1$
150 setMessage(Messages.getString("DeleteRowPage.WarningNoWhere")); //$NON-NLS-1$
152 this.query.setText(query);
156 public boolean performFinish() {
157 MultiSQLServer server = MultiSQLServer.getInstance();
158 BookmarkView bookmarkView = BookmarkView.getInstance();
159 BookmarkNode bookmark = bookmarkView.getCurrentBookmark();
160 server.execute(bookmark.getConnection(), query.getText());