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); } }