From 245d49b8926f39b5b4c266fea16e7c1f148be5fc Mon Sep 17 00:00:00 2001 From: alex <48489896+devnaumov@users.noreply.github.com> Date: Wed, 18 Oct 2023 12:37:23 +0200 Subject: [PATCH] CB-4098 add prompt dialog to the sql editor (#2055) * CB-4098 add prompt dialog to the sql editor * CB-4098 add api integration * CB-4046 add events * CB-4046 fixes after review * CB-3913 move AI feature to the ee --------- Co-authored-by: Ainur Co-authored-by: Daria Marutkina <125263541+dariamarutkina@users.noreply.github.com> --- .../bundles/io.cloudbeaver.server/plugin.xml | 4 ++- .../WSEventHandlerWorkspaceConfigUpdate.java | 35 +++++++++++++++++++ webapp/packages/core-utils/src/index.ts | 1 + .../core-utils/src/replaceSubstring.test.ts | 28 +++++++++++++++ .../core-utils/src/replaceSubstring.ts | 13 +++++++ .../src/SqlEditor/ISQLEditorData.ts | 1 + .../SqlEditor/SqlEditorActionsMenuBar.m.css | 5 +++ .../src/SqlEditor/useSqlEditor.ts | 1 - 8 files changed, 86 insertions(+), 2 deletions(-) create mode 100644 server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSEventHandlerWorkspaceConfigUpdate.java create mode 100644 webapp/packages/core-utils/src/replaceSubstring.test.ts create mode 100644 webapp/packages/core-utils/src/replaceSubstring.ts diff --git a/server/bundles/io.cloudbeaver.server/plugin.xml b/server/bundles/io.cloudbeaver.server/plugin.xml index 522dfe5427..7213197f5a 100644 --- a/server/bundles/io.cloudbeaver.server/plugin.xml +++ b/server/bundles/io.cloudbeaver.server/plugin.xml @@ -47,7 +47,6 @@ - @@ -73,6 +72,9 @@ + + + diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSEventHandlerWorkspaceConfigUpdate.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSEventHandlerWorkspaceConfigUpdate.java new file mode 100644 index 0000000000..fa16b732ea --- /dev/null +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/events/WSEventHandlerWorkspaceConfigUpdate.java @@ -0,0 +1,35 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2023 DBeaver Corp + * + * All Rights Reserved. + * + * NOTICE: All information contained herein is, and remains + * the property of DBeaver Corp and its suppliers, if any. + * The intellectual and technical concepts contained + * herein are proprietary to DBeaver Corp and its suppliers + * and may be covered by U.S. and Foreign Patents, + * patents in process, and are protected by trade secret or copyright law. + * Dissemination of this information or reproduction of this material + * is strictly forbidden unless prior written permission is obtained + * from DBeaver Corp. + */ +package io.cloudbeaver.server.events; + +import org.jkiss.code.NotNull; +import org.jkiss.dbeaver.Log; +import org.jkiss.dbeaver.model.WorkspaceConfigEventManager; +import org.jkiss.dbeaver.model.websocket.event.WSEventType; +import org.jkiss.dbeaver.model.websocket.event.WSWorkspaceConfigurationChangedEvent; + +public class WSEventHandlerWorkspaceConfigUpdate extends WSDefaultEventHandler { + private static final Log log = Log.getLog(WSEventHandlerWorkspaceConfigUpdate.class); + + @Override + public void handleEvent(@NotNull WSWorkspaceConfigurationChangedEvent event) { + String configFileName = event.getConfigFilePath(); + WorkspaceConfigEventManager.fireConfigChangedEvent(configFileName); + super.handleEvent(event); + } + +} \ No newline at end of file diff --git a/webapp/packages/core-utils/src/index.ts b/webapp/packages/core-utils/src/index.ts index ca2a5a0ccc..9ccaa2f809 100644 --- a/webapp/packages/core-utils/src/index.ts +++ b/webapp/packages/core-utils/src/index.ts @@ -68,3 +68,4 @@ export * from './createLastPromiseGetter'; export * from './removeMetadataFromBase64'; export * from './renamePathName'; export * from './removeLineBreak'; +export * from './replaceSubstring'; diff --git a/webapp/packages/core-utils/src/replaceSubstring.test.ts b/webapp/packages/core-utils/src/replaceSubstring.test.ts new file mode 100644 index 0000000000..4023e86fbf --- /dev/null +++ b/webapp/packages/core-utils/src/replaceSubstring.test.ts @@ -0,0 +1,28 @@ +import { replaceSubstring } from './replaceSubstring'; + +describe('replaceSubstring', () => { + it('should replace a substring correctly', () => { + const result = replaceSubstring('Hello, world!', 7, 12, 'there'); + expect(result).toBe('Hello, there!'); + }); + + it('should handle beginIndex at the start', () => { + const result = replaceSubstring('Hello, world!', 0, 5, 'Hi'); + expect(result).toBe('Hi, world!'); + }); + + it('should handle endIndex at the end', () => { + const result = replaceSubstring('Hello, world!', 7, 13, 'everyone'); + expect(result).toBe('Hello, everyone'); + }); + + it('should handle empty replacement', () => { + const result = replaceSubstring('Hello, world!', 7, 13, ''); + expect(result).toBe('Hello, '); + }); + + it('should handle replacement longer than the substring', () => { + const result = replaceSubstring('Hello, world!', 7, 12, 'everyone out there'); + expect(result).toBe('Hello, everyone out there!'); + }); +}); diff --git a/webapp/packages/core-utils/src/replaceSubstring.ts b/webapp/packages/core-utils/src/replaceSubstring.ts new file mode 100644 index 0000000000..b3c4075655 --- /dev/null +++ b/webapp/packages/core-utils/src/replaceSubstring.ts @@ -0,0 +1,13 @@ +/* + * CloudBeaver - Cloud Database Manager + * Copyright (C) 2020-2023 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0. + * you may not use this file except in compliance with the License. + */ + +export function replaceSubstring(str: string, beginIndex: number, endIndex: number, replacement: string) { + const beforeSubstring = str.slice(0, beginIndex); + const afterSubstring = str.slice(endIndex); + return beforeSubstring + replacement + afterSubstring; +} diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts b/webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts index 20b99daca7..f84a1f4ab4 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/ISQLEditorData.ts @@ -59,6 +59,7 @@ export interface ISQLEditorData { executeScript(): Promise; switchEditing(): Promise; getHintProposals(position: number, simple: boolean): Promise; + getResolvedSegment(): Promise; executeQueryAction( segment: ISQLScriptSegment | undefined, action: (query: ISQLScriptSegment) => Promise, diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorActionsMenuBar.m.css b/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorActionsMenuBar.m.css index 6622623401..a8066255f9 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorActionsMenuBar.m.css +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/SqlEditorActionsMenuBar.m.css @@ -1,3 +1,8 @@ +.sqlActions { + display: flex; + flex-direction: column; +} + .sqlActions.menuBar { height: unset; width: 32px; diff --git a/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts b/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts index 1b275724b8..0e9eccaf61 100644 --- a/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts +++ b/webapp/packages/plugin-sql-editor/src/SqlEditor/useSqlEditor.ts @@ -54,7 +54,6 @@ interface ISQLEditorDataPrivate extends ISQLEditorData { updateParserScripts(): Promise; loadDatabaseDataModels(): Promise; getExecutingQuery(script: boolean): ISQLScriptSegment | undefined; - getResolvedSegment(): Promise; getSubQuery(): ISQLScriptSegment | undefined; }