SQL Plugin copied from Quantum plugin and refactored for PHPEclipse
[phpeclipse.git] / archive / net.sourceforge.phpeclipse.sql / src / net / sourceforge / phpdt / sql / view / BookmarkView.java
diff --git a/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkView.java b/archive/net.sourceforge.phpeclipse.sql/src/net/sourceforge/phpdt/sql/view/BookmarkView.java
new file mode 100644 (file)
index 0000000..15a2d03
--- /dev/null
@@ -0,0 +1,367 @@
+package net.sourceforge.phpdt.sql.view;
+
+import java.util.Vector;
+
+import net.sourceforge.phpdt.sql.PHPEclipseSQLPlugin;
+
+import org.eclipse.jface.action.Action;
+import org.eclipse.jface.action.IMenuListener;
+import org.eclipse.jface.action.IMenuManager;
+import org.eclipse.jface.action.IToolBarManager;
+import org.eclipse.jface.action.MenuManager;
+import org.eclipse.jface.action.Separator;
+import org.eclipse.jface.viewers.DoubleClickEvent;
+import org.eclipse.jface.viewers.IDoubleClickListener;
+import org.eclipse.jface.viewers.StructuredSelection;
+import org.eclipse.jface.viewers.TreeViewer;
+import org.eclipse.swt.SWT;
+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.ui.IActionBars;
+import org.eclipse.ui.IWorkbenchActionConstants;
+import org.eclipse.ui.part.ViewPart;
+
+import net.sourceforge.phpdt.sql.actions.ConnectAction;
+import net.sourceforge.phpdt.sql.actions.DeleteBookmarkAction;
+import net.sourceforge.phpdt.sql.actions.DisconnectAction;
+import net.sourceforge.phpdt.sql.actions.EditBookmarkAction;
+import net.sourceforge.phpdt.sql.actions.NewBookmarkAction;
+import net.sourceforge.phpdt.sql.actions.NextSequenceAction;
+import net.sourceforge.phpdt.sql.actions.RefreshBookmarkAction;
+import net.sourceforge.phpdt.sql.actions.ViewTableAction;
+import net.sourceforge.phpdt.sql.actions.ViewTableDetailsAction;
+import net.sourceforge.phpdt.sql.adapters.FeatureNotSupported;
+import net.sourceforge.phpdt.sql.adapters.NoSuchAdapterException;
+import net.sourceforge.phpdt.sql.sql.MultiSQLServer;
+import net.sourceforge.phpdt.sql.sql.SQLHelper;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkContentProvider;
+import net.sourceforge.phpdt.sql.view.bookmark.BookmarkNode;
+import net.sourceforge.phpdt.sql.view.bookmark.Root;
+import net.sourceforge.phpdt.sql.view.bookmark.SequenceNode;
+import net.sourceforge.phpdt.sql.view.bookmark.TableNode;
+import net.sourceforge.phpdt.sql.view.bookmark.ViewNode;
+
+public class BookmarkView extends ViewPart {
+  private ConnectAction connectAction;
+  private DisconnectAction disconnectAction;
+  private NewBookmarkAction newBookmarkAction;
+  private EditBookmarkAction editBookmarkAction;
+  private DeleteBookmarkAction deleteBookmarkAction;
+  private ViewTableAction viewTableAction;
+  private RefreshBookmarkAction refreshBookmarkAction;
+  private ViewTableDetailsAction viewTableDetailsAction;
+  private NextSequenceAction nextSequenceAction;
+  private Action enableTableSizes;
+  private Action enableTableColumns;
+  private static BookmarkView instance = null;
+  private TreeViewer treeViewer;
+  private BookmarkContentProvider provider =
+    BookmarkContentProvider.getInstance();
+  private Label status;
+  private SQLHelper helper = new SQLHelper();
+  private boolean showTableSizes = false;
+  private boolean showTableColumns = false;
+  private BookmarkNode clipboard;
+  public synchronized static BookmarkView getInstance() {
+    return instance;
+  }
+  public Object getCurrent() {
+    return ((StructuredSelection) treeViewer.getSelection()).getFirstElement();
+  }
+  public BookmarkNode getCurrentBookmark() {
+    return (BookmarkNode) getCurrent();
+  }
+  public TableNode getCurrentTable() {
+    return (TableNode) getCurrent();
+  }
+  public void deleteCurrent() {
+    provider.removeBookmark(getCurrentBookmark());
+    treeViewer.refresh();
+  }
+  public void refreshBookmarkData() {
+    BookmarkNode current =
+      (BookmarkNode) MultiSQLServer.getInstance().getConnected();
+    BookmarkContentProvider provider = BookmarkContentProvider.getInstance();
+    LogProxy log = LogProxy.getInstance();
+    if (current != null) {
+      try {
+        Vector children = new Vector();
+        setStatus(Messages.getString("bookmarkview.retrieveTableData")); //$NON-NLS-1$
+        Vector tables = new Vector();
+        try {
+          tables = helper.getTableList(current);
+          if (showTableSizes || showTableColumns) {
+            for (int i = 0; i < tables.size(); i++) {
+              TableNode table = (TableNode) tables.elementAt(i);
+              String name =
+                SQLHelper.getFullTableName(current, table.getName());
+              if (showTableSizes) {
+                int size = helper.getSize(name);
+                table.setSize(size);
+              }
+              if (showTableColumns) {
+                Vector metaData = helper.getMetaData(table, name);
+                table.setMetadata(metaData);
+              }
+            }
+          }
+        } catch (FeatureNotSupported e) {
+          setStatus(Messages.getString("bookmarkview.noTables")); //$NON-NLS-1$
+        }
+        setStatus(Messages.getString("bookmarkview.retrieveViewData")); //$NON-NLS-1$
+        Vector views = new Vector();
+        try {
+          views = helper.getViewList(current);
+          if (showTableSizes || showTableColumns) {
+            for (int i = 0; i < views.size(); i++) {
+              ViewNode view = (ViewNode) views.elementAt(i);
+              String name = SQLHelper.getFullTableName(current, view.getName());
+              if (showTableSizes) {
+                int size = helper.getSize(name);
+                view.setSize(size);
+              }
+              if (showTableColumns) {
+                Vector metaData = helper.getMetaData(view, name);
+                view.setMetadata(metaData);
+              }
+            }
+          }
+        } catch (FeatureNotSupported e) {
+          setStatus(Messages.getString("bookmarkview.noViews")); //$NON-NLS-1$
+        }
+        children.addAll(tables);
+        children.addAll(views);
+        setStatus(Messages.getString("bookmarkview.retrieveSeqData")); //$NON-NLS-1$
+        try {
+          children.addAll(helper.getSequenceList(current));
+        } catch (FeatureNotSupported e) {
+          setStatus(Messages.getString("bookmarkview.noSequences")); //$NON-NLS-1$
+        }
+        provider.setChildren(current, children);
+        BookmarkView.getInstance().refresh();
+        setStatus(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
+      } catch (NoSuchAdapterException e) {
+        setStatus(Messages.getString("bookmarkview.metaDataError")); //$NON-NLS-1$
+        log.addText(SQLLogView.ERROR, "Error occurred: " + e.toString()); //$NON-NLS-1$
+        e.printStackTrace();
+      }
+    }
+  }
+  public void expandCurrent(BookmarkNode node) {
+    treeViewer.setExpandedState(node, true);
+    treeViewer.refresh(node, false);
+  }
+  public void refresh() {
+    treeViewer.refresh();
+  }
+  public void disconnect() {
+    MultiSQLServer server = MultiSQLServer.getInstance();
+    BookmarkNode current = (BookmarkNode) server.getConnected();
+    if (current != null) {
+      setStatus(Messages.getString("bookmarkview.disconnect") + current.getName()); //$NON-NLS-1$
+      MultiSQLServer.getInstance().disconnect(current);
+      BookmarkContentProvider provider = BookmarkContentProvider.getInstance();
+      provider.setChildren(current, new Vector());
+      BookmarkView.getInstance().refresh();
+      setStatus(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
+    }
+  }
+  public void createPartControl(org.eclipse.swt.widgets.Composite parent) {
+    instance = this;
+    initActions();
+    Composite main = new Composite(parent, SWT.NONE);
+    GridLayout layout = new GridLayout(1, false);
+    layout.horizontalSpacing = 0;
+    layout.verticalSpacing = 0;
+    main.setLayout(layout);
+
+    enableTableSizes = new Action() {
+      public void run() {
+        showTableSizes = enableTableSizes.isChecked();
+        refreshBookmarkData();
+      }
+    };
+    enableTableSizes.setText("Show Table Sizes");
+    enableTableSizes.setChecked(false);
+
+    enableTableColumns = new Action() {
+      public void run() {
+        showTableColumns = enableTableColumns.isChecked();
+        refreshBookmarkData();
+      }
+    };
+    enableTableColumns.setText("Show Table Column Data");
+    enableTableColumns.setChecked(false);
+
+    IActionBars actionBars = getViewSite().getActionBars();
+    actionBars.getMenuManager().add(enableTableSizes);
+    actionBars.getMenuManager().add(enableTableColumns);
+
+    treeViewer = new TreeViewer(main);
+    treeViewer.setContentProvider(provider);
+    treeViewer.setLabelProvider(new BookmarkLabelProvider());
+    treeViewer.setInput(Root.ROOT);
+    MenuManager manager = new MenuManager();
+    manager.setRemoveAllWhenShown(true);
+    Menu fTextContextMenu = manager.createContextMenu(treeViewer.getControl());
+    treeViewer.getControl().setMenu(fTextContextMenu);
+    treeViewer.addDoubleClickListener(new IDoubleClickListener() {
+      public void doubleClick(DoubleClickEvent event) {
+        Object sel = getCurrent();
+        if (sel instanceof BookmarkNode) {
+          BookmarkNode node = (BookmarkNode) sel;
+          MultiSQLServer server = MultiSQLServer.getInstance();
+          if (server.getConnected() == null
+            || !node.equals(server.getConnected())) {
+            connectAction.run();
+          }
+        } else if (sel instanceof TableNode) {
+          viewTableAction.run();
+        } else if (sel instanceof ViewNode) {
+          viewTableAction.run();
+        }
+      }
+    });
+    manager.addMenuListener(new IMenuListener() {
+      public void menuAboutToShow(IMenuManager mgr) {
+        Object sel = getCurrent();
+        if (sel instanceof BookmarkNode) {
+          BookmarkNode node = (BookmarkNode) sel;
+          MultiSQLServer server = MultiSQLServer.getInstance();
+          boolean connected = false;
+          if (server.getConnected() != null
+            && node.equals(server.getConnected())) {
+            connected = true;
+          } else {
+            connected = false;
+          }
+          if (connected) {
+            mgr.add(disconnectAction);
+          } else {
+            mgr.add(connectAction);
+          }
+          mgr.add(new Separator());
+          mgr.add(newBookmarkAction);
+          mgr.add(editBookmarkAction);
+          mgr.add(deleteBookmarkAction);
+          mgr.add(new Separator());
+          mgr.add(copyAction);
+          copyAction.setText("Copy");
+          copyAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("copy.gif")); //$NON-NLS-1$
+          mgr.add(pasteAction);
+          pasteAction.setText("Paste");
+          pasteAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("paste.gif")); //$NON-NLS-1$
+          if (connected) {
+            mgr.add(new Separator());
+            mgr.add(refreshBookmarkAction);
+          }
+        } else if (sel instanceof TableNode || sel instanceof ViewNode) {
+          mgr.add(viewTableAction);
+          mgr.add(viewTableDetailsAction);
+          mgr.add(new Separator());
+          mgr.add(newBookmarkAction);
+        } else if (sel instanceof SequenceNode) {
+          mgr.add(nextSequenceAction);
+          mgr.add(new Separator());
+          mgr.add(newBookmarkAction);
+        } else {
+          mgr.add(newBookmarkAction);
+        }
+      }
+    });
+    GridData gridData = new GridData();
+    gridData.horizontalAlignment = GridData.FILL;
+    gridData.verticalAlignment = GridData.FILL;
+    gridData.grabExcessHorizontalSpace = true;
+    gridData.grabExcessVerticalSpace = true;
+    treeViewer.getControl().setLayoutData(gridData);
+    status = new Label(main, SWT.NONE);
+    gridData = new GridData();
+    gridData.horizontalAlignment = GridData.FILL;
+    gridData.grabExcessHorizontalSpace = true;
+    status.setLayoutData(gridData);
+
+    IActionBars bars = getViewSite().getActionBars();
+    bars.setGlobalActionHandler(IWorkbenchActionConstants.COPY, copyAction);
+    bars.setGlobalActionHandler(IWorkbenchActionConstants.PASTE, pasteAction);
+    bars.setGlobalActionHandler(
+      IWorkbenchActionConstants.DELETE,
+      deleteBookmarkAction);
+
+    IToolBarManager toolBar = getViewSite().getActionBars().getToolBarManager();
+    toolBar.add(newBookmarkAction);
+
+    status.setText(Messages.getString("bookmarkview.done")); //$NON-NLS-1$
+  }
+  public void initActions() {
+    connectAction = new ConnectAction();
+    connectAction.setText(Messages.getString("bookmarkview.connect")); //$NON-NLS-1$
+    connectAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif")); //$NON-NLS-1$
+    connectAction.init(this);
+    disconnectAction = new DisconnectAction();
+    disconnectAction.setText(Messages.getString("bookmarkview.disconnect")); //$NON-NLS-1$
+    disconnectAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("stop.gif")); //$NON-NLS-1$
+    disconnectAction.init(this);
+    newBookmarkAction = new NewBookmarkAction();
+    newBookmarkAction.setText(Messages.getString("bookmarkview.newBookmark")); //$NON-NLS-1$
+    newBookmarkAction.setToolTipText(
+      Messages.getString("bookmarkview.newBookmark"));
+    newBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("bookmarks.gif")); //$NON-NLS-1$
+    newBookmarkAction.init(this);
+    editBookmarkAction = new EditBookmarkAction();
+    editBookmarkAction.setText(Messages.getString("bookmarkview.editBookmark")); //$NON-NLS-1$
+    editBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("edit.gif")); //$NON-NLS-1$
+    editBookmarkAction.init(this);
+    deleteBookmarkAction = new DeleteBookmarkAction();
+    deleteBookmarkAction.setText(Messages.getString("bookmarkview.deleteBookmark")); //$NON-NLS-1$
+    deleteBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("delete.gif")); //$NON-NLS-1$
+    deleteBookmarkAction.init(this);
+    refreshBookmarkAction = new RefreshBookmarkAction();
+    refreshBookmarkAction.setText(Messages.getString("bookmarkview.refresh")); //$NON-NLS-1$
+    refreshBookmarkAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("refresh.gif")); //$NON-NLS-1$
+    refreshBookmarkAction.init(this);
+    viewTableAction = new ViewTableAction();
+    viewTableAction.setText(Messages.getString("bookmarkview.viewTable")); //$NON-NLS-1$
+    viewTableAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+    viewTableAction.init(this);
+    viewTableDetailsAction = new ViewTableDetailsAction();
+    viewTableDetailsAction.setText(Messages.getString("bookmarkview.viewTableDetails")); //$NON-NLS-1$
+    viewTableDetailsAction.setImageDescriptor(PHPEclipseSQLPlugin.getImageDescriptor("table.gif")); //$NON-NLS-1$
+    viewTableDetailsAction.init(this);
+    nextSequenceAction = new NextSequenceAction();
+    nextSequenceAction.setText(Messages.getString("bookmarkview.nextSequence"));
+    nextSequenceAction.setImageDescriptor(
+      PHPEclipseSQLPlugin.getImageDescriptor("table.gif"));
+    nextSequenceAction.init(this);
+  }
+  public void setFocus() {
+  }
+  private Action copyAction = new Action() {
+    public void run() {
+      Object sel = getCurrent();
+      if (sel instanceof BookmarkNode) {
+        clipboard = (BookmarkNode) sel;
+      }
+    }
+  };
+  private Action pasteAction = new Action() {
+    public void run() {
+      if (clipboard != null) {
+        BookmarkNode node = new BookmarkNode(clipboard);
+        node.setName("Copy of " + node.getName());
+        provider.addBookmark(node);
+        refresh();
+      }
+    }
+  };
+  public void addNewBookmark(BookmarkNode bookmark) {
+    provider.addBookmark(bookmark);
+    treeViewer.refresh();
+  }
+  public void setStatus(String text) {
+    status.setText(text);
+  }
+}