Search in sources :

Example 6 with DBWNetworkProfile

use of org.jkiss.dbeaver.model.net.DBWNetworkProfile in project dbeaver by dbeaver.

the class DataSourceSerializerModern method parseDataSources.

@Override
public void parseDataSources(File configFile, DBPDataSourceConfigurationStorage configurationStorage, boolean refresh, DataSourceRegistry.ParseResults parseResults) throws IOException {
    // Read secured creds file
    File mdFolder = registry.getProject().getMetadataFolder(false);
    if (mdFolder.exists()) {
        File credFile = new File(mdFolder, DBPDataSourceRegistry.CREDENTIALS_CONFIG_FILE_PREFIX + configurationStorage.getConfigurationFileSuffix() + DBPDataSourceRegistry.CREDENTIALS_CONFIG_FILE_EXT);
        if (credFile.exists()) {
            try {
                String credJson = loadConfigFile(credFile, true);
                Map<String, Map<String, Map<String, String>>> res = CONFIG_GSON.fromJson(credJson, new TypeToken<Map<String, Map<String, Map<String, String>>>>() {
                }.getType());
                secureProperties.putAll(res);
            } catch (Exception e) {
                log.error("Error decrypting secure credentials", e);
            }
        }
    }
    boolean decryptProject = CommonUtils.toBoolean(registry.getProject().getProjectProperty(DBPProject.PROP_SECURE_PROJECT));
    String configJson = loadConfigFile(configFile, decryptProject);
    {
        Map<String, Object> jsonMap = JSONUtils.parseMap(CONFIG_GSON, new StringReader(configJson));
        // Folders
        for (Map.Entry<String, Map<String, Object>> folderMap : JSONUtils.getNestedObjects(jsonMap, "folders")) {
            String name = folderMap.getKey();
            String description = JSONUtils.getObjectProperty(folderMap.getValue(), RegistryConstants.ATTR_DESCRIPTION);
            String parentFolder = JSONUtils.getObjectProperty(folderMap.getValue(), RegistryConstants.ATTR_PARENT);
            DataSourceFolder parent = parentFolder == null ? null : registry.findFolderByPath(parentFolder, true);
            DataSourceFolder folder = parent == null ? registry.findFolderByPath(name, true) : parent.getChild(name);
            if (folder == null) {
                folder = new DataSourceFolder(registry, parent, name, description);
                registry.addDataSourceFolder(folder);
            } else {
                folder.setDescription(description);
            }
        }
        // Connection types
        for (Map.Entry<String, Map<String, Object>> ctMap : JSONUtils.getNestedObjects(jsonMap, "connection-types")) {
            String id = ctMap.getKey();
            Map<String, Object> ctConfig = ctMap.getValue();
            String name = JSONUtils.getObjectProperty(ctConfig, RegistryConstants.ATTR_NAME);
            String description = JSONUtils.getObjectProperty(ctConfig, RegistryConstants.ATTR_DESCRIPTION);
            String color = JSONUtils.getObjectProperty(ctConfig, RegistryConstants.ATTR_COLOR);
            Boolean autoCommit = JSONUtils.getObjectProperty(ctConfig, "auto-commit");
            Boolean confirmExecute = JSONUtils.getObjectProperty(ctConfig, "confirm-execute");
            Boolean confirmDataChange = JSONUtils.getObjectProperty(ctConfig, "confirm-data-change");
            DBPConnectionType ct = DBWorkbench.getPlatform().getDataSourceProviderRegistry().getConnectionType(id, null);
            if (ct == null) {
                ct = new DBPConnectionType(id, name, color, description, CommonUtils.toBoolean(autoCommit), CommonUtils.toBoolean(confirmExecute), CommonUtils.toBoolean(confirmDataChange));
                DBWorkbench.getPlatform().getDataSourceProviderRegistry().addConnectionType(ct);
            }
            deserializeModifyPermissions(ctConfig, ct);
        }
        // Drivers
        // TODO: add drivers deserialization
        // Virtual models
        Map<String, DBVModel> modelMap = new LinkedHashMap<>();
        for (Map.Entry<String, Map<String, Object>> vmMap : JSONUtils.getNestedObjects(jsonMap, "virtual-models")) {
            String id = vmMap.getKey();
            DBVModel model = new DBVModel(id, vmMap.getValue());
            modelMap.put(id, model);
        }
        // Network profiles
        for (Map.Entry<String, Map<String, Object>> vmMap : JSONUtils.getNestedObjects(jsonMap, "network-profiles")) {
            String profileId = vmMap.getKey();
            Map<String, Object> profileMap = vmMap.getValue();
            DBWNetworkProfile profile = new DBWNetworkProfile();
            profile.setProfileName(profileId);
            profile.setProfileName(profileId);
            profile.setProperties(JSONUtils.deserializeStringMap(profileMap, "properties"));
            for (Map.Entry<String, Map<String, Object>> handlerMap : JSONUtils.getNestedObjects(profileMap, "handlers")) {
                DBWHandlerConfiguration configuration = parseNetworkHandlerConfig(null, profile, handlerMap);
                if (configuration != null) {
                    profile.updateConfiguration(configuration);
                }
            }
            registry.updateNetworkProfile(profile);
        }
        // Auth profiles
        for (Map.Entry<String, Map<String, Object>> vmMap : JSONUtils.getNestedObjects(jsonMap, "auth-profiles")) {
            String profileId = vmMap.getKey();
            Map<String, Object> profileMap = vmMap.getValue();
            DBAAuthProfile profile = new DBAAuthProfile();
            profile.setProfileId(profileId);
            profile.setProfileName(JSONUtils.getString(profileMap, RegistryConstants.ATTR_NAME));
            profile.setAuthModelId(JSONUtils.getString(profileMap, RegistryConstants.ATTR_AUTH_MODEL));
            profile.setSavePassword(JSONUtils.getBoolean(profileMap, RegistryConstants.ATTR_SAVE_PASSWORD));
            SecureCredentials authCreds = readSecuredCredentials(null, profile, null);
            profile.setUserName(authCreds.getUserName());
            profile.setUserPassword(authCreds.getUserPassword());
            profile.setProperties(authCreds.getProperties());
            registry.updateAuthProfile(profile);
        }
        // Connections
        for (Map.Entry<String, Map<String, Object>> conMap : JSONUtils.getNestedObjects(jsonMap, "connections")) {
            Map<String, Object> conObject = conMap.getValue();
            // Primary settings
            String id = conMap.getKey();
            String dsProviderID = CommonUtils.toString(conObject.get(RegistryConstants.ATTR_PROVIDER));
            if (CommonUtils.isEmpty(dsProviderID)) {
                log.warn("Empty datasource provider for datasource '" + id + "'");
                continue;
            }
            DataSourceProviderDescriptor provider = DataSourceProviderRegistry.getInstance().getDataSourceProvider(dsProviderID);
            if (provider == null) {
                log.warn("Can't find datasource provider " + dsProviderID + " for datasource '" + id + "'");
                provider = (DataSourceProviderDescriptor) DataSourceProviderRegistry.getInstance().makeFakeProvider(dsProviderID);
            }
            String driverId = CommonUtils.toString(conObject.get(RegistryConstants.ATTR_DRIVER));
            DriverDescriptor driver = provider.getDriver(driverId);
            if (driver == null) {
                log.warn("Can't find driver " + driverId + " in datasource provider " + provider.getId() + " for datasource '" + id + "'. Create new driver");
                driver = provider.createDriver(driverId);
                driver.setName(driverId);
                driver.setDescription("Missing driver " + driverId);
                driver.setDriverClassName("java.sql.Driver");
                driver.setTemporary(true);
                provider.addDriver(driver);
            }
            DataSourceDescriptor dataSource = registry.getDataSource(id);
            boolean newDataSource = (dataSource == null);
            if (newDataSource) {
                DBPDataSourceOrigin origin;
                Map<String, Object> originProperties = JSONUtils.deserializeProperties(conObject, TAG_ORIGIN);
                if (CommonUtils.isEmpty(originProperties) || !originProperties.containsKey(ATTR_ORIGIN_TYPE)) {
                    origin = DataSourceOriginLocal.INSTANCE;
                } else {
                    String originID = CommonUtils.toString(originProperties.remove(ATTR_ORIGIN_TYPE));
                    origin = new DataSourceOriginLazy(originID, originProperties);
                }
                dataSource = new DataSourceDescriptor(registry, configurationStorage, origin, id, driver, new DBPConnectionConfiguration());
            } else {
                // Clean settings - they have to be loaded later by parser
                dataSource.getConnectionConfiguration().setProperties(Collections.emptyMap());
                dataSource.getConnectionConfiguration().setHandlers(Collections.emptyList());
                dataSource.clearFilters();
            }
            dataSource.setName(JSONUtils.getString(conObject, RegistryConstants.ATTR_NAME));
            dataSource.setDescription(JSONUtils.getString(conObject, RegistryConstants.TAG_DESCRIPTION));
            dataSource.setSavePassword(JSONUtils.getBoolean(conObject, RegistryConstants.ATTR_SAVE_PASSWORD));
            dataSource.setTemplate(JSONUtils.getBoolean(conObject, RegistryConstants.ATTR_TEMPLATE));
            DataSourceNavigatorSettings navSettings = dataSource.getNavigatorSettings();
            navSettings.setShowSystemObjects(JSONUtils.getBoolean(conObject, DataSourceSerializerModern.ATTR_NAVIGATOR_SHOW_SYSTEM_OBJECTS));
            navSettings.setShowUtilityObjects(JSONUtils.getBoolean(conObject, DataSourceSerializerModern.ATTR_NAVIGATOR_SHOW_UTIL_OBJECTS));
            navSettings.setShowOnlyEntities(JSONUtils.getBoolean(conObject, DataSourceSerializerModern.ATTR_NAVIGATOR_SHOW_ONLY_ENTITIES));
            navSettings.setHideFolders(JSONUtils.getBoolean(conObject, DataSourceSerializerModern.ATTR_NAVIGATOR_HIDE_FOLDERS));
            navSettings.setHideSchemas(JSONUtils.getBoolean(conObject, DataSourceSerializerModern.ATTR_NAVIGATOR_HIDE_SCHEMAS));
            navSettings.setHideVirtualModel(JSONUtils.getBoolean(conObject, DataSourceSerializerModern.ATTR_NAVIGATOR_HIDE_VIRTUAL));
            navSettings.setMergeEntities(JSONUtils.getBoolean(conObject, DataSourceSerializerModern.ATTR_NAVIGATOR_MERGE_ENTITIES));
            dataSource.setConnectionReadOnly(JSONUtils.getBoolean(conObject, RegistryConstants.ATTR_READ_ONLY));
            final String folderPath = JSONUtils.getString(conObject, RegistryConstants.ATTR_FOLDER);
            if (folderPath != null) {
                dataSource.setFolder(registry.findFolderByPath(folderPath, true));
            }
            dataSource.setLockPasswordHash(CommonUtils.toString(conObject.get(RegistryConstants.ATTR_LOCK_PASSWORD)));
            // Connection settings
            {
                Map<String, Object> cfgObject = JSONUtils.getObject(conObject, "configuration");
                DBPConnectionConfiguration config = dataSource.getConnectionConfiguration();
                config.setHostName(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_HOST));
                config.setHostPort(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_PORT));
                config.setServerName(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_SERVER));
                config.setDatabaseName(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_DATABASE));
                config.setUrl(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_URL));
                if (!passwordReadCanceled) {
                    final SecureCredentials creds = readSecuredCredentials(dataSource, null, null);
                    config.setUserName(creds.getUserName());
                    if (dataSource.isSavePassword()) {
                        config.setUserPassword(creds.getUserPassword());
                    }
                }
                {
                    // Still try to read credentials directly from configuration (#6564)
                    String userName = JSONUtils.getString(cfgObject, RegistryConstants.ATTR_USER);
                    if (!CommonUtils.isEmpty(userName))
                        config.setUserName(userName);
                    String userPassword = JSONUtils.getString(cfgObject, RegistryConstants.ATTR_PASSWORD);
                    if (!CommonUtils.isEmpty(userPassword))
                        config.setUserPassword(userPassword);
                }
                config.setClientHomeId(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_HOME));
                config.setConfigProfileName(JSONUtils.getString(cfgObject, "config-profile"));
                config.setConnectionType(DataSourceProviderRegistry.getInstance().getConnectionType(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_TYPE), DBPConnectionType.DEFAULT_TYPE));
                String colorValue = JSONUtils.getString(cfgObject, RegistryConstants.ATTR_COLOR);
                if (!CommonUtils.isEmpty(colorValue)) {
                    config.setConnectionColor(colorValue);
                }
                int keepAlive = JSONUtils.getInteger(cfgObject, RegistryConstants.ATTR_KEEP_ALIVE);
                if (keepAlive > 0) {
                    config.setKeepAliveInterval(keepAlive);
                }
                config.setProperties(JSONUtils.deserializeStringMap(cfgObject, RegistryConstants.TAG_PROPERTIES));
                config.setProviderProperties(JSONUtils.deserializeStringMap(cfgObject, RegistryConstants.TAG_PROVIDER_PROPERTIES));
                config.setAuthModelId(JSONUtils.getString(cfgObject, RegistryConstants.ATTR_AUTH_MODEL));
                config.setAuthProperties(JSONUtils.deserializeStringMapOrNull(cfgObject, "auth-properties"));
                // Events
                for (Map.Entry<String, Map<String, Object>> eventObject : JSONUtils.getNestedObjects(cfgObject, RegistryConstants.TAG_EVENTS)) {
                    DBPConnectionEventType eventType = CommonUtils.valueOf(DBPConnectionEventType.class, eventObject.getKey(), DBPConnectionEventType.BEFORE_CONNECT);
                    Map<String, Object> eventCfg = eventObject.getValue();
                    DBRShellCommand command = new DBRShellCommand("");
                    command.setEnabled(JSONUtils.getBoolean(eventCfg, RegistryConstants.ATTR_ENABLED));
                    command.setShowProcessPanel(JSONUtils.getBoolean(eventCfg, RegistryConstants.ATTR_SHOW_PANEL));
                    command.setWaitProcessFinish(JSONUtils.getBoolean(eventCfg, RegistryConstants.ATTR_WAIT_PROCESS));
                    if (command.isWaitProcessFinish()) {
                        command.setWaitProcessTimeoutMs(JSONUtils.getInteger(eventCfg, RegistryConstants.ATTR_WAIT_PROCESS_TIMEOUT));
                    }
                    command.setTerminateAtDisconnect(JSONUtils.getBoolean(eventCfg, RegistryConstants.ATTR_TERMINATE_AT_DISCONNECT));
                    command.setPauseAfterExecute(JSONUtils.getInteger(eventCfg, RegistryConstants.ATTR_PAUSE_AFTER_EXECUTE));
                    command.setWorkingDirectory(JSONUtils.getString(eventCfg, RegistryConstants.ATTR_WORKING_DIRECTORY));
                    command.setCommand(JSONUtils.getString(eventCfg, RegistryConstants.ATTR_COMMAND));
                    config.setEvent(eventType, command);
                }
                // Handlers
                for (Map.Entry<String, Map<String, Object>> handlerObject : JSONUtils.getNestedObjects(cfgObject, RegistryConstants.TAG_HANDLERS)) {
                    DBWHandlerConfiguration configuration = parseNetworkHandlerConfig(dataSource, null, handlerObject);
                    if (configuration != null) {
                        dataSource.getConnectionConfiguration().updateHandler(configuration);
                    }
                }
                // Bootstrap
                Map<String, Object> bootstrapCfg = JSONUtils.getObject(cfgObject, RegistryConstants.TAG_BOOTSTRAP);
                DBPConnectionBootstrap bootstrap = config.getBootstrap();
                if (bootstrapCfg.containsKey(RegistryConstants.ATTR_AUTOCOMMIT)) {
                    bootstrap.setDefaultAutoCommit(JSONUtils.getBoolean(bootstrapCfg, RegistryConstants.ATTR_AUTOCOMMIT));
                }
                if (bootstrapCfg.containsKey(RegistryConstants.ATTR_TXN_ISOLATION)) {
                    bootstrap.setDefaultTransactionIsolation(JSONUtils.getInteger(bootstrapCfg, RegistryConstants.ATTR_TXN_ISOLATION));
                }
                bootstrap.setDefaultCatalogName(JSONUtils.getString(bootstrapCfg, RegistryConstants.ATTR_DEFAULT_CATALOG));
                bootstrap.setDefaultSchemaName(JSONUtils.getString(bootstrapCfg, RegistryConstants.ATTR_DEFAULT_SCHEMA));
                String defObjectName = JSONUtils.getString(bootstrapCfg, RegistryConstants.ATTR_DEFAULT_OBJECT);
                if (!CommonUtils.isEmpty(defObjectName) && CommonUtils.isEmpty(bootstrap.getDefaultSchemaName())) {
                    bootstrap.setDefaultSchemaName(JSONUtils.getString(bootstrapCfg, defObjectName));
                }
                if (bootstrapCfg.containsKey(RegistryConstants.ATTR_IGNORE_ERRORS)) {
                    bootstrap.setIgnoreErrors(JSONUtils.getBoolean(bootstrapCfg, RegistryConstants.ATTR_IGNORE_ERRORS));
                }
                bootstrap.setInitQueries(JSONUtils.deserializeStringList(bootstrapCfg, RegistryConstants.TAG_QUERY));
            }
            // Permissions
            {
                deserializeModifyPermissions(conObject, dataSource);
            }
            // Filters
            for (Map<String, Object> filterCfg : JSONUtils.getObjectList(conObject, RegistryConstants.TAG_FILTERS)) {
                String typeName = JSONUtils.getString(filterCfg, RegistryConstants.ATTR_TYPE);
                String objectID = JSONUtils.getString(filterCfg, RegistryConstants.ATTR_ID);
                if (!CommonUtils.isEmpty(typeName)) {
                    DBSObjectFilter filter = readObjectFiler(filterCfg);
                    dataSource.updateObjectFilter(typeName, objectID, filter);
                }
            }
            // Preferences
            dataSource.getPreferenceStore().getProperties().putAll(JSONUtils.deserializeStringMap(conObject, RegistryConstants.TAG_CUSTOM_PROPERTIES));
            // Virtual model
            String vmID = CommonUtils.toString(conObject.get("virtual-model-id"), id);
            DBVModel dbvModel = modelMap.get(vmID);
            if (dbvModel != null) {
                dataSource.setVirtualModel(dbvModel);
            }
            // Add to the list
            if (newDataSource) {
                registry.addDataSourceToList(dataSource);
                parseResults.addedDataSources.add(dataSource);
            } else {
                parseResults.updatedDataSources.add(dataSource);
            }
        }
        // Saved filters
        for (Map<String, Object> ctMap : JSONUtils.getObjectList(jsonMap, "saved-filters")) {
            DBSObjectFilter filter = readObjectFiler(ctMap);
            registry.addSavedFilter(filter);
        }
    }
}
Also used : DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) DBSObjectFilter(org.jkiss.dbeaver.model.struct.DBSObjectFilter) DBRShellCommand(org.jkiss.dbeaver.model.runtime.DBRShellCommand) DriverDescriptor(org.jkiss.dbeaver.registry.driver.DriverDescriptor) DBPDataSourceOrigin(org.jkiss.dbeaver.model.DBPDataSourceOrigin) DBVModel(org.jkiss.dbeaver.model.virtual.DBVModel) DBException(org.jkiss.dbeaver.DBException) DBAAuthProfile(org.jkiss.dbeaver.model.access.DBAAuthProfile) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) TypeToken(com.google.gson.reflect.TypeToken)

