diff --git a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF
index 31a5e6ebef..d9535a322b 100644
--- a/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF
+++ b/server/bundles/io.cloudbeaver.server/META-INF/MANIFEST.MF
@@ -9,15 +9,13 @@ Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-Activator: io.cloudbeaver.server.WebPlatformActivator
Bundle-ClassPath: .
-Require-Bundle: org.eclipse.core.runtime,
+Require-Bundle: org.eclipse.core.runtime;visibility:=reexport,
org.eclipse.core.expressions,
- org.apache.commons.logging,
- org.eclipse.core.commands,
- org.eclipse.core.resources,
+ org.eclipse.core.resources;visibility:=reexport,
org.apache.commons.jexl,
- org.jkiss.utils,
+ org.jkiss.utils;visibility:=reexport,
org.jkiss.dbeaver.model;visibility:=reexport,
- org.jkiss.dbeaver.model.sql,
+ org.jkiss.dbeaver.model.sql;visibility:=reexport,
org.jkiss.dbeaver.registry,
org.jkiss.dbeaver.data.gis,
javax.servlet;visibility:=reexport,
diff --git a/server/bundles/io.cloudbeaver.server/schema/schema.graphqls b/server/bundles/io.cloudbeaver.server/schema/schema.graphqls
index 7821bb81f2..eb12eba5c4 100644
--- a/server/bundles/io.cloudbeaver.server/schema/schema.graphqls
+++ b/server/bundles/io.cloudbeaver.server/schema/schema.graphqls
@@ -412,6 +412,9 @@ type Query {
# Returns session state ( initialize if not )
sessionState: SessionInfo
+ # Session permissions
+ sessionPermissions: [ID]!
+
# Get driver info
driverList( id: ID ): [ DriverInfo! ]
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java
index 3b7959dae8..7980fdbfb6 100644
--- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java
@@ -80,17 +80,4 @@ public class WebServiceUtils {
return WebServiceUtils.class.getClassLoader().getResourceAsStream(path);
}
- public static TypeDefinitionRegistry loadSchemaDefinition(Class theClass, String schemaPath) throws DBWebException {
- try (InputStream schemaStream = theClass.getClassLoader().getResourceAsStream(schemaPath)) {
- if (schemaStream == null) {
- throw new IOException("Schema file '" + schemaPath + "' not found");
- }
- try (Reader schemaReader = new InputStreamReader(schemaStream)) {
- return new SchemaParser().parse(schemaReader);
- }
- } catch (IOException e) {
- throw new RuntimeException("Error reading core schema", e);
- }
- }
-
}
diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/api/WebServiceBase.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/api/WebServiceBase.java
new file mode 100644
index 0000000000..2bd6c0663b
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/api/WebServiceBase.java
@@ -0,0 +1,50 @@
+/*
+ * DBeaver - Universal Database Manager
+ * Copyright (C) 2010-2020 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.api;
+
+import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.idl.SchemaParser;
+import graphql.schema.idl.TypeDefinitionRegistry;
+import io.cloudbeaver.DBWebException;
+
+import java.io.IOException;
+import java.io.InputStream;
+import java.io.InputStreamReader;
+import java.io.Reader;
+
+/**
+ * Web service implementation
+ */
+public abstract class WebServiceBase implements DBWServiceGraphQL {
+
+ protected void checkPermission(DBWModel model, DataFetchingEnvironment env, String permission) {
+
+ }
+
+ public static TypeDefinitionRegistry loadSchemaDefinition(Class theClass, String schemaPath) throws DBWebException {
+ try (InputStream schemaStream = theClass.getClassLoader().getResourceAsStream(schemaPath)) {
+ if (schemaStream == null) {
+ throw new IOException("Schema file '" + schemaPath + "' not found");
+ }
+ try (Reader schemaReader = new InputStreamReader(schemaStream)) {
+ return new SchemaParser().parse(schemaReader);
+ }
+ } catch (IOException e) {
+ throw new RuntimeException("Error reading core schema", e);
+ }
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..2244f50fd4
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: io.cloudbeaver.service.admin;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Release-Date: 20200504
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: .
+Require-Bundle: io.cloudbeaver.server
+Bundle-Localization: OSGI-INF/l10n/bundle
+Automatic-Module-Name: io.cloudbeaver.service.admin
diff --git a/server/bundles/io.cloudbeaver.service.admin/OSGI-INF/l10n/bundle.properties b/server/bundles/io.cloudbeaver.service.admin/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000000..d87bca20aa
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,2 @@
+Bundle-Vendor = DBeaver Corp
+Bundle-Name = Cloudbeaver Web Service - Metadata
diff --git a/server/bundles/io.cloudbeaver.service.admin/build.properties b/server/bundles/io.cloudbeaver.service.admin/build.properties
new file mode 100644
index 0000000000..91bb65c8b8
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = .,\
+ META-INF/,\
+ OSGI-INF/,\
+ schema/,\
+ plugin.xml
diff --git a/server/bundles/io.cloudbeaver.service.admin/plugin.xml b/server/bundles/io.cloudbeaver.service.admin/plugin.xml
new file mode 100644
index 0000000000..4154c83660
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/plugin.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/server/bundles/io.cloudbeaver.service.admin/pom.xml b/server/bundles/io.cloudbeaver.service.admin/pom.xml
new file mode 100644
index 0000000000..ced79749fc
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+
+ io.cloudbeaver
+ bundles
+ 1.0.0-SNAPSHOT
+ ../
+
+ io.cloudbeaver.service.admin
+ 1.0.0-SNAPSHOT
+ eclipse-plugin
+
+
diff --git a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls
new file mode 100644
index 0000000000..6d3028957a
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls
@@ -0,0 +1,40 @@
+
+type AdminUserInfo {
+ userName: ID!
+
+ grantedRoles: [ID]!
+}
+
+type AdminRoleInfo {
+ roleName: ID!
+
+ rolePermissions: [ID]!
+}
+
+type AdminPermissionInfo {
+ id: ID!
+
+ label: [String]
+ description: [String]
+ category: String
+}
+
+extend type Query {
+
+ listUsers(userName: ID): [AdminUserInfo]!
+ listRoles(roleName: ID): [AdminRoleInfo]!
+ listPermissions(permissionId: ID): [AdminPermissionInfo]
+
+ createUser(userName: ID!): AdminUserInfo!
+ deleteUser(userName: ID!): Boolean
+
+ getUserAdminCredentials(userName: ID!): Object
+
+ setUserAdminCredentials(userName: ID!, credentials: Object): Boolean
+
+ grantUserRole(user: ID!, role: ID!): Boolean
+ revokeUserRole(user: ID!, role: ID!): Boolean
+
+ setRolePermissions(roleID: ID!, permissions: [ID]!): Boolean
+
+}
diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java
new file mode 100644
index 0000000000..421cf175e9
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/AdminPermissions.java
@@ -0,0 +1,26 @@
+/*
+ * DBeaver - Universal Database Manager
+ * Copyright (C) 2010-2020 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.admin;
+
+/**
+ * Web service implementation
+ */
+public class AdminPermissions {
+
+ public static final String PERMISSION_ADMIN = "admin";
+
+}
diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceAdmin.java
new file mode 100644
index 0000000000..cd84a2f1d0
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceAdmin.java
@@ -0,0 +1,48 @@
+/*
+ * DBeaver - Universal Database Manager
+ * Copyright (C) 2010-2020 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.admin;
+
+import graphql.schema.DataFetchingEnvironment;
+import graphql.schema.idl.TypeDefinitionRegistry;
+import io.cloudbeaver.DBWebException;
+import io.cloudbeaver.api.DBWModel;
+import io.cloudbeaver.api.DBWServiceGraphQL;
+import io.cloudbeaver.api.WebServiceBase;
+import org.osgi.framework.AdminPermission;
+
+/**
+ * Web service implementation
+ */
+public class WebServiceAdmin extends WebServiceBase {
+
+ private static final String SCHEMA_FILE_NAME = "schema/service.admin.graphqls";
+
+ @Override
+ public TypeDefinitionRegistry getTypeDefinition() throws DBWebException {
+ return loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME);
+ }
+
+ @Override
+ public void bindWiring(DBWModel model) throws DBWebException {
+ model.getQueryType().dataFetcher("listUsers", env -> {
+ checkPermission(model, env, AdminPermissions.PERMISSION_ADMIN);
+ throw new DBWebException("Not implemented");
+ });
+
+ }
+
+}
diff --git a/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF
new file mode 100644
index 0000000000..c305bfbc5f
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.auth/META-INF/MANIFEST.MF
@@ -0,0 +1,13 @@
+Manifest-Version: 1.0
+Bundle-ManifestVersion: 2
+Bundle-Vendor: %Bundle-Vendor
+Bundle-Name: %Bundle-Name
+Bundle-SymbolicName: io.cloudbeaver.service.auth;singleton:=true
+Bundle-Version: 1.0.0.qualifier
+Bundle-Release-Date: 20200504
+Bundle-RequiredExecutionEnvironment: JavaSE-1.8
+Bundle-ActivationPolicy: lazy
+Bundle-ClassPath: .
+Require-Bundle: io.cloudbeaver.server
+Bundle-Localization: OSGI-INF/l10n/bundle
+Automatic-Module-Name: io.cloudbeaver.service.auth
diff --git a/server/bundles/io.cloudbeaver.service.auth/OSGI-INF/l10n/bundle.properties b/server/bundles/io.cloudbeaver.service.auth/OSGI-INF/l10n/bundle.properties
new file mode 100644
index 0000000000..d87bca20aa
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.auth/OSGI-INF/l10n/bundle.properties
@@ -0,0 +1,2 @@
+Bundle-Vendor = DBeaver Corp
+Bundle-Name = Cloudbeaver Web Service - Metadata
diff --git a/server/bundles/io.cloudbeaver.service.auth/build.properties b/server/bundles/io.cloudbeaver.service.auth/build.properties
new file mode 100644
index 0000000000..91bb65c8b8
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.auth/build.properties
@@ -0,0 +1,7 @@
+source.. = src/
+output.. = target/classes/
+bin.includes = .,\
+ META-INF/,\
+ OSGI-INF/,\
+ schema/,\
+ plugin.xml
diff --git a/server/bundles/io.cloudbeaver.service.auth/plugin.xml b/server/bundles/io.cloudbeaver.service.auth/plugin.xml
new file mode 100644
index 0000000000..c714ef8ae6
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.auth/plugin.xml
@@ -0,0 +1,12 @@
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/server/bundles/io.cloudbeaver.service.auth/pom.xml b/server/bundles/io.cloudbeaver.service.auth/pom.xml
new file mode 100644
index 0000000000..604f19b40a
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.auth/pom.xml
@@ -0,0 +1,16 @@
+
+
+ 4.0.0
+
+ io.cloudbeaver
+ bundles
+ 1.0.0-SNAPSHOT
+ ../
+
+ io.cloudbeaver.service.auth
+ 1.0.0-SNAPSHOT
+ eclipse-plugin
+
+
diff --git a/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls
new file mode 100644
index 0000000000..fef0a1ee47
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.auth/schema/service.auth.graphqls
@@ -0,0 +1,41 @@
+type AuthCredentialInfo {
+ id: ID!
+ label: String!
+ description: String
+ protected: Boolean
+ editable: Boolean
+ possibleValues: [String]!
+ order: Int
+}
+
+type AuthModelInfo {
+ id: ID!
+ label: String!
+ icon: ID
+ description: String
+
+ isDefault: Boolean
+
+ crdentialsInfo: [AuthCredentialInfo]!
+}
+
+type UserAuthInfo {
+ userName: String!
+
+ loginTime: DateTime
+
+ # Optional login message
+ message: String
+}
+
+extend type Query {
+
+ authLogin(model: ID!, credentials: Object!): UserAuthInfo
+
+ authLogout: Boolean
+
+ sessionUser: UserAuthInfo
+
+ authModels: [AuthModelInfo]!
+
+}
diff --git a/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceAuth.java b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceAuth.java
new file mode 100644
index 0000000000..6e899c7d8e
--- /dev/null
+++ b/server/bundles/io.cloudbeaver.service.auth/src/io/cloudbeaver/service/auth/WebServiceAuth.java
@@ -0,0 +1,45 @@
+/*
+ * DBeaver - Universal Database Manager
+ * Copyright (C) 2010-2020 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.auth;
+
+import graphql.schema.idl.TypeDefinitionRegistry;
+import io.cloudbeaver.DBWebException;
+import io.cloudbeaver.api.DBWModel;
+import io.cloudbeaver.api.DBWServiceGraphQL;
+import io.cloudbeaver.api.WebServiceBase;
+
+/**
+ * Web service implementation
+ */
+public class WebServiceAuth extends WebServiceBase {
+
+ private static final String SCHEMA_FILE_NAME = "schema/service.auth.graphqls";
+
+ @Override
+ public TypeDefinitionRegistry getTypeDefinition() throws DBWebException {
+ return loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME);
+ }
+
+ @Override
+ public void bindWiring(DBWModel model) throws DBWebException {
+ model.getQueryType().dataFetcher("authLogin", env -> {
+ Object context = env.getContext();
+ throw new DBWebException("Not implemented");
+ });
+
+ }
+}
diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF
index eae50d5f11..1f70148940 100644
--- a/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF
+++ b/server/bundles/io.cloudbeaver.service.data.transfer/META-INF/MANIFEST.MF
@@ -8,15 +8,8 @@ Bundle-Release-Date: 20200504
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.core.expressions,
- org.apache.commons.logging,
- org.eclipse.core.commands,
- org.eclipse.core.resources,
- io.cloudbeaver.server,
+Require-Bundle: io.cloudbeaver.server,
org.jkiss.dbeaver.data.transfer,
- org.jkiss.dbeaver.model,
- org.jkiss.dbeaver.model.sql,
org.jkiss.dbeaver.registry
Bundle-Localization: OSGI-INF/l10n/bundle
Automatic-Module-Name: io.cloudbeaver.service.data.transfer
diff --git a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java
index e29ae2d076..c477dcc3b0 100644
--- a/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java
+++ b/server/bundles/io.cloudbeaver.service.data.transfer/src/io/cloudbeaver/service/data/transfer/WebServiceDataTransfer.java
@@ -19,11 +19,7 @@ package io.cloudbeaver.service.data.transfer;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.idl.TypeDefinitionRegistry;
import io.cloudbeaver.DBWebException;
-import io.cloudbeaver.WebServiceUtils;
-import io.cloudbeaver.api.DBWModel;
-import io.cloudbeaver.api.DBWServiceGraphQL;
-import io.cloudbeaver.api.DBWServiceServlet;
-import io.cloudbeaver.api.DBWUtils;
+import io.cloudbeaver.api.*;
import io.cloudbeaver.server.CloudbeaverApplication;
import io.cloudbeaver.server.model.session.WebSession;
import org.eclipse.jetty.servlet.ServletContextHandler;
@@ -32,7 +28,7 @@ import org.eclipse.jetty.servlet.ServletHolder;
/**
* Web service implementation
*/
-public class WebServiceDataTransfer implements DBWServiceGraphQL, DBWServiceServlet {
+public class WebServiceDataTransfer extends WebServiceBase implements DBWServiceServlet {
private static final String DT_SCHEMA_FILE_NAME = "schema/service.data.transfer.graphqls";
@@ -45,7 +41,7 @@ public class WebServiceDataTransfer implements DBWServiceGraphQL, DBWServiceServ
@Override
public TypeDefinitionRegistry getTypeDefinition() throws DBWebException {
- return WebServiceUtils.loadSchemaDefinition(getClass(), DT_SCHEMA_FILE_NAME);
+ return loadSchemaDefinition(getClass(), DT_SCHEMA_FILE_NAME);
}
@Override
diff --git a/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF b/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF
index 7a4ffa3c7f..847a24eec2 100644
--- a/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF
+++ b/server/bundles/io.cloudbeaver.service.metadata/META-INF/MANIFEST.MF
@@ -8,16 +8,6 @@ Bundle-Release-Date: 20200504
Bundle-RequiredExecutionEnvironment: JavaSE-1.8
Bundle-ActivationPolicy: lazy
Bundle-ClassPath: .
-Require-Bundle: org.eclipse.core.runtime,
- org.eclipse.core.expressions,
- org.apache.commons.logging,
- org.eclipse.core.commands,
- org.eclipse.core.resources,
- io.cloudbeaver.server,
- com.google.gson,
- javax.servlet,
- org.jkiss.bundle.graphql.java,
- org.jkiss.dbeaver.model,
- org.jkiss.dbeaver.model.sql
+Require-Bundle: io.cloudbeaver.server
Bundle-Localization: OSGI-INF/l10n/bundle
Automatic-Module-Name: io.cloudbeaver.service.metadata
diff --git a/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java b/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java
index 2aad4bc572..0596965058 100644
--- a/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java
+++ b/server/bundles/io.cloudbeaver.service.metadata/src/io/cloudbeaver/service/metadata/WebServiceMetadata.java
@@ -18,10 +18,9 @@ package io.cloudbeaver.service.metadata;
import graphql.schema.idl.TypeDefinitionRegistry;
import io.cloudbeaver.DBWebException;
-import io.cloudbeaver.WebServiceUtils;
import io.cloudbeaver.api.DBWModel;
-import io.cloudbeaver.api.DBWServiceGraphQL;
import io.cloudbeaver.api.DBWUtils;
+import io.cloudbeaver.api.WebServiceBase;
import io.cloudbeaver.server.model.WebNavigatorNodeInfo;
import io.cloudbeaver.server.model.session.WebSession;
import org.jkiss.dbeaver.model.DBPScriptObject;
@@ -35,13 +34,13 @@ import java.util.Map;
/**
* Web service implementation
*/
-public class WebServiceMetadata implements DBWServiceGraphQL {
+public class WebServiceMetadata extends WebServiceBase {
- private static final String METADATA_SCHEMA_FILE_NAME = "schema/service.metadata.graphqls";
+ private static final String SCHEMA_FILE_NAME = "schema/service.metadata.graphqls";
@Override
public TypeDefinitionRegistry getTypeDefinition() throws DBWebException {
- return WebServiceUtils.loadSchemaDefinition(getClass(), METADATA_SCHEMA_FILE_NAME);
+ return loadSchemaDefinition(getClass(), SCHEMA_FILE_NAME);
}
@Override
diff --git a/server/bundles/pom.xml b/server/bundles/pom.xml
index ad3b1c25de..90fe380014 100644
--- a/server/bundles/pom.xml
+++ b/server/bundles/pom.xml
@@ -14,6 +14,8 @@
io.cloudbeaver.server
+ io.cloudbeaver.service.admin
+ io.cloudbeaver.service.auth
io.cloudbeaver.service.metadata
io.cloudbeaver.service.data.transfer
diff --git a/server/features/io.cloudbeaver.server.feature/feature.xml b/server/features/io.cloudbeaver.server.feature/feature.xml
index 939b9e76c3..d9ae9392e9 100644
--- a/server/features/io.cloudbeaver.server.feature/feature.xml
+++ b/server/features/io.cloudbeaver.server.feature/feature.xml
@@ -32,6 +32,8 @@
+
+
diff --git a/server/product/web-server/CloudbeaverServer.product.launch b/server/product/web-server/CloudbeaverServer.product.launch
index 4e764d7bdd..e90dba9c53 100644
--- a/server/product/web-server/CloudbeaverServer.product.launch
+++ b/server/product/web-server/CloudbeaverServer.product.launch
@@ -31,7 +31,7 @@
-
+
diff --git a/webapp/packages/core/src/app/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts b/webapp/packages/core/src/app/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts
index a07c43eec8..284975a4a9 100644
--- a/webapp/packages/core/src/app/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts
+++ b/webapp/packages/core/src/app/TopNavBar/ConnectionSchemaManager/ConnectionSchemaManagerService.ts
@@ -201,12 +201,21 @@ export class ConnectionSchemaManagerService {
}
private async loadConnection(connectionId: string, catalogId?: string) {
-
try {
await this.connectionsManagerService.dbDrivers.load();
- await this.connectionsManagerService.loadObjectContainer(connectionId, catalogId);
} catch (exception) {
- this.notificationService.logException(exception, `Can't load connection: ${connectionId}`);
+ this.notificationService.logException(exception, 'Can\'t load database drivers', true);
+ }
+
+ if (this.changeCatalogId || this.changeSchemaId) {
+ try {
+ await this.connectionsManagerService.loadObjectContainer(connectionId, catalogId);
+ } catch (exception) {
+ this.notificationService.logException(
+ exception,
+ `Can't load objectContainers for ${connectionId}@${catalogId}`,
+ );
+ }
}
}
}