mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-2372 fix connection folders
This commit is contained in:
+3
-3
@@ -21,14 +21,14 @@ import org.jkiss.dbeaver.model.DBPDataSourceFolder;
|
||||
import org.jkiss.dbeaver.model.meta.Property;
|
||||
|
||||
public class WebConnectionFolderInfo {
|
||||
private String projectId;
|
||||
private final String projectId;
|
||||
private final WebSession session;
|
||||
private final DBPDataSourceFolder dataSourceFolder;
|
||||
|
||||
public WebConnectionFolderInfo(WebSession session, DBPDataSourceFolder dataSourceFolder, String projectId) {
|
||||
public WebConnectionFolderInfo(WebSession session, DBPDataSourceFolder dataSourceFolder) {
|
||||
this.session = session;
|
||||
this.dataSourceFolder = dataSourceFolder;
|
||||
this.projectId = projectId;
|
||||
this.projectId = dataSourceFolder.getDataSourceRegistry().getProject().getId();
|
||||
}
|
||||
|
||||
public WebSession getSession() {
|
||||
|
||||
+1
-1
@@ -33,7 +33,7 @@ public class WebConnectionFolderUtils {
|
||||
folder = session.getProjectById(projectId).getDataSourceRegistry().getFolder(folderPath);
|
||||
}
|
||||
if (folder != null) {
|
||||
return new WebConnectionFolderInfo(session, folder, session.getProjectById(projectId).getId());
|
||||
return new WebConnectionFolderInfo(session, folder);
|
||||
} else {
|
||||
throw new DBWebException("Folder '" + folderPath + "' not found");
|
||||
}
|
||||
|
||||
@@ -326,8 +326,8 @@ public class WebServiceUtils extends WebCommonUtils {
|
||||
return folder;
|
||||
}
|
||||
|
||||
public static void updateConfigAndRefreshDatabases(WebSession session) {
|
||||
DBNProject projectNode = session.getNavigatorModel().getRoot().getProjectNode(session.getSingletonProject());
|
||||
public static void updateConfigAndRefreshDatabases(WebSession session, String projectId) {
|
||||
DBNProject projectNode = session.getNavigatorModel().getRoot().getProjectNode(session.getProjectById(projectId));
|
||||
DBNModel.updateConfigAndRefreshDatabases(projectNode.getDatabases());
|
||||
}
|
||||
|
||||
|
||||
+16
-8
@@ -162,18 +162,26 @@ public interface DBWServiceCore extends DBWService {
|
||||
///////////////////////////////////////////
|
||||
// Folders
|
||||
|
||||
@WebAction
|
||||
@WebProjectAction(requireProjectPermissions = {RMConstants.PERMISSION_PROJECT_CONNECTIONS_EDIT})
|
||||
WebConnectionFolderInfo createConnectionFolder(
|
||||
@NotNull WebSession session, @Nullable String projectId, @Nullable String folderPath, @NotNull String newName
|
||||
) throws DBWebException;
|
||||
@NotNull WebSession session,
|
||||
@Nullable @WebObjectId String projectId,
|
||||
@NotNull String parentNodePath,
|
||||
@NotNull String newName) throws DBWebException;
|
||||
|
||||
@WebAction
|
||||
@WebProjectAction(requireProjectPermissions = {RMConstants.PERMISSION_PROJECT_CONNECTIONS_EDIT})
|
||||
WebConnectionFolderInfo renameConnectionFolder(
|
||||
@NotNull WebSession session, @Nullable String projectId, @NotNull String folderPath, @NotNull String newName
|
||||
) throws DBWebException;
|
||||
@NotNull WebSession session,
|
||||
@Nullable @WebObjectId
|
||||
String projectId,
|
||||
@NotNull String folderPath,
|
||||
@NotNull String newName) throws DBWebException;
|
||||
|
||||
@WebAction
|
||||
boolean deleteConnectionFolder(@NotNull WebSession session, @Nullable String projectId, @NotNull String nodePath) throws DBWebException;
|
||||
@WebProjectAction(requireProjectPermissions = {RMConstants.PERMISSION_PROJECT_CONNECTIONS_EDIT})
|
||||
boolean deleteConnectionFolder(
|
||||
@NotNull WebSession session,
|
||||
@Nullable @WebObjectId String projectId,
|
||||
@NotNull String nodePath) throws DBWebException;
|
||||
|
||||
///////////////////////////////////////////
|
||||
// Navigator settings
|
||||
|
||||
+5
-5
@@ -162,7 +162,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
return Collections.singletonList(folderInfo);
|
||||
}
|
||||
return webSession.getProjectById(projectId).getDataSourceRegistry().getAllFolders().stream()
|
||||
.map(f -> new WebConnectionFolderInfo(webSession, f, projectId)).collect(Collectors.toList());
|
||||
.map(f -> new WebConnectionFolderInfo(webSession, f)).collect(Collectors.toList());
|
||||
}
|
||||
|
||||
@Override
|
||||
@@ -630,8 +630,8 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
}
|
||||
DBPDataSourceRegistry sessionRegistry = session.getProjectById(projectId).getDataSourceRegistry();
|
||||
DBPDataSourceFolder newFolder = WebServiceUtils.createFolder(parentNode, folderName, sessionRegistry);
|
||||
WebConnectionFolderInfo folderInfo = new WebConnectionFolderInfo(session, newFolder, sessionRegistry.getProject().getId());
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
WebConnectionFolderInfo folderInfo = new WebConnectionFolderInfo(session, newFolder);
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session, projectId);
|
||||
|
||||
return folderInfo;
|
||||
} catch (DBException e) {
|
||||
@@ -649,7 +649,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
WebConnectionFolderUtils.validateConnectionFolder(newName);
|
||||
WebConnectionFolderInfo folderInfo = WebConnectionFolderUtils.getFolderInfo(session, projectId, folderPath);
|
||||
folderInfo.getDataSourceFolder().setName(newName);
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session, projectId);
|
||||
return folderInfo;
|
||||
}
|
||||
|
||||
@@ -666,7 +666,7 @@ public class WebServiceCore implements DBWServiceCore {
|
||||
session.addInfoMessage("Delete folder");
|
||||
DBPDataSourceRegistry sessionRegistry = session.getProjectById(projectId).getDataSourceRegistry();
|
||||
sessionRegistry.removeFolder(folderInfo.getDataSourceFolder(), false);
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session, projectId);
|
||||
} catch (DBException e) {
|
||||
throw new DBWebException(e.getMessage(), e);
|
||||
}
|
||||
|
||||
+14
-17
@@ -375,8 +375,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
) throws DBWebException {
|
||||
try {
|
||||
DBRProgressMonitor monitor = session.getProgressMonitor();
|
||||
DBPDataSourceRegistry sessionRegistry = session.getSingletonProject().getDataSourceRegistry();
|
||||
Set<DBPDataSourceFolder> tempFolders = ((DataSourceRegistry) sessionRegistry).getTemporaryFolders();
|
||||
String projectId = null;
|
||||
boolean containsFolderNodes = false;
|
||||
Map<DBNNode, DBEObjectMaker> nodes = new LinkedHashMap<>();
|
||||
for (String path : nodePaths) {
|
||||
@@ -394,10 +393,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
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");
|
||||
}
|
||||
projectId = node.getOwnerProject().getId();
|
||||
nodes.put(node, null);
|
||||
} else if (node instanceof DBNResourceManagerResource) {
|
||||
nodes.put(node, null);
|
||||
@@ -408,23 +404,24 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
|
||||
Map<String, Object> options = new LinkedHashMap<>();
|
||||
for (Map.Entry<DBNNode, DBEObjectMaker> ne : nodes.entrySet()) {
|
||||
if (ne.getKey() instanceof DBNDatabaseNode) {
|
||||
DBSObject object = ((DBNDatabaseNode) ne.getKey()).getObject();
|
||||
DBNNode node = ne.getKey();
|
||||
if (node instanceof DBNDatabaseNode) {
|
||||
DBSObject object = ((DBNDatabaseNode) node).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);
|
||||
} else if (ne.getKey() instanceof DBNResourceManagerResource) {
|
||||
DBNResourceManagerResource rmResource = ((DBNResourceManagerResource) ne.getKey());
|
||||
String projectId = rmResource.getResourceProject().getId();
|
||||
} else if (node instanceof DBNLocalFolder) {
|
||||
node.getOwnerProject().getDataSourceRegistry().removeFolder(((DBNLocalFolder) node).getFolder(), false);
|
||||
} else if (node instanceof DBNResourceManagerResource) {
|
||||
DBNResourceManagerResource rmResource = ((DBNResourceManagerResource) node);
|
||||
String resourceProjectId = rmResource.getResourceProject().getId();
|
||||
String resourcePath = rmResource.getResourceFolder();
|
||||
session.getRmController().deleteResource(projectId, resourcePath, true);
|
||||
session.getRmController().deleteResource(resourceProjectId, resourcePath, true);
|
||||
}
|
||||
}
|
||||
if (containsFolderNodes) {
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session);
|
||||
WebServiceUtils.updateConfigAndRefreshDatabases(session, projectId);
|
||||
}
|
||||
return nodes.size();
|
||||
|
||||
@@ -450,7 +447,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
}
|
||||
if (node instanceof DBNDataSource) {
|
||||
DBPDataSourceFolder folder;
|
||||
if (folderNode instanceof DBNRoot) {
|
||||
if (folderNode instanceof DBNRoot || folderNode instanceof DBNProject) {
|
||||
folder = null;
|
||||
} else if (folderNode instanceof DBNLocalFolder) {
|
||||
folder = ((DBNLocalFolder) folderNode).getFolder();
|
||||
@@ -458,7 +455,7 @@ public class WebServiceNavigator implements DBWServiceNavigator {
|
||||
throw new DBWebException("Navigator node '" + folderNodePath + "' is not a folder node");
|
||||
}
|
||||
((DBNDataSource) node).moveToFolder(folderNode.getOwnerProject(), folder);
|
||||
session.getSingletonProject().getDataSourceRegistry().updateDataSource(
|
||||
node.getOwnerProject().getDataSourceRegistry().updateDataSource(
|
||||
((DBNDataSource) node).getDataSourceContainer());
|
||||
} else if (node instanceof DBNResourceManagerResource) {
|
||||
boolean rmNewNode = folderNode instanceof DBNAbstractResourceManagerNode;
|
||||
|
||||
Reference in New Issue
Block a user