Example 7 with DBWNetworkProfile

use of org.jkiss.dbeaver.model.net.DBWNetworkProfile in project dbeaver by dbeaver.

the class DataSourceSerializerModern method saveDataSources.

@Override
public void saveDataSources(DBRProgressMonitor monitor, DBPDataSourceConfigurationStorage configurationStorage, List<DataSourceDescriptor> localDataSources, File configFile) throws DBException {
    ByteArrayOutputStream dsConfigBuffer = new ByteArrayOutputStream(10000);
    try (OutputStreamWriter osw = new OutputStreamWriter(dsConfigBuffer, StandardCharsets.UTF_8)) {
        try (JsonWriter jsonWriter = CONFIG_GSON.newJsonWriter(osw)) {
            jsonWriter.setIndent("\t");
            jsonWriter.beginObject();
            // Save folders
            if (configurationStorage.isDefault()) {
                jsonWriter.name("folders");
                jsonWriter.beginObject();
                // Folders (only for default storage)
                for (DataSourceFolder folder : registry.getAllFolders()) {
                    saveFolder(jsonWriter, folder);
                }
                jsonWriter.endObject();
            }
            Map<String, DBVModel> virtualModels = new LinkedHashMap<>();
            Map<String, DBPConnectionType> connectionTypes = new LinkedHashMap<>();
            Map<String, Map<String, DBPDriver>> drivers = new LinkedHashMap<>();
            {
                // Save connections
                jsonWriter.name("connections");
                jsonWriter.beginObject();
                for (DataSourceDescriptor dataSource : localDataSources) {
                    // Skip temporary
                    if (!dataSource.isDetached()) {
                        saveDataSource(jsonWriter, dataSource);
                        if (dataSource.getVirtualModel().hasValuableData()) {
                            virtualModels.put(dataSource.getVirtualModel().getId(), dataSource.getVirtualModel());
                        }
                        DBPConnectionType connectionType = dataSource.getConnectionConfiguration().getConnectionType();
                        /*if (!connectionType.isPredefined()) */
                        {
                            connectionTypes.put(connectionType.getId(), connectionType);
                        }
                        DBPDriver driver = dataSource.getDriver();
                        if (driver.isCustom() && !driver.getProviderDescriptor().isTemporary()) {
                            Map<String, DBPDriver> driverMap = drivers.computeIfAbsent(driver.getProviderId(), s -> new LinkedHashMap<>());
                            driverMap.put(driver.getId(), driver);
                        }
                    }
                }
                jsonWriter.endObject();
            }
            if (configurationStorage.isDefault()) {
                if (!virtualModels.isEmpty()) {
                    // Save virtual models
                    jsonWriter.name("virtual-models");
                    jsonWriter.beginObject();
                    for (DBVModel model : virtualModels.values()) {
                        model.serialize(monitor, jsonWriter);
                    }
                    jsonWriter.endObject();
                }
                // Network profiles
                List<DBWNetworkProfile> profiles = registry.getNetworkProfiles();
                if (!CommonUtils.isEmpty(profiles)) {
                    jsonWriter.name("network-profiles");
                    jsonWriter.beginObject();
                    for (DBWNetworkProfile np : profiles) {
                        jsonWriter.name(np.getProfileId());
                        jsonWriter.beginObject();
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_NAME, np.getProfileName());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_DESCRIPTION, np.getProfileDescription());
                        jsonWriter.name("handlers");
                        jsonWriter.beginObject();
                        for (DBWHandlerConfiguration configuration : np.getConfigurations()) {
                            if (configuration.hasValuableInfo()) {
                                saveNetworkHandlerConfiguration(jsonWriter, null, np, configuration);
                            }
                        }
                        jsonWriter.endObject();
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
                // Auth profiles
                List<DBAAuthProfile> authProfiles = registry.getAllAuthProfiles();
                if (!CommonUtils.isEmpty(authProfiles)) {
                    jsonWriter.name("auth-profiles");
                    jsonWriter.beginObject();
                    for (DBAAuthProfile authProfile : authProfiles) {
                        jsonWriter.name(authProfile.getProfileId());
                        jsonWriter.beginObject();
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_NAME, authProfile.getProfileName());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_DESCRIPTION, authProfile.getProfileDescription());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_AUTH_MODEL, authProfile.getAuthModelId());
                        if (authProfile.isSavePassword()) {
                            JSONUtils.field(jsonWriter, RegistryConstants.ATTR_SAVE_PASSWORD, authProfile.isSavePassword());
                        }
                        // Save all auth properties in secure storage
                        saveSecuredCredentials(null, authProfile, null, new SecureCredentials(authProfile));
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
                // Filters
                List<DBSObjectFilter> savedFilters = registry.getSavedFilters();
                if (!CommonUtils.isEmpty(savedFilters)) {
                    jsonWriter.name("saved-filters");
                    jsonWriter.beginArray();
                    for (DBSObjectFilter cf : savedFilters) {
                        if (!cf.isEmpty()) {
                            saveObjectFiler(jsonWriter, null, null, cf);
                        }
                    }
                    jsonWriter.endArray();
                }
                // Connection types
                if (!CommonUtils.isEmpty(connectionTypes)) {
                    jsonWriter.name("connection-types");
                    jsonWriter.beginObject();
                    for (DBPConnectionType ct : connectionTypes.values()) {
                        jsonWriter.name(ct.getId());
                        jsonWriter.beginObject();
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_NAME, ct.getName());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_COLOR, ct.getColor());
                        JSONUtils.fieldNE(jsonWriter, RegistryConstants.ATTR_DESCRIPTION, ct.getDescription());
                        JSONUtils.field(jsonWriter, "auto-commit", ct.isAutocommit());
                        JSONUtils.field(jsonWriter, "confirm-execute", ct.isConfirmExecute());
                        JSONUtils.field(jsonWriter, "confirm-data-change", ct.isConfirmDataChange());
                        serializeModifyPermissions(jsonWriter, ct);
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
                // Drivers
                if (!CommonUtils.isEmpty(drivers)) {
                    jsonWriter.name("drivers");
                    jsonWriter.beginObject();
                    for (Map.Entry<String, Map<String, DBPDriver>> dmap : drivers.entrySet()) {
                        jsonWriter.name(dmap.getKey());
                        jsonWriter.beginObject();
                        for (DBPDriver driver : dmap.getValue().values()) {
                            ((DriverDescriptor) driver).serialize(jsonWriter, true);
                        }
                        jsonWriter.endObject();
                    }
                    jsonWriter.endObject();
                }
            }
            jsonWriter.endObject();
            jsonWriter.flush();
        }
    } catch (IOException e) {
        log.error("IO error while saving datasources json", e);
    }
    String jsonString = new String(dsConfigBuffer.toByteArray(), StandardCharsets.UTF_8);
    boolean encryptProject = CommonUtils.toBoolean(registry.getProject().getProjectProperty(DBPProject.PROP_SECURE_PROJECT));
    saveConfigFile(configFile, jsonString, false, encryptProject);
    {
        saveSecureCredentialsFile(monitor.getNestedMonitor(), configFile.getParentFile(), configurationStorage);
    }
}
Also used : DBWorkbench(org.jkiss.dbeaver.runtime.DBWorkbench) DBPDataSourceConfigurationStorage(org.jkiss.dbeaver.model.DBPDataSourceConfigurationStorage) java.util(java.util) TypeToken(com.google.gson.reflect.TypeToken) DBPDataSourceOrigin(org.jkiss.dbeaver.model.DBPDataSourceOrigin) Nullable(org.jkiss.code.Nullable) GsonBuilder(com.google.gson.GsonBuilder) NotNull(org.jkiss.code.NotNull) DBAAuthProfile(org.jkiss.dbeaver.model.access.DBAAuthProfile) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) NetworkHandlerDescriptor(org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor) DBPDataSourcePermission(org.jkiss.dbeaver.model.DBPDataSourcePermission) Gson(com.google.gson.Gson) DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) DBASecureStorage(org.jkiss.dbeaver.model.app.DBASecureStorage) IOUtils(org.jkiss.utils.IOUtils) Log(org.jkiss.dbeaver.Log) DBRProgressMonitor(org.jkiss.dbeaver.model.runtime.DBRProgressMonitor) ContentEncrypter(org.jkiss.dbeaver.runtime.encode.ContentEncrypter) DBPProject(org.jkiss.dbeaver.model.app.DBPProject) DBVModel(org.jkiss.dbeaver.model.virtual.DBVModel) JsonWriter(com.google.gson.stream.JsonWriter) JSONUtils(org.jkiss.dbeaver.model.data.json.JSONUtils) DBRShellCommand(org.jkiss.dbeaver.model.runtime.DBRShellCommand) NetworkHandlerRegistry(org.jkiss.dbeaver.registry.network.NetworkHandlerRegistry) CommonUtils(org.jkiss.utils.CommonUtils) SimplePreferenceStore(org.jkiss.dbeaver.model.impl.preferences.SimplePreferenceStore) DBSObjectFilter(org.jkiss.dbeaver.model.struct.DBSObjectFilter) ContentUtils(org.jkiss.dbeaver.utils.ContentUtils) DBPDataSourcePermissionOwner(org.jkiss.dbeaver.model.DBPDataSourcePermissionOwner) ArrayUtils(org.jkiss.utils.ArrayUtils) DriverDescriptor(org.jkiss.dbeaver.registry.driver.DriverDescriptor) StandardCharsets(java.nio.charset.StandardCharsets) IProgressMonitor(org.eclipse.core.runtime.IProgressMonitor) java.io(java.io) DBException(org.jkiss.dbeaver.DBException) org.jkiss.dbeaver.model.connection(org.jkiss.dbeaver.model.connection) DBPDataSourceRegistry(org.jkiss.dbeaver.model.app.DBPDataSourceRegistry) ISecurePreferences(org.eclipse.equinox.security.storage.ISecurePreferences) DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) DBSObjectFilter(org.jkiss.dbeaver.model.struct.DBSObjectFilter) DriverDescriptor(org.jkiss.dbeaver.registry.driver.DriverDescriptor) DBVModel(org.jkiss.dbeaver.model.virtual.DBVModel) JsonWriter(com.google.gson.stream.JsonWriter) DBAAuthProfile(org.jkiss.dbeaver.model.access.DBAAuthProfile) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration)

