From 90190d2a30d8cd8123c2d0ca64dd5ff3713b964f Mon Sep 17 00:00:00 2001 From: Ainur Date: Tue, 25 Oct 2022 10:47:10 +0200 Subject: [PATCH] CB-2186 event fixes --- .../rm/local/LocalResourceController.java | 6 +++++- .../src/io/cloudbeaver/utils/WebAppUtils.java | 7 +++++-- .../bundles/io.cloudbeaver.server/plugin.xml | 2 +- ...> CBDataSourceUpdatedEventHandlerImpl.java} | 2 +- .../service/core/impl/WebServiceCore.java | 18 +++++++++--------- .../navigator/impl/WebServiceNavigator.java | 4 ++-- 6 files changed, 23 insertions(+), 16 deletions(-) rename server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/{CBDatasourceUpdatedEventHandlerImpl.java => CBDataSourceUpdatedEventHandlerImpl.java} (96%) diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java index aa771d7d5f..76190eaba4 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/model/rm/local/LocalResourceController.java @@ -296,7 +296,11 @@ public class LocalResourceController implements RMController { } @Override - public void saveProjectDataSources(@NotNull String projectId, @NotNull String configuration) throws DBException { + public void saveProjectDataSources( + @NotNull String projectId, + @NotNull String configuration, + @NotNull String[] dataSourceIds + ) throws DBException { final DBPProject project = getProjectMetadata(projectId); final DBPDataSourceRegistry registry = project.getDataSourceRegistry(); final DBPDataSourceConfigurationStorage storage = new DataSourceMemoryStorage(configuration.getBytes(StandardCharsets.UTF_8)); diff --git a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java index 4f7becaaf8..9d3fb72cb2 100644 --- a/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java +++ b/server/bundles/io.cloudbeaver.model/src/io/cloudbeaver/utils/WebAppUtils.java @@ -205,12 +205,15 @@ public class WebAppUtils { return RMProjectType.GLOBAL.getPrefix() + "_" + globalConfigurationName; } - public static void addDatasourceUpdatedEvent(DBPProject project) { + public static void addDataSourceUpdatedEvent(DBPProject project, String datasourceId) { if (project == null) { return; } getWebApplication().getEventController().addEvent( - new CBEvent(CBEventConstants.CLOUDBEAVER_DATASOURCE_UPDATED, Map.of("projectId", project.getId())) + new CBEvent( + CBEventConstants.CLOUDBEAVER_DATASOURCE_UPDATED, + Map.of("projectId", project.getId(), "dataSourceIds", new String[] {datasourceId}) + ) ); } diff --git a/server/bundles/io.cloudbeaver.server/plugin.xml b/server/bundles/io.cloudbeaver.server/plugin.xml index 2d61bfbb37..7e5a924ae6 100644 --- a/server/bundles/io.cloudbeaver.server/plugin.xml +++ b/server/bundles/io.cloudbeaver.server/plugin.xml @@ -50,7 +50,7 @@ - \ + \ diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/CBDatasourceUpdatedEventHandlerImpl.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/CBDataSourceUpdatedEventHandlerImpl.java similarity index 96% rename from server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/CBDatasourceUpdatedEventHandlerImpl.java rename to server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/CBDataSourceUpdatedEventHandlerImpl.java index 278811cb93..103f667efa 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/CBDatasourceUpdatedEventHandlerImpl.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/CBDataSourceUpdatedEventHandlerImpl.java @@ -26,7 +26,7 @@ import org.jkiss.dbeaver.model.data.json.JSONUtils; /** * Notify all active user session that datasource has been updated */ -public class CBDatasourceUpdatedEventHandlerImpl extends CBProjectUpdatedEventHandler { +public class CBDataSourceUpdatedEventHandlerImpl extends CBProjectUpdatedEventHandler { @NotNull @Override public String getSupportedEventType() { diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java index 03d30df93e..5b46964097 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/impl/WebServiceCore.java @@ -402,7 +402,7 @@ public class WebServiceCore implements DBWServiceCore { WebConnectionInfo connectionInfo = new WebConnectionInfo(webSession, newDataSource); webSession.addConnection(connectionInfo); webSession.addInfoMessage("New connection was created - " + WebServiceUtils.getConnectionContainerInfo(newDataSource)); - WebAppUtils.addDatasourceUpdatedEvent(webSession.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(webSession.getProjectById(projectId), connectionInfo.getId()); return connectionInfo; } @@ -440,7 +440,7 @@ public class WebServiceCore implements DBWServiceCore { } catch (DBException e) { throw new DBWebException("Failed to update connection", e); } - WebAppUtils.addDatasourceUpdatedEvent(webSession.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(webSession.getProjectById(projectId), connectionInfo.getId()); return connectionInfo; } @@ -454,7 +454,7 @@ public class WebServiceCore implements DBWServiceCore { webSession.addInfoMessage("Delete connection - " + WebServiceUtils.getConnectionContainerInfo(connectionInfo.getDataSourceContainer())); closeAndDeleteConnection(webSession, projectId, connectionId, true); - WebAppUtils.addDatasourceUpdatedEvent(webSession.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(webSession.getProjectById(projectId), connectionId); return true; } @@ -491,7 +491,7 @@ public class WebServiceCore implements DBWServiceCore { WebConnectionInfo connectionInfo = new WebConnectionInfo(webSession, newDataSource); webSession.addConnection(connectionInfo); - WebAppUtils.addDatasourceUpdatedEvent(webSession.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(webSession.getProjectById(projectId), connectionInfo.getId()); return connectionInfo; } @@ -533,7 +533,7 @@ public class WebServiceCore implements DBWServiceCore { WebConnectionInfo connectionInfo = new WebConnectionInfo(webSession, newDataSource); dataSourceRegistry.checkForErrors(); webSession.addConnection(connectionInfo); - WebAppUtils.addDatasourceUpdatedEvent(webSession.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(webSession.getProjectById(projectId), connectionInfo.getId()); return connectionInfo; } catch (DBException e) { throw new DBWebException("Error copying connection", e); @@ -712,7 +712,7 @@ public class WebServiceCore implements DBWServiceCore { DBPDataSourceFolder newFolder = WebServiceUtils.createFolder(parentNode, folderName, sessionRegistry); WebConnectionFolderInfo folderInfo = new WebConnectionFolderInfo(session, newFolder); WebServiceUtils.updateConfigAndRefreshDatabases(session, projectId); - WebAppUtils.addDatasourceUpdatedEvent(session.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(session.getProjectById(projectId), folderInfo.getId()); return folderInfo; } catch (DBException e) { throw new DBWebException(e.getMessage(), e); @@ -730,7 +730,7 @@ public class WebServiceCore implements DBWServiceCore { WebConnectionFolderInfo folderInfo = WebConnectionFolderUtils.getFolderInfo(session, projectId, folderPath); folderInfo.getDataSourceFolder().setName(newName); WebServiceUtils.updateConfigAndRefreshDatabases(session, projectId); - WebAppUtils.addDatasourceUpdatedEvent(session.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(session.getProjectById(projectId), folderInfo.getId()); return folderInfo; } @@ -748,7 +748,7 @@ public class WebServiceCore implements DBWServiceCore { DBPDataSourceRegistry sessionRegistry = session.getProjectById(projectId).getDataSourceRegistry(); sessionRegistry.removeFolder(folderInfo.getDataSourceFolder(), false); WebServiceUtils.updateConfigAndRefreshDatabases(session, projectId); - WebAppUtils.addDatasourceUpdatedEvent(session.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(session.getProjectById(projectId), folderInfo.getId()); } catch (DBException e) { throw new DBWebException(e.getMessage(), e); } @@ -763,7 +763,7 @@ public class WebServiceCore implements DBWServiceCore { DataSourceDescriptor dataSourceDescriptor = ((DataSourceDescriptor)connectionInfo.getDataSourceContainer()); dataSourceDescriptor.setNavigatorSettings(settings); dataSourceDescriptor.persistConfiguration(); - WebAppUtils.addDatasourceUpdatedEvent(webSession.getProjectById(projectId)); + WebAppUtils.addDataSourceUpdatedEvent(webSession.getProjectById(projectId), id); return connectionInfo; } 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 097ec1818c..8ec9ccb4cb 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 @@ -471,7 +471,7 @@ public class WebServiceNavigator implements DBWServiceNavigator { ((DBNDataSource) node).moveToFolder(folderNode.getOwnerProject(), folder); node.getOwnerProject().getDataSourceRegistry().updateDataSource( ((DBNDataSource) node).getDataSourceContainer()); - WebAppUtils.addDatasourceUpdatedEvent(node.getOwnerProject()); + WebAppUtils.addDataSourceUpdatedEvent(node.getOwnerProject(), ((DBNDataSource) node).getDataSourceContainer().getId()); } else if (node instanceof DBNLocalFolder) { DBPDataSourceFolder folder = WebConnectionFolderUtils.getParentFolder(folderNode); if (folder != null) { @@ -484,7 +484,7 @@ public class WebServiceNavigator implements DBWServiceNavigator { } ((DBNLocalFolder) node).getFolder().setParent(folder); WebServiceUtils.updateConfigAndRefreshDatabases(session, node.getOwnerProject().getId()); - WebAppUtils.addDatasourceUpdatedEvent(node.getOwnerProject()); + WebAppUtils.addDataSourceUpdatedEvent(node.getOwnerProject(), ((DBNLocalFolder) node).getFolder().getFolderPath()); } else if (node instanceof DBNResourceManagerResource) { boolean rmNewNode = folderNode instanceof DBNAbstractResourceManagerNode; DBNResourceManagerResource rmOldNode = (DBNResourceManagerResource) node;