mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-1636 delete connection folders through navigator tree (#956)
* CB-1636 delete connection folders through navigator tree * CB-1636 fix exception for shared connection folders * CB-1636 global folders update fix
This commit is contained in:
@@ -285,7 +285,10 @@ public class WebServiceUtils extends WebCommonUtils {
|
||||
dataSource.setDescription(config.getDescription());
|
||||
if (config.getFolder() != null) {
|
||||
dataSource.setFolder(dataSource.getRegistry().getFolder(config.getFolder()));
|
||||
} else {
|
||||
dataSource.setFolder(null);
|
||||
}
|
||||
getGlobalDataSourceRegistry().getAllFolders().clear();
|
||||
saveAuthProperties(dataSource, dataSource.getConnectionConfiguration(), config.getCredentials(), config.isSaveCredentials());
|
||||
}
|
||||
|
||||
|
||||
+8
-3
@@ -19,7 +19,6 @@ package io.cloudbeaver.service.navigator;
|
||||
import io.cloudbeaver.DBWebException;
|
||||
import io.cloudbeaver.WebServiceUtils;
|
||||
import io.cloudbeaver.model.WebPropertyInfo;
|
||||
import io.cloudbeaver.model.rm.DBNAbstractResourceManagerNode;
|
||||
import io.cloudbeaver.model.rm.DBNResourceManagerResource;
|
||||
import io.cloudbeaver.model.session.WebSession;
|
||||
import org.jkiss.dbeaver.DBException;
|
||||
@@ -175,8 +174,14 @@ public class WebNavigatorNodeInfo {
|
||||
}
|
||||
}
|
||||
}
|
||||
} else if (node instanceof DBNLocalFolder || node instanceof DBNAbstractResourceManagerNode) {
|
||||
if (!isShared) {
|
||||
} else if (isShared) {
|
||||
return features.toArray(new String[0]);
|
||||
} else if (node instanceof DBNLocalFolder) {
|
||||
features.add(NODE_FEATURE_CAN_RENAME);
|
||||
features.add(NODE_FEATURE_CAN_DELETE);
|
||||
} else if (node instanceof DBNResourceManagerResource) {
|
||||
features.add(NODE_FEATURE_CAN_DELETE);
|
||||
if (!isFolder()) {
|
||||
features.add(NODE_FEATURE_CAN_RENAME);
|
||||
}
|
||||
}
|
||||
|
||||
+28
-10
@@ -18,10 +18,10 @@ package io.cloudbeaver.service.navigator.impl;
|
||||
|
||||
|
||||
import io.cloudbeaver.DBWebException;
|
||||
import io.cloudbeaver.WebServiceUtils;
|
||||
import io.cloudbeaver.model.WebCommandContext;
|
||||
import io.cloudbeaver.model.WebConnectionInfo;
|
||||
import io.cloudbeaver.model.rm.DBNAbstractResourceManagerNode;
|
||||
import io.cloudbeaver.model.rm.DBNResourceManagerProject;
|
||||
import io.cloudbeaver.model.rm.DBNResourceManagerResource;
|
||||
import io.cloudbeaver.model.session.WebSession;
|
||||
import io.cloudbeaver.service.navigator.DBWServiceNavigator;
|
||||
@@ -35,6 +35,7 @@ import org.jkiss.dbeaver.model.DBPDataSource;
|
||||
import org.jkiss.dbeaver.model.DBPDataSourceFolder;
|
||||
import org.jkiss.dbeaver.model.DBPRefreshableObject;
|
||||
import org.jkiss.dbeaver.model.DBUtils;
|
||||
import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
|
||||
import org.jkiss.dbeaver.model.edit.DBECommandContext;
|
||||
import org.jkiss.dbeaver.model.edit.DBEObjectMaker;
|
||||
import org.jkiss.dbeaver.model.edit.DBEObjectRenamer;
|
||||
@@ -46,6 +47,7 @@ import org.jkiss.dbeaver.model.struct.DBSObject;
|
||||
import org.jkiss.dbeaver.model.struct.DBSObjectContainer;
|
||||
import org.jkiss.dbeaver.model.struct.rdb.DBSCatalog;
|
||||
import org.jkiss.dbeaver.model.struct.rdb.DBSSchema;
|
||||
import org.jkiss.dbeaver.registry.DataSourceRegistry;
|
||||
import org.jkiss.dbeaver.runtime.DBWorkbench;
|
||||
import org.jkiss.utils.ArrayUtils;
|
||||
import org.jkiss.utils.CommonUtils;
|
||||
@@ -323,8 +325,10 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
public int deleteNodes(@NotNull WebSession session, @NotNull List<String> nodePaths) throws DBWebException {
|
||||
try {
|
||||
DBRProgressMonitor monitor = session.getProgressMonitor();
|
||||
|
||||
Map<DBNDatabaseNode, DBEObjectMaker> nodes = new LinkedHashMap<>();
|
||||
DBPDataSourceRegistry sessionRegistry = session.getSingletonProject().getDataSourceRegistry();
|
||||
Set<DBPDataSourceFolder> tempFolders = ((DataSourceRegistry) sessionRegistry).getTemporaryFolders();
|
||||
boolean containsFolderNodes = false;
|
||||
Map<DBNNode, DBEObjectMaker> nodes = new LinkedHashMap<>();
|
||||
for (String path : nodePaths) {
|
||||
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, path);
|
||||
if (node == null) {
|
||||
@@ -337,19 +341,33 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
if (objectDeleter == null || !objectDeleter.canDeleteObject(object)) {
|
||||
throw new DBException("Object " + object + " delete is not supported");
|
||||
}
|
||||
nodes.put((DBNDatabaseNode) node, objectDeleter);
|
||||
nodes.put(node, objectDeleter);
|
||||
} else if (node instanceof DBNLocalFolder) {
|
||||
containsFolderNodes = true;
|
||||
DBPDataSourceFolder folder = ((DBNLocalFolder) node).getFolder();
|
||||
if (tempFolders.contains(folder)) {
|
||||
throw new DBWebException("Delete shared connection folder from navigator tree is not supported");
|
||||
}
|
||||
nodes.put(node, null);
|
||||
} else {
|
||||
throw new DBWebException("Navigator node '" + path + "' is not a database node");
|
||||
}
|
||||
}
|
||||
|
||||
Map<String, Object> options = new LinkedHashMap<>();
|
||||
for (Map.Entry<DBNDatabaseNode, DBEObjectMaker> ne : nodes.entrySet()) {
|
||||
DBSObject object = ne.getKey().getObject();
|
||||
DBCExecutionContext executionContext = getCommandExecutionContext(object);
|
||||
DBECommandContext commandContext = new WebCommandContext(executionContext, false);
|
||||
ne.getValue().deleteObject(commandContext, object, options);
|
||||
commandContext.saveChanges(session.getProgressMonitor(), options);
|
||||
for (Map.Entry<DBNNode, DBEObjectMaker> ne : nodes.entrySet()) {
|
||||
if (ne.getKey() instanceof DBNDatabaseNode) {
|
||||
DBSObject object = ((DBNDatabaseNode) ne.getKey()).getObject();
|
||||
DBCExecutionContext executionContext = getCommandExecutionContext(object);
|
||||
DBECommandContext commandContext = new WebCommandContext(executionContext, false);
|
||||
ne.getValue().deleteObject(commandContext, object, options);
|
||||
commandContext.saveChanges(session.getProgressMonitor(), options);
|
||||
} else if (ne.getKey() instanceof DBNLocalFolder) {
|
||||
sessionRegistry.removeFolder(((DBNLocalFolder) ne.getKey()).getFolder(), false);
|
||||
}
|
||||
}
|
||||
if (containsFolderNodes) {
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
}
|
||||
return nodes.size();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user