Example 8 with DBWNetworkProfile

use of org.jkiss.dbeaver.model.net.DBWNetworkProfile in project dbeaver by dbeaver.

the class PrefPageProjectNetworkProfiles method performDefaults.

@Override
protected void performDefaults() {
    super.performDefaults();
    profilesTable.removeAll();
    if (projectMeta != null) {
        for (DBWNetworkProfile profile : projectMeta.getDataSourceRegistry().getNetworkProfiles()) {
            TableItem item = new TableItem(profilesTable, SWT.NONE);
            item.setText(profile.getProfileName());
            item.setImage(DBeaverIcons.getImage(DBIcon.TYPE_DOCUMENT));
            item.setData(profile);
            if (selectedProfile == null) {
                selectedProfile = profile;
                profilesTable.select(0);
            }
            for (NetworkHandlerDescriptor nhd : allHandlers) {
                HandlerBlock handlerBlock = configurations.get(nhd);
                DBWHandlerConfiguration configuration = profile.getConfiguration(nhd);
                if (configuration != null) {
                    handlerBlock.loadedConfigs.put(profile, configuration);
                }
            }
        }
    }
    updateControlsState();
}
Also used : DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) DBWHandlerConfiguration(org.jkiss.dbeaver.model.net.DBWHandlerConfiguration) NetworkHandlerDescriptor(org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor)

