CB-3487 filter applicable drivers fix (#2758)

Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
This commit is contained in:
Ainur
2024-07-08 16:06:15 +02:00
committed by GitHub
co-authored by kseniaguzeeva
parent a40993f77d
commit 021516ae7f
4 changed files with 25 additions and 24 deletions
@@ -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<String> getApplicableDriversIds() {
return CBPlatform.getInstance().getApplicableDrivers().stream()
.map(DBPDriver::getId)
.collect(Collectors.toSet());
}
}
@@ -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;
@@ -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<DBPDriver> applicableDrivers = CBPlatform.getInstance().getApplicableDrivers();
return stream.filter(c -> applicableDrivers.contains(c.getDataSourceContainer().getDriver()))
.collect(Collectors.toList());
Set<String> applicableDrivers = WebServiceUtils.getApplicableDriversIds();
return stream.filter(c -> applicableDrivers.contains(c.getDataSourceContainer().getDriver().getId()))
.toList();
}
@Deprecated
@@ -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<DBPDriver> applicableDrivers = CBPlatform.getInstance().getApplicableDrivers();
Set<String> 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<String> 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;
}
}