--- /dev/null
+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);
+ }
+}