Example 9 with DBWNetworkProfile

use of org.jkiss.dbeaver.model.net.DBWNetworkProfile in project dbeaver by dbeaver.

the class PrefPageProjectNetworkProfiles method createContents.

@Override
protected Control createContents(final Composite parent) {
    CustomSashForm divider = UIUtils.createPartDivider(null, parent, SWT.HORIZONTAL);
    {
        Composite profilesGroup = new Composite(divider, SWT.BORDER);
        GridLayout gl = new GridLayout(1, false);
        gl.marginWidth = 0;
        gl.marginHeight = 0;
        profilesGroup.setLayout(gl);
        GridData gd = new GridData(GridData.FILL_BOTH);
        profilesGroup.setLayoutData(gd);
        {
            ToolBar toolbar = new ToolBar(profilesGroup, SWT.HORIZONTAL | SWT.RIGHT);
            UIUtils.createToolItem(toolbar, "Create", "Create new profile", UIIcon.ROW_ADD, new SelectionAdapter() {

                @Override
                public void widgetSelected(SelectionEvent e) {
                    String profileName = "";
                    while (true) {
                        profileName = EnterNameDialog.chooseName(getShell(), "Profile name", profileName);
                        if (CommonUtils.isEmptyTrimmed(profileName)) {
                            return;
                        }
                        if (projectMeta.getDataSourceRegistry().getNetworkProfile(profileName) != null) {
                            UIUtils.showMessageBox(getShell(), "Wrong profile name", "Profile '" + profileName + "' already exist in project '" + projectMeta.getName() + "'", SWT.ICON_ERROR);
                            continue;
                        }
                        break;
                    }
                    DBWNetworkProfile newProfile = new DBWNetworkProfile();
                    newProfile.setProfileName(profileName);
                    projectMeta.getDataSourceRegistry().updateNetworkProfile(newProfile);
                    projectMeta.getDataSourceRegistry().flushConfig();
                    TableItem item = new TableItem(profilesTable, SWT.NONE);
                    item.setText(newProfile.getProfileName());
                    item.setImage(DBeaverIcons.getImage(DBIcon.TYPE_DOCUMENT));
                    item.setData(newProfile);
                    if (profilesTable.getItemCount() == 1) {
                        selectedProfile = newProfile;
                        profilesTable.select(0);
                        updateControlsState();
                    }
                }
            });
            UIUtils.createToolItem(toolbar, "Delete", "Delete profile", UIIcon.ROW_DELETE, new SelectionAdapter() {

                @Override
                public void widgetSelected(SelectionEvent e) {
                    if (selectedProfile != null) {
                        List<? extends DBPDataSourceContainer> usedBy = projectMeta.getDataSourceRegistry().getDataSourcesByProfile(selectedProfile);
                        if (!usedBy.isEmpty()) {
                            UIUtils.showMessageBox(getShell(), "Can't delete profile", "Configuration profile '" + selectedProfile.getProfileName() + "' used by " + usedBy.size() + " connections:\n" + usedBy, SWT.ICON_ERROR);
                            return;
                        }
                        if (!UIUtils.confirmAction(getShell(), "Delete profile", "Are you sure you want to delete configuration profile '" + selectedProfile.getProfileName() + "'?")) {
                            return;
                        }
                        projectMeta.getDataSourceRegistry().removeNetworkProfile(selectedProfile);
                        projectMeta.getDataSourceRegistry().flushConfig();
                        profilesTable.remove(profilesTable.getSelectionIndex());
                        selectedProfile = null;
                        updateControlsState();
                    } else {
                        UIUtils.showMessageBox(getShell(), "No profile", "Select profile first", SWT.ICON_ERROR);
                    }
                }
            });
        }
        profilesTable = new Table(profilesGroup, SWT.SINGLE);
        gd = new GridData(GridData.FILL_BOTH);
        gd.minimumWidth = 150;
        profilesTable.setLayoutData(gd);
        profilesTable.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                saveHandlerSettings();
                TableItem[] selection = profilesTable.getSelection();
                if (ArrayUtils.isEmpty(selection)) {
                    selectedProfile = null;
                } else {
                    selectedProfile = (DBWNetworkProfile) selection[0].getData();
                }
                updateControlsState();
            }
        });
    }
    {
        handlersFolder = new TabFolder(divider, SWT.TOP | SWT.FLAT);
        handlersFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
        for (NetworkHandlerDescriptor nhd : NetworkHandlerRegistry.getInstance().getDescriptors()) {
            if (!nhd.hasObjectTypes()) {
                createHandlerTab(nhd);
            }
        }
        handlersFolder.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                updateControlsState();
            }
        });
    }
    divider.setWeights(new int[] { 300, 700 });
    performDefaults();
    return divider;
}
Also used : DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) NetworkHandlerDescriptor(org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor) GridLayout(org.eclipse.swt.layout.GridLayout) CustomSashForm(org.jkiss.dbeaver.ui.controls.CustomSashForm) GridData(org.eclipse.swt.layout.GridData) SelectionEvent(org.eclipse.swt.events.SelectionEvent) List(java.util.List) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer)

