mirror of
https://github.com/dbeaver/cloudbeaver.git
synced 2026-09-24 16:04:36 +08:00
CB-1184 App configuration merge implementation
This commit is contained in:
@@ -35,21 +35,57 @@ import java.util.Map;
|
||||
public class CBAppConfig {
|
||||
public static final DataSourceNavigatorSettings DEFAULT_VIEW_SETTINGS = DataSourceNavigatorSettings.PRESET_FULL.getSettings();
|
||||
|
||||
private boolean anonymousAccessEnabled = true;
|
||||
private String anonymousUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME;
|
||||
private String defaultUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME;
|
||||
private boolean supportsCustomConnections = true;
|
||||
private boolean supportsConnectionBrowser = false;
|
||||
private boolean supportsUserWorkspaces = false;
|
||||
private boolean publicCredentialsSaveEnabled = true;
|
||||
private boolean adminCredentialsSaveEnabled = true;
|
||||
private String[] enabledDrivers = new String[0];
|
||||
private String[] disabledDrivers = new String[0];
|
||||
private String defaultAuthProvider = LocalAuthProvider.PROVIDER_ID;
|
||||
private String[] enabledAuthProviders = null;
|
||||
private DataSourceNavigatorSettings defaultNavigatorSettings = DEFAULT_VIEW_SETTINGS;
|
||||
private Map<String, Object> plugins = new LinkedHashMap<>();
|
||||
private final Map<String, AuthProviderConfig> authConfiguration = new LinkedHashMap<>();
|
||||
private boolean anonymousAccessEnabled;
|
||||
private String anonymousUserRole;
|
||||
private String defaultUserRole;
|
||||
private boolean supportsCustomConnections;
|
||||
private boolean supportsConnectionBrowser;
|
||||
private boolean supportsUserWorkspaces;
|
||||
private boolean publicCredentialsSaveEnabled;
|
||||
private boolean adminCredentialsSaveEnabled;
|
||||
private String[] enabledDrivers;
|
||||
private String[] disabledDrivers;
|
||||
private String defaultAuthProvider;
|
||||
private String[] enabledAuthProviders;
|
||||
private DataSourceNavigatorSettings defaultNavigatorSettings;
|
||||
private final Map<String, Object> plugins;
|
||||
private final Map<String, AuthProviderConfig> authConfiguration;
|
||||
|
||||
public CBAppConfig() {
|
||||
this.anonymousAccessEnabled = true;
|
||||
this.anonymousUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME;
|
||||
this.defaultUserRole = CBConstants.DEFAUL_APP_ANONYMOUS_ROLE_NAME;
|
||||
this.supportsCustomConnections = true;
|
||||
this.supportsConnectionBrowser = false;
|
||||
this.supportsUserWorkspaces = false;
|
||||
this.publicCredentialsSaveEnabled = true;
|
||||
this.adminCredentialsSaveEnabled = true;
|
||||
this.enabledDrivers = new String[0];
|
||||
this.disabledDrivers = new String[0];
|
||||
this.defaultAuthProvider = LocalAuthProvider.PROVIDER_ID;
|
||||
this.enabledAuthProviders = null;
|
||||
this.defaultNavigatorSettings = DEFAULT_VIEW_SETTINGS;
|
||||
this.plugins = new LinkedHashMap<>();
|
||||
this.authConfiguration = new LinkedHashMap<>();
|
||||
}
|
||||
|
||||
public CBAppConfig(CBAppConfig src) {
|
||||
this.anonymousAccessEnabled = src.anonymousAccessEnabled;
|
||||
this.anonymousUserRole = src.anonymousUserRole;
|
||||
this.defaultUserRole = src.defaultUserRole;
|
||||
this.supportsCustomConnections = src.supportsCustomConnections;
|
||||
this.supportsConnectionBrowser = src.supportsConnectionBrowser;
|
||||
this.supportsUserWorkspaces = src.supportsUserWorkspaces;
|
||||
this.publicCredentialsSaveEnabled = src.publicCredentialsSaveEnabled;
|
||||
this.adminCredentialsSaveEnabled = src.adminCredentialsSaveEnabled;
|
||||
this.enabledDrivers = src.enabledDrivers;
|
||||
this.disabledDrivers = src.disabledDrivers;
|
||||
this.defaultAuthProvider = src.defaultAuthProvider;
|
||||
this.enabledAuthProviders = src.enabledAuthProviders;
|
||||
this.defaultNavigatorSettings = src.defaultNavigatorSettings;
|
||||
this.plugins = new LinkedHashMap<>(src.plugins);
|
||||
this.authConfiguration = new LinkedHashMap<>(src.authConfiguration);
|
||||
}
|
||||
|
||||
public boolean isAnonymousAccessEnabled() {
|
||||
return anonymousAccessEnabled;
|
||||
|
||||
@@ -56,6 +56,8 @@ import java.net.URL;
|
||||
import java.net.UnknownHostException;
|
||||
import java.nio.charset.StandardCharsets;
|
||||
import java.util.*;
|
||||
import java.util.stream.Collectors;
|
||||
import java.util.stream.Stream;
|
||||
|
||||
/**
|
||||
* This class controls all aspects of the application's execution
|
||||
@@ -443,6 +445,8 @@ public class CBApplication extends BaseApplicationImpl {
|
||||
homeDirectory = new File(homeFolder);
|
||||
String productConfigPath = null;
|
||||
|
||||
CBAppConfig prevConfig = new CBAppConfig(appConfiguration);
|
||||
|
||||
// Stupid way to populate existing objects but ok google (https://github.com/google/gson/issues/431)
|
||||
InstanceCreator<CBAppConfig> appConfigCreator = type -> appConfiguration;
|
||||
InstanceCreator<CBDatabaseConfig> dbConfigCreator = type -> databaseConfiguration;
|
||||
@@ -496,6 +500,15 @@ public class CBApplication extends BaseApplicationImpl {
|
||||
log.error("Error parsing server configuration", e);
|
||||
}
|
||||
|
||||
// Merge new config with old one
|
||||
{
|
||||
Map<String, Object> mergedPlugins = Stream.concat(prevConfig.getPlugins().entrySet().stream(),
|
||||
appConfiguration.getPlugins().entrySet().stream()).collect(
|
||||
Collectors.toMap(Map.Entry::getKey, Map.Entry::getValue, (o, o2) -> o2));
|
||||
appConfiguration.getPlugins().clear();
|
||||
appConfiguration.getPlugins().putAll(mergedPlugins);
|
||||
}
|
||||
|
||||
if (!CommonUtils.isEmpty(productConfigPath)) {
|
||||
File productConfigFile = new File(productConfigPath);
|
||||
if (!productConfigFile.exists()) {
|
||||
|
||||
Reference in New Issue
Block a user