CB-1987 bug fix for connection folders (#950)

* CB-1987 bug fix for connection folders

* CB-1987 navigator node info format fix

* CB-1987 remove useless db feature

* CB-1987 move nodes folder path not null
This commit is contained in:
Ainur
2022-07-05 17:38:16 +03:00
committed by GitHub
parent 67ca71e1b1
commit 877b31be23
5 changed files with 29 additions and 15 deletions
@@ -131,6 +131,6 @@ extend type Mutation {
navDeleteNodes( nodePaths: [ID!]! ): Int
# Moves nodes with specified IDs to the connection folder
navMoveNodesToFolder(nodePaths: [ID!]!, folderPath: String): Boolean
navMoveNodesToFolder(nodePaths: [ID!]!, folderPath: ID!): Boolean
}
@@ -565,9 +565,7 @@ public class WebServiceCore implements DBWServiceCore {
DBPDataSourceRegistry sessionRegistry = session.getSingletonProject().getDataSourceRegistry();
DBPDataSourceFolder newFolder = WebServiceUtils.createFolder(parentNode, folderName, sessionRegistry);
WebConnectionFolderInfo folderInfo = new WebConnectionFolderInfo(session, newFolder);
if (parentPath == null) {
WebServiceUtils.updateConfigAndRefreshDatabases(session);
}
WebServiceUtils.updateConfigAndRefreshDatabases(session);
return folderInfo;
} catch (DBException e) {
@@ -583,6 +581,7 @@ public class WebServiceCore implements DBWServiceCore {
) throws DBWebException {
WebConnectionFolderInfo folderInfo = WebConnectionFolderUtils.getFolderInfo(session, folderPath);
folderInfo.getDataSourceFolder().setName(newName);
WebServiceUtils.updateConfigAndRefreshDatabases(session);
return folderInfo;
}
@@ -591,16 +590,13 @@ public class WebServiceCore implements DBWServiceCore {
try {
WebConnectionFolderInfo folderInfo = WebConnectionFolderUtils.getFolderInfo(session, folderPath);
DBPDataSourceFolder folder = folderInfo.getDataSourceFolder();
boolean rootFolder = folder.getParent() != null;
if (folder.getDataSourceRegistry().getProject() != session.getSingletonProject()) {
throw new DBWebException("Global folder '" + folderInfo.getId() + "' cannot be deleted");
}
session.addInfoMessage("Delete folder");
DBPDataSourceRegistry sessionRegistry = session.getSingletonProject().getDataSourceRegistry();
sessionRegistry.removeFolder(folderInfo.getDataSourceFolder(), false);
if (rootFolder) {
WebServiceUtils.updateConfigAndRefreshDatabases(session);
}
WebServiceUtils.updateConfigAndRefreshDatabases(session);
} catch (DBException e) {
throw new DBWebException(e.getMessage(), e);
}
@@ -59,5 +59,5 @@ public interface DBWServiceNavigator extends DBWService {
int deleteNodes(@NotNull WebSession session, @NotNull List<String> nodePaths) throws DBWebException;
@WebAction
boolean moveNodesToFolder(@NotNull WebSession session, @NotNull List<String> nodePaths, String folderPath) throws DBWebException;
boolean moveNodesToFolder(@NotNull WebSession session, @NotNull List<String> nodePaths, @NotNull String folderPath) throws DBWebException;
}
@@ -139,7 +139,8 @@ public class WebNavigatorNodeInfo {
if (node instanceof DBNDatabaseNode) {
isShared = !((DBNDatabaseNode) node).getDataSourceContainer().isManageable();
} else if (node instanceof DBNLocalFolder) {
//isShared = ((DBNLocalFolder) node).getDataSourceRegistry().is
String projectName = ((DBNLocalFolder) node).getFolder().getDataSourceRegistry().getProject().getName();
isShared = !projectName.equals(session.getUserId());
}
if (isShared) {
features.add("shared");
@@ -20,17 +20,16 @@ package io.cloudbeaver.service.navigator.impl;
import io.cloudbeaver.DBWebException;
import io.cloudbeaver.model.WebCommandContext;
import io.cloudbeaver.model.WebConnectionInfo;
import io.cloudbeaver.model.WebConnectionFolderInfo;
import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.service.navigator.DBWServiceNavigator;
import io.cloudbeaver.service.navigator.WebCatalog;
import io.cloudbeaver.service.navigator.WebNavigatorNodeInfo;
import io.cloudbeaver.service.navigator.WebStructContainers;
import io.cloudbeaver.utils.WebConnectionFolderUtils;
import org.jkiss.code.NotNull;
import org.jkiss.code.Nullable;
import org.jkiss.dbeaver.DBException;
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.edit.DBECommandContext;
@@ -175,6 +174,9 @@ public class WebServiceNavigator implements DBWServiceNavigator {
((DBPRefreshableObject) dataSource).refreshObject(monitor);
}
((DBNDataSource) node).cleanupNode();
} else if (node instanceof DBNLocalFolder) {
// Refresh can't be applied to the local folder node
return true;
} else {
node.refreshNode(monitor, this);
}
@@ -354,17 +356,32 @@ public class WebServiceNavigator implements DBWServiceNavigator {
}
@Override
public boolean moveNodesToFolder(@NotNull WebSession session, @NotNull List<String> nodePaths, String folderNodePath) throws DBWebException {
public boolean moveNodesToFolder(
@NotNull WebSession session,
@NotNull List<String> nodePaths,
@NotNull String folderNodePath
) throws DBWebException {
try {
DBRProgressMonitor monitor = session.getProgressMonitor();
WebConnectionFolderInfo folderPath = WebConnectionFolderUtils.getFolderInfo(session, folderNodePath);
DBNNode folderNode;
folderNode = session.getNavigatorModel().getNodeByPath(monitor, folderNodePath);
for (String path : nodePaths) {
DBNNode node = session.getNavigatorModel().getNodeByPath(monitor, path);
if (node == null) {
throw new DBWebException("Navigator node '" + path + "' not found");
}
if (node instanceof DBNDataSource) {
((DBNDataSource) node).moveToFolder(null, folderPath.getDataSourceFolder());
DBPDataSourceFolder folder;
if (folderNode instanceof DBNRoot) {
folder = null;
} else if (folderNode instanceof DBNLocalFolder) {
folder = ((DBNLocalFolder) folderNode).getFolder();
} else {
throw new DBWebException("Navigator node '" + folderNodePath + "' is not a folder node");
}
((DBNDataSource) node).moveToFolder(folderNode.getOwnerProject(), folder);
session.getSingletonProject().getDataSourceRegistry().updateDataSource(
((DBNDataSource) node).getDataSourceContainer());
} else {
throw new DBWebException("Navigator node '" + path + "' is not a data source node");
}