CB-178 Navigator settings API

This commit is contained in:
Serge Rider
2020-07-03 19:28:39 +03:00
parent 7bf07b8fdd
commit 481e5e2269
7 changed files with 97 additions and 6 deletions
@@ -63,6 +63,7 @@ type ServerConfig {
supportedLanguages: [ ServerLanguage! ]!
services: [ WebServiceConfig ]
productConfiguration: Object!
defaultNavigatorSettings: NavigatorSettings!
}
type SessionInfo {
@@ -133,7 +134,8 @@ type DriverPropertyInfo {
}
# Data source info is a description of some remote database. Doesn't include user credentials
type DataSourceInfo @deprecated {
# Deprectaed. Use ConnectionInfo instead
type DataSourceInfo {
id: ID!
driverId: ID!
name: String!
@@ -153,7 +155,7 @@ input ConnectionConfig {
description: String
# ID of predefined datasource
dataSourceId: ID @deprecated
dataSourceId: ID # deprecated
# Custom connection parameters (all optional)
@@ -167,8 +169,8 @@ input ConnectionConfig {
# User credentials
userName: String @deprecated
userPassword: String @deprecated
userName: String # deprecated
userPassword: String # deprecated
authModelId: ID
credentials: Object
@@ -196,6 +198,26 @@ type DriverAuthModel {
parameters: [DriverAuthParameter!]!
}
type NavigatorSettings {
showSystemObjects: Boolean!
showUtilityObjects: Boolean!
showOnlyEntities: Boolean!
mergeEntities: Boolean!
hideFolders: Boolean!
hideSchemas: Boolean!
hideVirtualModel: Boolean!
}
input NavigatorSettingsInput {
showSystemObjects: Boolean!
showUtilityObjects: Boolean!
showOnlyEntities: Boolean!
mergeEntities: Boolean!
hideFolders: Boolean!
hideSchemas: Boolean!
hideVirtualModel: Boolean!
}
# Connection instance
type ConnectionInfo {
id: ID!
@@ -219,6 +241,7 @@ type ConnectionInfo {
# Supported features (provided etc)
features: [ String! ]!
navigatorSettings: NavigatorSettings!
}
type LogEntry {
@@ -295,6 +318,12 @@ extend type Mutation {
# Remove connection and disconnects from the database if needed
deleteConnection( id: ID! ): Boolean!
# Changes navigator settings for connection
setConnectionNavigatorSettings( id: ID!, settings: NavigatorSettingsInput!): Boolean!
# Changes default navigator settings
setDefaultNavigatorSettings( settings: NavigatorSettingsInput!): Boolean!
#### Generic async functions
asyncTaskCancel(id: String!): Boolean
@@ -21,8 +21,8 @@ import io.cloudbeaver.model.session.WebSession;
import io.cloudbeaver.server.CBConstants;
import org.jkiss.dbeaver.model.DBPDataSource;
import org.jkiss.dbeaver.model.DBPDataSourceContainer;
import org.jkiss.dbeaver.model.meta.Association;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import java.util.ArrayList;
import java.util.List;
@@ -126,7 +126,7 @@ public class WebConnectionInfo {
this.clientVersion = clientVersion;
}
@Association
@Property
public String[] getFeatures() {
List<String> features = new ArrayList<>();
@@ -149,4 +149,9 @@ public class WebConnectionInfo {
return features.toArray(new String[0]);
}
@Property
public DBNBrowseSettings getNavigatorSettings() {
return dataSourceContainer.getNavigatorSettings();
}
}
@@ -21,6 +21,7 @@ import io.cloudbeaver.registry.WebServiceRegistry;
import io.cloudbeaver.server.CBApplication;
import io.cloudbeaver.server.CBPlatform;
import org.jkiss.dbeaver.model.meta.Property;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import org.jkiss.dbeaver.registry.language.PlatformLanguageDescriptor;
import org.jkiss.dbeaver.registry.language.PlatformLanguageRegistry;
import org.jkiss.dbeaver.utils.GeneralUtils;
@@ -104,4 +105,9 @@ public class WebServerConfig {
return CBPlatform.getInstance().getApplication().getProductConfiguration();
}
@Property
public DBNBrowseSettings getNavigatorSettings() {
return application.getDefaultNavigatorSettings();
}
}
@@ -28,7 +28,9 @@ import org.jkiss.dbeaver.Log;
import org.jkiss.dbeaver.ModelPreferences;
import org.jkiss.dbeaver.model.app.DBPApplication;
import org.jkiss.dbeaver.model.data.json.JSONUtils;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import org.jkiss.dbeaver.registry.BaseApplicationImpl;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
import org.jkiss.dbeaver.runtime.DBWorkbench;
import org.jkiss.dbeaver.utils.GeneralUtils;
import org.jkiss.dbeaver.utils.PrefUtils;
@@ -69,6 +71,8 @@ public class CBApplication extends BaseApplicationImpl {
private CBDatabase database;
private CBSecurityController securityController;
private DBNBrowseSettings defaultNavigatorSettings = DataSourceNavigatorSettings.PRESET_FULL.getSettings();
private long maxSessionIdleTime = CBConstants.MAX_SESSION_IDLE_TIME;
private boolean develMode = false;
@@ -340,4 +344,12 @@ public class CBApplication extends BaseApplicationImpl {
public boolean isDevelMode() {
return develMode;
}
public DBNBrowseSettings getDefaultNavigatorSettings() {
return defaultNavigatorSettings;
}
public void setDefaultNavigatorSettings(DBNBrowseSettings defaultNavigatorSettings) {
this.defaultNavigatorSettings = defaultNavigatorSettings;
}
}
@@ -21,6 +21,7 @@ import io.cloudbeaver.DBWebException;
import io.cloudbeaver.WebAction;
import io.cloudbeaver.model.*;
import io.cloudbeaver.model.session.WebSession;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import javax.servlet.http.HttpServletRequest;
import java.util.List;
@@ -81,6 +82,13 @@ public interface DBWServiceCore extends DBWService {
@WebAction
boolean closeConnection(WebSession webSession, String connectionId) throws DBWebException;
///////////////////////////////////////////
// Navigator settings
boolean setConnectionNavigatorSettings(WebSession webSession, String id, DBNBrowseSettings settings) throws DBWebException;
boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings);
///////////////////////////////////////////
// Async tasks
@@ -89,4 +97,5 @@ public interface DBWServiceCore extends DBWService {
@WebAction
boolean cancelAsyncTask(WebSession webSession, String taskId) throws DBWebException;
}
@@ -16,6 +16,8 @@
*/
package io.cloudbeaver.service.core;
import com.google.gson.Gson;
import com.google.gson.GsonBuilder;
import graphql.TypeResolutionEnvironment;
import graphql.schema.DataFetchingEnvironment;
import graphql.schema.idl.TypeRuntimeWiring;
@@ -27,12 +29,18 @@ import io.cloudbeaver.server.graphql.GraphQLEndpoint;
import io.cloudbeaver.service.DBWBindingContext;
import io.cloudbeaver.service.WebServiceBindingBase;
import io.cloudbeaver.service.core.impl.WebServiceCore;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
import java.util.Map;
/**
* Web service implementation
*/
public class WebServiceBindingCore extends WebServiceBindingBase<DBWServiceCore> {
private final Gson gson = new GsonBuilder().create();
public WebServiceBindingCore() {
super(DBWServiceCore.class, new WebServiceCore(), "schema/service.core.graphqls");
}
@@ -69,6 +77,9 @@ public class WebServiceBindingCore extends WebServiceBindingBase<DBWServiceCore>
.dataFetcher("testConnection", env -> getService(env).testConnection(getWebSession(env), getConnectionConfig(env)))
.dataFetcher("closeConnection", env -> getService(env).closeConnection(getWebSession(env), env.getArgument("id")))
.dataFetcher("setConnectionNavigatorSettings", env -> getService(env).setConnectionNavigatorSettings(getWebSession(env), env.getArgument("id"), parseNavigatorSettings(env.getArgument("settings"))))
.dataFetcher("setDefaultNavigatorSettings", env -> getService(env).setDefaultNavigatorSettings(getWebSession(env), parseNavigatorSettings(env.getArgument("settings"))))
.dataFetcher("asyncTaskStatus", env -> getService(env).getAsyncTaskStatus(getWebSession(env), env.getArgument("id")))
.dataFetcher("asyncTaskCancel", env -> getService(env).cancelAsyncTask(getWebSession(env), env.getArgument("id")))
;
@@ -77,6 +88,11 @@ public class WebServiceBindingCore extends WebServiceBindingBase<DBWServiceCore>
);
}
private DBNBrowseSettings parseNavigatorSettings(Map<String, Object> settingsMap) {
return gson.fromJson(
gson.toJsonTree(settingsMap), DataSourceNavigatorSettings.class);
}
private WebConnectionConfig getConnectionConfig(DataFetchingEnvironment env) {
return new WebConnectionConfig(env.getArgument("config"));
}
@@ -32,6 +32,7 @@ import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry;
import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration;
import org.jkiss.dbeaver.model.connection.DBPDriver;
import org.jkiss.dbeaver.model.exec.DBCException;
import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings;
import org.jkiss.dbeaver.registry.DataSourceDescriptor;
import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings;
import org.jkiss.dbeaver.runtime.jobs.ConnectionTestJob;
@@ -230,6 +231,19 @@ public class WebServiceCore implements DBWServiceCore {
return disconnected;
}
@Override
public boolean setConnectionNavigatorSettings(WebSession webSession, String id, DBNBrowseSettings settings) throws DBWebException {
WebConnectionInfo connectionInfo = webSession.getWebConnectionInfo(id);
((DataSourceDescriptor)connectionInfo.getDataSourceContainer()).setNavigatorSettings(settings);
return true;
}
@Override
public boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings) {
CBApplication.getInstance().setDefaultNavigatorSettings(settings);
return true;
}
@NotNull
private DBPDataSourceContainer makeConnectionInstance(WebConnectionConfig config, DBPDataSourceRegistry sessionRegistry) throws DBWebException {
String driverId = config.getDriverId();