From 021516ae7fc50065db321afd2eaeb1ed7f7c868a Mon Sep 17 00:00:00 2001 From: Ainur <59531286+yagudin10@users.noreply.github.com> Date: Mon, 8 Jul 2024 16:06:15 +0200 Subject: [PATCH] CB-3487 filter applicable drivers fix (#2758) Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com> --- .../src/io/cloudbeaver/WebServiceUtils.java | 11 +++++++++++ .../src/io/cloudbeaver/server/CBPlatform.java | 10 ++-------- .../service/core/impl/WebServiceCore.java | 11 ++++------- .../navigator/impl/WebServiceNavigator.java | 17 ++++++++--------- 4 files changed, 25 insertions(+), 24 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java index f87931b036..11793023a5 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java @@ -27,6 +27,7 @@ import io.cloudbeaver.registry.WebAuthProviderDescriptor; import io.cloudbeaver.registry.WebAuthProviderRegistry; import io.cloudbeaver.server.CBAppConfig; import io.cloudbeaver.server.CBApplication; +import io.cloudbeaver.server.CBPlatform; import io.cloudbeaver.utils.WebAppUtils; import io.cloudbeaver.utils.WebCommonUtils; import io.cloudbeaver.utils.WebDataSourceUtils; @@ -57,6 +58,7 @@ import org.jkiss.utils.CommonUtils; import java.io.InputStream; import java.util.*; +import java.util.stream.Collectors; /** * Various constants @@ -351,4 +353,13 @@ public class WebServiceUtils extends WebCommonUtils { return result; } + /** + * Returns set of applicable ids of drivers. + */ + @NotNull + public static Set getApplicableDriversIds() { + return CBPlatform.getInstance().getApplicableDrivers().stream() + .map(DBPDriver::getId) + .collect(Collectors.toSet()); + } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java index 5054d6b275..f0e656e645 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBPlatform.java @@ -34,7 +34,6 @@ import org.jkiss.dbeaver.model.DBFileController; import org.jkiss.dbeaver.model.app.DBACertificateStorage; import org.jkiss.dbeaver.model.app.DBPWorkspace; import org.jkiss.dbeaver.model.connection.DBPDataSourceProviderDescriptor; -import org.jkiss.dbeaver.model.connection.DBPDataSourceProviderRegistry; import org.jkiss.dbeaver.model.connection.DBPDriver; import org.jkiss.dbeaver.model.connection.DBPDriverLibrary; import org.jkiss.dbeaver.model.impl.app.DefaultCertificateStorage; @@ -56,7 +55,8 @@ import org.jkiss.utils.IOUtils; import java.io.IOException; import java.nio.file.Files; import java.nio.file.Path; -import java.util.*; +import java.util.ArrayList; +import java.util.List; import java.util.stream.Collectors; /** @@ -199,12 +199,6 @@ public class CBPlatform extends BasePlatformImpl { return applicableDrivers; } - @NotNull - @Override - public DBPDataSourceProviderRegistry getDataSourceProviderRegistry() { - return DataSourceProviderRegistry.getInstance(); - } - @NotNull public QMRegistry getQueryManager() { return queryManager; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java index abc2334af3..f77c7cf6ab 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java @@ -67,10 +67,7 @@ import org.jkiss.dbeaver.runtime.jobs.ConnectionTestJob; import org.jkiss.dbeaver.utils.RuntimeUtils; import org.jkiss.utils.CommonUtils; -import java.util.ArrayList; -import java.util.Collections; -import java.util.List; -import java.util.Map; +import java.util.*; import java.util.stream.Collectors; /** @@ -128,9 +125,9 @@ public class WebServiceCore implements DBWServiceCore { if (projectIds != null) { stream = stream.filter(c -> projectIds.contains(c.getProjectId())); } - List applicableDrivers = CBPlatform.getInstance().getApplicableDrivers(); - return stream.filter(c -> applicableDrivers.contains(c.getDataSourceContainer().getDriver())) - .collect(Collectors.toList()); + Set applicableDrivers = WebServiceUtils.getApplicableDriversIds(); + return stream.filter(c -> applicableDrivers.contains(c.getDataSourceContainer().getDriver().getId())) + .toList(); } @Deprecated diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java index d6f19cbb5f..62da42bc4c 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java @@ -26,7 +26,6 @@ import io.cloudbeaver.model.WebConnectionInfo; import io.cloudbeaver.model.rm.DBNAbstractResourceManagerNode; import io.cloudbeaver.model.rm.DBNResourceManagerResource; import io.cloudbeaver.model.session.WebSession; -import io.cloudbeaver.server.CBPlatform; import io.cloudbeaver.service.navigator.DBWServiceNavigator; import io.cloudbeaver.service.navigator.WebCatalog; import io.cloudbeaver.service.navigator.WebNavigatorNodeInfo; @@ -38,7 +37,6 @@ import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.DBException; import org.jkiss.dbeaver.model.*; -import org.jkiss.dbeaver.model.connection.DBPDriver; import org.jkiss.dbeaver.model.edit.DBECommandContext; import org.jkiss.dbeaver.model.edit.DBEObjectMaker; import org.jkiss.dbeaver.model.edit.DBEObjectRenamer; @@ -85,7 +83,7 @@ public class WebServiceNavigator implements DBWServiceNavigator { DBNNode[] nodeChildren; boolean isRootPath = CommonUtils.isEmpty(parentPath) || "/".equals(parentPath) || ROOT_DATABASES.equals(parentPath); DBNModel navigatorModel = session.getNavigatorModel(); - List applicableDrivers = CBPlatform.getInstance().getApplicableDrivers(); + Set applicableDrivers = WebServiceUtils.getApplicableDriversIds(); if (isRootPath) { DBNRoot rootNode = navigatorModel.getRoot(); nodeChildren = DBNUtils.getNodeChildrenFiltered(monitor, rootNode, true); @@ -97,8 +95,8 @@ public class WebServiceNavigator implements DBWServiceNavigator { if (!parentNode.hasChildren(false)) { return EMPTY_NODE_LIST; } - if (parentNode instanceof DBNProject) { - parentNode = ((DBNProject) parentNode).getDatabases(); + if (parentNode instanceof DBNProject projectNode) { + parentNode = projectNode.getDatabases(); } nodeChildren = DBNUtils.getNodeChildrenFiltered(monitor, parentNode, false); } @@ -109,15 +107,16 @@ public class WebServiceNavigator implements DBWServiceNavigator { Set nodeIds = new HashSet<>(); // filter duplicate node ids for (DBNNode node : nodeChildren) { - if (node instanceof DBNDatabaseFolder && CommonUtils.isEmpty(((DBNDatabaseFolder) node).getMeta().getChildren(null))) { + if (node instanceof DBNDatabaseFolder folderNode && CommonUtils.isEmpty(folderNode.getMeta().getChildren(null))) { // Skip empty folders. Folder may become empty if their nested elements are provided by UI plugins. continue; } if (!CommonUtils.toBoolean(onlyFolders) || node instanceof DBNContainer) { // Skip connections which are not supported in CB - if (node instanceof DBNDataSource) { - DBPDataSourceContainer container = ((DBNDataSource) node).getDataSourceContainer(); - if (!applicableDrivers.contains(container.getDriver())) { + if (node instanceof DBNDataSource dataSourceNode) { + DBPDataSourceContainer container = dataSourceNode.getDataSourceContainer(); + // compare by id because driver object can be recreated if it was custom or disabled + if (!applicableDrivers.contains(container.getDriver().getId())) { continue; } }