mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-3487 filter applicable drivers fix (#2758)
Co-authored-by: kseniaguzeeva <112612526+kseniaguzeeva@users.noreply.github.com>
This commit is contained in:
@@ -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;
|
||||
|
||||
+4
-7
@@ -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
|
||||
|
||||
+8
-9
@@ -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;
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user