Example 10 with DBWNetworkProfile

use of org.jkiss.dbeaver.model.net.DBWNetworkProfile in project dbeaver by serge-rider.

the class PrefPageProjectNetworkProfiles method createContents.

@Override
protected Control createContents(final Composite parent) {
    CustomSashForm divider = UIUtils.createPartDivider(null, parent, SWT.HORIZONTAL);
    {
        Composite profilesGroup = new Composite(divider, SWT.BORDER);
        GridLayout gl = new GridLayout(1, false);
        gl.marginWidth = 0;
        gl.marginHeight = 0;
        profilesGroup.setLayout(gl);
        GridData gd = new GridData(GridData.FILL_BOTH);
        profilesGroup.setLayoutData(gd);
        {
            ToolBar toolbar = new ToolBar(profilesGroup, SWT.HORIZONTAL | SWT.RIGHT);
            UIUtils.createToolItem(toolbar, "Create", "Create new profile", UIIcon.ROW_ADD, new SelectionAdapter() {

                @Override
                public void widgetSelected(SelectionEvent e) {
                    String profileName = "";
                    while (true) {
                        profileName = EnterNameDialog.chooseName(getShell(), "Profile name", profileName);
                        if (CommonUtils.isEmptyTrimmed(profileName)) {
                            return;
                        }
                        if (projectMeta.getDataSourceRegistry().getNetworkProfile(profileName) != null) {
                            UIUtils.showMessageBox(getShell(), "Wrong profile name", "Profile '" + profileName + "' already exist in project '" + projectMeta.getName() + "'", SWT.ICON_ERROR);
                            continue;
                        }
                        break;
                    }
                    DBWNetworkProfile newProfile = new DBWNetworkProfile();
                    newProfile.setProfileName(profileName);
                    projectMeta.getDataSourceRegistry().updateNetworkProfile(newProfile);
                    projectMeta.getDataSourceRegistry().flushConfig();
                    TableItem item = new TableItem(profilesTable, SWT.NONE);
                    item.setText(newProfile.getProfileName());
                    item.setImage(DBeaverIcons.getImage(DBIcon.TYPE_DOCUMENT));
                    item.setData(newProfile);
                    if (profilesTable.getItemCount() == 1) {
                        selectedProfile = newProfile;
                        profilesTable.select(0);
                        updateControlsState();
                    }
                }
            });
            UIUtils.createToolItem(toolbar, "Delete", "Delete profile", UIIcon.ROW_DELETE, new SelectionAdapter() {

                @Override
                public void widgetSelected(SelectionEvent e) {
                    if (selectedProfile != null) {
                        List<? extends DBPDataSourceContainer> usedBy = projectMeta.getDataSourceRegistry().getDataSourcesByProfile(selectedProfile);
                        if (!usedBy.isEmpty()) {
                            UIUtils.showMessageBox(getShell(), "Can't delete profile", "Configuration profile '" + selectedProfile.getProfileName() + "' used by " + usedBy.size() + " connections:\n" + usedBy, SWT.ICON_ERROR);
                            return;
                        }
                        if (!UIUtils.confirmAction(getShell(), "Delete profile", "Are you sure you want to delete configuration profile '" + selectedProfile.getProfileName() + "'?")) {
                            return;
                        }
                        projectMeta.getDataSourceRegistry().removeNetworkProfile(selectedProfile);
                        projectMeta.getDataSourceRegistry().flushConfig();
                        profilesTable.remove(profilesTable.getSelectionIndex());
                        selectedProfile = null;
                        updateControlsState();
                    } else {
                        UIUtils.showMessageBox(getShell(), "No profile", "Select profile first", SWT.ICON_ERROR);
                    }
                }
            });
        }
        profilesTable = new Table(profilesGroup, SWT.SINGLE);
        gd = new GridData(GridData.FILL_BOTH);
        gd.minimumWidth = 150;
        profilesTable.setLayoutData(gd);
        profilesTable.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                saveHandlerSettings();
                TableItem[] selection = profilesTable.getSelection();
                if (ArrayUtils.isEmpty(selection)) {
                    selectedProfile = null;
                } else {
                    selectedProfile = (DBWNetworkProfile) selection[0].getData();
                }
                updateControlsState();
            }
        });
    }
    {
        handlersFolder = new TabFolder(divider, SWT.TOP | SWT.FLAT);
        handlersFolder.setLayoutData(new GridData(GridData.FILL_BOTH));
        for (NetworkHandlerDescriptor nhd : NetworkHandlerRegistry.getInstance().getDescriptors()) {
            if (!nhd.hasObjectTypes()) {
                createHandlerTab(nhd);
            }
        }
        handlersFolder.addSelectionListener(new SelectionAdapter() {

            @Override
            public void widgetSelected(SelectionEvent e) {
                updateControlsState();
            }
        });
    }
    divider.setWeights(new int[] { 300, 700 });
    performDefaults();
    return divider;
}
Also used : DBWNetworkProfile(org.jkiss.dbeaver.model.net.DBWNetworkProfile) SelectionAdapter(org.eclipse.swt.events.SelectionAdapter) NetworkHandlerDescriptor(org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor) GridLayout(org.eclipse.swt.layout.GridLayout) CustomSashForm(org.jkiss.dbeaver.ui.controls.CustomSashForm) GridData(org.eclipse.swt.layout.GridData) SelectionEvent(org.eclipse.swt.events.SelectionEvent) List(java.util.List) DBPDataSourceContainer(org.jkiss.dbeaver.model.DBPDataSourceContainer)

