initial quantum version
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.quantum.sql / src / com / quantum / view / tableview / TableView.java
diff --git a/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableView.java b/archive/net.sourceforge.phpeclipse.quantum.sql/src/com/quantum/view/tableview/TableView.java
new file mode 100644 (file)
index 0000000..dc41455
--- /dev/null
@@ -0,0 +1,283 @@
+package com.quantum.view.tableview;
+
+import java.util.Vector;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.viewers.ISelection;
+import org.eclipse.swt.SWT;
+import org.eclipse.swt.events.SelectionEvent;
+import org.eclipse.swt.events.SelectionListener;
+import org.eclipse.swt.layout.GridData;
+import org.eclipse.swt.layout.GridLayout;
+import org.eclipse.swt.widgets.Composite;
+import org.eclipse.swt.widgets.Label;
+import org.eclipse.swt.widgets.Menu;
+import org.eclipse.swt.widgets.TabFolder;
+import org.eclipse.swt.widgets.TabItem;
+import org.eclipse.swt.widgets.Table;
+import org.eclipse.swt.widgets.ToolBar;
+import org.eclipse.ui.ISelectionListener;
+import org.eclipse.ui.IWorkbenchPart;
+import org.eclipse.ui.WorkbenchException;
+import org.eclipse.ui.part.ViewPart;
+
+import com.quantum.Messages;
+import com.quantum.QuantumPlugin;
+import com.quantum.extensions.ProcessServiceMembers;
+import com.quantum.model.Bookmark;
+import com.quantum.model.Entity;
+import com.quantum.model.NotConnectedException;
+import com.quantum.sql.SQLResults;
+import com.quantum.ui.dialog.ExceptionDisplayDialog;
+import com.quantum.view.LogProxy;
+
+/**
+ * The Table View. Displays tables and Queries.
+ */
+public class TableView extends ViewPart implements ISelectionListener {
+
+       private class DefaultEncodingAction extends Action {
+        private final TableAdapter ta;
+        private DefaultEncodingAction(TableAdapter ta) {
+            super();
+            this.ta = ta;
+        }
+        public void run() {
+               ta.setEncoding(TableAdapter.DEFAULT);
+        }
+    }
+    private static TableView instance = null;
+       private TabFolder tabs = null;
+       private Composite parent;
+       private Vector extensionVector;
+       /**
+        * Generic contructor
+        */
+       public TableView() {
+       }
+
+
+       public void setFocus() {
+               setQualifiedTitle();
+       }
+       
+    /**
+     * Gets the instance of the TableView.  This view can appear on multiple 
+     * perspectives, but tabs within the view are shared no matter which perspective
+     * is open.
+     * 
+     * @return the TableView instance.
+     */
+       public static TableView getInstance() {
+               return (TableView) QuantumPlugin.getDefault().getView("com.quantum.view.tableview.TableView");
+       }
+       
+       /**
+        * Close the current tab, disposing of it
+        */
+       public void closeCurrent() {
+               if (tabs == null) return;
+               
+               if (tabs.getSelectionIndex() >= 0) {
+                       try {
+                               TabItem item = tabs.getItem(tabs.getSelectionIndex());
+                               item.dispose();
+                       } catch (Throwable e) {
+                               LogProxy.getInstance().addText(LogProxy.ERROR, "Error Closing Current: " + e.toString()); //$NON-NLS-1$
+                               e.printStackTrace();
+                       }
+               } 
+               if (tabs.getItemCount() == 0) {
+                       setTitle(Messages.getString("tableview.QuantumTableViewName")); //$NON-NLS-1$
+               }
+       }
+       
+       /**
+        * Reload table or query data into the selected tab
+        */
+       public void refreshCurrent() {
+               TabItem item = tabs.getItem(tabs.getSelectionIndex());
+               TableAdapter adapter = (TableAdapter) item.getData();
+               Bookmark bookmark = adapter.getBookmark();
+               String table = adapter.getTable();
+               if (table == null) {
+                       loadTable(bookmark, item, null, null, true, true);
+               } else {
+                       loadTable(bookmark, item, null, null, true, true);
+               }
+               String title = Messages.getString("tableview.QuantumTableViewName"); //$NON-NLS-1$
+               if (bookmark != null)
+                       title = bookmark.getName() + Messages.getString("tableview.ViewNameInitialDecoration") + title + Messages.getString("tableview.ViewNameFinalDecoration"); //$NON-NLS-1$ //$NON-NLS-2$
+               setTitle(title);
+       }
+       
+    public void loadQuery(Bookmark bookmark, SQLResults results) {
+        loadTable(bookmark, null, null, results, true, false);
+    }
+       public void loadTable(Entity entity) {
+               loadTable(entity.getBookmark(), null, entity, null, false, true);
+       }
+       public void loadTable(Bookmark bookmark, TabItem tabItem, Entity entity, SQLResults results, boolean query, boolean reload) {
+        try {
+               TableAdapter adapter;
+               // If no TabItem is given we have to create a new one, with the info of the table or view.
+               if (tabItem == null) {
+                       tabItem = new TabItem(tabs, SWT.NONE);
+                       // Data is stored in a TableAdapter object
+                       if (query) {
+                               adapter = TableAdapter.createFromQuery(bookmark, results);
+                       } else {
+                               adapter = TableAdapter.createFromTable(entity);
+                       }
+                       // That is stored in the tabItem, so it won't get lost
+                       tabItem.setData(adapter);
+                       // This does not really belong here, but it'll fail if done before the creation of the
+                       // first TabItem, so it remains here till a better place found.
+                       // We set a function to change the Title of the window depending on the selected tab.
+                       tabs.addSelectionListener(new SelectionListener() {
+                               public void widgetDefaultSelected(SelectionEvent e) {
+                               }
+                               public void widgetSelected(SelectionEvent e) {
+                                       setQualifiedTitle();
+                               }
+                       });
+               } else {
+                       // If there is already a TabItem, we take its TableAdapter object
+                       adapter = (TableAdapter) tabItem.getData();
+               }
+               
+               // We create a Composite widget (main) to display our data, with a GridLayout
+               Composite main = new Composite(tabs, SWT.NONE);
+               GridLayout layout = new GridLayout(1, false);
+               layout.horizontalSpacing = 0;
+               layout.verticalSpacing = 0;
+               main.setLayout(layout);
+    
+               
+               // load widgets, the order of loading them determines the appearance in screen
+               ToolBar widgetToolBar = new ToolBar(main, SWT.HORIZONTAL);
+               // We fill up our Composite widget, the main table display, etc.
+               final Table table = new Table(main, SWT.FULL_SELECTION | SWT.MULTI);
+               final Label label = new Label(main, SWT.NULL);
+               TableViewToolBar toolBar = new TableViewToolBar(this, widgetToolBar, table, adapter, label);
+               
+       
+               // load table
+               if (reload) {
+                       adapter.resetOffset();
+                       adapter.loadData();
+               }
+               // Load the table data from the adapter into the widget
+               adapter.loadTable(table);
+               // Experimental, won't make it into 2.2
+               // final TableViewer viewer = adapter.addTableViewer(table);
+               
+               String tableName = adapter.getTable();
+               if (tableName != null) {
+                       tabItem.setText(bookmark.getName() + ":" + tableName);
+               } else {
+                       tabItem.setText(bookmark.getName() + ":" + adapter.getQuery());
+               }
+    
+               toolBar.getPrevious().setEnabled(adapter.hasPreviousPage());
+               toolBar.getNext().setEnabled(adapter.hasNextPage());
+               label.setText(adapter.getStatusString());
+               
+               GridData gridData = new GridData();
+               gridData.horizontalAlignment = GridData.FILL;
+               gridData.verticalAlignment = GridData.FILL;
+               gridData.grabExcessHorizontalSpace = true;
+               gridData.grabExcessVerticalSpace = true;
+               table.setLayoutData(gridData);
+    
+               gridData = new GridData();
+               gridData.horizontalAlignment = GridData.FILL;
+               label.setLayoutData(gridData);
+    
+               
+               toolBar.setColumns(this, adapter, table);
+               final TableAdapter ta = adapter;
+               final Action defaultEncodingAction = new DefaultEncodingAction(ta);
+               defaultEncodingAction.setText(Messages.getString("tableview.defaultEncoding")); //$NON-NLS-1$
+               final Action UTF8EncodingAction = new Action() {
+                       public void run() {
+                               ta.setEncoding(TableAdapter.UTF_8);
+                       }
+               };
+               UTF8EncodingAction.setText(Messages.getString("tableview.UTF8Encoding")); //$NON-NLS-1$
+               final Action UTF16EncodingAction = new Action() {
+                       public void run() {
+                               ta.setEncoding(TableAdapter.UTF_16);
+                       }
+               };
+               UTF16EncodingAction.setText(Messages.getString("tableview.UTF16Encoding")); //$NON-NLS-1$
+    
+               IMenuListener menuListener = new TableViewMenuListener(this, table, UTF16EncodingAction, ta, defaultEncodingAction, UTF8EncodingAction, extensionVector);
+    
+               // final setup
+               MenuManager manager = new MenuManager();
+               manager.setRemoveAllWhenShown(true);
+               Menu fTextContextMenu = manager.createContextMenu(table);
+               table.setMenu(fTextContextMenu);
+               table.setLinesVisible(true);
+               manager.addMenuListener(menuListener);
+               
+               tabItem.setControl(main);
+               tabs.setSelection(tabs.indexOf(tabItem));
+    
+               setQualifiedTitle();            
+        } catch (NotConnectedException e) {
+            e.printStackTrace();
+            handleException(e);
+        } catch (Exception e) {
+            e.printStackTrace();
+        }
+       }
+    
+    protected void handleException(Exception e) {
+        ExceptionDisplayDialog.openError(getSite().getShell(), null, null, e);
+    }
+
+       /**
+        * @return
+        */
+       /**
+        * Sets the title of the window to the text of the selected tab
+        */
+       private void setQualifiedTitle() {
+               if (tabs.getSelectionIndex() < 0) return;
+               TabItem item = tabs.getItem(tabs.getSelectionIndex());
+               String defTitle = Messages.getString("tableview.QuantumTableViewName"); //$NON-NLS-1$
+               String title = item.getText();
+               int ind = title.indexOf(Messages.getString("tableview.BookmarkSeparator")); //$NON-NLS-1$
+               if (ind > 0) defTitle = title.substring(0,ind) 
+                                                               + Messages.getString("tableview.ViewNameInitialDecoration")   //$NON-NLS-1$
+                                                               + defTitle 
+                                                               + Messages.getString("tableview.ViewNameFinalDecoration"); //$NON-NLS-1$
+               setTitle(defTitle);
+       }
+
+       public void createPartControl(Composite parent) {
+               instance = this;
+               this.parent = parent;
+               initActions();
+               tabs = new TabFolder(parent, SWT.NONE);
+       }
+       
+       public void initActions() {
+               extensionVector = new Vector();
+               try {
+                       ProcessServiceMembers.process(this, extensionVector);
+               } catch (WorkbenchException e) {
+                       e.printStackTrace();
+               }
+
+       }
+
+       public void selectionChanged(IWorkbenchPart part, ISelection selection) {
+
+       }
+}
\ No newline at end of file