package net.sourceforge.sqlexplorer.sqleditor.actions; import java.sql.SQLException; import net.sourceforge.sqlexplorer.Messages; import net.sourceforge.sqlexplorer.dbproduct.MetaDataSession; import net.sourceforge.sqlexplorer.dbproduct.SQLConnection; import net.sourceforge.sqlexplorer.dbproduct.User; import net.sourceforge.sqlexplorer.plugin.SQLExplorerPlugin; import net.sourceforge.sqlexplorer.plugin.editors.SwitchableSessionEditor; import org.eclipse.jface.action.ControlContribution; import org.eclipse.swt.SWT; import org.eclipse.swt.events.SelectionAdapter; import org.eclipse.swt.events.SelectionEvent; import org.eclipse.swt.widgets.Combo; import org.eclipse.swt.widgets.Composite; import org.eclipse.swt.widgets.Control; public class SQLEditorCatalogSwitcher extends ControlContribution { private SwitchableSessionEditor _editor; private Combo _catalogCombo; /** * @param editor SQLEditor to which this catalog switcher belongs */ public SQLEditorCatalogSwitcher(SwitchableSessionEditor editor) { super("net.sourceforge.sqlexplorer.catalogswitcher"); _editor = editor; } protected Control createControl(Composite parent) { _catalogCombo = new Combo(parent, SWT.READ_ONLY); _catalogCombo.setToolTipText(Messages.getString("SQLEditor.Actions.ChooseCatalog.ToolTip")); _catalogCombo.setSize(200, _catalogCombo.getSize().y); _catalogCombo.addSelectionListener(new SelectionAdapter() { public void widgetSelected(SelectionEvent arg0) { int selIndex = _catalogCombo.getSelectionIndex(); String newCat = _catalogCombo.getItem(selIndex); if (_editor.getSession() != null) { try { _editor.getSession().setCatalog(newCat); } catch (Exception e1) { SQLExplorerPlugin.error("Error changing catalog", e1); } } } }); _catalogCombo.add(""); if (_editor.getSession() != null) { try { String[] catalogs = getMetaDataSession().getCatalogs(); User user = _editor.getSession().getUser(); // Get the connection directly from the user because the session may be busy with its one one SQLConnection connection = user.getConnection(); try { String currentCatalog = connection.getCatalog(); for (int i = 0; i < catalogs.length; i++) { _catalogCombo.add(catalogs[i]); if (currentCatalog.equals(catalogs[i])) { _catalogCombo.select(_catalogCombo.getItemCount() - 1); } } }finally { if(connection != null) user.releaseConnection(connection); } } catch(SQLException e) { SQLExplorerPlugin.error(e); } } return _catalogCombo; } private MetaDataSession getMetaDataSession() { return _editor.getSession().getUser().getMetaDataSession(); } }