diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebConnectionFolderUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebConnectionFolderUtils.java index c95ebd05d3..0ddb8dda88 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebConnectionFolderUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebConnectionFolderUtils.java @@ -21,6 +21,10 @@ import io.cloudbeaver.model.WebConnectionFolderInfo; import io.cloudbeaver.model.session.WebSession; import org.jkiss.code.Nullable; import org.jkiss.dbeaver.model.DBPDataSourceFolder; +import org.jkiss.dbeaver.model.navigator.DBNLocalFolder; +import org.jkiss.dbeaver.model.navigator.DBNNode; +import org.jkiss.dbeaver.model.navigator.DBNProject; +import org.jkiss.dbeaver.model.navigator.DBNRoot; import org.jkiss.utils.CommonUtils; public class WebConnectionFolderUtils { @@ -44,4 +48,14 @@ public class WebConnectionFolderUtils { throw new DBWebException("Folder name '" + folderName + "' contains illegal characters: /"); } } + + public static DBPDataSourceFolder getParentFolder(DBNNode folderNode) throws DBWebException { + if (folderNode instanceof DBNRoot || folderNode instanceof DBNProject) { + return null; + } else if (folderNode instanceof DBNLocalFolder) { + return ((DBNLocalFolder) folderNode).getFolder(); + } else { + throw new DBWebException("Navigator node '" + folderNode.getNodeItemPath() + "' is not a folder node"); + } + } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java index 38d127ed38..2617fcc3ba 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/impl/WebServiceNavigator.java @@ -466,17 +466,14 @@ public class WebServiceNavigator implements DBWServiceNavigator { } checkProjectEditAccess(node, session); if (node instanceof DBNDataSource) { - DBPDataSourceFolder folder; - if (folderNode instanceof DBNRoot || folderNode instanceof DBNProject) { - folder = null; - } else if (folderNode instanceof DBNLocalFolder) { - folder = ((DBNLocalFolder) folderNode).getFolder(); - } else { - throw new DBWebException("Navigator node '" + folderNodePath + "' is not a folder node"); - } + DBPDataSourceFolder folder = WebConnectionFolderUtils.getParentFolder(folderNode); ((DBNDataSource) node).moveToFolder(folderNode.getOwnerProject(), folder); node.getOwnerProject().getDataSourceRegistry().updateDataSource( ((DBNDataSource) node).getDataSourceContainer()); + } else if (node instanceof DBNLocalFolder) { + DBPDataSourceFolder folder = WebConnectionFolderUtils.getParentFolder(folderNode); + ((DBNLocalFolder) node).getFolder().setParent(folder); + WebServiceUtils.updateConfigAndRefreshDatabases(session, node.getOwnerProject().getId()); } else if (node instanceof DBNResourceManagerResource) { boolean rmNewNode = folderNode instanceof DBNAbstractResourceManagerNode; DBNResourceManagerResource rmOldNode = (DBNResourceManagerResource) node;