From fc53f3ba5db397e55867232366da80223e3a2248 Mon Sep 17 00:00:00 2001 From: Serge Rider Date: Wed, 26 Aug 2020 19:39:44 +0300 Subject: [PATCH] CB-262 Server configuration API --- .../schema/service.core.graphqls | 7 +- .../src/io/cloudbeaver/WebServiceUtils.java | 6 ++ .../io/cloudbeaver/model/WebServerConfig.java | 10 +-- .../io/cloudbeaver/server/CBAppConfig.java | 5 -- .../io/cloudbeaver/server/CBApplication.java | 10 +++ .../service/core/DBWServiceCore.java | 7 +- .../service/core/WebServiceBindingCore.java | 18 +--- .../service/core/impl/WebServiceCore.java | 12 --- .../schema/service.admin.graphqls | 16 ++++ .../service/admin/DBWServiceAdmin.java | 7 ++ .../service/admin/WebServiceBindingAdmin.java | 82 ++++++++++--------- .../service/admin/impl/WebServiceAdmin.java | 7 ++ 12 files changed, 100 insertions(+), 87 deletions(-) diff --git a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls index a1adf5993d..00e668a2fc 100644 --- a/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls +++ b/server/bundles/io.cloudbeaver.server/schema/service.core.graphqls @@ -79,12 +79,12 @@ type ServerConfig { anonymousAccessEnabled: Boolean authenticationEnabled: Boolean - supportsPredefinedConnections: Boolean @deprecated # Supported always - supportsProvidedConnections: Boolean @deprecated # Supported always supportsCustomConnections: Boolean supportsConnectionBrowser: Boolean supportsWorkspaces: Boolean + configurationMode: Boolean + supportedLanguages: [ ServerLanguage! ]! services: [ WebServiceConfig ] productConfiguration: Object! @@ -325,9 +325,6 @@ extend type Mutation { # 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 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 8a7913fadd..4aafa36ec8 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/WebServiceUtils.java @@ -27,6 +27,7 @@ import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; import org.jkiss.dbeaver.model.auth.DBAAuthCredentials; import org.jkiss.dbeaver.model.connection.DBPConnectionConfiguration; import org.jkiss.dbeaver.model.connection.DBPDriver; +import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings; import org.jkiss.dbeaver.registry.DataSourceDescriptor; import org.jkiss.dbeaver.registry.DataSourceNavigatorSettings; import org.jkiss.dbeaver.registry.DataSourceProviderDescriptor; @@ -166,4 +167,9 @@ public class WebServiceUtils { initAuthProperties(dataSource, config.getCredentials()); dataSource.setSavePassword(config.isSaveCredentials()); } + + public static DBNBrowseSettings parseNavigatorSettings(Map settingsMap) { + return gson.fromJson( + gson.toJsonTree(settingsMap), DataSourceNavigatorSettings.class); + } } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java index 31c6fca971..d88f183e9a 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/model/WebServerConfig.java @@ -61,11 +61,6 @@ public class WebServerConfig { return application.getAppConfiguration().isAuthenticationEnabled(); } - @Property - public boolean isSupportsPredefinedConnections() { - return application.getAppConfiguration().isSupportsPredefinedConnections(); - } - @Property public boolean isSupportsCustomConnections() { return application.getAppConfiguration().isSupportsCustomConnections(); @@ -81,6 +76,11 @@ public class WebServerConfig { return application.getAppConfiguration().isSupportsUserWorkspaces(); } + @Property + public boolean isConfigurationMode() { + return application.isConfigurationMode(); + } + @Property public WebServerLanguage[] getSupportedLanguages() { List langs = PlatformLanguageRegistry.getInstance().getLanguages(); diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java index bb11f93704..999af270a6 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBAppConfig.java @@ -30,7 +30,6 @@ public class CBAppConfig { private boolean authenticationEnabled = true; private String anonymousUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME; private String defaultUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME; - private boolean supportsPredefinedConnections = true; private boolean supportsCustomConnections = true; private boolean supportsConnectionBrowser = false; private boolean supportsUserWorkspaces = false; @@ -55,10 +54,6 @@ public class CBAppConfig { return defaultUserRole; } - public boolean isSupportsPredefinedConnections() { - return supportsPredefinedConnections; - } - public boolean isSupportsCustomConnections() { return supportsCustomConnections; } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java index 785cad3871..8100ccd933 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/server/CBApplication.java @@ -80,6 +80,7 @@ public class CBApplication extends BaseApplicationImpl { private long maxSessionIdleTime = CBConstants.MAX_SESSION_IDLE_TIME; private boolean develMode = false; + private boolean configurationMode = false; public CBApplication() { } @@ -349,6 +350,14 @@ public class CBApplication extends BaseApplicationImpl { return develMode; } + public boolean isConfigurationMode() { + return configurationMode; + } + + public void setConfigurationMode(boolean configurationMode) { + this.configurationMode = configurationMode; + } + public DBNBrowseSettings getDefaultNavigatorSettings() { return defaultNavigatorSettings; } @@ -356,4 +365,5 @@ public class CBApplication extends BaseApplicationImpl { public void setDefaultNavigatorSettings(DBNBrowseSettings defaultNavigatorSettings) { this.defaultNavigatorSettings = defaultNavigatorSettings; } + } diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java index be05bd61ab..f19acfc11c 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/DBWServiceCore.java @@ -104,17 +104,12 @@ public interface DBWServiceCore extends DBWService { /////////////////////////////////////////// // Navigator settings + @WebAction boolean setConnectionNavigatorSettings(WebSession webSession, String id, DBNBrowseSettings settings) throws DBWebException; - boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings); - /////////////////////////////////////////// // Async tasks - @Deprecated - @WebAction - WebAsyncTaskInfo getAsyncTaskStatus(WebSession webSession, String taskId) throws DBWebException; - @WebAction WebAsyncTaskInfo getAsyncTaskInfo(WebSession webSession, String taskId, Boolean removeOnFinish) throws DBWebException; diff --git a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java index 2784370d89..87f3f370cd 100644 --- a/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java +++ b/server/bundles/io.cloudbeaver.server/src/io/cloudbeaver/service/core/WebServiceBindingCore.java @@ -16,12 +16,11 @@ */ 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; import io.cloudbeaver.DBWebException; +import io.cloudbeaver.WebServiceUtils; import io.cloudbeaver.model.WebConnectionConfig; import io.cloudbeaver.model.session.WebSessionManager; import io.cloudbeaver.server.CBPlatform; @@ -29,18 +28,12 @@ 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 { - private final Gson gson = new GsonBuilder().create(); - public WebServiceBindingCore() { super(DBWServiceCore.class, new WebServiceCore(), "schema/service.core.graphqls"); } @@ -83,10 +76,8 @@ public class WebServiceBindingCore extends WebServiceBindingBase .dataFetcher("closeConnection", env -> getService(env).closeConnection(getWebSession(env), env.getArgument("id"))) .dataFetcher("deleteConnection", env -> getService(env).deleteConnection(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("setConnectionNavigatorSettings", env -> getService(env).setConnectionNavigatorSettings(getWebSession(env), env.getArgument("id"), WebServiceUtils.parseNavigatorSettings(env.getArgument("settings")))) - .dataFetcher("asyncTaskStatus", env -> getService(env).getAsyncTaskStatus(getWebSession(env), env.getArgument("id"))) .dataFetcher("asyncTaskInfo", env -> getService(env).getAsyncTaskInfo( getWebSession(env), env.getArgument("id"), @@ -98,11 +89,6 @@ public class WebServiceBindingCore extends WebServiceBindingBase ); } - private DBNBrowseSettings parseNavigatorSettings(Map settingsMap) { - return gson.fromJson( - gson.toJsonTree(settingsMap), DataSourceNavigatorSettings.class); - } - private WebConnectionConfig getConnectionConfig(DataFetchingEnvironment env) { return new WebConnectionConfig(env.getArgument("config")); } 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 972ef24b95..c4f8325ba4 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 @@ -327,18 +327,6 @@ public class WebServiceCore implements DBWServiceCore { return true; } - @Override - public boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings) { - CBApplication.getInstance().setDefaultNavigatorSettings(settings); - return true; - } - - - @Override - public WebAsyncTaskInfo getAsyncTaskStatus(WebSession webSession, String taskId) throws DBWebException { - return webSession.asyncTaskStatus(taskId, true); - } - @Override public WebAsyncTaskInfo getAsyncTaskInfo(WebSession webSession, String taskId, Boolean removeOnFinish) throws DBWebException { return webSession.asyncTaskStatus(taskId, CommonUtils.toBoolean(removeOnFinish)); diff --git a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls index 002e6edf1a..22be599193 100644 --- a/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls +++ b/server/bundles/io.cloudbeaver.service.admin/schema/service.admin.graphqls @@ -44,6 +44,8 @@ type AdminPermissionInfo { extend type Query { + #### Users and roles + listUsers(userId: ID): [AdminUserInfo]! listRoles(roleId: ID): [AdminRoleInfo]! listPermissions: [AdminPermissionInfo]! @@ -80,4 +82,18 @@ extend type Query { getSubjectConnectionAccess(subjectId: ID): [AdminConnectionGrantInfo!]! setSubjectConnectionAccess(subjectId: ID!, connections: [ID!]!): Boolean + #### Global configuration + + configureServer(configuration: ServerConfigInput!): Boolean! + + # Changes default navigator settings + setDefaultNavigatorSettings( settings: NavigatorSettingsInput!): Boolean! + +} + +input ServerConfigInput { + serverName: String + + adminName: String + adminPassword: String } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java index c07a450f6c..9bf2989945 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/DBWServiceAdmin.java @@ -25,6 +25,7 @@ import io.cloudbeaver.model.WebConnectionInfo; import io.cloudbeaver.model.session.WebSession; import org.jkiss.code.NotNull; import org.jkiss.code.Nullable; +import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings; import java.util.List; import java.util.Map; @@ -87,6 +88,12 @@ public interface DBWServiceAdmin extends DBWService { @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) boolean deleteConnectionConfiguration(@NotNull WebSession webSession, @NotNull String id) throws DBWebException; + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) + boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings); + + //////////////////////////////////////////////////////////////////// + // Permissions + @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) DBWConnectionGrant[] getConnectionSubjectAccess(WebSession webSession, String connectionId) throws DBWebException; @WebAction(requirePermissions = AdminPermissions.PERMISSION_ADMIN) diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java index 81206653c6..1f6fa4744c 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/WebServiceBindingAdmin.java @@ -17,6 +17,7 @@ package io.cloudbeaver.service.admin; import io.cloudbeaver.DBWebException; +import io.cloudbeaver.WebServiceUtils; import io.cloudbeaver.model.WebConnectionConfig; import io.cloudbeaver.service.DBWBindingContext; import io.cloudbeaver.service.WebServiceBindingBase; @@ -35,49 +36,54 @@ public class WebServiceBindingAdmin extends WebServiceBindingBase getService(env).listUsers(getWebSession(env), env.getArgument("userId"))); - model.getQueryType().dataFetcher("listRoles", - env -> getService(env).listRoles(getWebSession(env), env.getArgument("roleId"))); - model.getQueryType().dataFetcher("listPermissions", - env -> getService(env).listPermissions(getWebSession(env))); - model.getQueryType().dataFetcher("createUser", - env -> getService(env).createUser(getWebSession(env), env.getArgument("userId"))); - model.getQueryType().dataFetcher("deleteUser", - env -> getService(env).deleteUser(getWebSession(env), env.getArgument("userId"))); - model.getQueryType().dataFetcher("createRole", - env -> getService(env).createRole(getWebSession(env), env.getArgument("roleId"))); - model.getQueryType().dataFetcher("deleteRole", - env -> getService(env).deleteRole(getWebSession(env), env.getArgument("roleId"))); + model.getQueryType() + .dataFetcher("listUsers", + env -> getService(env).listUsers(getWebSession(env), env.getArgument("userId"))) + .dataFetcher("listRoles", + env -> getService(env).listRoles(getWebSession(env), env.getArgument("roleId"))) + .dataFetcher("listPermissions", + env -> getService(env).listPermissions(getWebSession(env))) + .dataFetcher("createUser", + env -> getService(env).createUser(getWebSession(env), env.getArgument("userId"))) + .dataFetcher("deleteUser", + env -> getService(env).deleteUser(getWebSession(env), env.getArgument("userId"))) + .dataFetcher("createRole", + env -> getService(env).createRole(getWebSession(env), env.getArgument("roleId"))) + .dataFetcher("deleteRole", + env -> getService(env).deleteRole(getWebSession(env), env.getArgument("roleId"))) - model.getQueryType().dataFetcher("grantUserRole", - env -> getService(env).grantUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId"))); - model.getQueryType().dataFetcher("revokeUserRole", - env -> getService(env).revokeUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId"))); - model.getQueryType().dataFetcher("setSubjectPermissions", - env -> getService(env).setSubjectPermissions(getWebSession(env), env.getArgument("roleId"), env.getArgument("permissions"))); - model.getQueryType().dataFetcher("setUserCredentials", - env -> getService(env).setUserCredentials(getWebSession(env), env.getArgument("userId"), env.getArgument("providerId"), env.getArgument("credentials"))); + .dataFetcher("grantUserRole", + env -> getService(env).grantUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId"))) + .dataFetcher("revokeUserRole", + env -> getService(env).revokeUserRole(getWebSession(env), env.getArgument("userId"), env.getArgument("roleId"))) + .dataFetcher("setSubjectPermissions", + env -> getService(env).setSubjectPermissions(getWebSession(env), env.getArgument("roleId"), env.getArgument("permissions"))) + .dataFetcher("setUserCredentials", + env -> getService(env).setUserCredentials(getWebSession(env), env.getArgument("userId"), env.getArgument("providerId"), env.getArgument("credentials"))) - model.getQueryType().dataFetcher("allConnections", env -> getService(env).getAllConnections(getWebSession(env))); - model.getQueryType().dataFetcher("searchConnections", env -> getService(env).searchConnections(getWebSession(env), env.getArgument("hostNames"))); + .dataFetcher("allConnections", env -> getService(env).getAllConnections(getWebSession(env))) + .dataFetcher("searchConnections", env -> getService(env).searchConnections(getWebSession(env), env.getArgument("hostNames"))) - model.getQueryType().dataFetcher("createConnectionConfiguration", - env -> getService(env).createConnectionConfiguration(getWebSession(env), new WebConnectionConfig(env.getArgument("config")))); - model.getQueryType().dataFetcher("updateConnectionConfiguration", - env -> getService(env).updateConnectionConfiguration(getWebSession(env), env.getArgument("id"), new WebConnectionConfig(env.getArgument("config")))); - model.getQueryType().dataFetcher("deleteConnectionConfiguration", - env -> getService(env).deleteConnectionConfiguration(getWebSession(env), env.getArgument("id"))); + .dataFetcher("createConnectionConfiguration", + env -> getService(env).createConnectionConfiguration(getWebSession(env), new WebConnectionConfig(env.getArgument("config")))) + .dataFetcher("updateConnectionConfiguration", + env -> getService(env).updateConnectionConfiguration(getWebSession(env), env.getArgument("id"), new WebConnectionConfig(env.getArgument("config")))) + .dataFetcher("deleteConnectionConfiguration", + env -> getService(env).deleteConnectionConfiguration(getWebSession(env), env.getArgument("id"))) - model.getQueryType().dataFetcher("getConnectionSubjectAccess", - env -> getService(env).getConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId"))); - model.getQueryType().dataFetcher("setConnectionSubjectAccess", - env -> getService(env).setConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId"), env.getArgument("subjects"))); + .dataFetcher("getConnectionSubjectAccess", + env -> getService(env).getConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId"))) + .dataFetcher("setConnectionSubjectAccess", + env -> getService(env).setConnectionSubjectAccess(getWebSession(env), env.getArgument("connectionId"), env.getArgument("subjects"))) - model.getQueryType().dataFetcher("getSubjectConnectionAccess", - env -> getService(env).getSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId"))); - model.getQueryType().dataFetcher("setSubjectConnectionAccess", - env -> getService(env).setSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId"), env.getArgument("connections"))); + .dataFetcher("getSubjectConnectionAccess", + env -> getService(env).getSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId"))) + .dataFetcher("setSubjectConnectionAccess", + env -> getService(env).setSubjectConnectionAccess(getWebSession(env), env.getArgument("subjectId"), env.getArgument("connections"))) + + .dataFetcher("setDefaultNavigatorSettings", + env -> getService(env).setDefaultNavigatorSettings(getWebSession(env), WebServiceUtils.parseNavigatorSettings(env.getArgument("settings")))) + ; } } diff --git a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java index 2556d8ce1d..6a533f524e 100644 --- a/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java +++ b/server/bundles/io.cloudbeaver.service.admin/src/io/cloudbeaver/service/admin/impl/WebServiceAdmin.java @@ -37,6 +37,7 @@ import org.jkiss.dbeaver.Log; import org.jkiss.dbeaver.model.DBPDataSourceContainer; import org.jkiss.dbeaver.model.app.DBPDataSourceRegistry; import org.jkiss.dbeaver.model.exec.DBCException; +import org.jkiss.dbeaver.model.navigator.DBNBrowseSettings; import org.jkiss.utils.CommonUtils; import java.lang.reflect.InvocationTargetException; @@ -294,6 +295,12 @@ public class WebServiceAdmin implements DBWServiceAdmin { return true; } + @Override + public boolean setDefaultNavigatorSettings(WebSession webSession, DBNBrowseSettings settings) { + CBApplication.getInstance().setDefaultNavigatorSettings(settings); + return true; + } + //////////////////////////////////////////////////////////////////// // Access management