Aggregations

DBWNetworkProfile (org.jkiss.dbeaver.model.net.DBWNetworkProfile)12 DBWHandlerConfiguration (org.jkiss.dbeaver.model.net.DBWHandlerConfiguration)8 NetworkHandlerDescriptor (org.jkiss.dbeaver.registry.network.NetworkHandlerDescriptor)6 TypeToken (com.google.gson.reflect.TypeToken)4 DBException (org.jkiss.dbeaver.DBException)4 DBPDataSourceOrigin (org.jkiss.dbeaver.model.DBPDataSourceOrigin)4 DBAAuthProfile (org.jkiss.dbeaver.model.access.DBAAuthProfile)4 DBRShellCommand (org.jkiss.dbeaver.model.runtime.DBRShellCommand)4 DBSObjectFilter (org.jkiss.dbeaver.model.struct.DBSObjectFilter)4 DBVModel (org.jkiss.dbeaver.model.virtual.DBVModel)4 DriverDescriptor (org.jkiss.dbeaver.registry.driver.DriverDescriptor)4 Gson (com.google.gson.Gson)2 GsonBuilder (com.google.gson.GsonBuilder)2 JsonWriter (com.google.gson.stream.JsonWriter)2 java.io (java.io)2 StandardCharsets (java.nio.charset.StandardCharsets)2 java.util (java.util)2 List (java.util.List)2 IProgressMonitor (org.eclipse.core.runtime.IProgressMonitor)2 ISecurePreferences (org.eclipse.equinox.security.storage.ISecurePreferences)2