11/*
22 * DBeaver - Universal Database Manager
3- * Copyright (C) 2010-2024 DBeaver Corp and others
3+ * Copyright (C) 2010-2025 DBeaver Corp and others
44 *
55 * Licensed under the Apache License, Version 2.0 (the "License");
66 * you may not use this file except in compliance with the License.
@@ -600,29 +600,40 @@ public boolean moveNodesToFolder(
600600 ) throws DBWebException {
601601 try {
602602 DBRProgressMonitor monitor = session .getProgressMonitor ();
603- DBNNode folderNode ;
604603 DBNModel navigatorModel = session .getNavigatorModelOrThrow ();
605- folderNode = navigatorModel .getNodeByPath (monitor , folderNodePath );
604+ DBNNode folderNode = navigatorModel .getNodeByPath (monitor , folderNodePath );
605+ if (folderNode == null ) {
606+ throw new DBException ("Folder node '" + folderNodePath + "' not found" );
607+ }
606608 for (String path : nodePaths ) {
607609 DBNNode node = navigatorModel .getNodeByPath (monitor , path );
608610 if (node == null ) {
609611 throw new DBWebException ("Navigator node '" + path + "' not found" );
610612 }
611613 checkProjectEditAccess (node , session );
612- if (node instanceof DBNDataSource ) {
613- DBPDataSourceFolder folder = WebConnectionFolderUtils .getParentFolder (folderNode );
614- ((DBNDataSource ) node ).moveToFolder (folderNode .getOwnerProject (), folder );
614+ if (node .getNodeUri ().equals (folderNode .getNodeUri ())) {
615+ throw new DBWebException ("Cannot move node inside itself" );
616+ }
617+ if (node instanceof DBNDataSource dataSourceNode ) {
618+ DBPDataSourceFolder folder = null ;
619+ if (folderNode instanceof DBNLocalFolder localFolderNode ) {
620+ folder = localFolderNode .getFolder ();
621+ }
622+ dataSourceNode .moveToFolder (folderNode .getOwnerProject (), folder );
615623 node .getOwnerProject ().getDataSourceRegistry ().updateDataSource (
616- (( DBNDataSource ) node ) .getDataSourceContainer ());
624+ dataSourceNode .getDataSourceContainer ());
617625 WebEventUtils .addDataSourceUpdatedEvent (
618626 node .getOwnerProject (),
619627 session ,
620- (( DBNDataSource ) node ) .getDataSourceContainer ().getId (),
628+ dataSourceNode .getDataSourceContainer ().getId (),
621629 WSConstants .EventAction .UPDATE ,
622630 WSDataSourceProperty .CONFIGURATION
623631 );
624- } else if (node instanceof DBNLocalFolder ) {
625- DBPDataSourceFolder parentFolder = WebConnectionFolderUtils .getParentFolder (folderNode );
632+ } else if (node instanceof DBNLocalFolder dbnLocalFolder ) {
633+ DBPDataSourceFolder parentFolder = null ;
634+ if (folderNode instanceof DBNLocalFolder parentFolderNode ) {
635+ parentFolder = parentFolderNode .getFolder ();
636+ }
626637 if (parentFolder != null ) {
627638 List <String > siblings = Arrays .stream (parentFolder .getChildren ())
628639 .map (DBPDataSourceFolder ::getName )
@@ -631,12 +642,12 @@ public boolean moveNodesToFolder(
631642 throw new DBWebException ("Node " + folderNodePath + " contains folder with name '" + node .getName () + "'" );
632643 }
633644 }
634- DBNLocalFolder dbnLocalFolder = ((DBNLocalFolder ) node );
635645 var oldNodePath = node .getNodeItemPath ();
636646 node .getOwnerProject ().getDataSourceRegistry ().moveFolder (
637647 dbnLocalFolder .getFolder ().getFolderPath (),
638648 dbnLocalFolder .generateNewFolderPath (parentFolder , dbnLocalFolder .getNodeDisplayName ())
639649 );
650+ node .getOwnerProject ().getDataSourceRegistry ().checkForErrors ();
640651 var newNodePath = node .getNodeItemPath ();
641652 WebServiceUtils .updateConfigAndRefreshDatabases (session , node .getOwnerProject ().getId ());
642653 addNavigatorNodeMoveEvent (session , node , oldNodePath , newNodePath );
0 commit comments