From a520aa1f204730009fb902ad132f733105ec8476 Mon Sep 17 00:00:00 2001 From: Alexander Skoblikov Date: Wed, 25 Oct 2023 17:19:03 +0200 Subject: [PATCH] CB-4125 add objectId to gql navigator model (#2085) --- .../schema/service.navigator.graphqls | 4 ++++ .../navigator/WebNavigatorNodeInfo.java | 9 ++++++++ .../cloudbeaver/service/fs/DBWServiceFS.java | 3 ++- .../service/fs/WebServiceBindingFS.java | 20 ++++++++-------- .../cloudbeaver/service/fs/model/FSFile.java | 2 -- .../service/fs/model/FSFileSystem.java | 23 +++++++++++++++++++ .../io.cloudbeaver.service.rm.nio/plugin.xml | 8 +++---- 7 files changed, 53 insertions(+), 16 deletions(-) create mode 100644 server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFileSystem.java diff --git a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls index c3e31fe09d..d38686e06e 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.navigator.graphqls @@ -76,6 +76,10 @@ type NavigatorNodeInfo { # Associated object. Maybe null for non-database objects object: DatabaseObjectInfo + # Associated object. Return value depends on the node type - connectionId for connection node, resource path for resource node, etc. + # null - if node currently not support this property + objectId: String + # Supported features: item, container, leaf # canDelete, canRename features: [ String! ] diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebNavigatorNodeInfo.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebNavigatorNodeInfo.java index 14bd0c8436..880e265a88 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebNavigatorNodeInfo.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/navigator/WebNavigatorNodeInfo.java @@ -32,6 +32,7 @@ import org.jkiss.dbeaver.model.edit.DBEObjectRenamer; import org.jkiss.dbeaver.model.meta.Association; import org.jkiss.dbeaver.model.meta.Property; import org.jkiss.dbeaver.model.navigator.*; +import org.jkiss.dbeaver.model.navigator.fs.DBNPath; import org.jkiss.dbeaver.model.rm.RMProject; import org.jkiss.dbeaver.model.rm.RMProjectPermission; import org.jkiss.dbeaver.model.struct.DBSEntity; @@ -278,6 +279,14 @@ public class WebNavigatorNodeInfo { return null; } + @Property + public String getObjectId() { + if (node instanceof DBNPath dbnPath) { + return dbnPath.getPath().toUri().toString(); + } + return null; + } + @Property public DBSObjectFilter getFilter() throws DBWebException { if (!(node instanceof DBNDatabaseFolder)) { diff --git a/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/DBWServiceFS.java b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/DBWServiceFS.java index fefd6d1a09..461c088b0e 100644 --- a/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/DBWServiceFS.java +++ b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/DBWServiceFS.java @@ -29,7 +29,8 @@ import java.net.URI; */ public interface DBWServiceFS extends DBWService { @NotNull - String[] getAvailableFileSystems(@NotNull WebSession webSession, @NotNull String projectId) throws DBWebException; + String[] getAvailableFileSystems(@NotNull WebSession webSession, @NotNull String projectId) + throws DBWebException; @NotNull FSFile getFile( diff --git a/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/WebServiceBindingFS.java b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/WebServiceBindingFS.java index 4e0d92f056..e492bf0ced 100644 --- a/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/WebServiceBindingFS.java +++ b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/WebServiceBindingFS.java @@ -22,6 +22,8 @@ import io.cloudbeaver.service.WebServiceBindingBase; import io.cloudbeaver.service.fs.impl.WebServiceFS; import org.jkiss.utils.CommonUtils; +import java.net.URI; + /** * Web service implementation */ @@ -41,47 +43,47 @@ public class WebServiceBindingFS extends WebServiceBindingBase { .dataFetcher("fsFile", env -> getService(env).getFile(getWebSession(env), env.getArgument("projectId"), - env.getArgument("fileURI")) + URI.create(env.getArgument("fileURI"))) ) .dataFetcher("fsListFiles", env -> getService(env).getFiles(getWebSession(env), env.getArgument("projectId"), - env.getArgument("folderURI")) + URI.create(env.getArgument("folderURI"))) ) .dataFetcher("fsReadFileContentAsString", env -> getService(env).readFileContent(getWebSession(env), env.getArgument("projectId"), - env.getArgument("fileURI")) + URI.create(env.getArgument("fileURI"))) ) ; model.getMutationType() .dataFetcher("fsCreateFile", env -> getService(env).createFile(getWebSession(env), env.getArgument("projectId"), - env.getArgument("fileURI")) + URI.create(env.getArgument("fileURI"))) ) .dataFetcher("fsCreateFolder", env -> getService(env).createFolder(getWebSession(env), env.getArgument("projectId"), - env.getArgument("folderURI")) + URI.create(env.getArgument("folderURI"))) ) .dataFetcher("fsDeleteFile", env -> getService(env).deleteFile(getWebSession(env), env.getArgument("projectId"), - env.getArgument("fileURI")) + URI.create(env.getArgument("fileURI"))) ) .dataFetcher("fsMoveFile", env -> getService(env).moveFile( getWebSession(env), env.getArgument("projectId"), - env.getArgument("fromURI"), - env.getArgument("toURI")) + URI.create(env.getArgument("fromURI")), + URI.create(env.getArgument("toURI"))) ) .dataFetcher("fsWriteFileStringContent", env -> getService(env).writeFileContent( getWebSession(env), env.getArgument("projectId"), - env.getArgument("fileURI"), + URI.create(env.getArgument("fileURI")), env.getArgument("data"), CommonUtils.toBoolean(env.getArgument("forceOverwrite")) ) diff --git a/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFile.java b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFile.java index 757a956f52..9fc88e7205 100644 --- a/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFile.java +++ b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFile.java @@ -41,13 +41,11 @@ public class FSFile { } @Property - public long getLength() throws IOException { return Files.size(path); } @Property - public boolean isFolder() { return Files.isDirectory(path); } diff --git a/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFileSystem.java b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFileSystem.java new file mode 100644 index 0000000000..3fc222f24e --- /dev/null +++ b/server/bundles/io.cloudbeaver.service.fs/src/io/cloudbeaver/service/fs/model/FSFileSystem.java @@ -0,0 +1,23 @@ +/* + * DBeaver - Universal Database Manager + * Copyright (C) 2010-2023 DBeaver Corp and others + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package io.cloudbeaver.service.fs.model; + +import org.jkiss.code.NotNull; +import org.jkiss.code.Nullable; + +public record FSFileSystem(@NotNull String id, @Nullable String requiredAuth) { +} diff --git a/server/bundles/io.cloudbeaver.service.rm.nio/plugin.xml b/server/bundles/io.cloudbeaver.service.rm.nio/plugin.xml index d6694efc2c..c3e1b00a44 100644 --- a/server/bundles/io.cloudbeaver.service.rm.nio/plugin.xml +++ b/server/bundles/io.cloudbeaver.service.rm.nio/plugin.xml @@ -3,10 +3,10 @@ - - + + - - + +