From 9e30e77c82507275782755797eaaaf002cc6fa01 Mon Sep 17 00:00:00 2001 From: gerdwagner Date: Sun, 27 Aug 2023 12:41:28 +0200 Subject: [PATCH] Multiple catalogs choice (GitHub issue 17) finished: https://github.com/squirrel-sql-client/squirrel-sql-code/issues/17 For databases that support catalogs SQuirreL now allows to specify additional catalogs to load. See the new toolbar button with the three dots icon next to the catalogs combo box at the upper left of a Session panel. --- sql12/core/doc/changes.txt | 7 +++- .../AdditionalCatalogsController.java | 33 +++++++++++++++--- .../catalogspanel/AdditionalCatalogsDlg.java | 24 ++++++++++++- .../session/catalogspanel/CatalogsPanel.java | 11 ++++++ .../CatalogsPanelController.java | 10 ++++++ .../catalogspanel/I18NStrings.properties | 5 ++- .../client/resources/SquirrelResources.java | 1 + .../resources/images/threedots_checked.png | Bin 0 -> 577 bytes .../client/resources/squirrel.properties | 1 + 9 files changed, 85 insertions(+), 7 deletions(-) create mode 100644 sql12/core/src/net/sourceforge/squirrel_sql/client/resources/images/threedots_checked.png diff --git a/sql12/core/doc/changes.txt b/sql12/core/doc/changes.txt index 98d77e04a..feba3ff8d 100755 --- a/sql12/core/doc/changes.txt +++ b/sql12/core/doc/changes.txt @@ -6,6 +6,11 @@ Not yet released, available in our GIT repository, snapshots and future releases Enhancements: +https://github.com/squirrel-sql-client/squirrel-sql-code/issues/17 + For databases that support catalogs SQuirreL now allows to specify additional catalogs to load. + See the new toolbar button with the three dots icon next to the + catalogs combo box at the upper left of a Session panel. + Hibernate Plugin: Now supports Hibernate 6 and Jakarta Persistence. Query connection pool: @@ -459,7 +464,7 @@ https://github.com/squirrel-sql-client/squirrel-sql-code/issues/1 For Oracle databases right mouse click on table in Object tree --> Scripts --> Create Table Script scripted columns of type number as decimal. -#1508 MS SQL Server: When the catalog was switched by SQuirreL's catalogs combobox +#1508 MS SQL Server: When the catalog was switched by SQuirreL's catalogs combo box the subsequent Object tree reload didn't work. The reason is a bug of the MSSQL JDBC driver (https://github.com/microsoft/mssql-jdbc). The logged message of the bug is: diff --git a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsController.java b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsController.java index 64bff5d8b..d57027142 100644 --- a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsController.java +++ b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsController.java @@ -11,8 +11,6 @@ import java.awt.event.MouseEvent; import java.sql.SQLException; import java.util.Collections; -import java.util.List; -import java.util.stream.Collectors; public class AdditionalCatalogsController { @@ -31,7 +29,10 @@ public AdditionalCatalogsController(ISession session) AliasCatalogLoadModelJsonBean bean = Main.getApplication().getCatalogLoadModelManager().getAliasCatalogLoadModelJsonBean(session.getAlias()); DefaultListModel listModel = new DefaultListModel<>(); - listModel.addAll(List.of(catalogs).stream().map(c -> createCatalogChecked(c, bean)).collect(Collectors.toList())); + for (String catalog : catalogs) + { + listModel.addElement(createCatalogChecked(catalog, bean)); + } _dlg.chkLstCatalogs.setModel(listModel); @@ -47,6 +48,9 @@ public void mouseClicked(MouseEvent event) } }); + + _dlg.btnSelectAll.addActionListener(e -> onSelectAll()); + _dlg.btnInvertSelection.addActionListener(e -> onInvertSelection()); _dlg.btnOk.addActionListener(e -> onOk(session)); GUIUtils.initLocation(_dlg, 400, 600); @@ -62,10 +66,31 @@ public void mouseClicked(MouseEvent event) } } + private void onInvertSelection() + { + for (int i = 0; i < _dlg.chkLstCatalogs.getModel().getSize(); i++) + { + CatalogChecked catalogChecked = _dlg.chkLstCatalogs.getModel().getElementAt(i); + catalogChecked.setChecked(!catalogChecked.isChecked()); + } + _dlg.chkLstCatalogs.repaint(); + } + + private void onSelectAll() + { + for (int i = 0; i < _dlg.chkLstCatalogs.getModel().getSize(); i++) + { + _dlg.chkLstCatalogs.getModel().getElementAt(i).setChecked(true); + } + _dlg.chkLstCatalogs.repaint(); + } + private void onMouseClicked(MouseEvent event) { int index = _dlg.chkLstCatalogs.locationToIndex(event.getPoint()); - if (index >= 0 && index < _dlg.chkLstCatalogs.getModel().getSize()) + if ( index >= 0 + && index < _dlg.chkLstCatalogs.getModel().getSize() + && _dlg.chkLstCatalogs.getCellBounds(index, index).contains(event.getPoint())) { CatalogChecked catalogChecked = _dlg.chkLstCatalogs.getModel().getElementAt(index); catalogChecked.setChecked(!catalogChecked.isChecked()); diff --git a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsDlg.java b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsDlg.java index f04a6d1d5..34ebbf338 100644 --- a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsDlg.java +++ b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/AdditionalCatalogsDlg.java @@ -13,6 +13,8 @@ public class AdditionalCatalogsDlg extends JDialog final JList chkLstCatalogs; final JButton btnOk; + JButton btnSelectAll; + JButton btnInvertSelection; public AdditionalCatalogsDlg(Window owner) { @@ -31,8 +33,28 @@ public AdditionalCatalogsDlg(Window owner) chkLstCatalogs = new JList<>(); getContentPane().add(new JScrollPane(chkLstCatalogs), gbc); - gbc = new GridBagConstraints(0,2,1,1,0,0,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(5,5,5,5),0,0 ); + gbc = new GridBagConstraints(0,2,1,1,0,0,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(3,5,5,5),0,0 ); + getContentPane().add(createListControlButtonsPanel(), gbc); + + gbc = new GridBagConstraints(0,3,1,1,0,0,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(10,5,5,5),0,0 ); btnOk = new JButton(s_stringMgr.getString("AdditionalCatalogsDlg.ok")); getContentPane().add(btnOk, gbc); } + + private JPanel createListControlButtonsPanel() + { + JPanel ret = new JPanel(new GridBagLayout()); + + GridBagConstraints gbc; + + gbc = new GridBagConstraints(0,0,1,1,0,0,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0,0,0,0),0,0 ); + btnSelectAll = new JButton(s_stringMgr.getString("AdditionalCatalogsDlg.selectAll")); + ret.add(btnSelectAll, gbc); + + gbc = new GridBagConstraints(1,0,1,1,0,0,GridBagConstraints.NORTHWEST, GridBagConstraints.NONE, new Insets(0,5,0,0),0,0 ); + btnInvertSelection = new JButton(s_stringMgr.getString("AdditionalCatalogsDlg.invertSelection")); + ret.add(btnInvertSelection, gbc); + + return ret; + } } diff --git a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanel.java b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanel.java index eacececfe..b0b2ba73e 100644 --- a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanel.java +++ b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanel.java @@ -48,4 +48,15 @@ public void initSizeAndBackgroundAfterCatalogsComboFilled() GUIUtils.inheritBackground(this); } + public void setHasAdditionalCatalogs(boolean hasAdditionalCatalogs) + { + if(hasAdditionalCatalogs) + { + btnConfiCatalogLoading.setIcon(Main.getApplication().getResources().getIcon(SquirrelResources.IImageNames.THREE_DOTS_CHECKED)); + } + else + { + btnConfiCatalogLoading.setIcon(Main.getApplication().getResources().getIcon(SquirrelResources.IImageNames.THREE_DOTS)); + } + } } diff --git a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanelController.java b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanelController.java index 86aa6e999..b790d7c44 100644 --- a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanelController.java +++ b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/CatalogsPanelController.java @@ -1,5 +1,6 @@ package net.sourceforge.squirrel_sql.client.gui.session.catalogspanel; +import net.sourceforge.squirrel_sql.client.Main; import net.sourceforge.squirrel_sql.client.session.IObjectTreeAPI; import net.sourceforge.squirrel_sql.client.session.ISession; import net.sourceforge.squirrel_sql.client.session.mainpanel.objecttree.ObjectTreeNode; @@ -43,6 +44,8 @@ public CatalogsPanelController(ISession session, JComponent parentComponent) _session = session; _parentComponent = parentComponent; _catalogsPanel = new CatalogsPanel(); + updateAdditionalCatalogsIcon(); + _catalogsComboListener = e -> onCatalogSelected(); _connectionPropetryListener = evt -> GUIUtils.processOnSwingEventThread(() -> onConnectionPropertyChanged(evt)); @@ -50,6 +53,12 @@ public CatalogsPanelController(ISession session, JComponent parentComponent) init(); } + private void updateAdditionalCatalogsIcon() + { + boolean hasAdditionalCatalogs = !Main.getApplication().getCatalogLoadModelManager().getAliasCatalogLoadModelJsonBean(_session.getAlias()).getAdditionalUserChosenCatalogs().isEmpty(); + _catalogsPanel.setHasAdditionalCatalogs(hasAdditionalCatalogs); + } + private void init() { try @@ -95,6 +104,7 @@ private void onConfigureCatalogLoading() { if(new AdditionalCatalogsController(_session).isOk()) { + updateAdditionalCatalogsIcon(); refreshSchemaAndTree(); } } diff --git a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/I18NStrings.properties b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/I18NStrings.properties index 56c8382c6..d9f71b620 100644 --- a/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/I18NStrings.properties +++ b/sql12/core/src/net/sourceforge/squirrel_sql/client/gui/session/catalogspanel/I18NStrings.properties @@ -10,4 +10,7 @@ AdditionalCatalogsDlg.explain=By default, SQuirreL does not specify catalogs whe (The current catalog can be switched by the catalogs drop down). \ Here users can choose catalogs that should be loaded additionally to SQuirreL's default schema data loading. -AdditionalCatalogsDlg.ok=Ok \ No newline at end of file +AdditionalCatalogsDlg.ok=Ok + +AdditionalCatalogsDlg.selectAll=Select all +AdditionalCatalogsDlg.invertSelection=Invert selection diff --git a/sql12/core/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java b/sql12/core/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java index 82845a389..b98c8bd9b 100755 --- a/sql12/core/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java +++ b/sql12/core/src/net/sourceforge/squirrel_sql/client/resources/SquirrelResources.java @@ -188,6 +188,7 @@ public interface IImageNames String EDIT_RED_DOT = "editRedDot"; String THREE_DOTS = "threedots"; + String THREE_DOTS_CHECKED = "threedots_checked"; String DELETE = "delete"; diff --git a/sql12/core/src/net/sourceforge/squirrel_sql/client/resources/images/threedots_checked.png b/sql12/core/src/net/sourceforge/squirrel_sql/client/resources/images/threedots_checked.png new file mode 100644 index 0000000000000000000000000000000000000000..b2af82192fd93fff272072477754cd2bfe430c2e GIT binary patch literal 577 zcmV-H0>1r;P)KQ|lMmasC-+Py?DvNeM=np#_AWs*axRWCjW zK}bFM61_=+E3=iEF^tMI-O#7C{;2cb?cQGx!N^jo_s-+z zaK7h!&lmm|0D(Y2*lac-%d!XtgW^xD>ezO1?Ln=0I(lD70J1ELcsve(qA0{-F=;tw zFE`<9*oLd5kbz-X@h_L|JY=P=-p>Br8+r0-nhM9!9|C^AA6b@B6a~NE&r&QfcwM+_ z3)r`-kT>I>FsVD(Ziu0=4ys&5s44`)6SSOtA;C`;hR1rvOyYz1b+|jy zCL(Wd;V#WbH!}1O#X03^&h{mM&c4fHI@v?wONvUzX}qp;5J?}^C!R!SY~&~@k?oW$d7#I!P(o|mmuS8hg4e*+_r@yYcx9lyEA zw$ylatEjIj<8x{TRa?MnDd5qwDKff2O~n@G(@FAHTX`6spy6N(W%k311s+Gc#GSro zyzXM=v;>AQFy)xhGXg0`#k|T)^xZ7>qLcXcp8xIX5