misc changes
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.sql / src / net / sourceforge / phpdt / sql / view / TableView.java
1 package net.sourceforge.phpdt.sql.view;
2
3 import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
4 import net.sourceforge.phpdt.sql.actions.CloseTableAction;
5 import net.sourceforge.phpdt.sql.actions.RefreshTableAction;
6 import net.sourceforge.phpdt.sql.sql.SQLResults;
7 import net.sourceforge.phpdt.sql.sql.TableRow;
8 import net.sourceforge.phpdt.sql.view.tableview.TableAdapter;
9 import net.sourceforge.phpdt.sql.wizards.DeleteRowPage;
10 import net.sourceforge.phpdt.sql.wizards.InsertRowPage;
11 import net.sourceforge.phpdt.sql.wizards.PHPDeleteRowPage;
12 import net.sourceforge.phpdt.sql.wizards.PHPInsertRowPage;
13 import net.sourceforge.phpdt.sql.wizards.PHPSelectRowPage;
14 import net.sourceforge.phpdt.sql.wizards.PHPUpdateRowPage;
15 import net.sourceforge.phpdt.sql.wizards.SQLRowWizard;
16 import net.sourceforge.phpdt.sql.wizards.SortFilterPage;
17 import net.sourceforge.phpdt.sql.wizards.UpdateRowPage;
18
19 import org.eclipse.jface.action.Action;
20 import org.eclipse.jface.action.IMenuListener;
21 import org.eclipse.jface.action.IMenuManager;
22 import org.eclipse.jface.action.MenuManager;
23 import org.eclipse.jface.viewers.ISelection;
24 import org.eclipse.jface.wizard.WizardDialog;
25 import org.eclipse.swt.SWT;
26 import org.eclipse.swt.dnd.Clipboard;
27 import org.eclipse.swt.dnd.TextTransfer;
28 import org.eclipse.swt.dnd.Transfer;
29 import org.eclipse.swt.events.SelectionEvent;
30 import org.eclipse.swt.events.SelectionListener;
31 import org.eclipse.swt.layout.GridData;
32 import org.eclipse.swt.layout.GridLayout;
33 import org.eclipse.swt.widgets.Composite;
34 import org.eclipse.swt.widgets.Label;
35 import org.eclipse.swt.widgets.Menu;
36 import org.eclipse.swt.widgets.TabFolder;
37 import org.eclipse.swt.widgets.TabItem;
38 import org.eclipse.swt.widgets.Table;
39 import org.eclipse.swt.widgets.TableColumn;
40 import org.eclipse.swt.widgets.TableItem;
41 import org.eclipse.swt.widgets.ToolBar;
42 import org.eclipse.swt.widgets.ToolItem;
43 import org.eclipse.ui.ISelectionListener;
44 import org.eclipse.ui.IWorkbenchPart;
45 import org.eclipse.ui.part.ViewPart;
46
47 public class TableView extends ViewPart implements ISelectionListener {
48   public static String TABLEVIEW_ID =
49     "net.sourceforge.phpdt.sql.view.tableview";
50   private Clipboard clip;
51   private RefreshTableAction refreshTableAction;
52   private CloseTableAction closeTableAction;
53   private static TableView instance = null;
54   private TabFolder tabs;
55   private Composite parent;
56   public TableView() {
57     super();
58   }
59   public void setFocus() {
60   }
61   public static TableView getInstance() {
62     return instance;
63   }
64   public void closeCurrent() {
65     TabItem item = tabs.getItem(tabs.getSelectionIndex());
66     item.dispose();
67   }
68   public void refreshCurrent() {
69     TabItem item = tabs.getItem(tabs.getSelectionIndex());
70     TableAdapter adapter = (TableAdapter) item.getData();
71     String table = adapter.getTable();
72     if (table == null) {
73       loadTable(item, null, null, true, true);
74     } else {
75       loadTable(item, null, null, true, true);
76     }
77   }
78   public void loadQuery(SQLResults results) {
79     loadTable(null, null, results, true, false);
80   }
81   public void loadTable(String table) {
82     loadTable(null, table, null, false, true);
83   }
84   public void loadTable(
85     TabItem tabItem,
86     String entity,
87     SQLResults results,
88     boolean query,
89     boolean reload) {
90     TableAdapter adapter;
91     if (tabItem == null) {
92       tabItem = new TabItem(tabs, SWT.NONE);
93       if (query) {
94         adapter = TableAdapter.createFromQuery(results);
95       } else {
96         adapter = TableAdapter.createFromTable(entity);
97       }
98       tabItem.setData(adapter);
99     } else {
100       adapter = (TableAdapter) tabItem.getData();
101     }
102
103     final TableAdapter ta = adapter;
104
105     Composite main = new Composite(tabs, SWT.NONE);
106     GridLayout layout = new GridLayout(1, false);
107     layout.horizontalSpacing = 0;
108     layout.verticalSpacing = 0;
109     main.setLayout(layout);
110
111     // load up main
112     ToolBar toolbar = new ToolBar(main, SWT.HORIZONTAL);
113     final Table table = new Table(main, SWT.FULL_SELECTION | SWT.MULTI);
114     final Label label = new Label(main, SWT.NULL);
115
116     final Action copyAction = new Action() {
117       public void run() {
118         TableItem items[] = table.getSelection();
119         StringBuffer text = new StringBuffer();
120         for (int i = 0; i < items.length; i++) {
121           int columns = table.getColumnCount();
122           for (int col = 0; col < columns; col++) {
123             text.append(items[i].getText(col));
124             text.append('\t');
125           }
126           text.append('\n');
127         }
128         clip.setContents(
129           new Object[] { text.toString()},
130           new Transfer[] { TextTransfer.getInstance()});
131       }
132     };
133     final Action selectAllAction = new Action() {
134       public void run() {
135         table.selectAll();
136       }
137     };
138
139     // load toobar
140     ToolItem toolItem = new ToolItem(toolbar, SWT.PUSH);
141     toolItem.setImage(PHPEclipseSQLPlugin.getImage("refresh.gif")); //$NON-NLS-1$
142     toolItem.setToolTipText(Messages.getString("tableview.refresh")); //$NON-NLS-1$
143     toolItem.addSelectionListener(new SelectionListener() {
144       public void widgetDefaultSelected(SelectionEvent e) {
145       }
146       public void widgetSelected(SelectionEvent e) {
147         refreshTableAction.run();
148       }
149     });
150     toolItem = new ToolItem(toolbar, SWT.PUSH);
151     toolItem.setImage(PHPEclipseSQLPlugin.getImage("copy.gif")); //$NON-NLS-1$
152     toolItem.setToolTipText(Messages.getString("tableview.copy")); //$NON-NLS-1$
153     toolItem.addSelectionListener(new SelectionListener() {
154       public void widgetDefaultSelected(SelectionEvent e) {
155       }
156       public void widgetSelected(SelectionEvent e) {
157         copyAction.run();
158       }
159     });
160     toolItem = new ToolItem(toolbar, SWT.PUSH);
161     toolItem.setImage(PHPEclipseSQLPlugin.getImage("table.gif")); //$NON-NLS-1$
162     toolItem.setToolTipText(Messages.getString("tableview.selectAll")); //$NON-NLS-1$
163     toolItem.addSelectionListener(new SelectionListener() {
164       public void widgetDefaultSelected(SelectionEvent e) {
165       }
166       public void widgetSelected(SelectionEvent e) {
167         selectAllAction.run();
168       }
169     });
170
171     ToolItem filter = new ToolItem(toolbar, SWT.PUSH);
172     filter.setImage(PHPEclipseSQLPlugin.getImage("filter.gif")); //$NON-NLS-1$
173     filter.setToolTipText(Messages.getString("tableview.filterSort")); //$NON-NLS-1$
174
175     toolItem = new ToolItem(toolbar, SWT.SEPARATOR);
176
177     final ToolItem fullMode = new ToolItem(toolbar, SWT.PUSH | SWT.CHECK);
178
179     final ToolItem previous = new ToolItem(toolbar, SWT.PUSH);
180     final ToolItem next = new ToolItem(toolbar, SWT.PUSH);
181
182     fullMode.setImage(PHPEclipseSQLPlugin.getImage("fulldata.gif"));
183     fullMode.setToolTipText(Messages.getString("tableview.showAll")); //$NON-NLS-1$
184     fullMode.setSelection(false);
185     fullMode.addSelectionListener(new SelectionListener() {
186       public void widgetDefaultSelected(SelectionEvent e) {
187       }
188       public void widgetSelected(SelectionEvent e) {
189         if (ta.getPageSize() == Integer.MAX_VALUE) {
190           ta.resetMode();
191         } else {
192           ta.fullMode();
193         }
194         ta.loadData();
195         table.removeAll();
196         for (int i = table.getColumnCount() - 1; i >= 0; i--) {
197           table.getColumn(i).dispose();
198         }
199         ta.loadTable(table);
200         label.setText(ta.getStatusString());
201         previous.setEnabled(ta.hasPreviousPage());
202         next.setEnabled(ta.hasNextPage());
203       }
204     });
205     previous.setImage(PHPEclipseSQLPlugin.getImage("previous.gif"));
206     previous.setToolTipText("Previous");
207     previous.addSelectionListener(new SelectionListener() {
208       public void widgetDefaultSelected(SelectionEvent e) {
209       }
210       public void widgetSelected(SelectionEvent e) {
211         ta.previousPage();
212         ta.loadData();
213         table.removeAll();
214         for (int i = table.getColumnCount() - 1; i >= 0; i--) {
215           table.getColumn(i).dispose();
216         }
217         ta.loadTable(table);
218         label.setText(ta.getStatusString());
219         previous.setEnabled(ta.hasPreviousPage());
220         next.setEnabled(ta.hasNextPage());
221       }
222     });
223     next.setImage(PHPEclipseSQLPlugin.getImage("next.gif"));
224     next.setToolTipText("Next");
225     next.addSelectionListener(new SelectionListener() {
226       public void widgetDefaultSelected(SelectionEvent e) {
227       }
228       public void widgetSelected(SelectionEvent e) {
229         ta.nextPage();
230         ta.loadData();
231         table.removeAll();
232         for (int i = table.getColumnCount() - 1; i >= 0; i--) {
233           table.getColumn(i).dispose();
234         }
235         ta.loadTable(table);
236         label.setText(ta.getStatusString());
237         previous.setEnabled(ta.hasPreviousPage());
238         next.setEnabled(ta.hasNextPage());
239       }
240     });
241
242     toolItem = new ToolItem(toolbar, SWT.SEPARATOR);
243
244     toolItem = new ToolItem(toolbar, SWT.PUSH);
245     toolItem.setImage(PHPEclipseSQLPlugin.getImage("close.gif")); //$NON-NLS-1$
246     toolItem.setToolTipText(Messages.getString("tableview.close")); //$NON-NLS-1$
247     toolItem.addSelectionListener(new SelectionListener() {
248       public void widgetDefaultSelected(SelectionEvent e) {
249       }
250       public void widgetSelected(SelectionEvent e) {
251         closeTableAction.run();
252       }
253     });
254
255     // load table
256     if (reload) {
257       adapter.resetOffset();
258       adapter.loadData();
259     }
260     adapter.loadTable(table);
261     String tableName = adapter.getTable();
262     if (tableName != null) {
263       tabItem.setText(tableName);
264     } else {
265       tabItem.setText(adapter.getQuery());
266     }
267
268     previous.setEnabled(adapter.hasPreviousPage());
269     next.setEnabled(adapter.hasNextPage());
270     label.setText(ta.getStatusString());
271
272     GridData gridData = new GridData();
273     gridData.horizontalAlignment = GridData.FILL;
274     gridData.verticalAlignment = GridData.FILL;
275     gridData.grabExcessHorizontalSpace = true;
276     gridData.grabExcessVerticalSpace = true;
277     table.setLayoutData(gridData);
278
279     gridData = new GridData();
280     gridData.horizontalAlignment = GridData.FILL;
281     label.setLayoutData(gridData);
282
283     // create empty table row
284     TableColumn[] columns = table.getColumns();
285     String columnNames[] = new String[columns.length];
286     for (int i = 0; i < columns.length; i++) {
287       columnNames[i] = columns[i].getText();
288     }
289     String data[] = new String[columnNames.length];
290     for (int i = 0; i < columns.length; i++) {
291       data[i] = "";
292     }
293     final TableRow emptyRow = new TableRow(ta.getTable(), columnNames, data);
294
295     filter.addSelectionListener(new SelectionListener() {
296       public void widgetDefaultSelected(SelectionEvent e) {
297       }
298       public void widgetSelected(SelectionEvent e) {
299         SortFilterPage page = new SortFilterPage("");
300         SQLRowWizard wizard = new SQLRowWizard();
301         wizard.init("Filter and Sort", page, emptyRow, ta);
302         WizardDialog dialog = new WizardDialog(getSite().getShell(), wizard);
303         dialog.open();
304       }
305     });
306
307     final Action defaultEncodingAction = new Action() {
308       public void run() {
309         ta.setEncoding(TableAdapter.DEFAULT);
310       }
311     };
312     defaultEncodingAction.setText(Messages.getString("tableview.defaultEncoding")); //$NON-NLS-1$
313     final Action UTF8EncodingAction = new Action() {
314       public void run() {
315         ta.setEncoding(TableAdapter.UTF_8);
316       }
317     };
318     UTF8EncodingAction.setText(Messages.getString("tableview.UTF8Encoding")); //$NON-NLS-1$
319     final Action UTF16EncodingAction = new Action() {
320       public void run() {
321         ta.setEncoding(TableAdapter.UTF_16);
322       }
323     };
324     UTF16EncodingAction.setText(Messages.getString("tableview.UTF16Encoding")); //$NON-NLS-1$
325
326     IMenuListener menuListener = new IMenuListener() {
327       public void menuAboutToShow(IMenuManager mgr) {
328         if (ta.getTable() != null) {
329           TableItem[] selection = table.getSelection();
330           TableColumn[] columns = table.getColumns();
331           String columnNames[] = new String[columns.length];
332           for (int i = 0; i < columns.length; i++) {
333             columnNames[i] = columns[i].getText();
334           }
335           String data[] = new String[columnNames.length];
336           if (selection != null && selection.length > 0) {
337             TableItem sel = selection[0];
338             for (int i = 0; i < columns.length; i++) {
339               data[i] = sel.getText(i);
340             }
341           } else {
342             for (int i = 0; i < columns.length; i++) {
343               data[i] = "";
344             }
345           }
346           final TableRow row = new TableRow(ta.getTable(), columnNames, data);
347           Action updateAction = new Action() {
348             public void run() {
349               UpdateRowPage page = new UpdateRowPage("");
350               SQLRowWizard wizard = new SQLRowWizard();
351               wizard.init("Update Row", page, row, ta);
352               WizardDialog dialog =
353                 new WizardDialog(getSite().getShell(), wizard);
354               dialog.open();
355             }
356           };
357           updateAction.setText(Messages.getString("tableview.update")); //$NON-NLS-1$
358           Action insertAction = new Action() {
359             public void run() {
360               InsertRowPage page = new InsertRowPage("");
361               SQLRowWizard wizard = new SQLRowWizard();
362               wizard.init("Insert Row", page, row, ta);
363               WizardDialog dialog =
364                 new WizardDialog(getSite().getShell(), wizard);
365               dialog.open();
366             }
367           };
368           insertAction.setText(Messages.getString("tableview.insert")); //$NON-NLS-1$
369           Action deleteAction = new Action() {
370             public void run() {
371               DeleteRowPage page = new DeleteRowPage("");
372               SQLRowWizard wizard = new SQLRowWizard();
373               wizard.init("Delete Row", page, row, ta);
374               WizardDialog dialog =
375                 new WizardDialog(getSite().getShell(), wizard);
376               dialog.open();
377             }
378           };
379           deleteAction.setText(Messages.getString("tableview.delete")); //$NON-NLS-1$
380
381           Action phpSelectAction = new Action() {
382             public void run() {
383               PHPSelectRowPage page = new PHPSelectRowPage("");
384               SQLRowWizard wizard = new SQLRowWizard();
385               wizard.init("PHP Select Generator", page, row, ta);
386               WizardDialog dialog =
387                 new WizardDialog(getSite().getShell(), wizard);
388               dialog.open();
389             }
390           };
391           phpSelectAction.setText(Messages.getString("tableview.phpselect")); //$NON-NLS-1$
392
393           Action phpUpdateAction = new Action() {
394             public void run() {
395               PHPUpdateRowPage page = new PHPUpdateRowPage("");
396               SQLRowWizard wizard = new SQLRowWizard();
397               wizard.init("PHP Update Generator", page, row, ta);
398               WizardDialog dialog =
399                 new WizardDialog(getSite().getShell(), wizard);
400               dialog.open();
401             }
402           };
403           phpUpdateAction.setText(Messages.getString("tableview.phpupdate")); //$NON-NLS-1$
404
405           Action phpInsertAction = new Action() {
406             public void run() {
407               PHPInsertRowPage page = new PHPInsertRowPage("");
408               SQLRowWizard wizard = new SQLRowWizard();
409               wizard.init("PHP Insert Generator", page, row, ta);
410               WizardDialog dialog =
411                 new WizardDialog(getSite().getShell(), wizard);
412               dialog.open();
413             }
414           };
415           phpInsertAction.setText(Messages.getString("tableview.phpinsert")); //$NON-NLS-1$
416
417           Action phpDeleteAction = new Action() {
418             public void run() {
419               PHPDeleteRowPage page = new PHPDeleteRowPage("");
420               SQLRowWizard wizard = new SQLRowWizard();
421               wizard.init("PHP Delete Generator", page, row, ta);
422               WizardDialog dialog =
423                 new WizardDialog(getSite().getShell(), wizard);
424               dialog.open();
425             }
426           };
427           phpDeleteAction.setText(Messages.getString("tableview.phpdelete")); //$NON-NLS-1$
428
429           mgr.add(phpSelectAction);
430           mgr.add(phpUpdateAction);
431           mgr.add(phpInsertAction);
432           mgr.add(phpDeleteAction);
433
434           mgr.add(insertAction);
435           mgr.add(updateAction);
436           mgr.add(deleteAction);
437
438         }
439         mgr.add(defaultEncodingAction);
440         mgr.add(UTF8EncodingAction);
441         mgr.add(UTF16EncodingAction);
442       }
443     };
444
445     // final setup
446     MenuManager manager = new MenuManager();
447     manager.setRemoveAllWhenShown(true);
448     Menu fTextContextMenu = manager.createContextMenu(table);
449     table.setMenu(fTextContextMenu);
450     table.setLinesVisible(true);
451     manager.addMenuListener(menuListener);
452
453     tabItem.setControl(main);
454     tabs.setSelection(tabs.indexOf(tabItem));
455   }
456
457   public void createPartControl(Composite parent) {
458     instance = this;
459     this.parent = parent;
460     initActions();
461     clip = new Clipboard(getSite().getShell().getDisplay());
462     tabs = new TabFolder(parent, SWT.NONE);
463   }
464   public void initActions() {
465     refreshTableAction = new RefreshTableAction();
466     refreshTableAction.setText(Messages.getString("tableview.refresh"));
467     refreshTableAction.setImageDescriptor(
468       PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif"));
469     refreshTableAction.init(this);
470     closeTableAction = new CloseTableAction();
471     closeTableAction.setText(Messages.getString("tableview.close"));
472     closeTableAction.setImageDescriptor(
473       PHPEclipseSQLPlugin.getImageDescriptor("close.gif"));
474     closeTableAction.init(this);
475   }
476
477   public void selectionChanged(IWorkbenchPart part, ISelection selection) {
478   }
479 }